diff --git a/.claude/skills/README.md b/.claude/skills/README.md new file mode 100644 index 000000000..9b5acd6e6 --- /dev/null +++ b/.claude/skills/README.md @@ -0,0 +1,76 @@ +# `.claude/skills` + +Claude Code skills for working on and with nf-metro. Skills auto-trigger +from the descriptions in each `SKILL.md` frontmatter; for the conventions +each one assumes (local paths, env names, render-preview URL), see the +preamble at the top of the relevant `SKILL.md`. + +## Cohort map + +The skills fall into three conceptual groups. + +### Pipeline-side + +For someone integrating nf-metro into their own Nextflow pipeline repo: + +| Skill | When to use | +|---|---| +| [`pipeline-metro-diagram`](pipeline-metro-diagram/SKILL.md) | Author the `.mmd` content for a pipeline's metro map: lines, stations, sections, off-track inputs, the render-inspect-edit iteration loop. | +| [`pipeline-metro-setup`](pipeline-metro-setup/SKILL.md) | Wire the rendered map into the pipeline repo: file layout, render commands, README image swap, CHANGELOG, install-line pinning (released version vs named-branch on a fork). | + +### nf-metro-side authoring + +For someone changing nf-metro itself: + +| Skill | When to use | +|---|---| +| [`fix-issue`](fix-issue/SKILL.md) | General end-to-end workflow for a GitHub issue: worktree, environment, implement, test, push, PR. The "skeleton" most other nf-metro authoring tasks build on. | +| [`nf-metro-layout-fix`](nf-metro-layout-fix/SKILL.md) | Drive code-level fixes to nf-metro layout when a real pipeline render exposes a bug. Savepoint pattern, invariant-test-first-then-fix-then-runtime-validator loop, conditional gating, the "improvement ratchet". | +| [`nf-metro-gate-triage`](nf-metro-gate-triage/SKILL.md) | Run a routing gate-arm triage slice: give every un-exercised branch in a `layout/routing/` module a verdict (reachable -> fixture, defensive, candidate-dead, or reachable-but-defective -> file a bug). Wraps the methodology in [`docs/dev/routing_gate_triage.md`](../../docs/dev/routing_gate_triage.md). | +| [`pr-chain-vet`](pr-chain-vet/SKILL.md) | Per-PR vetting on a stacked PR chain: gallery diff vs `main`, classify every changed example, `/simplify` pass, sweep narrative comments, get CI green, post-merge cleanup in the right order. | + +### Visual verification + +Opt-in only (`disable-model-invocation: true` — the user must invoke +explicitly): + +| Skill | When to use | +|---|---| +| [`render-topologies`](render-topologies/SKILL.md) | Local pixel-diff of all gallery renders between the current branch and `origin/main`. Only needed for pre-push confidence; the CI render preview on the PR is the authoritative review. | + +### Docs site + +| Skill | When to use | +|---|---| +| [`serve-docs`](serve-docs/SKILL.md) | Spin up the Astro / Starlight docs site locally for live preview. Wraps `scripts/serve_docs.sh`, which generates the git-ignored gallery / pipelines / playground content and then starts the dev server. | + +## How the skills relate + +- `pipeline-metro-diagram`'s "is it mmd or nf-metro?" triage in Step 5 + hands off to `nf-metro-layout-fix` when the diagnosis is engine-side. +- `nf-metro-layout-fix` Step 4 hands off to `pr-chain-vet` for the + per-PR vetting workflow that ships the resulting chain back to `main`. +- `pipeline-metro-setup` Stage 2 Case B (named-branch pin on a fork) is + the bridge developers use *while* `nf-metro-layout-fix` + + `pr-chain-vet` work is in flight. +- `fix-issue` Step 4 references `render-topologies` for the optional + pre-push local diff. + +## Conventions + +Most skills assume: + +- Local nf-metro checkout at `~/projects/nf-metro` +- Upstream slug `seqeralabs/nf-metro` (issues + PR targets) +- CI render preview at `seqeralabs.github.io/nf-metro/_pr//` + +If your setup differs, substitute in the commands; the conventions are +called out at the top of each `SKILL.md` so the substitution points are +visible. + +## Step / Stage nomenclature + +Most skills use `## Step N: ...` for numbered procedural sections. +`pipeline-metro-setup` uses `## Stage N: ...` instead — its four stages +are deliberately coarser-grained (a pipeline-integration journey, not a +debugging checklist) and the word choice signals that. diff --git a/.claude/skills/fix-issue/SKILL.md b/.claude/skills/fix-issue/SKILL.md new file mode 100644 index 000000000..1b272011b --- /dev/null +++ b/.claude/skills/fix-issue/SKILL.md @@ -0,0 +1,371 @@ +--- +name: fix-issue +description: End-to-end workflow for fixing GitHub issues on the nf-metro repo with diagnostic rigor. Use when the user references a GitHub issue (by number, URL, or description) and wants it fixed. Handles worktree setup, environment creation, diagnostic-first investigation, invariant-test-first implementation, runtime validators, /simplify pass, full-repo lint, visual review via render preview, narrow-the-fix iteration on regressions, additive-only PR hygiene (no force-push, no narrative comments), origin verification after every push, and PR creation. Trigger on phrases like "fix issue #N", "address #N", "work on issue N", or any request to fix a bug or implement a feature that references an issue. For shepherding a chain of already-existing PRs back to main, see `pr-chain-vet` instead. +--- + +# Fix Issue + +Structured workflow for fixing nf-metro GitHub issues in an isolated worktree. +Emphasises diagnostic-first investigation, invariant tests before code, and +additive-only PR hygiene so a fix never silently regresses the gallery. + +**Conventions** (substitute if your setup differs): +- Local nf-metro checkout: `~/projects/nf-metro` +- Issues + PRs target the canonical upstream `seqeralabs/nf-metro`. If + you're working from a fork, resolve the owner with + `gh repo view --json owner -q .owner.login`. +- micromamba: `/opt/homebrew/bin/micromamba` (macOS Apple Silicon codesign + workaround). On other platforms, just `micromamba` if it's on PATH. + +## Step 1: Understand the Issue + +```bash +gh issue view --repo seqeralabs/nf-metro +``` + +Summarize the problem and proposed approach. Wait for user confirmation before proceeding. + +## Step 2: Worktree + Environment Setup + +```bash +# Worktree +cd ~/projects/nf-metro +git fetch origin main +git worktree add /tmp/nf-metro-fix- -b fix/- origin/main + +# Fix environment +ulimit -n 1000000 && export CONDA_OVERRIDE_OSX=15.0 && /opt/homebrew/bin/micromamba create -n nf-metro-fix- python=3.11 cairo -y +source ~/.local/bin/mm-activate nf-metro-fix- +pip install -e "/tmp/nf-metro-fix-[dev,docs,font]" + +# Install pre-commit hooks so lint runs automatically on every commit +cd /tmp/nf-metro-fix- && pre-commit install +``` + +All subsequent work happens inside `/tmp/nf-metro-fix-`. + +## Step 3: Diagnostic Before Fix + +**Do not propose fixes from hypotheses.** Reproduce the symptom in numbers +before writing any code: + +1. Render the affected example(s) on the current `main` (the before-state). +2. Inspect the rendered SVG: read the actual coordinates / element + attributes that are wrong. Print them, log them, eyeball them. +3. Restate the bug as "element X has property P=, expected + P=" - a concrete numeric or structural claim. If you can't state + the bug this way, you don't understand it yet; keep digging. + +Only after the symptom is pinned down to specific numbers should you reason +about which layout pass / function produced them. + +### Diagnostic tooling + +The repo bundles two scripts that do exactly this render-and-read-the-numbers +work, usable for **any** layout issue regardless of how it was reported: + +```bash +# Validator/crash/guard verdict: parse -> layout -> validate -> route, with +# findings split into authoring mistakes vs engine bugs. +python .claude/skills/nf-metro-stress-render/scripts/probe_layout.py --json +# Per-section station coordinates, flagging stations off their section trunk, +# off-track in/outputs far from their consumer, and oversized inter-row gaps. +python .claude/skills/nf-metro-stress-render/scripts/inspect_layout.py +``` + +Plus `nf-metro explain ` (the rule behind each inferred layout +decision) and `nf-metro info --json` (the structural model). These are +conveniences, not requirements - any way you pin the bug to numbers is fine. + +If the issue happens to have been filed by the `nf-metro-stress-render` skill, +it carries a correct-by-construction repro `.mmd` in a `
` fold in the +issue body - start from that rather than re-deriving one. Most issues won't have +this; in that case build the reproducer yourself as usual. + +## Step 4: Write the Invariant Test FIRST + +### First, check for an existing regression lock + +Most issues arrive bare and you write the failing test yourself (skip to the +numbered steps below). But some - notably those filed by the +`nf-metro-stress-render` skill - arrive with their regression infra **already +in place**: a fixture in `examples/topologies/`, a `GALLERY_ENTRIES` row in +`scripts/build_gallery.py`, and a `strict=True` xfail test referencing the issue +number. Grep before you write anything: + +```bash +grep -rn "#" tests/ scripts/build_gallery.py examples/topologies/ +``` + +- **If a strict-xfail lock exists**, that *is* your failing test - don't write a + duplicate, and don't re-add the fixture or gallery entry. Confirm it xfails on + the current tree (it documents the live defect). +- **Completing the fix flips that strict-xfail to XPASS, which reds CI** - that + is the signal the bug is actually fixed. Finish by **removing the `xfail` + marker** so the now-passing assertion becomes a permanent positive guard. + (Deleting the whole test loses the guard; leaving the marker keeps CI red.) +- **If no lock exists** (the common case), proceed with the steps below. + +Before any production code change: + +1. Write a test that encodes the invariant the bug violates (e.g. "no two + stations share a grid cell", "trunk centre is symmetric about the fan + midpoint"). Place it under `tests/`, ideally extending the layout + invariants suite. +2. **Parametrise the test over multiple fixtures**, not a single `.mmd`. + The existing `test_layout_invariants.py` historically over-relies on + `da_pipeline.mmd`; new invariants should be exercised against several + gallery fixtures so they generalise. +3. Run the test and **verify it fails on `main`**. If it passes, the test + doesn't actually encode the bug - rewrite it. +4. Now write the fix. +5. Re-run the test and verify it passes. + +This guarantees the test is meaningful (it caught the bug) and the fix is +meaningful (the test now passes because of the fix, not coincidence). + +## Step 5: Add a Runtime Validator + +Where the invariant is about layout properties that could regress silently +(overlap, off-grid placement, asymmetry, etc.), also add a `_guard_*` +function and wire it into `compute_layout`'s validate block. + +Validators must **fail loudly** - raise with a clear, contextual error +message. Silent warnings or `print()`s are not acceptable; they get +ignored. The runtime check protects future changes; the unit test pins the +current behaviour. + +## Step 6: /simplify Pass + +After the fix and tests are passing, invoke the `simplify` Skill on the +changed code. Apply its suggestions and commit as a **separate** commit: + +``` +refactor: tighten after fix for # +``` + +Keeping `fix:` and `refactor:` commits separate makes the fix itself easy +to review and easy to revert in isolation if regressions surface. + +## Step 7: Lint and Tests + +Pre-commit hooks were installed in Step 2 and run automatically on every +`git commit` (ruff check/format on `src/` and `tests/`, mypy, trailing +whitespace, yaml). If a commit fails due to hook errors, fix the issues +and re-commit. Never skip hooks with `--no-verify`. + +To run the checks without committing: + +```bash +cd /tmp/nf-metro-fix- && pre-commit run --all-files +``` + +Then run the test suite: + +```bash +pytest +``` + +### If your change touched `layout/routing/`: the gate-coverage ratchet + +Adding, removing, or rewriting an `if`/`while` in a `layout/routing/` +module - or adding a topology fixture that closes a gap - can red one of +the three ratchet tests in `tests/test_routing_gate_coverage.py`. These +are **not** flaky; each names a specific reconciliation you owe in this +same PR. Do not silence them by hand-editing the baseline or the +generated matrix doc, and do not delete a triage entry just to make a +test pass. + +- `test_no_new_un_exercised_routing_gate_arm` - your change added a gate + with an un-exercised arm. Either author a fixture that hits both arms, + or - if the arm is genuinely unreachable - confirm that and regenerate + the baseline to acknowledge it. +- `test_gate_coverage_baseline_in_sync` - your change closed a gap or + removed a gate the baseline still lists. Regenerate the baseline. +- `test_triage_sidecar_references_open_gaps` - you edited a gate's + condition text or removed it, so its entry in + `tests/data/routing_gate_triage.json` now names a non-gap. Prune (or + re-key) that entry. + +Regenerate with the coverage script (needs the `[dev]` extra and the +pinned interpreter): + +```bash +python scripts/routing_gate_coverage.py --write # rewrites the matrix doc + baseline +``` + +**Gotcha:** the arc model is CPython-version-specific, so these tests +**skip** off the pinned `BASELINE_PYTHON` (3.11). If your fix env is a +different Python you will not see the failure locally - it surfaces only +in CI. When in doubt, regenerate under 3.11. The full methodology (the +four verdicts, why these tests exist, the phantom-arc trap) is in +[`docs/dev/routing_gate_triage.md`](../../../docs/dev/routing_gate_triage.md); +for a dedicated triage campaign use the `nf-metro-gate-triage` skill. + +## Step 8: Visual Review via Render Preview + +### Primary method: CI render preview (authoritative) + +Push the branch and create a PR. The CI workflow +(`.github/workflows/pr-renders.yml`) automatically renders all gallery +examples on both the PR branch and base, generates a before/after visual +diff page, and posts a sticky comment on the PR with the preview link: + +``` +https://seqeralabs.github.io/nf-metro/_pr// +``` + +### Render-preview verdict gating + +The sticky comment ends in a verdict line. Gate the next step on it: + +- **"No visual changes detected"** -> a clean result, but **not** a + licence to merge. Report the verdict and wait for the user to say + merge. There is no standing auto-merge authorisation. +- **"Ready for review"** (or any wording indicating visual deltas exist) + -> **STOP**. Surface the deltas to the user with one short line per + affected gallery example describing what changed (e.g. + `da_pipeline.mmd: trunk shifted 12px right`). + +In **all** cases, merging is the user's call, made per-PR: + +- Never merge until the user explicitly asks for this PR to be merged. +- **Never** use `gh pr merge --admin` (or any other bypass of the + repo's branch-protection / review-required policy) on your own + initiative. If a normal merge is blocked because the repo requires + review, that block is the policy working - stop and tell the user it + needs their review or an explicit instruction to admin-merge. Do not + cite "prior PRs were admin-merged" as authorisation; past instances + are history, not standing consent. + +### Optional: quick local render of a single file + +For a fast sanity check of one specific `.mmd` file before pushing: + +```bash +source ~/.local/bin/mm-activate nf-metro-fix- +cd /tmp/nf-metro-fix- && python -m nf_metro render -o /tmp/.svg +python -c "import cairosvg; cairosvg.svg2png(url='/tmp/.svg', write_to='/tmp/.png', scale=2)" +open /tmp/.png +``` + +Useful for quick iteration but does not replace the full CI gallery +review. + +### Optional: local before/after comparison + +For a before/after sweep before pushing, use the `/render-topologies` +skill. + +## Step 9: Narrow Over-Applying Fixes + +If the render preview shows the fix changed **more than the targeted +example** unexpectedly, do not ship it as-is. For each affected example, +classify the visual delta as one of: + +- **I** (improvement) - keep +- **N** (neutral) - keep +- **D** (detrimental) - must be narrowed + +For each detrimental delta, find the **precondition** that distinguishes +the target case (where the fix helps) from the regressing case (where it +hurts). Gate the fix on that precondition (e.g. a topology predicate, a +config flag, a layout property test) so it only fires when applicable. +Re-render and re-verify the verdict before merging. + +A fix that ships with even one unaddressed D-delta is not finished. + +## Step 10: Commit, Push, Verify Origin + +Open the PR: + +```bash +cd /tmp/nf-metro-fix- +gh pr create --repo seqeralabs/nf-metro --base main --title "" --body "$(cat <<'EOF' +## Summary +<bullets describing the aggregate diff against main, no narrative> + +Fixes #<N> + +## Test plan +- [ ] pytest passes (including new invariant test) +- [ ] ruff check + ruff format clean on whole repo +- [ ] Runtime validator added (if applicable) +- [ ] Visual review of [render preview](https://seqeralabs.github.io/nf-metro/_pr/<PR_NUMBER>/) +- [ ] Render-preview verdict: <No visual changes | deltas classified I/N> + +Generated with Claude Code +EOF +)" +``` + +After every `git push`, **verify origin HEAD matches local**: + +```bash +gh pr view <PR_NUMBER> --json headRefOid -q .headRefOid +git rev-parse HEAD +``` + +The two must match. Past agents have lost commits to silent push +failures; do not skip this check. + +### Additive only - no force-push, ever + +The local pre-push hook blocks force-pushes for a reason. To undo +anything, use `git revert <hash>` and push the revert as a new commit. +Never rewrite shared history (no `--force`, no `--force-with-lease`, no +interactive rebase on a pushed branch). This applies even when "it would +be cleaner" - cleanliness is not worth the risk of an agent silently +dropping work. + +### Narrative belongs in the PR description, not in comments + +Do not post explanatory comments on the PR walking through what changed, +what was tried, or what was reverted. Edit the PR description instead: + +```bash +gh pr edit <PR_NUMBER> --body-file /tmp/pr-body.md +``` + +The description should be a standalone summary of the current state of +the diff against main - not a chronology of how the PR got there. + +If narrative comments already exist (yours or a prior agent's), sweep +them via the GraphQL `deleteIssueComment` mutation. **Keep** the CI +sticky render-preview comment. + +## Step 11: Drive End-to-End + +A fix-issue session is not done when `/simplify` returns control to the +parent, or when the local tests pass. It is done when: + +1. Commits are pushed. +2. Origin HEAD verified against local. +3. CI is green on the final commit. +4. Render-preview verdict is captured and gated on per Step 8. +5. PR description is standalone (per Step 10). + +Do not hand back to the user partway through this list saying "the +simplify pass is done" or "tests pass locally". Carry the work all the +way to a reviewable PR. + +## Step 12: Post-Merge Cleanup + +Once the PR merges, do cleanup operations **in this order** to avoid +GitHub auto-closing dependent PRs: + +1. **Retarget any child PRs** based on this branch over to `main` (or + the next-up base) **first**, via `gh pr edit <child> --base main`. + GitHub auto-closes PRs whose base branch is deleted; closed PRs whose + base ref no longer exists cannot be reopened without restoring the + deleted branch. +2. Delete the **remote** branch: `git push origin --delete fix/<N>-<slug>` + (or via the GitHub UI's auto-delete on merge). +3. Remove the local worktree: `git worktree remove /tmp/nf-metro-fix-<N>`. +4. Delete the local branch: `git branch -D fix/<N>-<slug>`. +5. Remove the conda env: `/opt/homebrew/bin/micromamba env remove -n nf-metro-fix-<N> -y`. + +Offer this cleanup to the user; only run it after they agree. + +For shepherding a whole stacked chain of PRs back into `main` (rather +than a single issue fix), see `pr-chain-vet`. diff --git a/.claude/skills/nf-metro-gate-triage/SKILL.md b/.claude/skills/nf-metro-gate-triage/SKILL.md new file mode 100644 index 000000000..ecf811043 --- /dev/null +++ b/.claude/skills/nf-metro-gate-triage/SKILL.md @@ -0,0 +1,86 @@ +--- +name: nf-metro-gate-triage +description: Run a routing gate-arm triage slice on nf-metro - give every un-exercised branch arm in a layout/routing module a verdict (reachable -> author a fixture, defensive, candidate-dead, or reachable-but-defective -> file a bug). Use when the user wants to triage routing gate arms, close coverage-matrix gaps, work a #687 slice, classify un-exercised gates, run or resume the gate-coverage triage campaign, or regenerate the routing gate coverage matrix. Trigger on phrases like "triage the <module> gate arms", "close the gate coverage gaps", "work the #687 triage", "classify the un-exercised routing arms", "run a gate-arm triage slice". The full methodology, lane rules, and gotchas live in docs/dev/routing_gate_triage.md; this skill drives one module slice end-to-end on top of the fix-issue workflow. For finding new layout bugs by composing novel renders, see nf-metro-stress-render; for fixing an engine bug the triage spawned, see fix-issue / nf-metro-layout-fix. +--- + +# nf-metro gate-arm triage + +Every `if`/`while` in `layout/routing/` is a *gate* whose arms a novel pipeline +can hit untested, producing a visual defect. The `scripts/routing_gate_coverage.py` +matrix enumerates which corpus fixtures reach each arm; this skill works the +un-exercised arms of one module to zero open gaps. + +**The methodology is documented in full at +[`docs/dev/routing_gate_triage.md`](../../../docs/dev/routing_gate_triage.md).** +Read it first - it is the source of truth for the four verdicts, the artifacts, +the workflow, and the hard-won gotchas. This skill is the thin operational +wrapper; it does not restate the detail. + +**Conventions** (substitute if your setup differs): +- Local nf-metro checkout: `~/projects/nf-metro`; upstream `seqeralabs/nf-metro`. +- Render preview: `seqeralabs.github.io/nf-metro/_pr/<N>/`. +- This skill builds on `fix-issue` for worktree/env/PR hygiene - follow that + skill's setup and additive-only rules. + +## What this skill does + +Drives **one module slice** (or a cluster of tiny modules) end-to-end: from a +worktree off `origin/main`, through per-arm classification, the human visual +verdict, a regenerated matrix, to a reviewable PR. It ships **verdicts and +fixtures only** - never engine behaviour changes. + +## Steps + +1. **Scope.** Confirm which module (or tiny-module cluster) this slice covers. + Re-run `python scripts/routing_gate_coverage.py` in a fresh worktree to get + that module's *live* un-exercised arms - gap counts drift, so never trust a + number from an issue body. If a per-module issue exists (the #727-#733 family, + #748), it carries the arm list; reconfirm it against the live matrix. + +2. **Classify every arm** into exactly one of the four verdicts from the doc: + **reachable** (author a minimal fixture, wire `GALLERY_ENTRIES`, verify the arm + flipped via the coverage script - the oracle), **reachable-but-defective** + (file a bug, park `needs-review`, do NOT commit/distort the fixture), + **defensive** (annotate why no valid topology takes it), **candidate-dead** + (flag with reachability evidence, do NOT delete - that is the #689 pass). + Opus drives; fan the reachable lane out to sonnet sub-agents, each confirming + its flip with the coverage script. Append a triage-JSON card per fixture. + + Watch the two traps the doc calls out: **phantom arcs** (multi-line + condition/literal/ternary mis-attribution - tooling noise, see #746, do not + hand-classify as defensive) and **"corpus doesn't hit it" ≠ defensive** (a + correction-pass arm with zero hits is usually reachable - author a fixture). + +3. **Human visual verdict before PR-open.** Build the review page and get a + verdict on every new fixture - the validator has blind spots the eyeball + catches: + ``` + source ~/.local/bin/mm-activate nf-metro && export PYTHONPATH="$PWD/src" + python .claude/skills/nf-metro-layout-triage/build_review.py --worktree "$PWD" \ + --output-dir /tmp/gate-triage-out --violations /tmp/gate-triage-<module>.json + cd /tmp/gate-triage-out && python -m http.server 8765 + ``` + Any **Bug** verdict not already classified defective: pull the fixture from + `GALLERY_ENTRIES`, file an issue with the repro, park its arm `needs-review` + linked to that issue. Nothing flagged gets silently dropped. + +4. **Regenerate + ratchet.** Run the script with `--write` to regenerate + `docs/dev/routing_gate_coverage.md` + the baseline. Keep the three ratchet + tests in `tests/test_routing_gate_coverage.py` green (they skip off the pinned + CPython - regenerate only under `BASELINE_PYTHON`). The stale-key test means a + removed gap needs its triage entry removed in the same PR. + +5. **Ship per `fix-issue` hygiene.** Invariant-test-first where a fixture asserts a + layout property, validator pass, `/simplify` as its own commit, full CI lint + (`ruff format --check` + `ruff check` + `mypy`), additive commits only, no + force-push, verify origin after each push. Stop at PR-open against `main`. + +**Done when** the module shows zero blank-Triage rows in the matrix and the PR is +open for review. The slice carries no engine behaviour change; any bug it +surfaced is filed separately (the `reachable-but-defective` lane). + +## Mid-campaign merges + +If another PR lands while this slice is in flight, resolve the shared coverage +files by **union**: start from `main`'s triage JSON, add only this module's keys, +then regenerate the doc + baseline. Never hand-merge the generated files. diff --git a/.claude/skills/nf-metro-layout-fix/SKILL.md b/.claude/skills/nf-metro-layout-fix/SKILL.md new file mode 100644 index 000000000..ff4eaba89 --- /dev/null +++ b/.claude/skills/nf-metro-layout-fix/SKILL.md @@ -0,0 +1,153 @@ +--- +name: nf-metro-layout-fix +description: Drive code-level fixes to nf-metro when a real pipeline render exposes a layout bug that isn't a mmd mistake, without regressing pipelines that already ship metro maps. Use when working in nf-metro's src/ (layout engine, routing, parser) to fix kinks, station overlaps, breeze-past, asymmetric fans, bypass routing, or bbox overflow on a real pipeline diagram. Covers the savepoint tag pattern, the invariant-test-first-then-fix-then-runtime-validator loop, gallery regression vetting with build_gallery and build_render_diff, converting global fixes to conditional ones so other renders aren't pushed around, and the additive-commits-only PR chain workflow. For authoring the mmd content itself (deciding lines, stations, sections), see the `pipeline-metro-diagram` skill. For routine gallery regression testing of nf-metro, see `render-topologies`. +--- + +# Fixing nf-metro Layout Bugs Surfaced by a Real Pipeline Render + +Captures the workflow for driving code-level fixes to nf-metro when a +pipeline's metro map exposes a layout case the engine handles wrong. The +goal: ship the fix without regressing the renders for other pipelines that +already use nf-metro. + +If the bad render is actually a mmd mistake (line drawn through a station +that doesn't consume it, missing `off_track` directive, undersized +`rowspan`, etc.), don't reach for this skill — go fix the mmd in the +pipeline repo. The `pipeline-metro-diagram` skill covers the triage for +"is it mmd or nf-metro?". Only when the mmd is correct and the engine +still produces a bad layout do you arrive here. + +## When to use this skill + +Trigger when: + +- A pipeline's rendered mmd looks wrong (kinks at section boundaries, + station or icon overlaps, breeze-past, broken trunk alignment, bypass + routing through a non-consumer, asymmetric fans, bbox overflow) **and** + you've already verified the mmd is correct. +- You're about to modify code in `src/nf_metro/layout/engine.py`, + `src/nf_metro/routing/`, or `src/nf_metro/parser/` to fix a layout case + surfaced by a real pipeline diagram. +- You're managing a stack of PRs against nf-metro `main` from a single + pipeline-integration session and want the chain rules in one place. + +## Step 1: Make a save point first + +Before touching nf-metro, tag the current state of the pipeline's render as +"good enough": + +```bash +# In the pipeline repo +git tag pipeline-render-baseline <commit> + +# In nf-metro +git tag <pipeline>-render-savepoint <commit> +git push origin <pipeline>-render-savepoint +``` + +Treat the savepoint as immutable. Every later step measures regressions +against it. If the iteration goes off the rails, you can return to this tag +and start over with a different approach. + +## Step 2: Per-fix iteration loop + +For each layout issue: + +1. **Reproduce minimally.** Render the pipeline mmd with `--debug` and the + exact params it ships with. Capture the SVG. Identify the offending + coordinates by parsing the SVG (`<rect>` station markers, `<path>` edge + data) — visual inspection alone is unreliable for sub-pixel issues. + +2. **Form a hypothesis.** What in `src/nf_metro/layout/engine.py` (or + `routing/core.py`, `parser/mermaid.py`) is producing the wrong output? + The engine is a long pipeline of phases; the bug is almost always in a + specific phase rather than across many. + +3. **Add an invariant test first, then fix.** Each layout invariant should + fail on the bug case and pass after the fix. Examples from prior sessions: + - `test_row_trunk_marker_cy_consistent` (trunk Y consistent across + same-row sections) + - `test_no_station_or_icon_overlap` (no two station/icon bboxes intersect) + - `test_lines_dont_cross_non_consumer_markers` (no line passes through a + station that doesn't consume it) + - `test_all_stations_snap_to_grid` (with explicit exceptions for half-grid + 2-branch fans) + - `test_bypass_v_has_horizontal_segment` (virtual bypass stations have a + visible flat segment ≥ 20 px) + - `test_section_bbox_contains_all_content` (no station/icon overflows its + section's bbox) + - `test_no_kink_at_section_boundary` (inter-section trunk Ys match) + - `test_loop_column_stations_share_x` (column-mate stations share X) + + Parametrize each invariant over multiple fixture mmds AND multiple render + parameter sets (savepoint params, rnaseq defaults, no-center-ports). A + bug that only manifests at non-default params has bitten us before. + +4. **Verify against the gallery.** After every fix, run `python + scripts/build_gallery.py --debug` and `build_render_diff.py` against + `origin/main`. If any existing example shifts visually, classify the + shift: + + - **Improvement / neutral**: fine. + - **Detrimental** (new crossings, mad routing, bbox overflow, label + overlap, station collisions, broken trunk alignment, breeze-past): the + fix needs to become conditional. Don't ship the fix in its current + form. + +5. **Convert "fix it everywhere" to "fix it conditionally" when needed.** A + common failure mode: a fix that works for the new pipeline introduces + spurious work for renders that didn't need it. Examples: + - Bbox padding change that grows row gaps even where no bypass routing + occurs → restrict to column-overlapping section pairs only. + - Bypass V flat-segment minimum that pushes 4 unrelated gallery examples + vertically → only enforce when there's horizontal headroom. + + The pattern: identify the precise topological precondition that makes + the fix needed, and gate the new behaviour on that precondition. + +6. **Add a runtime validator (not just a test).** End users running + `nf-metro render` should see a clear error if the layout violates an + invariant — not produce a silently broken render. Add a + `_guard_<name>` function called from `compute_layout`'s `validate` block + that raises `PhaseInvariantError` with the offending coordinates. + +## Step 3: The "improvement ratchet" + +Every regression we identify adds an invariant before its fix lands. The +test suite grows monotonically. Later PRs can't accidentally re-introduce +problems that earlier PRs solved. This is the only way the engine — built +as a long sequence of mutating phases — stays sustainable across many +pipelines. + +When dispatching agents to do nf-metro work, include in their brief: "you +must add an invariant test that fails on the bug AND a matching runtime +validator. Both are mandatory; the fix is not complete without them." + +## Step 4: Shipping the chain back to main + +Layout fixes accumulate into a stack of PRs against nf-metro `main`: the +bottom-of-chain PR is based on `main`, each subsequent PR is based on its +predecessor's branch, and bases auto-retarget as each PR merges. + +The actual per-PR shipping workflow — worktree setup, reverting +known-rejected commits, `/simplify` as a separate commit, gallery diff vs +`main`, classifying every changed example, sweeping narrative comments, +rewriting the description to be standalone, triggering CI, and the exact +after-merge cleanup order (re-target children **before** deleting the +merged branch) — lives in the `pr-chain-vet` skill. Reach for that one +when you're walking the chain into `main` one PR at a time. + +A few rules live here as well because they shape how the fixes are written +in the first place, not just how they're shipped: + +- **No force-pushes.** Every change to a PR is an additive commit. To undo + something already in the branch, append a `git revert <hash>` — don't + rewrite history. +- **One concern per commit.** The fix, the `/simplify` pass, and any + follow-on detrimental cleanup land as separate commits so each can be + read on its own. +- **Reconciling stack regressions: fold fixes into the earliest PR where + the issue first appears,** not as a bolt-on top-of-stack PR. A regression + introduced by an early PR may only become visible later in the chain; + when that happens, append the fix commit to the offending PR's branch + and re-vet that PR plus everything downstream. diff --git a/.claude/skills/nf-metro-layout-triage/README.md b/.claude/skills/nf-metro-layout-triage/README.md new file mode 100644 index 000000000..bc13f0ecf --- /dev/null +++ b/.claude/skills/nf-metro-layout-triage/README.md @@ -0,0 +1,60 @@ +# nf-metro-layout-triage + +Reusable triage tool for the failing / xfailing layout-invariant tests in `tests/test_layout_invariants.py`. Produces a single self-contained HTML page where each card pairs the rendered fixture with a red-bbox overlay of the offending element, a plain-English explanation, and bug / not-a-bug / ambiguous radio buttons whose state lives in `localStorage` and exports to JSON. + +See `SKILL.md` for the full recipe Claude follows when this skill is triggered. + +## One-liner (from an nf-metro checkout or worktree) + +```bash +source ~/.local/bin/mm-activate nf-metro +export PYTHONPATH="$PWD/src" + +OUT=/tmp/nf-metro-triage # or a project dir like ~/projects/nf-metro-triage +mkdir -p "$OUT" + +python .claude/skills/nf-metro-layout-triage/build_review.py \ + --worktree "$PWD" \ + --output-dir "$OUT" + +cd "$OUT" && python -m http.server 8765 +# then open http://localhost:8765 +``` + +## What gets produced + +``` +<output-dir>/ + index.html # open this + fail-list.txt # raw pytest output (only when --fail-list not passed) + renders/ + <fixture>.svg # base render per fixture (cached) + annotated/ + <fixture>__<invariant>.svg # base + red dashed overlay per row +``` + +The page itself is fully self-contained (SVGs are inlined as base64) - you can scp `index.html` anywhere and it still works. + +## Inputs + +The script either runs pytest itself (default) or reads a pre-captured pytest log. + +- **Default**: invoke `pytest tests/test_layout_invariants.py -rfX --tb=no -q --no-header` in the worktree, parse the `FAILED` and `XFAIL` lines. +- **`--fail-list <path>`**: skip pytest and parse the given text file. The file just needs to contain pytest-shaped `FAILED tests/test_layout_invariants.py::<name>[<fixture>]` or `XFAIL ...` lines somewhere in it; everything else is ignored. + +## Exporting triage state + +Inside the HTML page click **Export JSON**. This downloads `xfail-review-tags-<timestamp>.json` of the form: + +```json +{ + "<fixture>__<invariant>": {"tag": "bug", "notes": "..."} +} +``` + +State persists in the browser's `localStorage` under key `nfmetro-xfail-review-v1`; click **Reset localStorage** in the page header to start over. + +## Re-running + +- Re-running with the same output dir reuses cached fixture renders (under `<output-dir>/renders/`). Delete that directory to force a fresh render. +- If new invariants are added to `tests/test_layout_invariants.py`, the page will still surface them but show a generic explanation block until a tailored finder is added in `build_review.py`. diff --git a/.claude/skills/nf-metro-layout-triage/SKILL.md b/.claude/skills/nf-metro-layout-triage/SKILL.md new file mode 100644 index 000000000..9f71f6303 --- /dev/null +++ b/.claude/skills/nf-metro-layout-triage/SKILL.md @@ -0,0 +1,172 @@ +--- +name: nf-metro-layout-triage +description: Build a self-contained HTML triage page for failing/xfailing layout-invariant tests in nf-metro (test_label_x_anchored_to_station_marker_on_horizontal_runs, test_visual_stack_station_xs_share_column, test_row_trunk_marker_cy_consistent, test_no_kink_at_section_boundary, test_symfan_pairs_share_y, test_lines_dont_cross_non_consumer_markers, test_topological_siblings_share_y_or_symmetric, test_section_bbox_has_bottom_padding, test_off_track_inputs_above_consumer). Each row pairs the rendered fixture SVG with a red-bbox overlay on the offending element, a plain-English "Supposed issue" + "What to check" explanation, and bug / not-a-bug / ambiguous triage buttons whose state is saved in localStorage and exported as JSON. Use when the user asks to "triage layout invariants", "review xfails", "review failing layout tests", "build the triage page", or generally wants to triage the layout-invariant test suite by eye. +when-to-use: The user wants to walk through every failing or xfailing case in `tests/test_layout_invariants.py` and classify each one as bug / not-a-bug / ambiguous - typically before deciding which invariants to fix in the engine vs. which to relax in the test. Trigger phrases include "triage layout invariants", "review xfails", "review failing layout tests", "triage tool", "build the triage page", or any mention of triaging the nine invariants listed in the description. +--- + +# nf-metro layout-invariant triage + +This skill packages the triage tool that produces a single self-contained HTML page (with embedded SVGs, red-bbox overlays, explanations, and localStorage triage state) for every failing or xfailing case in `tests/test_layout_invariants.py`. It grew out of the xfail-review session for PR #326. + +## What it covers + +The tool produces one card per `(fixture, invariant)` pair for these nine invariants: + +- `test_label_x_anchored_to_station_marker_on_horizontal_runs` +- `test_visual_stack_station_xs_share_column` +- `test_row_trunk_marker_cy_consistent` +- `test_no_kink_at_section_boundary` +- `test_symfan_pairs_share_y` +- `test_lines_dont_cross_non_consumer_markers` +- `test_topological_siblings_share_y_or_symmetric` +- `test_section_bbox_has_bottom_padding` +- `test_off_track_inputs_above_consumer` + +If new invariants are added to the suite, the script will still surface them in the page but without a tailored explanation block; add a new finder + explanation entry in `build_review.py` to give them a structured highlight. + +## Triaging ad-hoc / one-off checks + +You do **not** have to add a committed (x)failing test plus a `find_*` finder +just to eyeball a candidate check. Two escape hatches drive the page from an +arbitrary provider: + +### `--violations <file.json>` (render cards straight from JSON) + +Pass a JSON file shaped like: + +```json +[ + { + "fixture": "rnaseq_sections.mmd", + "invariant": "label_vs_foreign_line", + "rects": [ + {"x": 120, "y": 80, "w": 60, "h": 24, "note": "label grazes the qc line"} + ], + "issue": "The label sits on top of a line it doesn't belong to.", + "check": "If the line strikes through the text it's a bug; a graze is Ambiguous." + } +] +``` + +```bash +python .claude/skills/nf-metro-layout-triage/build_review.py \ + --worktree "$PWD" --output-dir "$OUT" \ + --violations /tmp/my-candidate-check.json +``` + +Each `rect` becomes a red dashed overlay on the rendered fixture. The +optional `issue` / `check` strings (HTML allowed) become the "Supposed +issue" / "What to check" blocks. This path skips pytest discovery and the +`INVARIANT_FINDERS` registry entirely - the only engine work is rendering +the fixture SVG. + +### `--finder-module <path-or-dotted-name>` (register a finder at runtime) + +Point the tool at a small Python module exposing a `FINDERS` dict +(`{invariant: callable(graph, engine) -> list[violator-dict]}`) and/or an +`EXPLANATIONS` dict (`{invariant: (issue_html, check_html)}`): + +```python +# /tmp/my_finder.py +def find_offenders(graph, engine): + return [{"kind": "rect", "x": ..., "y": ..., "w": ..., "h": ..., "note": "..."}] + +FINDERS = {"my_candidate_check": find_offenders} +EXPLANATIONS = {"my_candidate_check": ("Issue prose...", "What-to-check prose...")} +``` + +```bash +python .claude/skills/nf-metro-layout-triage/build_review.py \ + --worktree "$PWD" --output-dir "$OUT" \ + --fail-list /tmp/my-faillist.txt --finder-module /tmp/my_finder.py +``` + +These are merged *over* the built-in registries, so the nine built-in +invariants keep working unchanged. A violator-dict uses the same shape the +built-in finders emit (`kind`, `x`, `y`, `w`, `h`, `note`). + +### Generic explanation fallback + +When an invariant has no tailored explanation (no `*_info` block on its +violators and no matching `EXPLANATIONS` entry), the card simply renders the +overlay and notes with no prose block - which is the graceful generic path. +Supply `issue` / `check` in the violations JSON, or an `EXPLANATIONS` entry +in the finder module, to add prose; otherwise the red overlay plus the +per-rect `note` strings are enough to classify by eye. + +## Recipe + +Assume an nf-metro checkout at `$PWD` (or a worktree off it) and the `nf-metro` micromamba env is available. + +1. **Activate the env and pin `PYTHONPATH` to the worktree's `src/`** (the script does not require a `pip install`, just an importable engine): + + ```bash + source ~/.local/bin/mm-activate nf-metro + export PYTHONPATH="$PWD/src" + ``` + +2. **Pick an output directory** outside the repo to keep generated SVGs out of git, for example `/Users/jonathan.manning/projects/nf-metro-triage` or `/tmp/triage-<task>`: + + ```bash + OUT=/Users/jonathan.manning/projects/nf-metro-triage + mkdir -p "$OUT" + ``` + +3. **Run the build script**. By default it invokes pytest itself to discover the FAILED/XFAIL set, then renders each fixture and writes `index.html` plus `renders/`: + + ```bash + python .claude/skills/nf-metro-layout-triage/build_review.py \ + --worktree "$PWD" \ + --output-dir "$OUT" + ``` + + If you already have pytest output captured in a log file (e.g. `pytest tests/test_layout_invariants.py -rfX --tb=no -q > /tmp/inv.log`), pass it via `--fail-list /tmp/inv.log` to skip re-running the suite. + +4. **Serve the output**. The HTML is self-contained (SVGs are inlined as base64) but a local server makes loading and JSON export reliable: + + ```bash + cd "$OUT" && python -m http.server 8765 + ``` + + Then point the user at <http://localhost:8765>. + +5. **Triage in the browser**. For each row pick **Bug**, **Not a bug**, or **Ambiguous** and optionally add a note. The state persists in `localStorage` per browser. When done, click **Export JSON** in the page header - this downloads `xfail-review-tags-<timestamp>.json` containing `{key: {tag, notes}}` keyed by `<fixture>__<invariant>`. + +6. **Clean up** when the triage is finished: + + ```bash + # Stop the http.server (Ctrl-C) and optionally + rm -rf "$OUT" + ``` + +## How the script works (in brief) + +- `--worktree` is added to `sys.path`, so the script imports the parser, layout engine, routing, labels, and SVG renderer directly from that checkout. No pip install required. +- Each fixture is rendered once via the `nf-metro` CLI (cached in `<output-dir>/renders/<fixture>.svg`) and laid out once via `compute_layout()`. +- For each invariant the script runs a finder that re-derives the offending geometry (port Y, trunk marker cy, fan column, label X, etc.) and emits a red dashed rectangle into a per-row annotated SVG (`<output-dir>/renders/annotated/<key>.svg`). +- The HTML embeds the annotated SVG as base64 data URI, so the page is fully portable - you can drop `index.html` anywhere and it still works (although the page also references `renders/` for debugging). +- If pytest is rerun later, the rendered SVGs are cached - delete `<output-dir>/renders/` to force a fresh render. + +## Output anatomy + +``` +<output-dir>/ + index.html # the page to open + fail-list.txt # raw pytest output (only when --fail-list not passed) + renders/ + <fixture>.svg # base render per fixture (cached) + annotated/ + <fixture>__<invariant>.svg # base + red overlay per row +``` + +The exported triage JSON lands in the user's browser Downloads folder; it is not written by the script. + +## When the explanation is generic + +If the invariant fires inside the test harness but the embedded finder cannot reproduce the offending element (e.g. the test relies on a slightly different layout-param path), the row shows a yellow "no offending element" note plus a generic invariant-level explanation. Treat those as "no red highlight, classify from the whole render". + +## See also + +- `tests/test_layout_invariants.py` - the actual assertions the page mirrors. +- `tests/layout_validator.py` - lower-level programmatic checks used by other test files. +- PR #326 (feat/comprehensive-invariants) - the original session this tool was built for. diff --git a/.claude/skills/nf-metro-layout-triage/build_review.py b/.claude/skills/nf-metro-layout-triage/build_review.py new file mode 100644 index 000000000..f4eed56da --- /dev/null +++ b/.claude/skills/nf-metro-layout-triage/build_review.py @@ -0,0 +1,2149 @@ +#!/usr/bin/env python3 +"""Build the nf-metro layout-invariant triage HTML page. + +For each (fixture, invariant) pair flagged by the failing/xfailing layout +invariants in ``tests/test_layout_invariants.py``: + +1. Renders the fixture to SVG (cached per fixture). +2. Runs the layout engine and the invariant's geometric check to extract + the violating coordinate(s). +3. Produces an SVG containing the base render plus a red bbox overlay + for the offending element(s). +4. Embeds everything into a single self-contained HTML page with + localStorage triage state (bug / not-a-bug / ambiguous + notes). + +CLI: + + python build_review.py \\ + --worktree /path/to/nf-metro \\ + --output-dir /path/to/triage-output \\ + [--fail-list /path/to/pytest-output.log] + +If ``--fail-list`` is omitted, the script runs pytest in +``--collect-only`` / ``-rfX`` mode against +``tests/test_layout_invariants.py`` inside ``--worktree`` and parses +the FAILED / XFAIL lines itself. + +Two escape hatches let the tool triage *ad-hoc* checks that aren't +committed invariants yet, without touching the test suite or this file: + +* ``--violations <file.json>`` ingests pre-computed violations of shape + ``[{fixture, invariant, rects:[{x,y,w,h,note}], issue, check}]`` and + renders cards straight from them, bypassing pytest discovery and the + ``INVARIANT_FINDERS`` registry entirely. Per-entry ``issue`` / ``check`` + strings become the explanation block (falling back to the built-in + generic block keyed by ``invariant`` if omitted). +* ``--finder-module <path-or-dotted-name>`` registers extra finders and + explanations at runtime. The module may expose a ``FINDERS`` dict + (``{invariant: callable(graph, engine) -> list[violator-dict]}``) and/or + an ``EXPLANATIONS`` dict (``{invariant: (issue_html, check_html)}``) + that are merged over the built-in registries. + +Invariants with no tailored explanation fall back to the generic block; +ad-hoc checks rely on that path. +""" + +from __future__ import annotations + +import argparse +import base64 +import importlib +import importlib.util +import json +import os +import re +import subprocess +import sys +import traceback +from collections import defaultdict +from pathlib import Path + +# --------------------------------------------------------------------------- +# CLI parsing +# --------------------------------------------------------------------------- + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + p = argparse.ArgumentParser( + description=( + "Build a self-contained HTML page for triaging failing/xfailing " + "layout invariants in nf-metro." + ), + ) + p.add_argument( + "--worktree", + type=Path, + required=True, + help="Path to the nf-metro checkout (worktree) whose layout engine " + "and fixtures should be used.", + ) + p.add_argument( + "--output-dir", + type=Path, + required=True, + help="Directory to write index.html plus renders/ and renders/annotated/.", + ) + p.add_argument( + "--fail-list", + type=Path, + default=None, + help="Optional path to a pytest output log containing FAILED/XFAIL " + "lines for tests/test_layout_invariants.py. If omitted, pytest is " + "invoked automatically.", + ) + p.add_argument( + "--pytest-target", + default="tests/test_layout_invariants.py", + help="Pytest target (relative to worktree) used when --fail-list " + "is not given. Default: tests/test_layout_invariants.py.", + ) + p.add_argument( + "--violations", + type=Path, + default=None, + help="Optional path to a JSON file of pre-computed violations of " + "shape [{fixture, invariant, rects:[{x,y,w,h,note}], issue, check}]. " + "When given, cards are built directly from this file, bypassing " + "pytest discovery and the INVARIANT_FINDERS registry. Useful for " + "triaging an ad-hoc / one-off check without adding a committed test.", + ) + p.add_argument( + "--finder-module", + default=None, + help="Optional Python module (dotted name or path to a .py file) " + "exposing a FINDERS dict {invariant: callable(graph, engine)} and/or " + "an EXPLANATIONS dict {invariant: (issue_html, check_html)}. These " + "are merged over the built-in registries so a one-off finder can be " + "triaged without editing this script.", + ) + return p.parse_args(argv) + + +# --------------------------------------------------------------------------- +# Engine glue (worktree-specific imports loaded after sys.path is set up) +# --------------------------------------------------------------------------- + + +def _setup_imports(worktree: Path) -> dict: + """Insert ``worktree/src`` and ``worktree/tests`` on sys.path and import + the engine symbols we need. Returns a dict of the symbols by name so + the rest of the module doesn't have to do delayed-import dances.""" + src = worktree / "src" + tests = worktree / "tests" + if not src.is_dir(): + raise SystemExit(f"--worktree {worktree} has no src/ directory") + sys.path.insert(0, str(src)) + sys.path.insert(0, str(tests)) + + # Late imports so the worktree's source tree is authoritative. + from nf_metro.layout.engine import ( # noqa: E402 + _station_marker_bbox, + compute_layout, + ) + from nf_metro.layout.labels import place_labels # noqa: E402 + from nf_metro.layout.routing import ( # noqa: E402 + compute_station_offsets, + route_edges, + ) + from nf_metro.parser.mermaid import parse_metro_mermaid # noqa: E402 + from nf_metro.parser.model import PortSide # noqa: E402 + from nf_metro.render.svg import apply_route_offsets # noqa: E402 + + return { + "compute_layout": compute_layout, + "_station_marker_bbox": _station_marker_bbox, + "place_labels": place_labels, + "compute_station_offsets": compute_station_offsets, + "route_edges": route_edges, + "parse_metro_mermaid": parse_metro_mermaid, + "PortSide": PortSide, + "apply_route_offsets": apply_route_offsets, + } + + +_Y_TOL = 1.0 +_LABEL_DRIFT_TOL = 10.0 + + +# --------------------------------------------------------------------------- +# Runtime finder-module loading +# --------------------------------------------------------------------------- + + +def load_finder_module(spec: str): + """Import a finder module given either a dotted name or a path to a .py + file, and return it. The module may expose ``FINDERS`` and/or + ``EXPLANATIONS`` dicts (both optional).""" + path = Path(spec) + if path.suffix == ".py" or path.exists(): + path = path.resolve() + if not path.is_file(): + raise SystemExit(f"--finder-module {spec} is not a file") + mod_spec = importlib.util.spec_from_file_location(path.stem, path) + if mod_spec is None or mod_spec.loader is None: + raise SystemExit(f"--finder-module {spec} could not be loaded") + module = importlib.util.module_from_spec(mod_spec) + mod_spec.loader.exec_module(module) + return module + return importlib.import_module(spec) + + +def merge_finder_module(module, finders: dict, explanations: dict) -> None: + """Merge a finder module's ``FINDERS`` / ``EXPLANATIONS`` over the given + registries (mutating them in place). Either attribute may be absent.""" + extra_finders = getattr(module, "FINDERS", None) + if extra_finders: + if not isinstance(extra_finders, dict): + raise SystemExit("finder-module FINDERS must be a dict") + finders.update(extra_finders) + extra_explanations = getattr(module, "EXPLANATIONS", None) + if extra_explanations: + if not isinstance(extra_explanations, dict): + raise SystemExit("finder-module EXPLANATIONS must be a dict") + explanations.update(extra_explanations) + + +# --------------------------------------------------------------------------- +# Fixture resolution +# --------------------------------------------------------------------------- + + +def make_resolve_fixture(worktree: Path): + fixtures_dir = worktree / "tests" / "fixtures" + examples_dir = worktree / "examples" + + def resolve(name: str) -> Path: + p = Path(name) + candidates = [ + fixtures_dir / p, + examples_dir / p, + examples_dir / "topologies" / p, + examples_dir / "guide" / p, + fixtures_dir / "topologies" / p, + worktree / p, + ] + for c in candidates: + if c.is_file(): + return c + raise FileNotFoundError(name) + + return resolve, fixtures_dir + + +def make_load_layout(engine, resolve_fixture, fixtures_dir: Path): + def load(fixture: str): + path = resolve_fixture(fixture) + text = path.read_text() + graph = engine["parse_metro_mermaid"](text) + if path.is_relative_to(fixtures_dir): + graph.center_ports = True + engine["compute_layout"](graph) + return graph + + return load + + +def make_render_svg(resolve_fixture, renders_dir: Path): + def render(fixture: str) -> tuple[Path | None, str | None]: + safe = fixture.replace("/", "__") + out = renders_dir / f"{safe}.svg" + if out.exists(): + return out, None + path = resolve_fixture(fixture) + try: + proc = subprocess.run( + ["nf-metro", "render", str(path), "-o", str(out)], + capture_output=True, + text=True, + timeout=60, + ) + if proc.returncode != 0: + return None, f"render failed: {proc.stderr.strip()[:500]}" + except Exception as e: # noqa: BLE001 + return None, f"render exception: {e!r}" + return (out, None) if out.exists() else (None, "render produced no output") + + return render + + +# --------------------------------------------------------------------------- +# Helpers shared with test_layout_invariants.py +# --------------------------------------------------------------------------- + + +def _row_lr_sections(graph) -> dict[int, list]: + rows: dict[int, list] = defaultdict(list) + for sec in graph.sections.values(): + if ( + sec.bbox_h <= 0 + or sec.grid_row < 0 + or sec.direction not in ("LR", "RL") + or sec.grid_row_span > 1 + ): + continue + rows[sec.grid_row].append(sec) + return rows + + +def _section_lr_port_ys(graph, section, PortSide) -> list[float]: + ys: list[float] = [] + for pid in list(section.entry_ports) + list(section.exit_ports): + port = graph.ports.get(pid) + st = graph.stations.get(pid) + if ( + port is not None + and st is not None + and port.side in (PortSide.LEFT, PortSide.RIGHT) + ): + ys.append(st.y) + return ys + + +def _section_full_bundle(graph, section, PortSide) -> set[str] | None: + port_lines: set[str] = set() + has_lr_port = False + for pid in list(section.entry_ports) + list(section.exit_ports): + port = graph.ports.get(pid) + if port is None or port.side not in (PortSide.LEFT, PortSide.RIGHT): + continue + has_lr_port = True + port_lines.update(graph.station_lines(pid)) + return port_lines if (has_lr_port and port_lines) else None + + +def _section_trunk_marker_cy(graph, section, offsets, PortSide): + port_ys = _section_lr_port_ys(graph, section, PortSide) + if not port_ys: + return None + port_y = port_ys[0] + bundle = _section_full_bundle(graph, section, PortSide) + if not bundle: + return None + port_set = set(section.entry_ports) | set(section.exit_ports) + best = None + for sid in section.station_ids: + if sid in port_set: + continue + st = graph.stations.get(sid) + if st is None or st.is_port or st.is_hidden: + continue + lines = graph.station_lines(sid) + if set(lines) != bundle: + continue + line_offs = [offsets.get((sid, lid), 0.0) for lid in lines] + if not line_offs: + continue + cy = st.y + (min(line_offs) + max(line_offs)) / 2 + dist = abs(cy - port_y) + if best is None or dist < best[0]: + best = (dist, cy, sid, st.x) + return best # (dist, cy, sid, st.x) or None + + +# --------------------------------------------------------------------------- +# Per-invariant violator detection +# --------------------------------------------------------------------------- + + +def find_row_trunk_violators(graph, engine) -> list[dict]: + PortSide = engine["PortSide"] + offsets = engine["compute_station_offsets"](graph) + rows = _row_lr_sections(graph) + violators: list[dict] = [] + for row, sections in rows.items(): + cys = [] + for sec in sections: + v = _section_trunk_marker_cy(graph, sec, offsets, PortSide) + if v is not None: + cys.append((sec, v)) + if len(cys) < 2: + continue + anchor_sec_id = cys[0][0].id + target = cys[0][1][1] + for sec, v in cys[1:]: + if abs(v[1] - target) >= _Y_TOL: + _, cy, sid, sx = v + violators.append( + { + "kind": "marker", + "x": sx, + "y": cy, + "w": 24, + "h": 24, + "note": ( + f"row {row}: trunk {sid} cy={cy:.1f} drifts " + f"from row anchor cy={target:.1f} " + f"(delta={cy - target:+.1f}px)" + ), + "row_trunk_info": { + "row": row, + "section_id": sec.id, + "trunk_station": sid, + "section_cy": cy, + "anchor_section_id": anchor_sec_id, + "anchor_cy": target, + "delta": cy - target, + }, + } + ) + return violators + + +def find_no_kink_violators(graph, engine) -> list[dict]: + PortSide = engine["PortSide"] + offsets = engine["compute_station_offsets"](graph) + rows = _row_lr_sections(graph) + violators = [] + for row, sections in rows.items(): + sorted_secs = sorted(sections, key=lambda s: s.grid_col) + for sec, nxt in zip(sorted_secs, sorted_secs[1:]): + if nxt.grid_col - sec.grid_col != 1: + continue + for pid in sec.exit_ports: + port = graph.ports.get(pid) + if port is None or port.side != PortSide.RIGHT: + continue + exit_lines = graph.station_lines(pid) + if not exit_lines: + continue + exit_offs = [offsets.get((pid, lid), 0.0) for lid in exit_lines] + exit_cy = graph.stations[pid].y + (min(exit_offs) + max(exit_offs)) / 2 + exit_x = graph.stations[pid].x + for npid in nxt.entry_ports: + nport = graph.ports.get(npid) + if nport is None or nport.side != PortSide.LEFT: + continue + entry_lines = graph.station_lines(npid) + entry_offs = [offsets.get((npid, lid), 0.0) for lid in entry_lines] + entry_cy = ( + graph.stations[npid].y + (min(entry_offs) + max(entry_offs)) / 2 + ) + entry_x = graph.stations[npid].x + if abs(exit_cy - entry_cy) >= _Y_TOL: + lo_x = min(exit_x, entry_x) - 12 + hi_x = max(exit_x, entry_x) + 12 + lo_y = min(exit_cy, entry_cy) - 12 + hi_y = max(exit_cy, entry_cy) + 12 + violators.append( + { + "kind": "rect", + "x": lo_x, + "y": lo_y, + "w": hi_x - lo_x, + "h": hi_y - lo_y, + "note": ( + f"row {row}: exit port {pid} cy={exit_cy:.1f} " + f"!= entry port {npid} cy={entry_cy:.1f} " + f"(delta={exit_cy - entry_cy:+.1f}px)" + ), + "kink_info": { + "row": row, + "sec_a": sec.id, + "sec_b": nxt.grid_col, + "sec_a_id": sec.id, + "sec_b_id": nxt.id, + "exit_port": pid, + "entry_port": npid, + "exit_cy": exit_cy, + "entry_cy": entry_cy, + "delta": exit_cy - entry_cy, + }, + } + ) + return violators + + +def _section_fan_columns(graph, section, PortSide) -> dict[float, list[str]]: + bundle = _section_full_bundle(graph, section, PortSide) + if not bundle: + return {} + port_set = set(section.entry_ports) | set(section.exit_ports) + cols: dict[float, list[str]] = defaultdict(list) + for sid in section.station_ids: + if sid in port_set: + continue + st = graph.stations.get(sid) + if st is None or st.is_port or st.is_hidden or st.off_track: + continue + if set(graph.station_lines(sid)) != bundle: + continue + cols[round(st.x, 1)].append(sid) + return {x: sids for x, sids in cols.items() if len(sids) >= 2} + + +def find_symfan_violators(graph, engine) -> list[dict]: + PortSide = engine["PortSide"] + offsets = engine["compute_station_offsets"](graph) + violators = [] + for sec in graph.sections.values(): + cols = _section_fan_columns(graph, sec, PortSide) + trunk = _section_trunk_marker_cy(graph, sec, offsets, PortSide) + if trunk is None: + continue + trunk_cy = trunk[1] + for x, sids in cols.items(): + if len(sids) != 2: + continue + cys = [] + for sid in sids: + st = graph.stations[sid] + lines = graph.station_lines(sid) + line_offs = [offsets.get((sid, lid), 0.0) for lid in lines] + cys.append((sid, st.y + (min(line_offs) + max(line_offs)) / 2)) + cys.sort(key=lambda t: t[1]) + above_gap = trunk_cy - cys[0][1] + below_gap = cys[1][1] - trunk_cy + if abs(above_gap - below_gap) >= _Y_TOL: + top_sid, top_cy = cys[0] + bot_sid, bot_cy = cys[1] + lo_y = min(top_cy, bot_cy) - 16 + hi_y = max(top_cy, bot_cy) + 16 + source = None + if sec.entry_ports: + source = next(iter(sec.entry_ports)) + violators.append( + { + "kind": "rect", + "x": x - 18, + "y": lo_y, + "w": 36, + "h": hi_y - lo_y, + "note": ( + f"section {sec.id} col x={x}: pair " + f"({top_sid} cy={top_cy:.1f}, {bot_sid} cy={bot_cy:.1f}) " + f"not mirrored around trunk cy={trunk_cy:.1f} " + f"(above_gap={above_gap:.1f}, below_gap={below_gap:.1f})" + ), + "symfan_info": { + "section_id": sec.id, + "source": source or sec.id, + "top_sid": top_sid, + "bot_sid": bot_sid, + "top_cy": top_cy, + "bot_cy": bot_cy, + "trunk_cy": trunk_cy, + "delta": (above_gap - below_gap), + }, + } + ) + return violators + + +def find_breeze_past_violators(graph, engine) -> list[dict]: + offsets = engine["compute_station_offsets"](graph) + routes = engine["route_edges"](graph, station_offsets=offsets) + consumed_by = defaultdict(set) + produced_by = defaultdict(set) + for e in graph.edges: + consumed_by[e.target].add(e.line_id) + produced_by[e.source].add(e.line_id) + + def seg_crosses_bbox(p1, p2, bbox): + x1, y1 = p1 + x2, y2 = p2 + bx1, by1, bx2, by2 = bbox + if max(x1, x2) < bx1 or min(x1, x2) > bx2: + return False + if max(y1, y2) < by1 or min(y1, y2) > by2: + return False + for k in range(21): + f = k / 20.0 + x = x1 + f * (x2 - x1) + y = y1 + f * (y2 - y1) + if bx1 <= x <= bx2 and by1 <= y <= by2: + return True + return False + + seen = set() + violators = [] + for sid, _st in graph.stations.items(): + bbox = engine["_station_marker_bbox"](graph, sid, offsets=offsets) + if bbox is None: + continue + station_lines = consumed_by.get(sid, set()) | produced_by.get(sid, set()) + for r in routes: + if r.line_id in station_lines: + continue + if r.edge.source == sid or r.edge.target == sid: + continue + pts = engine["apply_route_offsets"](r, offsets) + for k in range(len(pts) - 1): + if seg_crosses_bbox(pts[k], pts[k + 1], bbox): + key = (sid,) + if key in seen: + break + seen.add(key) + bx1, by1, bx2, by2 = bbox + violators.append( + { + "kind": "rect", + "x": bx1 - 4, + "y": by1 - 4, + "w": (bx2 - bx1) + 8, + "h": (by2 - by1) + 8, + "note": ( + f"line {r.line_id!r} on edge " + f"{r.edge.source}->{r.edge.target} " + f"crosses non-consumer marker {sid!r}" + ), + "breeze_info": { + "line_id": r.line_id, + "edge_source": r.edge.source, + "edge_target": r.edge.target, + "station": sid, + }, + } + ) + break + return violators + + +def find_bbox_padding_violators(graph, engine) -> list[dict]: + """test_section_bbox_has_bottom_padding.""" + from nf_metro.layout.constants import SECTION_Y_PADDING + + tol = 1.0 + violators = [] + for sec_id, sec in graph.sections.items(): + if sec.bbox_h <= 0: + continue + port_ids = set(sec.entry_ports) | set(sec.exit_ports) + internal = [ + (sid, graph.stations[sid].y) + for sid in sec.station_ids + if sid in graph.stations + and sid not in port_ids + and not graph.stations[sid].is_hidden + ] + if not internal: + continue + lowest_sid, lowest_cy = max(internal, key=lambda t: t[1]) + bbox_bot = sec.bbox_y + sec.bbox_h + gap = bbox_bot - lowest_cy + if gap + tol < SECTION_Y_PADDING: + violators.append( + { + "kind": "rect", + "x": sec.bbox_x, + "y": lowest_cy - 4, + "w": sec.bbox_w, + "h": bbox_bot - (lowest_cy - 4), + "note": ( + f"section {sec_id}: gap={gap:.1f}px between lowest " + f"station {lowest_sid} cy={lowest_cy:.1f} and bbox " + f"bottom={bbox_bot:.1f} < SECTION_Y_PADDING=" + f"{SECTION_Y_PADDING}px" + ), + "bbox_pad_info": { + "section_id": sec_id, + "lowest_sid": lowest_sid, + "lowest_cy": lowest_cy, + "bbox_bot": bbox_bot, + "gap": gap, + "required": float(SECTION_Y_PADDING), + }, + } + ) + return violators + + +def find_topo_siblings_violators(graph, engine) -> list[dict]: + preds: dict[str, set[str]] = defaultdict(set) + succs: dict[str, set[str]] = defaultdict(set) + for e in graph.edges: + preds[e.target].add(e.source) + succs[e.source].add(e.target) + classes = defaultdict(list) + for sid, st in graph.stations.items(): + if st.is_port or st.is_hidden or st.off_track: + continue + if not preds[sid] or not succs[sid]: + continue + key = ( + frozenset(preds[sid]), + frozenset(succs[sid]), + frozenset(graph.station_lines(sid)), + ) + classes[key].append(sid) + violators = [] + for key, members in classes.items(): + if len(members) < 2: + continue + ys_sorted = sorted(graph.stations[s].y for s in members) + if max(ys_sorted) - min(ys_sorted) < 2.0: + continue + is_offender = False + if len(members) == 2: + is_offender = True + else: + mean_y = sum(ys_sorted) / len(ys_sorted) + for y in ys_sorted: + mirror = 2 * mean_y - y + if not any(abs(other - mirror) < 2.0 for other in ys_sorted): + is_offender = True + break + if not is_offender: + continue + xs = [graph.stations[m].x for m in members] + ys = [graph.stations[m].y for m in members] + lo_x = min(xs) - 20 + hi_x = max(xs) + 20 + lo_y = min(ys) - 16 + hi_y = max(ys) + 16 + member_str = ", ".join(f"{m}@y={graph.stations[m].y:.1f}" for m in members) + preds_set, succs_set, _line_set = key + parents_with_y = [] + for p in sorted(preds_set): + pst = graph.stations.get(p) + if pst is not None: + parents_with_y.append((p, pst.y)) + members_with_y = [(m, graph.stations[m].y) for m in members] + violators.append( + { + "kind": "rect", + "x": lo_x, + "y": lo_y, + "w": hi_x - lo_x, + "h": hi_y - lo_y, + "note": ( + f"topological siblings {{{member_str}}} share preds/succs " + f"but ys span {max(ys) - min(ys):.1f}px without symmetry" + ), + "siblings_info": { + "members": members_with_y, + "parents": parents_with_y, + "span": max(ys) - min(ys), + }, + } + ) + return violators + + +def find_label_anchor_violators(graph, engine) -> list[dict]: + """test_label_x_anchored_to_station_marker_on_horizontal_runs. + + Flags middle-anchored labels on horizontal LR/RL runs whose X has + drifted more than ``_LABEL_DRIFT_TOL`` from the station marker X. The + expected position is the station's own marker; the box is anchored on + the actual rendered ``<text>`` glyph (resolved in :func:`annotate_svg`) + rather than the engine's logical coords, so it lands on the label the + reviewer sees. + """ + offsets = engine["compute_station_offsets"](graph) + routes = engine["route_edges"](graph, station_offsets=offsets) + labels = engine["place_labels"]( + graph, station_offsets=offsets, label_angle=graph.label_angle or 0.0 + ) + label_by_sid = {lp.station_id: lp for lp in labels} + in_routes = defaultdict(list) + out_routes = defaultdict(list) + for r in routes: + in_routes[r.edge.target].append(r) + out_routes[r.edge.source].append(r) + violators = [] + for sid, st in graph.stations.items(): + if st.is_port or st.is_hidden or sid in graph.junctions: + continue + if st.off_track: + continue + sec = graph.sections.get(st.section_id) if st.section_id else None + if sec is None or sec.direction not in ("LR", "RL"): + continue + lp = label_by_sid.get(sid) + if lp is None or lp.text_anchor != "middle": + continue + ins = in_routes.get(sid, []) + outs = out_routes.get(sid, []) + if not ins or not outs: + continue + in_horizontal = all( + len(r.points) >= 2 + and abs(r.points[-2][1] - r.points[-1][1]) <= _Y_TOL + and abs(r.points[-1][1] - st.y) <= _Y_TOL + for r in ins + ) + if not in_horizontal: + continue + out_horizontal = all( + len(r.points) >= 2 + and abs(r.points[0][1] - r.points[1][1]) <= _Y_TOL + and abs(r.points[0][1] - st.y) <= _Y_TOL + for r in outs + ) + if not out_horizontal: + continue + drift = abs(lp.x - st.x) + if drift > _LABEL_DRIFT_TOL: + violators.append( + { + "kind": "label", + "station_id": sid, + "expected_x": st.x, + "label_x": lp.x, + "note": ( + f"station {sid!r} label.x={lp.x:.1f} vs marker " + f"x={st.x:.1f} (drift={drift:.1f}px)" + ), + "label_info": { + "station_id": sid, + "station_x": st.x, + "label_x": lp.x, + "expected_x": st.x, + "delta": lp.x - st.x, + }, + } + ) + return violators + + +def find_stack_x_violators(graph, engine) -> list[dict]: + """test_visual_stack_station_xs_share_column. + + A visual stack groups same-section stations by predecessor set and + layer (successors are deliberately omitted, mirroring the live test), + flagging X drift only when at least one pair sits within + ``STACK_Y_WINDOW`` so the group reads as a vertical column rather than + a side-by-side or far-spread layout. + """ + from nf_metro.layout.constants import Y_SPACING + + stack_y_window = 2.0 * Y_SPACING + preds = defaultdict(set) + for e in graph.edges: + preds[e.target].add(e.source) + violators = [] + for sec in graph.sections.values(): + if sec.bbox_h <= 0: + continue + port_ids = set(sec.entry_ports) | set(sec.exit_ports) + groups = defaultdict(list) + for sid in sec.station_ids: + if sid in port_ids: + continue + st = graph.stations.get(sid) + if st is None or st.is_port or st.is_hidden: + continue + key = (frozenset(preds[sid]), st.layer) + groups[key].append(sid) + for members in groups.values(): + if len(members) < 2: + continue + xs = [graph.stations[s].x for s in members] + ys = [graph.stations[s].y for s in members] + if max(xs) - min(xs) <= 1.0: + continue + visual_stack = any( + 0 < abs(ys[i] - ys[j]) <= stack_y_window + for i in range(len(members)) + for j in range(i + 1, len(members)) + ) + if visual_stack: + lo_x = min(xs) - 20 + hi_x = max(xs) + 20 + lo_y = min(ys) - 18 + hi_y = max(ys) + 18 + violators.append( + { + "kind": "rect", + "x": lo_x, + "y": lo_y, + "w": hi_x - lo_x, + "h": hi_y - lo_y, + "note": ( + f"section {sec.id!r} stack {members} " + f"xs={[round(x, 1) for x in xs]} " + f"drift={max(xs) - min(xs):.1f}px" + ), + "stack_info": { + "section_id": sec.id, + "members": list( + zip( + members, + [round(x, 1) for x in xs], + [round(y, 1) for y in ys], + ) + ), + "drift": max(xs) - min(xs), + }, + } + ) + return violators + + +def find_off_track_violators(graph, engine) -> list[dict]: + """test_off_track_inputs_above_consumer.""" + junction_ids = set(graph.junctions) + consumer_of: dict[str, str] = {} + for edge in graph.edges: + src = graph.stations.get(edge.source) + tgt = graph.stations.get(edge.target) + if ( + src is None + or tgt is None + or not src.off_track + or src.is_port + or src.id in junction_ids + or tgt.is_port + or tgt.id in junction_ids + or tgt.off_track + ): + continue + consumer_of.setdefault(src.id, tgt.id) + violators = [] + for off_id, consumer_id in consumer_of.items(): + off_st = graph.stations[off_id] + cons_st = graph.stations[consumer_id] + if not (off_st.y < cons_st.y - _Y_TOL): + lo_x = min(off_st.x, cons_st.x) - 18 + hi_x = max(off_st.x, cons_st.x) + 18 + lo_y = min(off_st.y, cons_st.y) - 18 + hi_y = max(off_st.y, cons_st.y) + 18 + violators.append( + { + "kind": "rect", + "x": lo_x, + "y": lo_y, + "w": hi_x - lo_x, + "h": hi_y - lo_y, + "note": ( + f"off-track {off_id!r} y={off_st.y:.1f} not above " + f"consumer {consumer_id!r} y={cons_st.y:.1f}" + ), + "off_track_info": { + "off_track_id": off_id, + "off_track_y": off_st.y, + "consumer_id": consumer_id, + "consumer_y": cons_st.y, + }, + } + ) + return violators + + +INVARIANT_FINDERS = { + "test_row_trunk_marker_cy_consistent": find_row_trunk_violators, + "test_no_kink_at_section_boundary": find_no_kink_violators, + "test_symfan_pairs_share_y": find_symfan_violators, + "test_lines_dont_cross_non_consumer_markers": find_breeze_past_violators, + "test_section_bbox_has_bottom_padding": find_bbox_padding_violators, + "test_topological_siblings_share_y_or_symmetric": find_topo_siblings_violators, + "test_label_x_anchored_to_station_marker_on_horizontal_runs": find_label_anchor_violators, + "test_visual_stack_station_xs_share_column": find_stack_x_violators, + "test_off_track_inputs_above_consumer": find_off_track_violators, +} + + +# --------------------------------------------------------------------------- +# Annotate a base SVG with red overlay boxes. +# --------------------------------------------------------------------------- + + +_SVG_OPEN_RE = re.compile(r'<svg[^>]*viewBox="([^"]+)"[^>]*>') + + +def _rendered_label_box( + svg_text: str, station_id: str +) -> tuple[float, float, float, float] | None: + """Extent ``(x, y, w, h)`` of the rendered label glyph for ``station_id``. + + The renderer applies ``text-anchor`` / ``dominant-baseline`` shifts that + move the drawn glyph away from the engine's logical ``label.x`` / ``label.y``, + so the overlay box has to be derived from the drawn ink. This defers to the + authoritative artifact parser the render oracle uses, so the box matches the + same drawn-glyph footprint those geometry guards reason about. + """ + from nf_metro.layout.labels import label_glyph_ink_bbox + from nf_metro.render.validate import parse_station_labels + + for lab in parse_station_labels(svg_text): + if lab.placement.station_id == station_id: + x0, y0, x1, y1 = label_glyph_ink_bbox(lab.placement) + return x0, y0, x1 - x0, y1 - y0 + return None + + +def annotate_svg(svg_text: str, violators: list[dict]) -> tuple[str, int]: + """Insert red overlay shapes inside an existing SVG. Returns (svg, count).""" + if not violators: + return svg_text, 0 + overlay_parts: list[str] = [] + for v in violators: + if v["kind"] == "rect": + x = v["x"] + y = v["y"] + w = v["w"] + h = v["h"] + overlay_parts.append( + f'<rect x="{x:.1f}" y="{y:.1f}" width="{w:.1f}" ' + f'height="{h:.1f}" fill="none" stroke="#ff3344" ' + f'stroke-width="3" stroke-dasharray="6,3" ' + f'pointer-events="none"/>' + ) + elif v["kind"] == "marker": + cx = v["x"] + cy = v["y"] + r = max(v.get("w", 24) / 2, 12) + overlay_parts.append( + f'<rect x="{cx - r:.1f}" y="{cy - r:.1f}" width="{2 * r:.1f}" ' + f'height="{2 * r:.1f}" fill="none" stroke="#ff3344" ' + f'stroke-width="3" stroke-dasharray="6,3" ' + f'pointer-events="none"/>' + ) + elif v["kind"] == "label": + box = _rendered_label_box(svg_text, v["station_id"]) + if box is None: + continue + lx, ly, lw, lh = box + pad = 4.0 + overlay_parts.append( + f'<rect x="{lx - pad:.1f}" y="{ly - pad:.1f}" ' + f'width="{lw + 2 * pad:.1f}" height="{lh + 2 * pad:.1f}" ' + f'fill="none" stroke="#ff3344" stroke-width="3" ' + f'stroke-dasharray="6,3" pointer-events="none"/>' + ) + overlay_parts.append( + f'<line x1="{v["expected_x"]:.1f}" y1="{ly - pad:.1f}" ' + f'x2="{v["expected_x"]:.1f}" y2="{ly + lh + pad:.1f}" ' + f'stroke="#22aaff" stroke-width="2" pointer-events="none"/>' + ) + overlay = ( + '<g class="xfail-overlay" style="opacity:0.95">' + + "".join(overlay_parts) + + "</g>" + ) + if "</svg>" not in svg_text: + return svg_text + overlay, len(violators) + return svg_text.replace("</svg>", overlay + "</svg>"), len(violators) + + +# --------------------------------------------------------------------------- +# Fail-list ingestion +# --------------------------------------------------------------------------- + + +_FAIL_RE = re.compile( + r"^(?:FAILED|XFAIL)\s+tests/test_layout_invariants\.py::([A-Za-z_0-9]+)\[(.+?)\](?:\s+-\s+(.*))?$" +) + + +def parse_fail_list(text: str) -> list[dict]: + """Parse pytest output (FAILED + XFAIL lines) into entries.""" + entries: list[dict] = [] + seen = set() + for line in text.splitlines(): + line = line.strip() + m = _FAIL_RE.match(line) + if not m: + continue + inv, fixture, reason = m.group(1), m.group(2), m.group(3) or "" + key = (inv, fixture) + if key in seen: + continue + seen.add(key) + entries.append({"invariant": inv, "fixture": fixture, "reason": reason}) + return entries + + +def collect_failures_via_pytest(worktree: Path, target: str) -> str: + """Run pytest -rfX --tb=no -q against ``target`` inside ``worktree`` + and return its stdout. Failures don't abort us - the report is the goal.""" + env = os.environ.copy() + env["PYTHONPATH"] = f"{worktree / 'src'}{os.pathsep}{env.get('PYTHONPATH', '')}" + cmd = ["pytest", target, "-rfX", "--tb=no", "-q", "--no-header"] + proc = subprocess.run( + cmd, + cwd=str(worktree), + env=env, + capture_output=True, + text=True, + timeout=600, + ) + return (proc.stdout or "") + "\n" + (proc.stderr or "") + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + + +def build_rows_from_violations( + violations: list[dict], render_svg, annotated_dir: Path +) -> list[dict]: + """Build triage rows directly from a list of pre-computed violation + entries of shape ``{fixture, invariant, rects, issue, check}``, bypassing + pytest discovery and the finder registry. Each ``rect`` becomes a + red-bbox overlay; ``issue`` / ``check`` (if present) become the + explanation block.""" + render_cache: dict[str, tuple[str | None, str | None]] = {} + rows: list[dict] = [] + for i, entry in enumerate(violations): + fixture = entry["fixture"] + inv = entry.get("invariant", "ad-hoc-check") + key = f"{fixture.replace('/', '__')}__{inv}__{i}" + + if fixture not in render_cache: + svg_path, err = render_svg(fixture) + render_cache[fixture] = ( + (svg_path.read_text(), None) if svg_path is not None else (None, err) + ) + base_svg, render_err = render_cache[fixture] + + violators = [ + { + "kind": "rect", + "x": float(rect["x"]), + "y": float(rect["y"]), + "w": float(rect["w"]), + "h": float(rect["h"]), + "note": rect.get("note", ""), + } + for rect in entry.get("rects", []) + ] + + if base_svg is None: + annotated_svg = None + else: + annotated_svg, _ = annotate_svg(base_svg, violators) + (annotated_dir / f"{key}.svg").write_text(annotated_svg) + + rows.append( + { + "key": key, + "fixture": fixture, + "invariant": inv, + "reason": entry.get("reason", ""), + "render_error": render_err, + "violators": violators, + "violator_error": None + if violators + else "no rects supplied; full fixture shown", + "svg": annotated_svg, + "issue": entry.get("issue"), + "check": entry.get("check"), + } + ) + return rows + + +def main() -> int: + args = parse_args() + worktree = args.worktree.resolve() + output_dir = args.output_dir.resolve() + output_dir.mkdir(parents=True, exist_ok=True) + renders_dir = output_dir / "renders" + annotated_dir = renders_dir / "annotated" + renders_dir.mkdir(parents=True, exist_ok=True) + annotated_dir.mkdir(parents=True, exist_ok=True) + + engine = _setup_imports(worktree) + resolve_fixture, fixtures_dir = make_resolve_fixture(worktree) + load_layout = make_load_layout(engine, resolve_fixture, fixtures_dir) + render_svg = make_render_svg(resolve_fixture, renders_dir) + + finders = dict(INVARIANT_FINDERS) + extra_explanations: dict = {} + if args.finder_module is not None: + module = load_finder_module(args.finder_module) + merge_finder_module(module, finders, extra_explanations) + print( + f"Loaded finder module {args.finder_module}: " + f"{len(finders) - len(INVARIANT_FINDERS)} extra finder(s), " + f"{len(extra_explanations)} extra explanation(s)", + file=sys.stderr, + ) + + # Ad-hoc path: render cards straight from a violations JSON, skipping + # pytest discovery and the finder registry entirely. + if args.violations is not None: + violations = json.loads(args.violations.read_text()) + print( + f"Loaded {len(violations)} violation entr(ies) from {args.violations}", + file=sys.stderr, + ) + rows = build_rows_from_violations(violations, render_svg, annotated_dir) + html = build_html(rows, generic_explanations=extra_explanations) + out = output_dir / "index.html" + out.write_text(html) + print(f"Wrote {out} ({out.stat().st_size:,} bytes)", file=sys.stderr) + return 0 + + if args.fail_list is not None: + fail_text = args.fail_list.read_text() + print(f"Reading fail list from {args.fail_list}", file=sys.stderr) + else: + print( + f"Running pytest {args.pytest_target} in {worktree} to collect " + "FAILED/XFAIL entries...", + file=sys.stderr, + ) + fail_text = collect_failures_via_pytest(worktree, args.pytest_target) + # Persist so future runs can be re-driven without re-running pytest. + (output_dir / "fail-list.txt").write_text(fail_text) + + entries = parse_fail_list(fail_text) + print(f"Loaded {len(entries)} fail/xfail entries", file=sys.stderr) + + render_cache: dict[str, tuple[str | None, str | None]] = {} + layout_cache: dict[str, tuple[object | None, str | None]] = {} + + bbox_attempted = 0 + bbox_succeeded = 0 + bbox_fallback = 0 + render_attempted = 0 + render_succeeded = 0 + render_failed = 0 + + rows = [] + for entry in entries: + fixture = entry["fixture"] + inv = entry["invariant"] + key = f"{fixture.replace('/', '__')}__{inv}" + + if fixture not in render_cache: + render_attempted += 1 + svg_path, err = render_svg(fixture) + if svg_path is None: + render_failed += 1 + render_cache[fixture] = (None, err) + else: + render_succeeded += 1 + render_cache[fixture] = (svg_path.read_text(), None) + base_svg, render_err = render_cache[fixture] + + if fixture not in layout_cache: + try: + layout_cache[fixture] = (load_layout(fixture), None) + except Exception as e: # noqa: BLE001 + layout_cache[fixture] = ( + None, + f"{type(e).__name__}: {e}\n{traceback.format_exc(limit=2)}", + ) + graph, layout_err = layout_cache[fixture] + + bbox_attempted += 1 + violators: list[dict] = [] + violator_err: str | None = None + finder = finders.get(inv) + if finder is None: + bbox_fallback += 1 + violator_err = f"no violator extractor implemented for {inv}" + elif graph is None: + bbox_fallback += 1 + violator_err = f"layout failed: {layout_err}" + else: + try: + violators = finder(graph, engine) + if violators: + bbox_succeeded += 1 + else: + bbox_fallback += 1 + violator_err = ( + "extractor ran but found no offending element " + "(invariant may xfail under different params than the " + "viewer pipeline; full fixture shown)" + ) + except Exception as e: # noqa: BLE001 + bbox_fallback += 1 + violator_err = f"violator extraction error: {type(e).__name__}: {e}" + + if base_svg is None: + annotated_svg = None + else: + annotated_svg, _ = annotate_svg(base_svg, violators) + (annotated_dir / f"{key}.svg").write_text(annotated_svg) + + rows.append( + { + "key": key, + "fixture": fixture, + "invariant": inv, + "reason": entry["reason"], + "render_error": render_err, + "violators": violators, + "violator_error": violator_err, + "svg": annotated_svg, + } + ) + + print( + f"Renders: attempted={render_attempted} ok={render_succeeded} " + f"failed={render_failed}", + file=sys.stderr, + ) + print( + f"Bbox: attempted={bbox_attempted} ok={bbox_succeeded} " + f"fallback={bbox_fallback}", + file=sys.stderr, + ) + + html = build_html(rows, generic_explanations=extra_explanations) + out = output_dir / "index.html" + out.write_text(html) + print(f"Wrote {out} ({out.stat().st_size:,} bytes)", file=sys.stderr) + + if render_failed: + print(f"CAVEAT: {render_failed} fixture(s) failed to render", file=sys.stderr) + return 0 + + +# --------------------------------------------------------------------------- +# HTML rendering +# --------------------------------------------------------------------------- + + +# Generic (issue, check) explanation pairs keyed by invariant. Finder-module +# EXPLANATIONS dicts use the same shape and are merged over this at runtime. +_GENERIC_EXPLANATIONS = { + "test_row_trunk_marker_cy_consistent": ( + "Sections placed side-by-side in the same grid row are " + "supposed to share a single trunk Y, so the horizontal rail " + "through the row reads as one straight line. The invariant " + "reports a drift in this fixture.", + "Scan the horizontal trunk across each row. If you can see a " + "vertical step inside any section that should run straight, " + "it's a bug. If sections are intentionally on different rows, " + "the row-grouping heuristic may be wrong and this is " + "<strong>not</strong> a bug.", + ), + "test_no_kink_at_section_boundary": ( + "An exit port of one section is at a different Y than the " + "entry port of the adjacent section, so the line between " + "them has a vertical step.", + "Look along section boundaries for a visible jog where a " + "horizontal continuation should be straight. If adjacent " + "sections are intentionally on different rows, the kink may " + "be intended.", + ), + "test_symfan_pairs_share_y": ( + "A pair of branches feeding from a common point in this " + "fixture is supposed to mirror around the trunk Y but does " + "not.", + "Look for fan-outs with two branches that obviously don't " + "sit symmetrically across the trunk. If one branch is " + "intentionally weighted, flag as Ambiguous.", + ), + "test_lines_dont_cross_non_consumer_markers": ( + "A routed line passes through a station marker it shouldn't " + "touch (the station is neither producer nor consumer of " + "that line).", + "Find any line that visibly crosses through a station " + "circle that isn't its endpoint. If the line only grazes a " + "corner or the bbox is overly generous, flag as Ambiguous.", + ), + "test_section_bbox_has_bottom_padding": ( + "A section's bottom edge sits too close to its lowest " + "internal station (less than the required padding).", + "Look at section borders. If a station marker or label " + "touches the border, it's a bug. If there's visible " + "whitespace, flag as Ambiguous.", + ), + "test_topological_siblings_share_y_or_symmetric": ( + "Stations sharing the same predecessors, successors and " + "line set are supposed to align in Y (or fan symmetrically) " + "but don't in this fixture.", + "Look for siblings of a common parent that visibly fail to " + "align or mirror. If the diagram intentionally cascades " + "them, the invariant is mis-identifying siblings - flag " + "<strong>not</strong> a bug.", + ), + "test_label_x_anchored_to_station_marker_on_horizontal_runs": ( + "A station label has drifted off its own marker on a " + "horizontal run in this fixture.", + "Find labels that visibly sit left or right of the station " + "circle they belong to. If the run isn't really horizontal, " + "flag Ambiguous.", + ), + "test_visual_stack_station_xs_share_column": ( + "Stations that should stack in a single column drift " + "apart on the X axis in this fixture.", + "Look for clusters that visibly fan out where they should " + "be a vertical stack. If a grid override is intentional, " + "flag Ambiguous.", + ), + "test_off_track_inputs_above_consumer": ( + "An off-track input station does not sit above the station it feeds.", + "Find off-track inputs whose feed arrow points up instead " + "of down. If the layout intentionally puts the input " + "below, flag Ambiguous.", + ), +} + + +def _explanation_html(issue_sentences: list[str], check_sentences: list[str]) -> str: + if not issue_sentences: + return "" + issue_html = " ".join(issue_sentences) + check_html = " ".join(check_sentences) + return ( + '<div class="block-issue"><strong>Supposed issue:</strong> ' + + issue_html + + "</div>" + + '<div class="block-check"><strong>What to check:</strong> ' + + check_html + + "</div>" + ) + + +def _build_explanation_blocks( + invariant: str, + violators: list[dict], + generic_explanations: dict | None = None, + explicit_issue: str | None = None, + explicit_check: str | None = None, +) -> str: + # Ad-hoc / violation-JSON entries can supply their own prose directly. + if explicit_issue or explicit_check: + return _explanation_html( + [explicit_issue] if explicit_issue else [], + [explicit_check] if explicit_check else [], + ) + + generic = dict(_GENERIC_EXPLANATIONS) + if generic_explanations: + generic.update(generic_explanations) + + def esc(s) -> str: + s = str(s) + return ( + s.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace('"', """) + ) + + issue_sentences: list[str] = [] + check_sentences: list[str] = [] + + for v in violators: + if invariant == "test_row_trunk_marker_cy_consistent": + info = v.get("row_trunk_info") + if info: + issue_sentences.append( + f"Section <code>{esc(info['section_id'])}</code> in row " + f"<code>{esc(info['row'])}</code> has its trunk at " + f"cy=<code>{info['section_cy']:.1f}</code>, but the row's " + f"anchor section <code>{esc(info['anchor_section_id'])}</code> " + f"sits at cy=<code>{info['anchor_cy']:.1f}</code> " + f"(delta <code>{info['delta']:+.1f}</code>px). The invariant " + f"says all sections placed side-by-side in a row should " + f"share the same trunk height so the horizontal line " + f"through them looks like one straight rail." + ) + check_sentences.append( + f"Look at the horizontal trunk through row " + f"<code>{esc(info['row'])}</code> (red bbox at trunk " + f"station <code>{esc(info['trunk_station'])}</code>). If " + f"the trunk visibly steps up or down inside section " + f"<code>{esc(info['section_id'])}</code>, that's the kink " + f"and it's a bug. If section " + f"<code>{esc(info['section_id'])}</code> is visually on a " + f"different row, or is the only section in its row in " + f"this fixture's layout, the row-grouping heuristic is " + f"wrong and this is <strong>not</strong> a bug." + ) + elif invariant == "test_no_kink_at_section_boundary": + info = v.get("kink_info") + if info: + issue_sentences.append( + f"The exit port <code>{esc(info['exit_port'])}</code> of " + f"section <code>{esc(info['sec_a_id'])}</code> is at " + f"cy=<code>{info['exit_cy']:.1f}</code>, but the entry " + f"port <code>{esc(info['entry_port'])}</code> of the " + f"adjacent section <code>{esc(info['sec_b_id'])}</code> " + f"is at cy=<code>{info['entry_cy']:.1f}</code> " + f"(delta <code>{info['delta']:+.1f}</code>px). The line " + f"between them therefore has a vertical step instead of " + f"running straight." + ) + check_sentences.append( + f"Look at the line crossing the boundary between sections " + f"<code>{esc(info['sec_a_id'])}</code> and " + f"<code>{esc(info['sec_b_id'])}</code> (red bbox). If you " + f"see a visible vertical step / jog in what should be a " + f"horizontal continuation, it's a bug. If the two " + f"sections are intentionally on different rows (e.g. one " + f"feeds a station below the other), the kink is intended " + f"layout, not a defect." + ) + elif invariant == "test_symfan_pairs_share_y": + info = v.get("symfan_info") + if info: + issue_sentences.append( + f"Stations <code>{esc(info['top_sid'])}</code> and " + f"<code>{esc(info['bot_sid'])}</code> are a paired branch " + f"of a symmetric fan inside section " + f"<code>{esc(info['section_id'])}</code> (fed via " + f"<code>{esc(info['source'])}</code>), expected to sit at " + f"mirrored Y around the trunk " + f"cy=<code>{info['trunk_cy']:.1f}</code>. Their Y values " + f"are <code>{info['top_cy']:.1f}</code> vs " + f"<code>{info['bot_cy']:.1f}</code>, so the fan isn't " + f"symmetric (asymmetry delta " + f"<code>{info['delta']:+.1f}</code>px)." + ) + check_sentences.append( + f"Look at the fan inside section " + f"<code>{esc(info['section_id'])}</code> (red bbox around " + f"the two stations). If the upper and lower branches " + f"obviously don't mirror each other across the trunk, " + f"it's a bug. If one branch is intentionally weighted by " + f"station count, or the pair is actually two unrelated " + f"stations that happen to share a column, asymmetry may " + f"be expected - flag those as Ambiguous." + ) + elif invariant == "test_lines_dont_cross_non_consumer_markers": + info = v.get("breeze_info") + if info: + issue_sentences.append( + f"The line <code>{esc(info['line_id'])}</code> (on edge " + f"<code>{esc(info['edge_source'])}</code> → " + f"<code>{esc(info['edge_target'])}</code>) passes through " + f"the marker bbox of station " + f"<code>{esc(info['station'])}</code>, but " + f"<code>{esc(info['station'])}</code> is not a consumer " + f"or producer of <code>{esc(info['line_id'])}</code>. " + f"The route should detour around it (via a bypass V or " + f"virtual station)." + ) + check_sentences.append( + f"Look at station <code>{esc(info['station'])}</code> " + f"(red bbox). If a line you can see clearly enters the " + f"station's marker and exits the other side without the " + f"station being one of the line's endpoints, it's a bug. " + f"If the line only grazes the bbox corner, or the bbox " + f"includes generous engine padding that overstates the " + f"marker's visual footprint, flag as Ambiguous." + ) + elif invariant == "test_section_bbox_has_bottom_padding": + info = v.get("bbox_pad_info") + if info: + issue_sentences.append( + f"Section <code>{esc(info['section_id'])}</code>'s " + f"bottom edge is at y=<code>{info['bbox_bot']:.1f}</code>, " + f"and its bottom-most station " + f"<code>{esc(info['lowest_sid'])}</code> sits at " + f"y=<code>{info['lowest_cy']:.1f}</code>. The invariant " + f"requires <code>{info['required']:.0f}</code>px of " + f"clearance from the lowest station centre to the bbox " + f"bottom; current clearance is " + f"<code>{info['gap']:.1f}</code>px." + ) + check_sentences.append( + f"Look at the bottom of section " + f"<code>{esc(info['section_id'])}</code> (red bbox covers " + f"the area between station " + f"<code>{esc(info['lowest_sid'])}</code> and the bbox " + f"bottom). If the station's marker (or its label) " + f"clearly touches or pokes into the section border, it's " + f"a bug. If there's visible whitespace and the invariant " + f"just requires unusually generous padding from the " + f"station centre, flag Ambiguous." + ) + elif invariant == "test_topological_siblings_share_y_or_symmetric": + info = v.get("siblings_info") + if info: + members_part = ", ".join( + f"<code>{esc(m)}</code> y=<code>{y:.1f}</code>" + for m, y in info["members"] + ) + if info["parents"]: + if len(info["parents"]) == 1: + p, py = info["parents"][0] + parent_part = ( + f"parent <code>{esc(p)}</code> (y=<code>{py:.1f}</code>)" + ) + else: + parent_part = ( + "parents {" + + ", ".join( + f"<code>{esc(p)}</code> y=<code>{py:.1f}</code>" + for p, py in info["parents"] + ) + + "}" + ) + else: + parent_part = "their shared predecessor(s)" + issue_sentences.append( + f"Stations {members_part} are topological siblings (they " + f"share predecessors, successors and line set, fed from " + f"{parent_part}), but their Y values aren't equal and " + f"aren't mirrored. The invariant says siblings should " + f"line up or fan symmetrically (Y span " + f"<code>{info['span']:.1f}</code>px)." + ) + check_sentences.append( + "Look at the branch-out around the parent stations " + "(red bbox). If the siblings visually look misaligned - " + "neither side-by-side nor symmetric around a centre " + "line - it's a bug. If the diagram intentionally " + "cascades these siblings (e.g. one feeds another " + "downstream, breaking the 'true sibling' assumption), " + "the invariant is mis-identifying them as siblings and " + "this is <strong>not</strong> a bug." + ) + elif invariant == "test_label_x_anchored_to_station_marker_on_horizontal_runs": + info = v.get("label_info") + if info: + issue_sentences.append( + f"Station <code>{esc(info['station_id'])}</code>'s label " + f"sits at x=<code>{info['label_x']:.1f}</code>, but its " + f"marker is at x=<code>{info['station_x']:.1f}</code> " + f"(drift <code>{info['delta']:+.1f}</code>px). The " + f"invariant says a middle-anchored label on a horizontal " + f"run should sit over its own station marker." + ) + check_sentences.append( + f"Look at the label for station " + f"<code>{esc(info['station_id'])}</code> (red bbox is the " + f"rendered label; the blue tick marks where its marker is). " + f"If the label visibly sits left or right of the station " + f"circle, it's a bug. If the station has non-horizontal " + f"incoming or outgoing edges hidden by this fixture's " + f"geometry, flag Ambiguous." + ) + elif invariant == "test_visual_stack_station_xs_share_column": + info = v.get("stack_info") + if info: + members_part = ", ".join( + f"<code>{esc(m)}</code>@x=<code>{x:.1f}</code>" + for m, x, _y in info["members"] + ) + issue_sentences.append( + f"Stations {members_part} in section " + f"<code>{esc(info['section_id'])}</code> share the same " + f"predecessors, successors and layer, so they should " + f"stack in a single column. Their Xs drift by " + f"<code>{info['drift']:.1f}</code>px, breaking the " + f"column alignment." + ) + check_sentences.append( + f"Look at the cluster of stations inside section " + f"<code>{esc(info['section_id'])}</code> (red bbox). If " + f"the stack visibly fans out into separate columns when " + f"it should be a vertical line of stations, it's a bug. " + f"If one of the stations is intentionally pushed out " + f"horizontally (e.g. by a manual grid override), flag " + f"Ambiguous." + ) + elif invariant == "test_off_track_inputs_above_consumer": + info = v.get("off_track_info") + if info: + issue_sentences.append( + f"Off-track input <code>{esc(info['off_track_id'])}</code> " + f"at y=<code>{info['off_track_y']:.1f}</code> is not above " + f"its consumer <code>{esc(info['consumer_id'])}</code> at " + f"y=<code>{info['consumer_y']:.1f}</code>. The invariant " + f"says off-track inputs should sit above the station they " + f"feed so the drop-in arrow reads as a downward feed." + ) + check_sentences.append( + f"Look at the off-track input " + f"<code>{esc(info['off_track_id'])}</code> relative to " + f"<code>{esc(info['consumer_id'])}</code> (red bbox). If " + f"the off-track station sits at or below its consumer, " + f"giving an upward-pointing feed arrow, it's a bug. If " + f"this is an intentional below-the-track input (rare), " + f"flag Ambiguous." + ) + + if not issue_sentences: + gen = generic.get(invariant) + if gen: + issue_sentences.append(gen[0]) + check_sentences.append(gen[1]) + + return _explanation_html(issue_sentences, check_sentences) + + +def build_html(rows: list[dict], generic_explanations: dict | None = None) -> str: + fixtures = sorted({r["fixture"] for r in rows}) + invariants = sorted({r["invariant"] for r in rows}) + + row_meta = [ + {"key": r["key"], "fixture": r["fixture"], "invariant": r["invariant"]} + for r in rows + ] + rows_json = json.dumps(row_meta) + + def esc(s: str) -> str: + return ( + s.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace('"', """) + ) + + row_html_parts = [] + for r in rows: + key = r["key"] + fixture = r["fixture"] + inv = r["invariant"] + reason = r["reason"] + svg = r["svg"] + v_err = r["violator_error"] + rdr_err = r["render_error"] + + violator_summary = "" + if r["violators"]: + violator_summary = ( + f'<div class="violator-list"><strong>{len(r["violators"])} ' + f"violator(s) highlighted:</strong><ul>" + + "".join(f"<li>{esc(v.get('note', ''))}</li>" for v in r["violators"]) + + "</ul></div>" + ) + elif v_err: + violator_summary = f'<div class="violator-note"><em>{esc(v_err)}</em></div>' + + if svg is None: + img_block = ( + f'<div class="render-fail">render failed: ' + f"{esc(rdr_err or 'unknown')}</div>" + ) + else: + b64 = base64.b64encode(svg.encode("utf-8")).decode("ascii") + img_block = ( + f'<img loading="lazy" ' + f'src="data:image/svg+xml;base64,{b64}" ' + f'alt="{esc(fixture)} {esc(inv)}"/>' + ) + + explanation_blocks = _build_explanation_blocks( + inv, + r["violators"], + generic_explanations=generic_explanations, + explicit_issue=r.get("issue"), + explicit_check=r.get("check"), + ) + + row_html_parts.append( + f""" +<article class="row untagged" data-key="{esc(key)}" + data-fixture="{esc(fixture)}" data-invariant="{esc(inv)}"> + <header class="row-head"> + <h3><span class="fixture">{esc(fixture)}</span> + <span class="sep">/</span> + <span class="invariant">{esc(inv)}</span></h3> + <pre class="xfail-reason">{esc(reason)}</pre> + </header> + <div class="row-body"> + <div class="render-pane">{img_block}</div> + <div class="controls-pane"> + {violator_summary} + {explanation_blocks} + <fieldset class="tag-fieldset"> + <legend>Classification</legend> + <label><input type="radio" name="tag-{esc(key)}" value="bug"> Bug</label> + <label><input type="radio" name="tag-{esc(key)}" value="not-a-bug"> Not a bug</label> + <label><input type="radio" name="tag-{esc(key)}" value="ambiguous"> Ambiguous</label> + </fieldset> + <textarea class="notes" data-key="{esc(key)}" + placeholder="Notes (optional)"></textarea> + </div> + </div> +</article> +""".strip() + ) + + rows_html = "\n".join(row_html_parts) + + fixture_options = "\n".join( + f'<option value="{esc(f)}">{esc(f)}</option>' for f in fixtures + ) + invariant_options = "\n".join( + f'<option value="{esc(i)}">{esc(i)}</option>' for i in invariants + ) + + return f"""<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<title>nf-metro layout-invariant triage + + + +
+

nf-metro layout-invariant triage

+
{len(rows)} fail/xfail entries across {len(fixtures)} fixtures × + {len(invariants)} invariants. + Red dashed boxes mark the violating element(s) computed from the layout.
+
+ 0 / {len(rows)} tagged + + + + untagged + bug + not a bug + ambiguous + +
+
+
+ + + +
+
+{rows_html} +
+ + + +""" + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.claude/skills/nf-metro-stress-render/SKILL.md b/.claude/skills/nf-metro-stress-render/SKILL.md new file mode 100644 index 000000000..46356068c --- /dev/null +++ b/.claude/skills/nf-metro-stress-render/SKILL.md @@ -0,0 +1,240 @@ +--- +name: nf-metro-stress-render +description: Stress-test the nf-metro layout engine by composing a brand-new, deliberately complex pipeline metro map, rendering it, and hunting for layout bugs the way a real never-seen-before pipeline would surface them. Use this whenever the user wants to fuzz / stress / probe the layout engine, find new layout bugs, check robustness against novelty, "throw a weird pipeline at it", generate a novel test render, or run an ad-hoc bug-hunting pass. Each run invents ONE novel topology (braiding structural axes that have not been combined before), renders it, runs the programmatic layout validator, and PRESENTS the render for you to eyeball the aesthetic bugs a validator can't see. Every candidate defect - whether the validator flagged it or you reported it by eye - is CONFIRMED against the laid-out geometry (exact coordinates, off-trunk drags, off-track gaps, inter-row gaps) and understood at the mechanism level before anything is filed; reports are never filed on eyeball alone. Confirmed bugs are FILED as GitHub issues (after dedup + your confirmation) AND wired with regression infra - a fixture in examples/topologies/, a gallery render so CI's render-diff tracks it, and a strict-xfail test that reds CI when the bug is fixed - so the defect can't silently return. Trigger on "stress test the layout", "fuzz nf-metro", "find layout bugs", "try a novel/complex render", "probe the engine for robustness", "what breaks if we render something new", "confirm and file these layout bugs". This is the operational answer to issues #364 (mutation/fuzz testing) and #323 (fragility on new pipelines). +--- + +# nf-metro stress render + +Every genuinely new pipeline we render tends to surface a layout bug, because +the engine is robust on shapes it has seen and brittle on novel combinations. +This skill simulates "a new pipeline arrives" on demand: it **composes one +novel, sufficiently-complex metro map**, renders it, catches the obvious +structural defects programmatically, and puts the render in front of you for the +aesthetic defects only a human eye catches. Every candidate - flagged or +eyeballed - is then confirmed against the laid-out geometry and understood at +the mechanism level before it's filed, and each confirmed bug ships with a +regression fixture + gallery render + guard test so it can't silently return. +Run it ad-hoc; over time, as confirmed finds become permanent guarded fixtures, +novelty stops being a risk. + +The unit of work is **one rich render per run**, reviewed deeply - not a batch. + +## Prerequisites + +- Work from the nf-metro checkout (default `~/projects/nf-metro`). This is a + read-mostly probing task; no worktree needed unless you end up promoting a + fixture or the user asks you to also fix the bug. +- Activate the env in the same command chain: `source ~/.local/bin/mm-activate nf-metro && ...` + (the env has nf-metro editable-installed plus cairosvg for PNG). +- `gh` for issue dedup + filing. + +## The loop + +### 1. Choose a novel combination + +Read `references/failure_modes.md` (the axis menu + known-fragile list) and +`coverage_log.md` (at the skill root, next to this SKILL.md - what past runs +already drew). Pick **2-4 structural axes +that have not been braided together before**. The goal is a combination that is +new to both the `examples/topologies/` corpus and the coverage log - the seams +next to known cracks are where the next crack hides. + +Do not reproduce an existing fixture. Coverage of an axis *alone* is not +novelty; novelty is a never-drawn *triple* (e.g. "off-track output feeding a +station inside a folded return row that also carries a bypass"). Decide the +combination explicitly and say it out loud to the user before authoring, so the +intent is on record. + +To keep runs genuinely varied rather than gravitating to the same favourites, +let the choice be arbitrary: glance at the least-recently-exercised axes in the +log and force yourself toward those. + +### 2. Author a correct-by-construction `.mmd` + +Compose a single connected pipeline that braids the chosen axes. Give it a +believable bioinformatics surface (real-ish tool names, line names like +`dna`/`rna`/`qc`) so it reads like a pipeline, not a graph-theory toy - realism +is what makes the render's aesthetic problems legible. + +**Correctness is non-negotiable** (see the authoring rules in +`references/failure_modes.md`): lines only stop at stations they consume, every +line id is declared, off-track nodes carry their directive, ports match the +crossing edges. **Prefer auto-layout** - omit `grid:`/`direction:` unless the +axis under test *is* manual placement. A bug found on inferred layout is worth +ten found on a hand-pinned one. + +Aim for "sufficiently complex": roughly 4-7 sections, 3-5 lines, 20-40 +stations, with at least one fan, one convergence, and one of the trickier axes +(fold / mixed ports / off-track / bypass). Enough moving parts that an +interaction can go wrong, not so many that you can't reason about the result. +Gauge complexity by the probe's **station** count, not its edge count - a +comma-separated line list explodes into one edge per line, so `edges` runs +several times higher than the authored arrow count and overstates size. + +Save it to a fresh workspace so the `.mmd` *is* the reproducer: + +```bash +WS="/tmp/nf_metro_stress/$(date +%Y%m%d-%H%M%S)-" +mkdir -p "$WS" +# write the composed mmd to "$WS/layout.mmd" +``` + +### 3. Probe + +```bash +source ~/.local/bin/mm-activate nf-metro && \ +python .claude/skills/nf-metro-stress-render/scripts/probe_layout.py \ + "$WS/layout.mmd" --png "$WS/layout.png" --json | tee "$WS/verdict.json" +``` + +`probe_layout.py` runs the same stages a real render does and sorts findings +into four buckets, weakest-to-strongest engine-bug signal: `parse_issues` +(authoring), `validator` warnings/errors, `layout_crash`, `guard_failure`. It +exits non-zero only on an engine-level ERROR. Read `scripts/probe_layout.py`'s +header for the full contract. + +### 4. Triage the verdict + +- **`parse_issues` (error) present** -> the `.mmd` is malformed (a rule-1..4 + violation). This is *your* mistake, not an engine bug. Fix the `.mmd` and + re-probe. Do not file. +- **`layout_crash` or `guard_failure`** -> hard engine failure / invariant + violation on well-formed input. Strongest obvious-bug signal. +- **`validator` ERROR** -> structural defect (overlap, station-as-elbow, kink, + containment...). Obvious bug. +- **clean** (`engine_error=false`, maybe warnings) -> no obvious structural + bug; go to the visual review in step 5. Warnings are eyeball-worthy but not + auto-file material on their own. + +Validator findings are *candidates*, not yet filed bugs - they go through the +confirm-and-understand pass in step 6 alongside whatever the user's eye catches. + +### 5. Present the render for the user's eye + +The validator is blind to the defects that matter most visually (ugly detours, +asymmetric fans, near-miss label grazes, scrambled bundle identity, +reading-direction confusion). See the "only your eye catches" list in +`references/failure_modes.md`. Do this every run, even when nothing structural +fired. + +1. **Look at it yourself first.** Read the PNG (`$WS/layout.png`) into context + and do a genuine visual pass - call out anything that looks off, with + region/coordinates. Catching a candidate before the user is part of the value. +2. **Open it for the user**: `open "$WS/layout.png"`. +3. Tell them what you composed (the axis combination), what the probe found, and + what *you* noticed by eye, then ask them to report any other visual bugs. + +The user's reported bugs and your own + the validator's candidates all feed the +next step. They are reports, not yet confirmed findings. + +### 6. Confirm and understand every candidate before filing + +This is the heart of credible bug-filing, and it applies equally to a validator +warning, something you spotted, and a defect the **user reported by eye**. A +report like "section 2 content is pulled too low" or "that input floats too +high" is a *hypothesis*; never file it on the strength of the eyeball alone. +Turn each one into a quantified, mechanism-level finding first. A filed issue +that names exact coordinates and a likely cause is actionable; one that says +"looks wrong" wastes the maintainer's time and erodes trust in the skill. + +For each candidate: + +1. **Quantify it.** Run the bundled inspector to get the real geometry: + + ```bash + source ~/.local/bin/mm-activate nf-metro && \ + python .claude/skills/nf-metro-stress-render/scripts/inspect_layout.py "$WS/layout.mmd" + ``` + + It prints every station's `(x, y)` per section, flags stations sitting **off + their section trunk**, off-track inputs/outputs **far from their consumer**, + and **oversized inter-row gaps** - which directly confirm reports like + "pulled too low" (off-trunk by +Npx), "floats too high" (gap to consumer), + or "section too far down" (inter-row gap vs siblings). Cross-reference the + probe's `validator` warnings (e.g. `route_segment_crossing`, + `almost_horizontal_edge`) for the routing-level reports. +2. **Zoom in.** Crop the affected region from the PNG (PIL/`cairosvg`; remember + the PNG is `scale=2` vs the SVG/inspector coordinates) and read it, so the + numbers and the picture agree. +3. **Understand the mechanism.** State *why* it happens in engine terms (which + phase / which placement rule), not just *that* it looks wrong. The engine can + explain itself: `nf-metro explain "$WS/layout.mmd"` reports the rule that + fired for each inferred decision (section direction, port sides, fold/row + layout) and each synthetic element (fan-out junctions, bypass-V stations) - + use it to name the cause behind a confirmed symptom, and `nf-metro info` + (`--json`) for the structural WHAT. Where it's cheap, **try to reduce** to a + minimal `.mmd` that still trips it (re-probe to confirm). If a plausible + minimal repro does **not** reproduce, that negative result is itself signal - + it tells the maintainer the trigger is a combination, so record it. +4. If confirmation fails - the geometry is actually fine, or it's an authoring + artefact - **say so and drop it.** A candidate that dissolves under + inspection is the triage working, not a miss. + +### 7. File each confirmed bug AND wire its regression infra + +A bug that's filed but not guarded will silently come back. Every confirmed +finding gets **both** an issue and the test/gallery wiring that catches a +regression - this is the core of how "novelty presents less of a risk over +time" (and it directly advances #364). Treat the regression infra as part of +filing, not an optional follow-up. + +This step edits the repo, so work in a **worktree** per the repo conventions +(`../nf-metro-stress-`), and batch all of a run's findings into one PR. + +1. **Dedup**: `gh issue list --state open --search ""`, scan + titles/labels (`bug`, `layout`, `routing`, `parser`), and check the + known-fragile list in `references/failure_modes.md`. If it already exists, + add a comment with your confirmed repro + coordinates instead of duplicating. +2. **Draft + confirm + file** the issue. Include: plain-English symptom; the + quantified evidence from step 6 (a small coordinate table reads well); the + probe verdict line if any; the structural class (braided axes); and the + correct-by-construction repro `.mmd` in a `
` block so it's + self-contained. Show the draft to the user and get a yes before + `gh issue create`. Suggest `bug` + the subsystem label. +3. **Add the regression fixture.** Drop the (reduced if possible) repro into + `examples/topologies/.mmd` and add a row to that dir's + `README.md` structural-class table, citing the issue number. Fixtures there + are auto-collected by `tests/test_topology_validation.py` + (`TOPOLOGY_FILES = sorted(TOPOLOGIES_DIR.glob("*.mmd"))`) into the validator + and several always-on parametrized checks. +4. **Add the render to the gallery** so CI's render-diff tracks it: append a + `(stem, source_dir, description)` tuple to `GALLERY_ENTRIES` in + `scripts/build_gallery.py`. The render then shows up on every PR preview, so + any future change to this layout is visible. +5. **Lock the defect with a test** so a fix is noticed and a regression reds CI. + Follow the repo's existing patterns (read `tests/test_topology_validation.py`): + - If the defect is **validator-detectable**, add a targeted test asserting the + specific check is clean, marked `@pytest.mark.xfail(strict=True, reason="...#NNN")` + (mirror `TestVariantCallingDefects` / `_VARIANT_CALLING_XFAIL`). It xfails + now; when the engine fix lands it flips to XPASS and reds CI, prompting + removal of the marker and closing the issue. + - If the defect is **aesthetic / not yet validator-detectable**, the gallery + render is the guard (CI render-diff surfaces any change), and note on the + issue that a new validator check would let it be locked harder - or add one + if it's tractable. + - **Gotcha**: a new fixture is also fed to the always-on parametrized checks + (chain alignment, etc.). Run `pytest tests/test_topology_validation.py` after + adding it; if it reds on a check *other* than the one you're locking, either + reduce the fixture so it only exhibits the target defect, or add matching + xfail locks. Don't let a new fixture red CI on an unrelated check. +6. Open the PR (additive; per repo PR hygiene). The render-diff preview lets the + user see every new fixture render and confirm the issues in context. + +### 8. Log the run + +Append one row to `coverage_log.md` (at the skill root): the date, the axis +combination, the workspace path, and the outcome (clean / filed #N + fixture / +known-dup #N / dropped-on-inspection). This keeps successive runs pushing into +fresh territory and shows novelty risk shrinking as fixtures accumulate. + +## Scope boundaries + +- This skill **finds, confirms, files, and guards** (fixture + gallery + xfail); + it does not *fix* the engine. When the user wants a filed bug fixed, hand off + to the `nf-metro-layout-fix` skill (code-level fixes with invariant tests + + gallery regression vetting), or `fix-issue` for the full issue->PR workflow. + The strict-xfail this skill leaves behind is what tells the fixer they're done. +- A finding that turns out to be an authoring mistake is a *success of the + triage*, not a failure of the run - it means the engine was right. Say so. +- If the user wants to author a faithful map for a *real* pipeline (not a + synthetic stressor), that's `pipeline-metro-diagram`, not this. diff --git a/.claude/skills/nf-metro-stress-render/coverage_log.md b/.claude/skills/nf-metro-stress-render/coverage_log.md new file mode 100644 index 000000000..21497d30f --- /dev/null +++ b/.claude/skills/nf-metro-stress-render/coverage_log.md @@ -0,0 +1,10 @@ +# Stress-render coverage log + +One row per run, appended by the `nf-metro-stress-render` skill. The point is +to keep successive runs pushing into structural territory that earlier runs and +the `examples/topologies/` corpus have not drawn, and to watch novelty risk +shrink as confirmed finds become permanent fixtures. + +| Date | Axis combination | Workspace | Outcome | +|---|---|---|---| +| _seed_ | (corpus baseline - see examples/topologies/README.md for axes already covered in isolation) | - | - | diff --git a/.claude/skills/nf-metro-stress-render/references/failure_modes.md b/.claude/skills/nf-metro-stress-render/references/failure_modes.md new file mode 100644 index 000000000..0df44e11c --- /dev/null +++ b/.claude/skills/nf-metro-stress-render/references/failure_modes.md @@ -0,0 +1,118 @@ +# Layout-engine failure modes & structural axes + +This is the menu the stress-render skill draws from when composing a novel +layout. The engine is solid on shapes it has seen; it breaks on *new +combinations*. Your job is to pick axes that have not been combined before +and braid them into one believable pipeline. + +## Table of contents +- [How to use this](#how-to-use-this) +- [Structural axes (the dice)](#structural-axes-the-dice) +- [Known-fragile areas (likely dup, not novel)](#known-fragile-areas-likely-dup-not-novel) +- [What the probe catches vs what only your eye catches](#what-the-probe-catches-vs-what-only-your-eye-catches) +- [Authoring-correctness rules (so a defect is the engine's fault)](#authoring-correctness-rules) + +## How to use this + +The existing `examples/topologies/` corpus (see its README) already covers +each axis *in isolation* and a handful of pairs. Coverage of an axis alone is +not novelty. Novelty is **A x B x C where that triple has never been drawn** - +e.g. "a fold whose return row also carries an off-track output feeding a +station inside a TB section." Read `coverage_log.md` to see what past runs +already tried, and deliberately go somewhere else. + +Bias toward combinations that sit *near* an open issue or known-fragile area +but are not that issue - the seams next to known cracks are where the next +crack usually is. + +## Structural axes (the dice) + +Pick 2-4. The more axes you braid into one connected graph (not separate +disconnected toys), the more likely an interaction bug surfaces. + +| Axis | What it stresses | Engine machinery exercised | +|---|---|---| +| **Fan-out** (1 -> N) | junction insertion, port spacing, bundle slot reservation | `_create_ports_and_junctions`, ordering | +| **Fan-in** (N -> 1) | bundle ordering at L-corners, merge junctions | inter-section handlers | +| **Diamond / fork-join** | distinct track per branch, uneven branch lengths | `_equalize_fork_groups`, diamond detection (#610) | +| **Fold / serpentine** | wrap to RL return row, double fold, reading direction | `auto_layout` fold threshold, `reversal.py` - **a fold only fires on a near-linear section spine that exceeds ~15 station-columns; a branchy DAG stacks vertically instead and never folds. To exercise this axis, build a long mostly-linear chain, or pin `%%metro fold_threshold:` low.** | +| **Fan across a fold** | fan-out/in spanning the row boundary | rowspan optimisation | +| **Mixed port sides** | TOP+BOTTOM exits, LEFT+RIGHT on TB | `ports.py`, station-as-elbow risk | +| **TB + LR mix** | perpendicular ports, diagonal-label gating | `_infer_directions`, TB guards | +| **Off-track inputs** | inputs sit above their consumer, not on a line | `off_track.py` | +| **Off-track outputs** | producer-fed sinks below the line (#573) | `_space_off_track_output_columns` | +| **Wide labels** | auto-wrap, column spread, diagonal strike-through | `labels.py`, label-strike levers (#513) | +| **Dense bundle** | many lines sharing a trunk, tall station pills | `offsets.py`, `compute_bundle_info` | +| **Bypass** | line routing around an intervening section box | bypass handlers (#484), bypass-V (#632) | +| **Skip edges on a spine** | linear chain with forward jumps | fold-suppression gate (#551) | +| **Tall-narrow anchor** | one dominant tall fan beside a narrow chain | `_detect_tall_anchor_chain` (#552) | +| **Same-line divergence/convergence** | one colour splitting then rejoining a port | coincide-fanout passes (#546) | +| **Multi-source convergence** | several sources, one line, one sink | merge-junction routing | +| **Disconnected components** | independent sub-pipelines, row stacking | component packing | +| **Rails / line_spread** | bundle vs centered vs rails convergence | `rail_mode.py`, `line_spread` | +| **Cycle / self-loop** | a back-edge or `a --> a` | now rejected fast with a node-naming error (#645, fixed) - the probe surfaces it as a parse issue; expected behaviour, not a find | + +## Known-fragile areas (likely dup, not novel) + +If your render trips one of these, it is almost certainly a *known* defect. +Cross-check the open issue before drafting - link/append, don't re-file. These +are also areas where a validator ERROR may be expected, so don't treat them as +fresh discoveries: + +- **#255** station-as-elbow recurrence in TB-direction sections (OPEN bug). +- **#248** funcprofiler upstream layout quality (dense fan-out + fan-in). +- **#533** `graph TB` primary direction is not honoured (silently warns). +- **#556** diagonal labels gated to LR-only; TB sections get horizontal labels. +- **#555** diagonal-label column pitch is graph-wide (sparse fans inherit dense pitch). +- **#589** debug grid lines at logical `station.y`, not bundle-centred markers. +- **#349** triage red bboxes don't mark the true label position. + +A novel find is one that does *not* map onto any of these and is not already in +`gh issue list`. + +## What the probe catches vs what only your eye catches + +`probe_layout.py` is good at *structural* defects but blind to *aesthetic* +ones. Know the split so you review the render for what the validator can't see. + +**Probe catches (file as obvious bug):** +- layout crash / `PhaseInvariantError` guard failure +- section box overlap, station outside its box, port off the boundary +- coincident stations, station-as-elbow (line passes through a marker it doesn't stop at) +- near-horizontal-but-not edges, excessive column gaps, route-segment crossings +- label/label and label/box overlap (geometric) + +**Only your eye catches (present to user, draft only with their nod):** +- a line that is *technically* clear but reads as an ugly detour or wobble +- asymmetric fans that "should" mirror +- a diagonal that grazes a label the geometric check rounded as clear +- bundle ordering that is legal but visually scrambles line identity +- overall balance / whitespace / "does this look like a metro map" +- reading-direction confusion across a fold + +## Authoring-correctness rules + +A filed bug is only credible if the `.mmd` is well-formed - otherwise you are +reporting your own mistake. Before probing, verify: + +1. **Lines only traverse stations they consume.** An edge `a -->|rna| b` means + the `rna` line stops at both `a` and `b`. Never route a line *through* a + station it doesn't serve - that is the #1 authoring mistake that masquerades + as a "line crosses non-consumer" engine bug. If a line must pass a section + without stopping, that is a genuine *bypass* (model it with the line simply + not having an edge into that section's internals). +2. **Every `%%metro line:` id used in an edge is declared**, and every edge line + id is declared (the parser raises otherwise - the probe surfaces it as a + parse issue). +3. **Off-track inputs/outputs carry their directive** (`%%metro off_track:`), + or they will be treated as on-line stations. +4. **Ports match the inter-section edges** - entry/exit directives name the + lines that actually cross that boundary. +5. **Prefer auto-layout.** Omit `%%metro grid:` / `direction:` unless the axis + you are testing *is* manual placement. The strongest finds come from what + the engine infers, not what you pin. (If you pin everything, you have tested + your own arithmetic, not the engine.) + +If the probe reports a parse issue, it is a rule-1..4 violation: fix the `.mmd` +and re-probe. Only a clean parse with an engine-level finding is a bug worth +drafting. diff --git a/.claude/skills/nf-metro-stress-render/scripts/inspect_layout.py b/.claude/skills/nf-metro-stress-render/scripts/inspect_layout.py new file mode 100644 index 000000000..ca8639db5 --- /dev/null +++ b/.claude/skills/nf-metro-stress-render/scripts/inspect_layout.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +"""Dump the laid-out geometry of a .mmd so a reported defect can be confirmed. + +`probe_layout.py` answers "did anything trip a check?". This answers "where is +everything?" - the coordinates you need to turn an eyeballed report ("section 2 +content is pulled too low", "that input floats too high") into a quantified, +credible bug ("`al_minimap` y=392 vs the trunk at y=216.8, a 175px drag"). + +For each section it prints the bbox extents and every station's (x, y) with a +PORT / OFF(-track) tag, then a few derived red flags: + - stations that sit off their section's trunk (modal y of non-port stations) + - off-track inputs/outputs more than ~one row from their nearest neighbour + - the inter-section gaps between vertically-stacked sections + +Usage: + python inspect_layout.py INPUT.mmd +""" + +from __future__ import annotations + +import sys +from collections import Counter +from pathlib import Path + +_REPO_ROOT = Path(__file__).resolve().parents[4] +tests_dir = _REPO_ROOT / "tests" +if (tests_dir / "layout_validator.py").exists(): + sys.path.insert(0, str(tests_dir)) + +from nf_metro.layout.engine import compute_layout # noqa: E402 +from nf_metro.parser.mermaid import parse_metro_mermaid # noqa: E402 +from nf_metro.parser.model import Station # noqa: E402 + + +def _is_port(st: Station) -> bool: + return bool(getattr(st, "is_port", False)) + + +def _is_off(st: Station) -> bool: + return bool(getattr(st, "off_track", False)) + + +def main() -> int: + if len(sys.argv) != 2: + print(__doc__) + return 2 + path = Path(sys.argv[1]) + graph = parse_metro_mermaid(path.read_text(), max_station_columns=15) + compute_layout(graph) + + print(f"=== {path.name} ===") + + # Per-section dump. + boxes: list[tuple[float, float, int, int, str]] = [] + for sid, sec in graph.sections.items(): + x0, y0 = sec.bbox_x, sec.bbox_y + x1, y1 = x0 + sec.bbox_w, y0 + sec.bbox_h + boxes.append((y0, y1, sec.grid_col, sec.grid_row, sid)) + print( + f"\n[{sid}] '{sec.name}' grid=({sec.grid_col},{sec.grid_row}) " + f"box x:[{x0:.0f},{x1:.0f}] y:[{y0:.0f},{y1:.0f}]" + ) + trunk_ys = [ + graph.stations[s].y + for s in sec.station_ids + if not _is_port(graph.stations[s]) and not _is_off(graph.stations[s]) + ] + trunk_y = Counter(round(y, 1) for y in trunk_ys).most_common(1) + trunk_y = trunk_y[0][0] if trunk_y else None + for stid in sec.station_ids: + st = graph.stations[stid] + tag = "PORT" if _is_port(st) else ("OFF" if _is_off(st) else "") + flag = "" + if tag == "" and trunk_y is not None and abs(st.y - trunk_y) > 20: + flag = f" <-- OFF TRUNK by {st.y - trunk_y:+.0f} (trunk y={trunk_y})" + print(f" {stid:18s} x={st.x:7.1f} y={st.y:7.1f} {tag:4s}{flag}") + + # Vertically-stacked section gaps (same grid_col, adjacent grid_row). + print("\n-- inter-row gaps (stacked sections, same column) --") + by_col: dict[int, list[tuple[int, float, float, str]]] = {} + for y0, y1, col, row, sid in boxes: + by_col.setdefault(col, []).append((row, y0, y1, sid)) + flagged = False + for col, rows in sorted(by_col.items()): + rows.sort() + for (r1, _, y1_bot, s1), (r2, y2_top, _, s2) in zip(rows, rows[1:]): + gap = y2_top - y1_bot + mark = " <-- large vs siblings" if gap > 120 else "" + print( + f" col {col}: {s1}(row{r1}) -> {s2}(row{r2}) gap={gap:.0f}px{mark}" + ) + flagged = True + if not flagged: + print(" (no vertically-stacked sections)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.claude/skills/nf-metro-stress-render/scripts/probe_layout.py b/.claude/skills/nf-metro-stress-render/scripts/probe_layout.py new file mode 100644 index 000000000..57bb79ad1 --- /dev/null +++ b/.claude/skills/nf-metro-stress-render/scripts/probe_layout.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python3 +"""Probe a single .mmd through the full nf-metro pipeline and report defects. + +Runs the same stages a real render does (parse -> layout -> validate -> route), +then emits a structured JSON verdict that separates *authoring* problems (the +.mmd is malformed, so any downstream defect is the author's fault) from +*engine* problems (the .mmd is well-formed yet the engine produces a bad +layout). The latter are the bugs this skill exists to surface. + +The verdict has four finding buckets, in escalating "this is an engine bug" +confidence: + + parse_issues - graph-semantic findings from the parser's own validate_graph + (undefined lines, dangling ports, ...). Usually an AUTHORING + mistake -> fix the .mmd, don't file a bug. + layout_crash - compute_layout(validate=False) raised. A hard engine failure + on well-formed input. The strongest obvious-bug signal. + guard_failure - compute_layout(validate=True) raised a PhaseInvariantError + that the unguarded run did not. An invariant the engine + itself declares but violates. Obvious bug. + validator - structural Violations from tests/layout_validator.py + (overlap, containment, station-as-elbow, kinks, ...). + ERROR-severity ones are obvious bugs; WARNING-severity ones + are worth an eyeball. + +Usage: + python probe_layout.py INPUT.mmd [--svg OUT.svg] [--png OUT.png] + [--max-station-columns N] [--json] + +Exit code is 0 if no ERROR-level engine findings, 1 otherwise, so the skill can +branch on it. Authoring (parse) issues alone do not set a non-zero code - they +mean "go fix your .mmd", not "engine bug". +""" + +from __future__ import annotations + +import argparse +import json +import sys +import traceback +from pathlib import Path + +# The validator lives in tests/, which is not an installed package. Add the +# repo's tests dir to the path so `import layout_validator` resolves the same +# module the suite uses, rather than a stale copy. +_REPO_ROOT = Path(__file__).resolve().parents[4] +for candidate in (_REPO_ROOT, Path.cwd()): + tests_dir = candidate / "tests" + if (tests_dir / "layout_validator.py").exists(): + sys.path.insert(0, str(tests_dir)) + break + +from nf_metro.layout.engine import compute_layout # noqa: E402 +from nf_metro.parser import validate_graph # noqa: E402 +from nf_metro.parser.mermaid import parse_metro_mermaid # noqa: E402 + + +def _short_tb(exc: BaseException) -> str: + """Last frame + exception type/message - enough to dedup and locate.""" + tb = traceback.extract_tb(exc.__traceback__) + where = "" + if tb: + frame = tb[-1] + where = f"{Path(frame.filename).name}:{frame.lineno} in {frame.name}" + return ( + f"{type(exc).__name__}: {exc} ({where})" + if where + else f"{type(exc).__name__}: {exc}" + ) + + +def probe(mmd_text: str, max_station_columns: int = 15) -> dict: + verdict: dict = { + "parse_issues": [], + "layout_crash": None, + "guard_failure": None, + "validator": [], + "counts": {}, + } + + # 1. Parse. A raise here is a parser bug; a populated issue list is usually + # an authoring mistake. Either way, downstream stages can't be trusted. + try: + graph = parse_metro_mermaid(mmd_text, max_station_columns=max_station_columns) + except Exception as exc: # noqa: BLE001 + verdict["parse_issues"].append( + {"severity": "error", "message": f"Parser raised: {_short_tb(exc)}"} + ) + return verdict + + for issue in validate_graph(graph): + verdict["parse_issues"].append( + {"severity": issue.severity, "message": issue.message} + ) + + verdict["counts"] = { + "sections": len(graph.sections), + "stations": len(graph.stations), + "lines": len(graph.lines), + "edges": len(graph.edges), + } + + # 2. Unguarded layout. A raise here is a hard engine failure on input the + # parser accepted - the strongest obvious-bug signal. + try: + compute_layout(graph, validate=False) + except Exception as exc: # noqa: BLE001 + verdict["layout_crash"] = _short_tb(exc) + return verdict + + # 3. Validator structural checks on the laid-out graph. + try: + from layout_validator import Severity, validate_layout + + for v in validate_layout(graph): + verdict["validator"].append( + { + "check": v.check, + "severity": "error" if v.severity == Severity.ERROR else "warning", + "message": v.message, + } + ) + except Exception as exc: # noqa: BLE001 + verdict["validator"].append( + {"check": "validator_crash", "severity": "error", "message": _short_tb(exc)} + ) + + # 4. Guarded layout on a FRESH parse (compute_layout mutates). A raise the + # unguarded run didn't hit means the engine tripped its own invariant. + try: + guarded = parse_metro_mermaid(mmd_text, max_station_columns=max_station_columns) + compute_layout(guarded, validate=True) + except Exception as exc: # noqa: BLE001 + verdict["guard_failure"] = _short_tb(exc) + + return verdict + + +def _has_engine_error(verdict: dict) -> bool: + if verdict["layout_crash"] or verdict["guard_failure"]: + return True + return any(v["severity"] == "error" for v in verdict["validator"]) + + +def _render(mmd_path: Path, svg_out: Path | None, png_out: Path | None) -> dict: + out: dict = {} + if not (svg_out or png_out): + return out + svg_target = svg_out or (png_out.with_suffix(".svg") if png_out else None) + try: + from click.testing import CliRunner + + from nf_metro.cli import cli + + result = CliRunner().invoke( + cli, ["render", str(mmd_path), "-o", str(svg_target)] + ) + if result.exit_code != 0: + out["render_error"] = (result.output or str(result.exception)).strip() + return out + out["svg"] = str(svg_target) + except Exception as exc: # noqa: BLE001 + out["render_error"] = _short_tb(exc) + return out + + if png_out: + try: + import cairosvg + + cairosvg.svg2png(url=str(svg_target), write_to=str(png_out), scale=2) + out["png"] = str(png_out) + except Exception as exc: # noqa: BLE001 + out["png_error"] = _short_tb(exc) + return out + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument("input", type=Path) + ap.add_argument("--svg", type=Path, default=None) + ap.add_argument("--png", type=Path, default=None) + ap.add_argument("--max-station-columns", type=int, default=15) + ap.add_argument("--json", action="store_true", help="emit raw JSON only") + args = ap.parse_args() + + verdict = probe( + args.input.read_text(), max_station_columns=args.max_station_columns + ) + verdict["render"] = _render(args.input, args.svg, args.png) + verdict["engine_error"] = _has_engine_error(verdict) + + if args.json: + print(json.dumps(verdict, indent=2)) + else: + _print_human(args.input, verdict) + + return 1 if verdict["engine_error"] else 0 + + +def _print_human(path: Path, v: dict) -> None: + c = v.get("counts", {}) + print(f"== probe {path.name} ==") + if c: + print( + f" {c.get('sections', '?')} sections, {c.get('stations', '?')} stations, " + f"{c.get('lines', '?')} lines, {c.get('edges', '?')} edges" + ) + if v["parse_issues"]: + print( + "\n-- parse/authoring issues (fix the .mmd, usually NOT an engine bug) --" + ) + for i in v["parse_issues"]: + print(f" [{i['severity']}] {i['message']}") + if v["layout_crash"]: + print("\n-- LAYOUT CRASH (engine bug) --") + print(f" {v['layout_crash']}") + if v["guard_failure"]: + print("\n-- GUARD FAILURE / invariant violation (engine bug) --") + print(f" {v['guard_failure']}") + errs = [x for x in v["validator"] if x["severity"] == "error"] + warns = [x for x in v["validator"] if x["severity"] == "warning"] + if errs: + print("\n-- validator ERRORS (obvious engine bugs) --") + for x in errs: + print(f" [{x['check']}] {x['message']}") + if warns: + print("\n-- validator warnings (eyeball these) --") + for x in warns: + print(f" [{x['check']}] {x['message']}") + r = v.get("render", {}) + if r.get("png"): + print(f"\n rendered PNG: {r['png']}") + elif r.get("svg"): + print(f"\n rendered SVG: {r['svg']}") + if r.get("render_error"): + print(f"\n RENDER ERROR: {r['render_error']}") + print(f"\n => engine_error={v['engine_error']}") + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.claude/skills/pipeline-metro-diagram/SKILL.md b/.claude/skills/pipeline-metro-diagram/SKILL.md new file mode 100644 index 000000000..686a246b9 --- /dev/null +++ b/.claude/skills/pipeline-metro-diagram/SKILL.md @@ -0,0 +1,224 @@ +--- +name: pipeline-metro-diagram +description: Author the mmd content for a pipeline's metro map - turn the pipeline's workflow code into a faithful, readable metro diagram. Use whenever the user is iterating on a pipeline's .mmd to improve fidelity to the workflow code, visual clarity, or layout params. Trigger on phrases like "make a metro map for pipeline X", "iterate on the mmd for pipeline Z", "the metro map for funcscan doesn't match the workflow", or "this station shouldn't be on the rnaseq line". Covers studying the workflow to model lines/stations/branches, deciding line and section structure, `%%metro file:` and `%%metro off_track:` directives, the render-inspect-edit iteration loop, common pitfalls (breeze-past, fan asymmetry, section-boundary kinks), and the "is it mmd or nf-metro?" triage. When the diagnosis lands on nf-metro itself producing a bad layout for a correct mmd, hand off to the `nf-metro-layout-fix` skill. For the mechanical pipeline-repo setup (assets/, docs/dev/metro_map.md, render commands, README swap), see `pipeline-metro-setup`. For nf-metro's own gallery regression testing, see `render-topologies`. +--- + +# Authoring a Pipeline Metro Map + +Captures the workflow for designing the mmd content for a Nextflow pipeline +metro map: turning the pipeline's workflow code into a faithful, readable +metro diagram. Out of scope: pipeline-repo mechanical setup (file paths, +render commands, README) — see the `pipeline-metro-setup` skill. Out of +scope too: code-level fixes to nf-metro itself when a correct mmd still +renders badly — see the `nf-metro-layout-fix` skill. + +## Scope and relation to other skills + +This skill is about **upstream authoring** — turning a pipeline's workflow code +into a metro map that lives in the pipeline repo. It is distinct from: + +- **pipeline-metro-setup**: the mechanical pipeline-repo wiring (assets/, + docs/dev/metro_map.md, render commands, CHANGELOG). Hand off there once the + diagram reads right. +- **nf-metro-layout-fix**: code-level changes to nf-metro itself when the mmd + is correct but the engine produces a bad layout. Reach for that path only + after you've ruled out mmd mistakes (see Step 5 below). +- **render-topologies** (in this repo): regression-tests nf-metro itself by + rendering all gallery fixtures and pixel-diffing against `origin/main`. Use + that one when you've changed nf-metro's layout/render code, not when you're + drafting a pipeline diagram. + +## When to use this skill + +Trigger when the user wants to: + +1. Create a brand-new metro diagram for a pipeline that doesn't have one +2. Update an existing pipeline mmd because steps were added/renamed +3. Improve a mmd's fidelity to the actual workflow code (channel routing, + branch logic, study-type variants) +4. Tune layout params (spacing, line order, port style) for a pipeline diagram + +## Why the workflow matters + +The hard part of authoring a pipeline metro map is **not** writing mermaid +syntax — it's deciding what the lines and stations should *be* so the diagram +reads as the same pipeline a developer sees in the code. Get the model right +first, then fight the layout. + +## Step 1: Study the pipeline workflow code + +Before drafting any mmd, read the pipeline. The mmd is a faithfulness exercise: +mistakes here cause every downstream iteration to chase visual symptoms of a +modelling error. + +What to inspect: + +- `workflows/*.nf` (the main workflow) and any subworkflows it `take:`s data + through. Follow channel routing per study type / branch / option. +- `main.nf` and config files for top-level params that control which paths run. +- The `nextflow_schema.json` for input file types (these become file-input + stations). +- Recent merged PRs touching the workflow — they often reveal which paths are + optional or recently changed. + +Build a mental list of: + +- **Inputs**: every primary input file or string the pipeline accepts. +- **Outputs**: the visible deliverables (reports, bundles, plots). +- **Branches**: which inputs trigger which paths, and where paths reconverge. +- **Modules**: the named processes/subworkflows the user would recognize. + +## Step 2: Decide on lines + +Each major variant or study type becomes a metro line with a distinct color. +For most pipelines this is 1-6 lines. Some heuristics: + +- If two inputs flow through identical modules end-to-end, they may be one + line (e.g. paired vs single-end), not two. +- If a "main" path and an "optional QC" path co-exist, they are usually + separate lines — even if they share most stations. +- Use nf-core branding colors where possible, but pick distinguishable hues + (avoid two greens or two blues that read as the same line under + colour-blind rendering). + +Audit each line's edges for accuracy. The most common modelling bug is a +line passing through a station that doesn't actually consume it — a +"breeze-past". A station should only sit on a line if the underlying module +actually processes that line's data. + +## Step 3: Section structure + +Group stations into named subgraphs (sections). Each section is a logical +phase of the pipeline ("Data import and preparation", "Differential analysis", +"Reporting", etc.). + +- Place sections on the grid with `%%metro grid: | row,col,rowspan,colspan`. +- Use `rowspan` when one section is much taller than the rest and you want + adjacent sections to stack alongside it (see the differentialabundance map + where `data_prep` spans two rows so `differential` and `functional` can sit + to its right at half height each). +- Keep flow left-to-right at the top level (`graph LR`); place fan-out + sections vertically by row. +- Inter-section edges must live outside all `subgraph`/`end` blocks. + +## Step 4: File-input stations and off-track inputs + +For file inputs that should appear as document icons rather than as labelled +module stations, use empty-label stations and `%%metro file:` directives: + +```text +%%metro file: meta_in | YAML | Contrasts +... +meta_in[ ] +meta_in -->|rnaseq| validator +``` + +If an input enters the pipeline mid-section but the line shouldn't be drawn +running into it from the trunk (e.g. an optional gene set file used only by +one downstream module), declare it `%%metro off_track: ` so it lifts above +the trunk instead of forcing the line to detour through it. + +Stacked-files and folder icons are available for batched / directory inputs: +see `docs/guide.md` in this repo for the full directive reference. + +## Step 5: Iteration loop + +Render, inspect, edit. Repeat until the diagram both *matches the pipeline* +and *reads cleanly*. + +### Render iteratively while drafting + +Render the mmd often while editing. Use `--debug` on early iterations to see +grid lines and bbox boundaries — this exposes most layout problems instantly. + +Param choice for iteration is its own topic — see the `pipeline-metro-setup` +skill for the canonical nf-core param baselines and when to override them. +For pure mmd authoring, any consistent param set works. + +### What to look for in each render + +- **Stations sitting on a line that doesn't consume them** (breeze-past): fix + the mmd by removing that line ID from the relevant edge labels. +- **Labels off-centre, station/icon overlaps, kinks at section boundaries**: + these are usually layout issues — but check the mmd first. +- **A line crossing many non-consumers in a row**: usually means the mmd has + the line passing through a section it shouldn't enter at all. +- **Bypass routing for non-consumed lines**: nf-metro handles this with + virtual hidden stations. If a section explicitly doesn't process a line, + the bypass should arc over the trunk cleanly. +- **Asymmetric fans**: lines fanning out from one station should land + symmetrically on their targets. Check that the `line_order` matches the + visual top-to-bottom order you want. +- **Stacked labels in a uniform X column**: not necessarily a problem. + Labels naturally align when stations share an X coordinate, and a uniform + column often reads cleaner than a staggered one. + +### When the mmd is wrong vs when nf-metro is wrong + +If a render looks bad, **first check the mmd**: + +- Are the line IDs on each edge label what you actually meant? +- Are off-track directives set for inputs that shouldn't sit on the trunk? +- Do grid spans (`rowspan`, `colspan`) actually fit the content? An undersized + span squeezes stations together; an oversized one leaves dead space. +- Are inter-section edges declared outside `subgraph` blocks? +- Are entry/exit port directives (`%%metro entry:`, `%%metro exit:`) consistent + with the lines that actually cross those section boundaries? + +If the mmd is correct but nf-metro still produces a bad layout, that's a +nf-metro bug. Hand off to the `nf-metro-layout-fix` skill, which captures +the savepoint pattern, the invariant-test-then-fix-then-runtime-validator +loop, gallery vetting against `origin/main`, and the additive-commits-only +PR chain rules for nf-metro changes. + +### Tradeoffs + +Pipeline accuracy and visual cleanness sometimes pull against each other. +A diagram that captures every conditional branch is technically accurate but +unreadable; one that elides minor optional paths can be more useful as +documentation. Sensible simplifications (e.g. combining two trivially similar +inputs onto one line, eliding a one-off helper module) are fine — note them +in the dev doc so a future maintainer knows the simplification was deliberate. + +## Step 6: Common patterns and pitfalls + +Captured from real authoring sessions: + +- **Mixed line-bundle membership**: stations where most columns carry the + full bundle but one column carries a single line need careful routing. + Check that the minor line doesn't visually attach to stations it doesn't + use. +- **Bypass routing through a trunk station that doesn't consume the line**: + nf-metro handles this with virtual hidden stations. If you see the bypass + jumping back through the station, the mmd probably has the line on an edge + it shouldn't be on. +- **"Breeze-past" stations**: a line drawn through a station that doesn't + actually consume it. Always a mmd bug. +- **Fan symmetry**: when one station fans out to N downstream stations, + `--line-order definition` plus the order of your `%%metro line:` directives + controls top-to-bottom placement. +- **Section boundary kinks**: usually caused by mismatched entry/exit port + directives or by stations placed near the section edge. Try `--center-ports` + before debugging the mmd. +- **Stacking labels**: when many stations share the same X coordinate, their + labels stack. This is often fine and reads cleaner than staggered placement. + +## Quick reference: the differentialabundance mmd + +A worked-example mmd is in the differentialabundance pipeline repo. It +exercises: + +- 4 study-type lines (rnaseq, affy, maxquant, geo) with distinct colours +- 5 sections with explicit `%%metro grid:` placement +- A 2-row rowspan on the data-import section to balance against two + half-height sections +- File-input stations with `%%metro file:` and `%%metro off_track:` for + optional inputs + +Useful as a template for a new pipeline with multiple study-type branches. + +## Once the diagram reads right + +Hand off to the `pipeline-metro-setup` skill for wiring the rendered map +into the pipeline repo (file layout, render commands, README swap, +CHANGELOG entry, install-line pinning while a fix chain is in flight). diff --git a/.claude/skills/pipeline-metro-setup/SKILL.md b/.claude/skills/pipeline-metro-setup/SKILL.md new file mode 100644 index 000000000..97236e5a2 --- /dev/null +++ b/.claude/skills/pipeline-metro-setup/SKILL.md @@ -0,0 +1,224 @@ +--- +name: pipeline-metro-setup +description: Wire an nf-metro diagram into an nf-core (or any Nextflow) pipeline repo - the mechanical pipeline-side setup, not the authoring of the .mmd itself. Use whenever the user wants to add nf-metro tooling to a pipeline (assets/metro_map.mmd, docs/dev/metro_map.md, the rendered SVG/PNG/animated assets, README image swap, CHANGELOG entry), replace an existing workflow.png/svg with a metro map, mirror the nf-core/rnaseq setup on a new pipeline, or pin nf-metro to a named branch of a fork while waiting for upstream fixes to land. Trigger on phrases like "set up nf-metro on pipeline X", "wire the metro map into the repo", "replace workflow.png with a metro map", "ship the metro diagram in pipeline Y", "pin nf-metro to my fork branch while we wait for the fixes", "what assets do I need in docs/images for the metro map". +--- + +# Pipeline metro map setup + +Wires an nf-metro diagram into a pipeline repository: the layout of source + +rendered assets, the regeneration commands developers run, the README swap, +the CHANGELOG entry, and the install-line pinning pattern when nf-metro main +isn't yet good enough to render the pipeline cleanly. + +## Scope and relation to other skills + +This skill is about the **pipeline repo plumbing**. It assumes the `.mmd` +already exists (or is being authored alongside) and focuses on shipping the +result. + +- **`pipeline-metro-diagram`** (separate skill, nf-metro repo) authors the + `.mmd` content - which lines and stations to draw, how to model branches, + how to iterate on fidelity to the pipeline. Reach for that one when the + question is "what does the diagram show?". +- **`nf-metro-layout-fix`** (separate skill, nf-metro repo) covers code-level + fixes to nf-metro itself when the mmd is correct but the engine produces a + bad layout. Stage 2 Case B (named-branch pin on a fork) is the bridge + developers use while a fix chain over there is in flight. +- **`render-topologies`** (in this repo) is nf-metro's own gallery regression + harness. Unrelated to pipeline-repo work. + +If the user's request is "make a metro map for pipeline X end-to-end", both +skills apply: `pipeline-metro-diagram` for the mmd, this one for the wiring. + +## The canonical layout: mirror nf-core/rnaseq + +`nf-core/rnaseq` is the reference. New pipelines should match its file layout +so a maintainer moving between pipelines finds the same paths each time. For +a pipeline named `` (e.g. `differentialabundance`, `rnaseq`, `funcscan`), +ship: + +``` +assets/ + metro_map.mmd # the source +docs/ + dev/ + metro_map.md # regeneration instructions + images/ + nf-core-_metro_map.png # static raster, 2265 px wide + nf-core-_metro_map.svg # static vector + nf-core-_metro_map_animated.svg # animated, embedded in README + nf-core-_logo_light.png # the pipeline logo (already there) +``` + +If the repo is community/Nextflow but not nf-core, drop the `nf-core-` prefix +but keep the suffixes. Consistency of the suffixes (`_metro_map`, +`_metro_map_animated`) matters more than the prefix. + +## When the user runs the workflow + +This skill captures four stages. Walk the user through whichever they need: + +1. Pick render params (default to rnaseq's, override only with reason). +2. Decide whether to pin nf-metro to a fork branch or use a released version. +3. Write the dev doc and run the three render commands. +4. Swap the README image and remove the old `workflow.{png,svg}`. + +## Stage 1: Render parameters + +Visual parameters (theme, logo, output PNG width) stay aligned across +pipelines so the diagrams read as part of a family: + +- `--theme light` +- `--logo docs/images/nf-core-_logo_light.png` +- PNG output width `2265` + +Layout parameters can diverge per pipeline if the topology demands it. Two +common baselines: + +- **rnaseq defaults** - `--x-spacing 60 --y-spacing 40 --no-straight-diamonds`. + Use this when the diagram is mostly linear with a few short fan-outs. +- **multi-branch / fan-heavy** - `--x-spacing 70 --y-spacing 55 + --no-straight-diamonds --line-order definition --center-ports`. Use this + when the pipeline has 3+ study-type lines, multiple fan-outs from the same + station, or sections that crowd at the smaller spacing. + +Pick the baseline by rendering both and looking. If the rnaseq defaults +produce a clean diagram, prefer them - matching rnaseq is more valuable than +shaving a few millimetres off the layout. + +`--line-order definition` keeps lines stacked in the order they appear in the +`%%metro line:` directives, which usually reads more naturally than the +default heuristic. `--center-ports` reduces kinks at section boundaries. + +## Stage 2: Pin nf-metro, or use a release + +There's a real choice here. Two cases: + +### Case A: released nf-metro is enough + +If the latest released nf-metro renders the pipeline cleanly, use a version +pin in the dev doc: + +```bash +pip install 'nf-metro>=X.Y.Z' cairosvg +``` + +This is the simpler path and the long-term steady state. Once your fix chain +has merged upstream, every pipeline should converge here. + +### Case B: pin to a named branch of your fork + +If the pipeline needs nf-metro layout fixes that aren't released yet (the +common case while a fix chain is in flight against `seqeralabs/nf-metro`): + +1. In nf-metro, push the savepoint state of your fix chain to a named branch + on your fork. Use the pipeline name as the branch name so the pin reads + self-documenting: + + ```bash + # In your nf-metro checkout + git push origin :refs/heads/ + ``` + + `` should match the pipeline's nf-core slug (e.g. + `differentialabundance`, `funcscan`). One branch per pipeline, kept + updated as the fix chain evolves. + +2. Pin the install line in `docs/dev/metro_map.md`: + + ```bash + pip install 'git+https://github.com//nf-metro.git@' cairosvg + ``` + +3. Once the fix chain merges to nf-metro `main` and a release is cut, swap + back to the version pin (`pip install 'nf-metro>=X.Y.Z' cairosvg`) and + delete the named branch on your fork. The pipeline diagram should + reproduce identically from the released version - if it doesn't, the fix + chain didn't fully land. + +The pinning pattern is intentionally explicit. A floating ref like +`@main` makes pipeline renders non-reproducible. The named branch can be +moved forward deliberately as new fixes land, and each move is a discrete +event a maintainer can audit. + +## Stage 3: Write the dev doc and render + +Copy `references/dev-doc-template.md` into `docs/dev/metro_map.md` and fill +in: + +- `` - the pipeline name (e.g. `rnaseq`, `differentialabundance`) +- `` - either the version pin or the branch pin from Stage 2 +- ``, `` - from Stage 1 +- `` - the rest of the layout flags from Stage 1, or + empty if using rnaseq defaults + +The template has three render blocks: static SVG, PNG conversion via +cairosvg, and animated SVG. Plus a trailing-newline normalisation step +because nf-core pre-commit hooks reject SVGs without a final newline. + +Run the commands from the pipeline repo root, in order. The static SVG +must exist before the PNG conversion. The animated SVG is independent and +can run last. + +## Stage 4: README swap and cleanup + +Most nf-core pipelines historically embed a static `docs/images/workflow.png` +(or `.svg`) in `README.md`. Replace this with the animated metro map: + +```html +... +``` + +The animated SVG works in the GitHub README renderer and is small enough not +to blow up the repo size. Keep the `width="100%"` to let the SVG scale. + +Then: + +- Delete `docs/images/workflow.png` and `docs/images/workflow.svg` if they + exist. Don't leave them dangling - they confuse future maintainers and + cost zero to remove. +- Update any other docs pages (`docs/usage.md`, `docs/output.md`) that + referenced the old workflow image - usually a one-line `` swap. +- Add a CHANGELOG entry under `### Changed`: + + ```markdown + - Replaced static workflow diagram with nf-metro-rendered metro map. + ``` + +The CHANGELOG entry is the only narrative artifact users see. Keep it one +line - they'll see the new diagram themselves. + +## Verifying the result + +After running the three render commands: + +1. Open the static SVG in a browser and confirm the layout reads. If a + line passes through a station that doesn't consume it, that's an + authoring bug - hand back to `pipeline-metro-diagram` to fix the mmd. +2. Open the animated SVG and confirm the line animations sweep along the + intended paths (not backwards or in chunks). +3. Verify the PNG was produced at 2265 px wide (`identify`, + `file`, or just opening it - the resolution shows in the title bar of + most image viewers). +4. Confirm trailing newlines: `tail -c1 docs/images/*.svg | xxd` should + show `0a` for each file. The template's `sed -i '' -e '$a\'` step + normalises this on macOS; on Linux, drop the empty string argument + (`sed -i -e '$a\'`). Mention the platform difference when handing the + template over. + +## Reference: worked examples + +Two pipelines ship complete nf-metro setups to use as references: + +- **`nf-core/rnaseq`** - canonical setup, rnaseq-default render params, + released nf-metro version pin. Match this if your pipeline fits the + linear / short-fan baseline. +- **`nf-core/differentialabundance`** - same file layout, savepoint render + params (`--x-spacing 70 --y-spacing 55 --center-ports --line-order + definition`), pinned to a fork branch while a fix chain is in flight + against nf-metro `main`. Match this if your pipeline has multi-branch / + fan-heavy topology. + +Both ship the same five files (`assets/metro_map.mmd`, +`docs/dev/metro_map.md`, three images in `docs/images/`). When in doubt, +diff your pipeline's setup against these. diff --git a/.claude/skills/pipeline-metro-setup/references/dev-doc-template.md b/.claude/skills/pipeline-metro-setup/references/dev-doc-template.md new file mode 100644 index 000000000..ab75841bd --- /dev/null +++ b/.claude/skills/pipeline-metro-setup/references/dev-doc-template.md @@ -0,0 +1,60 @@ +# Metro map + +The pipeline overview metro map is generated from `assets/metro_map.mmd` +using [nf-metro](https://github.com/seqeralabs/nf-metro). If you add or +rename pipeline steps, update the `.mmd` source and regenerate the images: + +```bash + + +# Static SVG +nf-metro render assets/metro_map.mmd \ + -o docs/images/nf-core-_metro_map.svg \ + --theme light --x-spacing --y-spacing \ + --no-straight-diamonds \ + --logo docs/images/nf-core-_logo_light.png + +# PNG conversion (cairosvg) +python -c "import cairosvg; cairosvg.svg2png( + url='docs/images/nf-core-_metro_map.svg', + write_to='docs/images/nf-core-_metro_map.png', output_width=2265)" + +# Animated SVG (used in README) +nf-metro render assets/metro_map.mmd \ + -o docs/images/nf-core-_metro_map_animated.svg \ + --theme light --x-spacing --y-spacing --animate \ + --no-straight-diamonds \ + --logo docs/images/nf-core-_logo_light.png + +# Ensure trailing newlines on SVGs (required by pre-commit) +for f in docs/images/nf-core-_metro_map.svg \ + docs/images/nf-core-_metro_map_animated.svg; do + sed -i '' -e '$a\' "$f" +done +``` + +## Placeholders + +- `` - pipeline slug (e.g. `rnaseq`, `differentialabundance`, + `funcscan`). Drop the `nf-core-` prefix on non-nf-core pipelines but + keep the rest of the path consistent. +- `` - one of: + - `pip install 'nf-metro>=X.Y.Z' cairosvg` once a release contains the + fixes the pipeline needs (the steady state). + - `pip install 'git+https://github.com//nf-metro.git@' cairosvg` + while a fix chain against nf-metro main is still in flight. The + `` branch on the fork carries the savepoint state used + to produce the shipped images. +- ``, `` - defaults `60 40` (rnaseq baseline) or + `70 55` (fan-heavy / multi-branch pipelines). +- `` - empty for the rnaseq baseline. For multi-branch + pipelines, typically `--line-order definition --center-ports`. + +## Platform note + +The trailing-newline `sed` invocation uses BSD syntax (`sed -i '' -e '$a\'`). +On GNU/Linux drop the empty string argument: + +```bash +sed -i -e '$a\' "$f" +``` diff --git a/.claude/skills/pr-chain-vet/SKILL.md b/.claude/skills/pr-chain-vet/SKILL.md new file mode 100644 index 000000000..6986af523 --- /dev/null +++ b/.claude/skills/pr-chain-vet/SKILL.md @@ -0,0 +1,373 @@ +--- +name: pr-chain-vet +description: Per-PR vetting workflow for shepherding a stacked PR chain on nf-metro back into main - one PR at a time, gallery-diff against main, additive cleanups, no force-push, ready for human review. Use whenever the user is working through a chain of layout/refactor PRs on nf-metro and asks to "vet this PR before review", "walk through the chain", "check PR N for gallery regressions", "prepare PR for review", "do a vetting pass on PR N", "make this PR mergeable", or is otherwise driving stacked PRs toward main and needs each one cleaned up and CI-greened in turn. Covers worktree setup, reverting known-rejected commits, conflict reconciliation against main, the /simplify pass as a separate commit, render-and-diff against main, classifying every visual delta (improvement / neutral / detrimental), appending fix commits for detrimentals, sweeping narrative PR comments, rewriting PR descriptions to be standalone, triggering CI on the final commit, and the post-merge cleanup order (re-target children BEFORE deleting the merged branch). Assumes the chain itself was set up correctly (orphan-style stacked PRs with chained base branches); for the nf-metro code fixes the chain carries, see `nf-metro-layout-fix`; for upstream mmd authoring, see `pipeline-metro-diagram`; for pipeline-repo setup, see `pipeline-metro-setup`. +--- + +# Per-PR vetting on an nf-metro stacked chain + +Captures the per-PR vetting workflow for driving a stacked chain of layout +fix / refactor PRs back into `nf-metro` `main`. The chain itself +(orphan-style stacked PRs, each based on the previous, with the bottom-most +based on `main`) is assumed to already exist - see the +`nf-metro-layout-fix` skill for the upstream concerns (savepoint pattern, +invariant tests, conditional-gating fixes) that produced the chain in the +first place. + +This skill is about taking **one PR from that chain** and making it +mergeable to `main`: reconcile against main, simplify, prove via gallery +diff that the net effect on existing pipelines is acceptable, sweep +narrative artefacts, get CI green, and hand off to a human reviewer. + +## When to use this skill + +Trigger when the user is shepherding a stacked PR chain into `main` and is +working through them one at a time. Phrases like: + +- "vet this PR before review" +- "walk through the chain, PR by PR" +- "check PR #N for gallery regressions" +- "prepare PR #N for review" +- "do a vetting pass on this one" +- "make this PR mergeable to main" + +Not the right skill if: + +- The user is still authoring the underlying fixes (use + `nf-metro-layout-fix` for code fixes; `pipeline-metro-diagram` for mmd + authoring; `pipeline-metro-setup` for pipeline-repo wiring). +- The chain doesn't exist yet (this skill assumes the stacked PRs and their + base-branch graph are already in place). +- The user just wants to run the gallery regression harness in isolation + (use `render-topologies` for that). + +## Cross-cutting rules + +These hold across every step: + +- **No force-pushes, ever.** Every change to a PR is an additive commit. + To undo something already in the branch, append a `git revert ` - + don't rewrite history. Rewrites silently destroy other people's local + state and break GitHub review threads. +- **No narrative comments on the PR.** If something needs to be said about + the change, it lives in the PR description. A reviewer landing on the PR + cold should understand the change from the description alone. +- **Every PR gets a `/simplify` pass.** As a separate commit. The original + fix stays readable; the simplify pass stays auditable. +- **CI must run on the latest commit before declaring the PR ready.** If + the last commit was `[skip ci]`, append an empty commit to trigger CI. + +## Project-specific extension points + +Some judgement calls are project-specific. Keep them in memory entries the +skill consults rather than burying them here: + +- **Known-rejected commits.** Some commits in a chain may be intentionally + not wanted in `main` (e.g. an experimental label-stagger commit the user + decided to abandon). Capture these in a memory entry like + `project-stagger-commit-rejected.md` so the skill knows to revert them on + sight. +- **Detrimental-delta criteria.** The list of things that make a visual + delta "detrimental" (Step 8) is extensible. Pipeline-specific layout + expectations can be added to a memory entry the skill reads before + classifying renders. + +## Step 1: Set up an isolated worktree + +Always work from a fresh worktree on the PR branch. Editing in the main +checkout risks clobbering parallel sessions. + +```bash +# Pick the PR branch and pull +gh pr view --repo /nf-metro --json headRefName -q .headRefName +# -> + +# Worktree alongside the main checkout +git worktree add /tmp/nf-metro-pr +cd /tmp/nf-metro-pr + +# Editable install + baseline test pass +pip install -e . +pytest -x -q +``` + +A failing baseline pytest is a stop signal - resolve before touching the +PR. Otherwise later regressions are impossible to disentangle from +pre-existing breakage. + +## Step 2: Strip known-rejected commits + +Check the branch's commits against the project's known-rejected list (see +the project-specific memory entry, e.g. `project-stagger-commit-rejected.md`). + +```bash +git log --oneline origin/main..HEAD +``` + +If any rejected commit appears in the ancestry, revert it - don't rewrite: + +```bash +git revert --no-edit +git push +``` + +Reverts keep history honest. A reviewer can see that the commit was +considered and rejected, rather than wondering why the diff disagrees with +the PR description. + +## Step 3: Reconcile conflicts vs main + +If the PR shows as CONFLICTING on GitHub, merge `origin/main` into the +branch. Most conflicts on a stacked chain are test-file additions where +both sides added new tests - resolve by keeping both sides. + +```bash +git fetch origin main +git merge origin/main +# resolve conflicts (usually `git checkout --ours/--theirs` or hand-merge) +git commit +git push +``` + +A merge commit is fine and preferred over a rebase. Rebases on a pushed +branch require force-push, which is forbidden by the rules above. + +## Step 4: Run /simplify on the net diff + +Invoke the `/simplify` slash command on the PR's net changes (i.e. the +diff vs the PR's base branch, not vs main). Commit the result as a +separate refactor commit: + +```bash +git commit -am "refactor: tighten " +git push +``` + +The simplify pass is a separate commit on purpose: the original fix stays +readable to reviewers focused on the bug, and the simplify pass stays +auditable for reviewers focused on style/structure. Don't fold them +together. + +If the simplify pass produces no meaningful changes, that's a valid +outcome - skip the commit and move on. + +## Step 5: Render the gallery on PR HEAD + +`scripts/build_gallery.py` writes SVGs to `docs/assets/renders/`. Copy +them to a stable per-PR temp directory so the diff in Step 7 is +reproducible across iterations: + +```bash +python scripts/build_gallery.py --debug +mkdir -p /tmp/gallery-pr +cp docs/assets/renders/*.svg /tmp/gallery-pr/ +``` + +The `--debug` flag draws grid lines and bbox boundaries — they make most +layout regressions visible at a glance. + +## Step 6: Render the gallery on main (if not cached) + +```bash +# In a separate worktree on main +git -C /tmp/nf-metro-main fetch origin main +git -C /tmp/nf-metro-main checkout origin/main +cd /tmp/nf-metro-main && python scripts/build_gallery.py --debug +mkdir -p /tmp/gallery-main +cp /tmp/nf-metro-main/docs/assets/renders/*.svg /tmp/gallery-main/ +``` + +If you already rendered main during a previous PR's vetting pass and `main` +hasn't moved, reuse the existing output - this is the slowest step in the +loop. + +## Step 7: Diff and open the report + +`build_render_diff.py` takes an output **directory** and writes +`index.html` inside it: + +```bash +python scripts/build_render_diff.py \ + /tmp/gallery-main \ + /tmp/gallery-pr \ + /tmp/diff-pr \ + --pr +open /tmp/diff-pr/index.html +``` + +The diff report renders side-by-side SVGs and flags pixel-level changes. +Use it as the entry point for Step 8; don't try to classify deltas from +filenames alone. + +## Step 8: Classify every changed example + +For each example with a visible delta, classify it. The skill's job is to +**catch detrimentals before review**, not to litigate every pixel. + +- **Improvement** - cleaner than main: less overlap, straighter routing, + better bbox fit, fewer crossings, better label placement. +- **Neutral** - byte-only or visually indistinguishable. Usually + coordinate-noise from refactors that don't change geometry. +- **Detrimental** - any of these: + - Broken trunk alignment (kinks at section boundaries, trunk Y drift) + - Station or icon overlap + - Lines crossing non-consumer station markers ("breeze-past") + - Mad routing (sharp doglegs, S-curves, lines wandering across the + diagram) + - Bbox overflow (content escaping its section's bounding box) + - Label collisions (labels overlapping each other or stations) + - Bypass routing through a station that doesn't consume the line + - Asymmetric fans where they used to be symmetric + - Anything the project's detrimental-delta criteria memory entry adds + +Don't blanket-pass everything. Don't blanket-fail everything either - a +diff where 30 examples shifted by 1px and one example is cleaner is +exactly the kind of net win the chain is supposed to produce. The bar is: +**no example got worse**. + +## Step 9: Fix detrimentals, re-render, re-diff + +For each detrimental: + +1. Append a fix commit on the PR branch (an additional commit, not a + rewrite). The fix usually belongs in the same area of nf-metro code + the PR is already touching - if it doesn't, that's a signal the chain + structure is wrong and you should pause and discuss with the user + before continuing. + +2. Push. + +3. Re-run Steps 5 and 7 (Step 6 is unchanged - main hasn't moved). Confirm: + - The originally-flagged detrimental is now resolved (improvement or + neutral). + - No **new** detrimentals appeared in other examples. Fixes commonly + produce regressions elsewhere; the gallery is what catches them. + +Loop until every changed example is improvement or neutral. + +## Step 10: Sweep narrative comments off the PR + +GitHub review comments accumulate as a chain evolves. By the time a PR is +ready for human review, none of that history is useful - it just makes the +PR look messy and gives a reviewer the wrong context. Sweep them. + +Keep the CI render-preview comment (the bot-posted "Render preview" one). +Delete everything else. + +```bash +# List comment IDs that aren't the render-preview bot post +gh pr view --repo /nf-metro --comments --json comments | \ + jq -r '.comments[] | select(.body | startswith("**Render preview**") | not) | .id' + +# For each id, delete via GraphQL +gh api graphql -f query='mutation { deleteIssueComment(input:{id:""}) { clientMutationId } }' +``` + +If the user has explicitly asked to preserve a particular comment (e.g. a +reviewer's outstanding question), keep that one too. Otherwise the rule is: +description carries the narrative, comments don't. + +## Step 11: Rewrite the PR description to be standalone + +The PR description should describe **the net diff vs `main`** as it +currently stands. Strip: + +- References to the chain or savepoint +- "Will need matching PR X" notes that no longer apply +- Intermediate / superseded approaches +- The history of how the PR got to its current state + +A reviewer landing on the PR cold should understand what it does, not how +it got here. Update the description with `gh pr edit`: + +```bash +cat > /tmp/body.md <<'EOF' +## Summary +<1-3 bullets describing the net change> + +## Why +<1-2 sentences on the user-visible problem this solves> + +## Testing + +EOF + +gh pr edit --repo /nf-metro --body-file /tmp/body.md +``` + +## Step 12: Trigger CI if needed + +CI must have run on the latest commit. If the last commit was a `[skip ci]` +(e.g. a doc-only fix) or no preview build appears for the current head, +append an empty commit: + +```bash +git commit --allow-empty -m "chore: trigger CI" +git push +``` + +The empty commit is the lowest-friction way to re-fire CI without +rewriting history. + +## Step 13: Wait for CI green, hand off to human review + +Watch the checks: + +```bash +gh pr checks --repo /nf-metro --watch +``` + +When all checks are green, the PR is ready. Surface it to the user with a +short note: PR URL, what the description now says, which gallery examples +were affected and how. Then stop - human review is the gate. + +## Step 14: After merge - in this exact order + +Order matters here. GitHub will auto-close child PRs if the parent branch +is deleted before their bases are re-targeted. + +1. **Re-target every child PR** whose base is the just-merged branch: + + ```bash + gh pr edit --repo /nf-metro --base main + ``` + + Do this for every direct child. (Grandchildren stay pointed at their + parent; they'll get re-targeted as their parent merges in turn.) + +2. **Delete the remote branch:** + + ```bash + gh api -X DELETE repos//nf-metro/git/refs/heads/ + ``` + +3. **Remove the local worktree:** + + ```bash + git worktree remove /tmp/nf-metro-pr --force + ``` + +4. **Delete the local branch:** + + ```bash + git branch -D + ``` + +If you delete the remote branch before re-targeting children, GitHub +treats them as merged-into-deleted and closes them. Recovering from this +is annoying (you have to reopen each one and re-set its base) and risks +losing review threads. + +## What "done" looks like + +A vetted PR has: + +- Clean ancestry: no known-rejected commits, no merge-conflict markers. +- A `/simplify` pass landed as a separate commit (or skipped if no-op). +- A gallery diff vs `main` where every changed example is improvement or + neutral. +- Zero narrative comments outside the CI render-preview bot post. +- A standalone description that reads correctly without chain context. +- A green CI run on the latest commit. + +At that point, hand off to human review and move to the next PR in the +chain. diff --git a/.claude/skills/release/skill.md b/.claude/skills/release/skill.md new file mode 100644 index 000000000..c5997afa4 --- /dev/null +++ b/.claude/skills/release/skill.md @@ -0,0 +1,269 @@ +--- +name: release +description: End-to-end release workflow for nf-metro. Checks the bioconda recipe for missing deps and bumps its build number if needed, bumps version in pyproject.toml and __init__.py, drafts a docs/releases/.md page from the git log since the last tag (with illustrations where relevant), wires it into mkdocs.yml nav and the releases index table, then opens a PR. After merge, reminds you to create the GitHub Release. Trigger on phrases like "cut a release", "release X.Y.Z", "prepare release", "bump version to X.Y.Z". +--- + +# nf-metro Release Workflow + +Covers everything from version bump to open PR. After the PR merges you +create the GitHub Release manually — that triggers PyPI publish and the +versioned docs deploy automatically. + +## Step 0: Determine the new version + +If the user didn't specify a version, read the current one: + +```bash +grep '^version' ~/projects/nf-metro/pyproject.toml +``` + +Ask: "Current version is X.Y.Z — what should the new version be?" +Wait for confirmation before proceeding. + +Call the new version `NEW_VERSION` (e.g. `0.8.0`) and find the last +release tag: + +```bash +LAST_TAG=$(git -C ~/projects/nf-metro describe --tags --abbrev=0) +echo "Last tag: $LAST_TAG" +``` + +## Step 1: Gather changes since last release + +```bash +git -C ~/projects/nf-metro log ${LAST_TAG}..origin/main --oneline +``` + +Group commits into **Features** (`feat:`), **Fixes** (`fix:`), and +everything else (docs/chores — omit from release notes unless substantial). + +For commits that look significant, read the full message: + +```bash +git -C ~/projects/nf-metro log --format="%B" -1 +``` + +## Step 2: Bioconda recipe check + +Fetch the live recipe and compare its `run:` dependencies against +`pyproject.toml`. Do this **before** touching any files — if deps are +missing from the recipe, fixing it now means the bioconda autobump PR +only needs a version + sha256 change and nothing has to be intercepted +mid-flight. + +```bash +# Fetch the live recipe +gh api repos/bioconda/bioconda-recipes/contents/recipes/nf-metro/meta.yaml \ + --jq '.content' | base64 -d + +# Read pyproject deps +grep -A 20 '^dependencies' ~/projects/nf-metro/pyproject.toml +``` + +**What to look for:** + +- Any package in `pyproject.toml` `dependencies` that is **absent** from + the recipe `run:` block is a missing dep. +- Any package in the recipe absent from `pyproject.toml` `dependencies` + is an extra — flag it but don't remove it without asking. +- Version pins don't need to match exactly, but the recipe should cover + at least the same lower bound as pyproject.toml. + +**If there are missing or changed deps**, tell the user clearly before +continuing: + +> ⚠️ **Bioconda recipe needs updating before release.** +> +> Missing from `run:` in the recipe: +> - `foo >=1.0` +> +> The recipe's `build: number:` must also be incremented (current: N → N+1) +> when deps change. + +Then open a bioconda PR: + +1. Fork `bioconda/bioconda-recipes` if needed (or use the existing fork). +2. Edit `recipes/nf-metro/meta.yaml` in the fork: + - Add/update the missing `run:` entries + - Increment `build: number:` by 1 + - Leave `version:` and `sha256:` at their current values — the autobump + bot will update those when the PyPI release lands +3. Open a PR against `bioconda/bioconda-recipes` main: + `Update nf-metro: add to run requirements` +4. Share the PR URL with the user and note: + > This PR only changes deps and build number, not the version. When + > `$NEW_VERSION` lands on PyPI, the bioconda autobump bot will open its + > own PR to update `version:` and `sha256:`. Because the dep changes are + > already in, that autobump PR needs no intervention. + +If the recipe is already in sync, say so and continue. + +## Step 3: Worktree setup + +```bash +git -C ~/projects/nf-metro fetch origin main +git -C ~/projects/nf-metro worktree add /tmp/nf-metro-release-$NEW_VERSION \ + -b release/$NEW_VERSION origin/main +``` + +All subsequent edits happen inside `/tmp/nf-metro-release-$NEW_VERSION`. + +## Step 4: Bump the version in two places + +**`pyproject.toml`** — the `version = "X.Y.Z"` line under `[project]`. + +**`src/nf_metro/__init__.py`** — the `__version__ = "X.Y.Z"` line. + +Verify both: + +```bash +grep '^version' /tmp/nf-metro-release-$NEW_VERSION/pyproject.toml +grep '__version__' /tmp/nf-metro-release-$NEW_VERSION/src/nf_metro/__init__.py +``` + +## Step 5: Draft the release page + +Create `/tmp/nf-metro-release-$NEW_VERSION/docs/releases/$NEW_VERSION.md`. + +```markdown +# v$NEW_VERSION + +** · [GitHub release](https://github.com/seqeralabs/nf-metro/releases/tag/$NEW_VERSION) · [Diff](https://github.com/seqeralabs/nf-metro/compare/$LAST_TAG...$NEW_VERSION) + + + +## + + + +![Description](../assets/renders/.svg) +``` + +**Illustration guidance:** + +- Check what's available: `ls ~/projects/nf-metro/docs/assets/renders/` + (these are the current rendered examples; the builds are gitignored but + the main checkout has a local copy from the last dev build). +- For feature releases, prefer versioned GitHub Pages URLs so readers see + the exact shipped render: + `https://seqeralabs.github.io/nf-metro/$NEW_VERSION/assets/renders/.svg` + These resolve once the GitHub Release is published and the docs deploy runs. +- For patch releases fixing a visual issue, describe the before/after even + if you can only show the after state. +- Patch releases with no visual impact (CI fixes, permission fixes) can be + a single short paragraph with no illustration. + +Present the draft. Ask: "Does this look right? Any changes before I commit?" +Wait for approval. + +## Step 6: Wire the new page into the nav + +### mkdocs.yml + +Find the `Releases:` nav section near the bottom of +`/tmp/nf-metro-release-$NEW_VERSION/mkdocs.yml`. + +**Patch of an existing minor** (e.g. `0.8.1` when `v0.8.x` already exists): +insert the new entry at the **top** of that block: + +```yaml + - v0.8.x: + - v0.8.1: releases/0.8.1.md # ← insert at top + - v0.8.0: releases/0.8.0.md +``` + +**New minor version** (e.g. `0.8.0` when there is no `v0.8.x` block yet): +insert a new block at the top of the version list, immediately after the +`- Overview: releases/index.md` line: + +```yaml + - Releases: + - Overview: releases/index.md + - v0.8.x: # ← new block + - v0.8.0: releases/0.8.0.md + - v0.7.x: + ... +``` + +### releases/index.md + +Insert a new row at the **top** of the table (below the header row) in +`/tmp/nf-metro-release-$NEW_VERSION/docs/releases/index.md`: + +```markdown +| [v$NEW_VERSION]($NEW_VERSION.md) | | | +``` + +## Step 7: Commit and push + +```bash +cd /tmp/nf-metro-release-$NEW_VERSION + +git add pyproject.toml \ + src/nf_metro/__init__.py \ + docs/releases/$NEW_VERSION.md \ + docs/releases/index.md \ + mkdocs.yml + +git commit -m "chore: release $NEW_VERSION" +# No [skip ci] — CI must run on this commit when the PR lands. + +git push -u origin release/$NEW_VERSION +``` + +## Step 8: Open the PR + +```bash +gh pr create \ + --repo seqeralabs/nf-metro \ + --title "chore: release $NEW_VERSION" \ + --body "$(cat <<'EOF' +## Summary + +- Bumps version to $NEW_VERSION in \`pyproject.toml\` and \`__init__.py\` +- Adds \`docs/releases/$NEW_VERSION.md\` and wires it into the nav and index + + + +## After merge + +Create the GitHub Release at https://github.com/seqeralabs/nf-metro/releases/new +with tag \`$NEW_VERSION\` to trigger the PyPI publish and versioned docs deploy. + +🤖 Generated with [Claude Code](https://claude.com/claude-code) +EOF +)" +``` + +## Step 9: After the PR merges + +Remind the user: + +> PR merged. Now create the GitHub Release: +> https://github.com/seqeralabs/nf-metro/releases/new +> +> - **Tag:** `$NEW_VERSION` +> - **Title:** `$NEW_VERSION - ` +> - **Body:** paste the content of `docs/releases/$NEW_VERSION.md` +> (drop the `# v$NEW_VERSION` heading and the GitHub links line — GitHub +> generates those itself) +> +> Publishing triggers: +> - `publish.yml` → builds and uploads to PyPI +> - `docs.yml` → deploys versioned docs at +> `https://seqeralabs.github.io/nf-metro/$NEW_VERSION/` and updates +> the `latest` alias +> +> The bioconda autobump bot will open a PR to `bioconda-recipes` within a +> few hours of the PyPI upload. If the dep check in Step 2 was clean (or +> the dep-update PR was already merged), that autobump PR needs no +> intervention — just approve and merge. + +## Step 10: Cleanup + +```bash +git -C ~/projects/nf-metro worktree remove /tmp/nf-metro-release-$NEW_VERSION +git -C ~/projects/nf-metro branch -d release/$NEW_VERSION +git -C ~/projects/nf-metro worktree prune +``` diff --git a/.claude/skills/render-topologies/SKILL.md b/.claude/skills/render-topologies/SKILL.md new file mode 100644 index 000000000..1593f2725 --- /dev/null +++ b/.claude/skills/render-topologies/SKILL.md @@ -0,0 +1,98 @@ +--- +name: render-topologies +description: Local visual regression check for layout or rendering changes. Renders all gallery examples, pixel-diffs against main, and opens changed renders as BEFORE/AFTER pairs. In most cases the CI render preview on a PR is sufficient - use this skill only for pre-push confidence on risky changes or when the user explicitly asks for a local diff. +disable-model-invocation: true +allowed-tools: Bash(rm -rf *), Bash(python *), Bash(open *), Bash(cd *), Bash(git *), Bash(source *), Bash(pip *), Bash(cp *) +--- + +# Render Topologies + +Local pixel-diff of all gallery renders between the current branch and `origin/main`. Uses `scripts/build_gallery.py` (the same script CI runs), so local results match the PR render preview. + +**Conventions** (substitute if your setup differs): +- Local nf-metro checkout: `~/projects/nf-metro` +- Baseline env: `nf-metro-main`; branch env: `nf-metro` (or `nf-metro-fix-` in worktree mode) +- CI render preview is published at the upstream's GitHub Pages site + (`seqeralabs.github.io/nf-metro/_pr//`); if you ship from a fork + with Pages enabled, the URL will track your fork's owner + +**In most cases you don't need this.** Push to a PR and review the CI-generated render preview at `https://seqeralabs.github.io/nf-metro/_pr//` instead. Use this skill only when: +- You want pre-push confidence before creating a PR +- The user explicitly asks for a local visual comparison +- You're iterating on a change and want fast feedback without pushing + +## Step 1: Detect context + +Determine the working mode: + +- **Worktree mode**: A worktree exists at `/tmp/nf-metro-fix-` with a matching `nf-metro-fix-` env. Use the worktree path and env for branch renders. +- **Standalone mode**: Working from the main repo at `~/projects/nf-metro`. Use the `nf-metro` env for branch renders. Stash or commit any uncommitted changes first. + +## Step 2: Render baseline from main + +Update the main repo checkout and render using the shared `nf-metro-main` baseline environment. Install with `[docs]` extras (same as CI). + +```bash +cd ~/projects/nf-metro && git fetch origin main && git checkout main && git pull origin main +source ~/.local/bin/mm-activate nf-metro-main && pip install -e "$HOME/projects/nf-metro[docs]" -q +cd ~/projects/nf-metro && python scripts/build_gallery.py +# SVGs are in docs/assets/renders/ → copy to a baseline dir +rm -rf /tmp/nf_metro_renders_main && mkdir -p /tmp/nf_metro_renders_main +cp docs/assets/renders/*.svg /tmp/nf_metro_renders_main/ +``` + +## Step 3: Render from the current branch + +Switch back to the branch first (standalone mode) or use the worktree path: + +```bash +# Standalone: switch back to the branch +cd ~/projects/nf-metro && git checkout +source ~/.local/bin/mm-activate nf-metro && pip install -e ".[docs]" -q +python scripts/build_gallery.py +rm -rf /tmp/nf_metro_renders_branch && mkdir -p /tmp/nf_metro_renders_branch +cp docs/assets/renders/*.svg /tmp/nf_metro_renders_branch/ + +# Worktree: use worktree path and env +source ~/.local/bin/mm-activate nf-metro-fix- && pip install -e "/tmp/nf-metro-fix-[docs]" -q +cd /tmp/nf-metro-fix- && python scripts/build_gallery.py +rm -rf /tmp/nf_metro_renders_branch && mkdir -p /tmp/nf_metro_renders_branch +cp /tmp/nf-metro-fix-/docs/assets/renders/*.svg /tmp/nf_metro_renders_branch/ +``` + +## Step 4: Diff and open the report + +Use `scripts/build_render_diff.py` — the same script the CI render-preview +workflow uses — to compare the two SVG directories. It writes a +self-contained HTML page (`index.html`) showing side-by-side before/after +for changed examples only, grouped by section. + +```bash +cd ~/projects/nf-metro +rm -rf /tmp/render_diff && mkdir -p /tmp/render_diff +python scripts/build_render_diff.py \ + /tmp/nf_metro_renders_main \ + /tmp/nf_metro_renders_branch \ + /tmp/render_diff +open /tmp/render_diff/index.html +``` + +Exit codes: `0` = changes detected and report written, `2` = no changes +(skip `open`), `1` = error. The report works directly on SVGs, so no +PNG conversion is needed. + +## Step 5: Report + +- Whether any examples changed (the script's exit code tells you) +- For changed examples, point the user at `/tmp/render_diff/index.html` +- If zero changed, say so and skip `open` + +## Notes + +- Render script: `scripts/build_gallery.py` (same as CI PR render preview workflow). +- Diff script: `scripts/build_render_diff.py` (also matches CI), so local results match the PR render preview. +- Nextflow fixtures (`tests/fixtures/nextflow/*.mmd`) are included in the gallery. +- Baseline always uses `nf-metro-main` env + main repo updated to `origin/main`. +- Install with `[docs]` extras (not `[dev]`) to match CI dependencies. +- After a PR is created, CI renders the authoritative diff at `https://seqeralabs.github.io/nf-metro/_pr//`. +- To render a single file: `python -m nf_metro render -o /tmp/output.svg` diff --git a/.claude/skills/serve-docs/SKILL.md b/.claude/skills/serve-docs/SKILL.md new file mode 100644 index 000000000..8d753821f --- /dev/null +++ b/.claude/skills/serve-docs/SKILL.md @@ -0,0 +1,83 @@ +--- +name: serve-docs +description: Spin up the Astro / Starlight documentation site locally for live preview, optionally for a specific nf-metro branch. Use when the user wants to run, serve, preview, or develop the docs site (website/) - phrases like "serve the docs", "spin up the site", "run the docs locally", "preview the website", "start the astro server", "preview the docs for branch X / this PR", or when iterating on docs content, theme/layout overrides, or the gallery/pipelines/playground pages and wanting to see changes in a browser. Wraps scripts/serve_docs.sh, which generates the git-ignored dynamic content (gallery, pipelines, playground manifest) before starting the dev server, and with --branch checks the branch out into an isolated worktree and installs its nf_metro so the renders reflect that branch. +allowed-tools: Bash(scripts/serve_docs.sh*), Bash(./scripts/serve_docs.sh*), Bash(source *), Bash(cd *), Bash(curl *) +--- + +# Serve the docs site locally + +The docs live in two places (see `CLAUDE.md`): `docs/` holds the hand-written +Markdown, and `website/` is the Astro / Starlight app that renders it. The +Gallery, nf-core pipelines, and playground pages plus all rendered example SVGs +are **generated** and git-ignored, so a bare `npm run dev` gives an incomplete +site. `scripts/serve_docs.sh` handles the generation and the dev server in one +command. + +## Conventions + +- Local checkout: `~/projects/nf-metro` (substitute if yours differs). +- The gallery/playground generators import the `nf_metro` Python package, so the + project env must be active. The convention here is the `nf-metro` micromamba + env: `source ~/.local/bin/mm-activate nf-metro`. If `nf_metro` is not + importable the script warns and still starts the server, but the + Gallery / pipelines / playground pages will be empty. +- The dev server serves at **http://localhost:4321/nf-metro/** (note the + `/nf-metro/` base path). + +## Step 1: Activate the Python env + +```bash +source ~/.local/bin/mm-activate nf-metro +``` + +## Step 2: Run the script + +Preview a specific branch (the common case - e.g. reviewing a PR's docs or +render changes): + +```bash +# Checks out into an isolated worktree (../nf-metro-serve-), +# installs that branch's nf_metro so the gallery renders match the branch, +# regenerates content, and serves. +scripts/serve_docs.sh --branch +``` + +Or preview the current checkout: + +```bash +# First run: generates gallery + playground content (slow), then serves. +# Subsequent runs reuse the content and start almost immediately. +scripts/serve_docs.sh +``` + +Useful flags: + +| Flag | Effect | +|---|---| +| _(none)_ | Generate dynamic content if missing (for the current checkout), then start the dev server. | +| `--branch ` | Serve a specific branch: set up/reuse a worktree, install its `nf_metro`, regenerate content, serve. Always regenerates so renders match the ref. | +| `--worktree-dir

` | Where `--branch` places its worktree (default `../nf-metro-serve-`). | +| `--rebuild` | Force-regenerate gallery + playground content (use after editing `examples/` or the layout engine). | +| `--skip-content` | Skip content generation entirely - fastest when you only touch theme/layout/Markdown and already have content. | +| `--preview` | Production `astro build` + `astro preview` instead of the dev server (mirrors the deployed output more closely). | +| `--no-install` | Skip the npm dependency check. | +| `-- ` | Everything after `--` is forwarded to astro, e.g. `-- --host 0.0.0.0 --port 4000`. | + +`--branch` installs the branch's `nf_metro` (editable) into the **active** env, +so afterwards that env points at the worktree. Re-point it with +`pip install -e ~/projects/nf-metro` when you go back to the main checkout, or +use a dedicated env for branch previews. + +## Step 3: Open it + +Visit **http://localhost:4321/nf-metro/**. The dev server hot-reloads on +edits to `website/` and `docs/`. Stop it with `Ctrl-C`. + +## Notes + +- `--branch` serves a **detached** checkout of the ref, so it works even when + that branch is already checked out in another worktree (e.g. a dev worktree). +- Content (gallery/pipelines/playground) is regenerated, not hot-reloaded: + re-run with `--rebuild` after changing `examples/` or the rendering code. +- For a visual regression diff of renders against `origin/main`, that's a + different job - see the `render-topologies` skill. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..8529c533e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,76 @@ +name: Bug report +description: A render, layout, or parse result that is wrong. Bring a minimized repro. +title: "[bug]: " +labels: + - bug +body: + - type: markdown + attributes: + value: | + Thanks for filing a bug. This project lives on a "dense bug -> isolated fixture" loop: + the fastest path to a fix is a **minimized `.mmd`** that reproduces the problem with as + few lines, lines/stations, and directives as possible. A 200-line pipeline `.mmd` that + "looks wrong somewhere" is much harder to act on than a 10-line fixture that isolates it. + - type: textarea + id: minimized-mmd + attributes: + label: Minimized .mmd repro + description: > + The smallest `.mmd` that still shows the bug. Strip unrelated sections, lines, and + `%%metro` directives until removing anything more makes the bug disappear. + render: text + placeholder: | + %%metro title: Repro + %%metro line: l1 | Line 1 | #ff0000 | solid + + graph LR + a[A] -->|l1| b[B] + b -->|l1| c[C] + validations: + required: true + - type: input + id: render-command + attributes: + label: Render command used + description: The exact `nf-metro` (or `python -m nf_metro`) invocation, including any flags. + placeholder: "nf-metro render repro.mmd -o out.svg --x-spacing 60 --y-spacing 40" + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected result + description: What the render or layout should produce. Describe the geometry/visual you expected. + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual result + description: > + What actually happened. Attach the rendered SVG/PNG if you can, and quote any + error or warning text verbatim. + validations: + required: true + - type: dropdown + id: subsystem + attributes: + label: Suspected subsystem + description: Best guess at where the bug lives. Leave as "Not sure" if unknown. + options: + - Not sure + - parser (Mermaid + %%metro parsing) + - layout (engine, phases, ordering) + - routing (edge routing) + - render (SVG, themes, legend, icons) + - cli (command-line interface) + - convert (Nextflow DAG / external-format conversion) + validations: + required: false + - type: input + id: version + attributes: + label: nf-metro version / commit + description: Output of `nf-metro --version`, or the git commit you ran against. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..2ec8d21c5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Question or usage help + url: https://github.com/seqeralabs/nf-metro/discussions + about: Ask how to author a .mmd, use a directive, or render a pipeline. Open a discussion rather than an issue. + - name: Mermaid + %%metro input format + url: https://github.com/seqeralabs/nf-metro/blob/main/CLAUDE.md + about: Reference for the supported Mermaid subset and %%metro directives before filing a bug. diff --git a/.github/ISSUE_TEMPLATE/new_directive_design.yml b/.github/ISSUE_TEMPLATE/new_directive_design.yml new file mode 100644 index 000000000..8fd1613af --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new_directive_design.yml @@ -0,0 +1,76 @@ +name: New directive design +description: Propose a new %%metro directive or CLI control, with its stability tier and intent classification. +title: "[directive]: " +labels: + - enhancement +body: + - type: markdown + attributes: + value: | + Use this to propose a new `%%metro` directive (or a CLI flag with a directive twin). + Before adding a control surface, we classify two things: which **stability tier** it + belongs to (see #561), and whether it expresses **authored meaning** about the pipeline + or merely a **render preference** (see #549 and #553). Getting these right up front keeps + the control surface from proliferating and keeps committed `.mmd` files reproducible. + - type: textarea + id: proposal + attributes: + label: Proposed directive / control + description: Name, grammar, and what it does. Show the syntax you would write in a `.mmd`. + placeholder: "%%metro : " + validations: + required: true + - type: textarea + id: motivation + attributes: + label: Motivating case + description: > + What render or pipeline can you not currently express well? Include a `.mmd` snippet + and, ideally, the suboptimal render you get today. + validations: + required: true + - type: dropdown + id: stability-tier + attributes: + label: Proposed stability tier + description: "Which tier should this ship in? See the feature-tiers issue (#561)." + options: + - core (stable, broadly useful, supported long-term) + - advanced (stable but niche / power-user) + - experimental (may change or be removed) + validations: + required: true + - type: dropdown + id: intent-classification + attributes: + label: Authored meaning vs render preference + description: > + Does this directive state something true about the pipeline (authored meaning, e.g. "these + two steps are alternatives"), or does it only tune how the diagram looks (render preference, + e.g. spacing/offset)? See #549 and #553. Render preferences ideally have both a directive and + a CLI flag so committed `.mmd` files stay reproducible. + options: + - Authored meaning (a fact about the pipeline/workflow) + - Render preference (a visual/layout tuning knob) + - Mixed / unsure (explain below) + validations: + required: true + - type: textarea + id: classification-rationale + attributes: + label: Classification rationale + description: > + Justify the tier and the meaning-vs-preference choice. If it is a render preference, say + whether it needs a matching CLI flag (and vice versa) so renders stay reproducible from the + committed `.mmd`. + validations: + required: true + - type: textarea + id: interactions + attributes: + label: Interactions and alternatives + description: > + How does this interact with existing directives / auto-layout? Could auto-layout infer it + instead of asking the author to spell it out? Any simpler alternative considered? + validations: + required: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..d373f504e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,50 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: pyproject.toml + - run: pip install -e ".[dev]" + - run: ruff check src/ tests/ + - run: ruff format --check src/ tests/ + - run: mypy + + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + # Runs the prettier hook from prek.toml (web/docs files; Python is handled + # by ruff in the lint job). prek auto-provisions node + prettier + the astro + # plugin; --show-diff-on-failure (added by the action) prints what needs + # formatting. + - uses: j178/prek-action@bdca6f102f98e2b4c7029491a53dfd366469e33d # v2.0.4 + with: + extra-args: prettier --all-files + + test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.11", "3.12", "3.13"] + split: [1, 2, 3] + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: ${{ matrix.python-version }} + cache: pip + cache-dependency-path: pyproject.toml + - run: pip install -e ".[dev,font]" + - run: pytest --splits 3 --group ${{ matrix.split }} diff --git a/.github/workflows/docs-links.yml b/.github/workflows/docs-links.yml new file mode 100644 index 000000000..dcb91a74e --- /dev/null +++ b/.github/workflows/docs-links.yml @@ -0,0 +1,48 @@ +name: Docs link check + +# Builds the Astro site on pull requests so starlight-links-validator runs and +# fails the PR on a broken internal link, rather than only surfacing it when the +# post-merge deploy (docs.yml) builds and fails. + +on: + pull_request: + branches: [main] + paths: + - "docs/**" + - "website/**" + - "examples/**" + - "scripts/build_gallery.py" + - "scripts/gallery.yaml" + - ".github/workflows/docs-links.yml" + +jobs: + links: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: pyproject.toml + + - name: Install nf-metro (gallery generator + render CLI) + run: pip install -e ".[docs]" + + - name: Build gallery + pipelines content + run: python scripts/build_gallery.py + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "24" + cache: npm + cache-dependency-path: website/package-lock.json + + - name: Install npm dependencies + working-directory: website + run: npm ci + + - name: Build site (runs starlight-links-validator) + working-directory: website + run: npm run build diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..9932e5355 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,148 @@ +name: Deploy docs + +on: + push: + branches: [main] + release: + types: [published] + workflow_dispatch: + +permissions: + contents: write + +concurrency: + group: gh-pages + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.12" + + - name: Install nf-metro (gallery generator + wheel build) + run: pip install -e ".[docs]" build + + # --- Generate dynamic content into the Astro project --- + - name: Build playground wheel + # The service worker caches .whl files by name as immutable. The dev + # wheel's version is static, so stamp a content hash into the wheel + # build tag: the filename then changes whenever the wheel does, so a + # returning visitor's cached copy is superseded instead of served stale. + run: | + rm -rf website/public/playground/wheels + python -m build --wheel -o website/public/playground/wheels + cd website/public/playground/wheels + orig=$(basename ./*.whl) + hash=$(sha256sum "$orig" | cut -c1-12) + wheel=$(echo "$orig" | sed -E "s/^([^-]+-[^-]+)-/\1-0$hash-/") + mv "$orig" "$wheel" + printf '{"wheel": "%s"}\n' "$wheel" > index.json + + - name: Write playground build info + run: | + printf '{"sha": "%s"}\n' "$GITHUB_SHA" > website/public/playground/build-info.json + + - name: Build playground example manifest + run: python scripts/build_playground_examples.py + + - name: Build gallery + pipelines (render SVGs, generate pages) + run: python scripts/build_gallery.py + + # --- Build the Astro / Starlight site --- + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "24" + cache: npm + cache-dependency-path: website/package-lock.json + + - name: Install npm dependencies + working-directory: website + run: npm ci + + # --- Resolve deploy target --- + # main push -> dev/ ; tagged release -> latest/ plus a frozen /. + - name: Resolve deploy target + id: ver + run: | + if [ "${{ github.event_name }}" = "release" ]; then + echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" + echo "is_release=true" >> "$GITHUB_OUTPUT" + else + echo "version=dev" >> "$GITHUB_OUTPUT" + echo "is_release=false" >> "$GITHUB_OUTPUT" + fi + + # --- Publish to gh-pages --- + # Each version is its own directory, built with a matching `base` (via + # DOCS_BASE) so its asset and link URLs self-resolve. The deploy only + # replaces its own target directory, leaving PR previews (_pr/), other + # versions, and the frozen pre-Astro MkDocs builds untouched. versions.json + # at the root drives the in-page version switcher. + - name: Publish to gh-pages + env: + VERSION: ${{ steps.ver.outputs.version }} + IS_RELEASE: ${{ steps.ver.outputs.is_release }} + run: | + set -euo pipefail + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + if git ls-remote --exit-code --heads origin gh-pages >/dev/null 2>&1; then + git fetch origin gh-pages --depth=1 + git worktree add gh-pages origin/gh-pages + else + git worktree add --orphan -b gh-pages gh-pages + fi + + build_into() { + (cd website && DOCS_BASE="$1" npm run build) + rm -rf "$2" + mkdir -p "$2" + cp -a website/dist/. "$2/" + } + + if [ "$IS_RELEASE" = "true" ]; then + build_into "/nf-metro/latest/" "gh-pages/latest" + build_into "/nf-metro/$VERSION/" "gh-pages/$VERSION" + python scripts/update_versions_manifest.py \ + --manifest gh-pages/versions.json --version "$VERSION" --latest + else + build_into "/nf-metro/dev/" "gh-pages/dev" + python scripts/update_versions_manifest.py \ + --manifest gh-pages/versions.json --version dev + fi + + # Root redirects to dev/ while the Astro site lives only there. Revert + # the three dev/ references below to latest/ once the first Astro + # release is cut, so the root tracks the latest stable docs again. + cat > gh-pages/index.html <<'HTML' + + + + + Redirecting + + + + Redirecting to dev/... + + HTML + + touch gh-pages/.nojekyll + cd gh-pages + git add -A + if git diff --staged --quiet; then + echo "No changes to publish." + else + git commit -m "docs: deploy ${VERSION} (${GITHUB_SHA::8})" + git push origin HEAD:gh-pages + fi diff --git a/.github/workflows/playground-e2e.yml b/.github/workflows/playground-e2e.yml new file mode 100644 index 000000000..cbd177a2e --- /dev/null +++ b/.github/workflows/playground-e2e.yml @@ -0,0 +1,58 @@ +name: Playground e2e + +on: + pull_request: + paths: + - "website/public/playground/**" + - "website/src/pages/playground.astro" + - "website/playground-tests/**" + - "src/nf_metro/**" + - ".github/workflows/playground-e2e.yml" + workflow_dispatch: + +jobs: + e2e: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.12" + + - name: Build dev wheel for the playground + run: | + pip install build + rm -rf website/public/playground/wheels + python -m build --wheel -o website/public/playground/wheels + WHEEL=$(basename website/public/playground/wheels/*.whl) + printf '{"wheel": "%s"}\n' "$WHEEL" > website/public/playground/wheels/index.json + + - name: Install nf-metro (the manifest generator imports build_gallery) + run: pip install -e ".[docs]" + + - name: Build playground example manifest + run: python scripts/build_playground_examples.py + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "20" + + - name: Install Playwright and Chromium + working-directory: website/playground-tests + run: | + npm install + npx playwright install --with-deps chromium + + - name: Run end-to-end tests + working-directory: website/playground-tests + run: npx playwright test + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + if: failure() + with: + name: playwright-report + path: | + website/playground-tests/playwright-report/ + website/playground-tests/test-results/ + retention-days: 7 diff --git a/.github/workflows/pr-cleanup.yml b/.github/workflows/pr-cleanup.yml new file mode 100644 index 000000000..c7e51a781 --- /dev/null +++ b/.github/workflows/pr-cleanup.yml @@ -0,0 +1,48 @@ +name: Clean up PR render preview + +on: + # pull_request_target runs in the base-repo context with a write token even + # for fork PRs (a fork PR's pull_request token is read-only and cannot push + # to gh-pages). Safe here: no PR-head code is checked out or run; the job only + # removes a directory keyed by the integer PR number. + pull_request_target: + types: [closed] + workflow_dispatch: + inputs: + pr_number: + description: PR number whose preview directory to remove + required: true + +permissions: + contents: write + +concurrency: + group: gh-pages + cancel-in-progress: false + +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + ref: gh-pages + fetch-depth: 1 + + - name: Remove preview directory + env: + PR: ${{ github.event.inputs.pr_number || github.event.number }} + run: | + if ! echo "$PR" | grep -qE '^[0-9]+$'; then + echo "Refusing to act on non-numeric PR number '$PR'." >&2 + exit 1 + fi + if [ -d "_pr/$PR" ]; then + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git rm -rf "_pr/$PR" + git commit -m "Clean up render preview for PR #$PR" + git push + else + echo "No preview directory found for PR #$PR, nothing to clean up." + fi diff --git a/.github/workflows/pr-render-publish.yml b/.github/workflows/pr-render-publish.yml new file mode 100644 index 000000000..fc4945108 --- /dev/null +++ b/.github/workflows/pr-render-publish.yml @@ -0,0 +1,92 @@ +name: Publish render preview + +on: + workflow_run: + workflows: ["PR render preview"] + types: [requested, completed] + +permissions: + contents: write + pull-requests: write + +concurrency: + group: gh-pages + cancel-in-progress: false + +jobs: + pending: + runs-on: ubuntu-latest + if: >- + github.event.workflow_run.event == 'pull_request' && + github.event.action == 'requested' + steps: + - name: Resolve PR number from head SHA + id: pr + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + PR=$(gh api --paginate \ + "repos/${{ github.repository }}/pulls?state=open&per_page=100" \ + --jq ".[] | select(.head.sha == \"${{ github.event.workflow_run.head_sha }}\") | .number" \ + | head -n1) + echo "number=$PR" >> "$GITHUB_OUTPUT" + + - name: Mark preview as rendering + if: steps.pr.outputs.number != '' + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 + with: + header: render-preview + number: ${{ steps.pr.outputs.number }} + message: | + **Render preview**: :hourglass_flowing_sand: rendering in progress... + + publish: + runs-on: ubuntu-latest + if: >- + github.event.workflow_run.event == 'pull_request' && + github.event.action == 'completed' && + github.event.workflow_run.conclusion == 'success' + steps: + - name: Download preview artifact + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + name: render-preview + path: artifact + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Read preview metadata + id: meta + run: | + echo "pr=$(cat artifact/preview_meta/pr_number.txt)" >> "$GITHUB_OUTPUT" + echo "has_changes=$(cat artifact/preview_meta/has_changes.txt)" >> "$GITHUB_OUTPUT" + + - name: Deploy to GitHub Pages + if: steps.meta.outputs.has_changes == 'true' + uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453 # v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: artifact/diff_site + destination_dir: _pr/${{ steps.meta.outputs.pr }} + keep_files: true + + - name: Comment on PR (changes found) + if: steps.meta.outputs.has_changes == 'true' + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 + with: + header: render-preview + number: ${{ steps.meta.outputs.pr }} + message: | + **Render preview** is ready for review: + :framed_picture: https://${{ github.repository_owner }}.github.io/nf-metro/_pr/${{ steps.meta.outputs.pr }}/ + + This preview shows only the renders that changed compared to `main`. + + - name: Comment on PR (no changes) + if: steps.meta.outputs.has_changes == 'false' + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 + with: + header: render-preview + number: ${{ steps.meta.outputs.pr }} + message: | + **Render preview**: no visual changes detected. All renders match `main`. diff --git a/.github/workflows/pr-renders.yml b/.github/workflows/pr-renders.yml new file mode 100644 index 000000000..8ceb2099c --- /dev/null +++ b/.github/workflows/pr-renders.yml @@ -0,0 +1,116 @@ +name: PR render preview + +on: + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + render-diff: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: pyproject.toml + + # Incremental only when every changed file is a fixture .mmd; any other + # change (engine code, build scripts, deps, docs) renders the full corpus, + # so an engine change can never hide behind a reused base SVG. + - name: Determine render strategy + id: strategy + run: | + base='${{ github.event.pull_request.base.sha }}' + head='${{ github.event.pull_request.head.sha }}' + echo "render_ref=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" + changed="$(git diff --name-only "$base" "$head")" + echo "Changed files:"; echo "$changed" + allowed='^(examples/|tests/fixtures/).*\.mmd$' + if [ -n "$changed" ] && [ -z "$(printf '%s\n' "$changed" | grep -vE "$allowed" || true)" ]; then + echo "mode=incremental" >> "$GITHUB_OUTPUT" + echo "Render mode: INCREMENTAL" + else + echo "mode=full" >> "$GITHUB_OUTPUT" + echo "Render mode: FULL" + fi + printf '%s\n' "$changed" > /tmp/changed_mmd.txt + + # Base renders depend only on the base SHA, so cache them. Re-pushes to a + # PR share the same base SHA and reuse this instead of re-rendering. + - name: Cache base renders + id: base-cache + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + with: + path: /tmp/base_renders + key: render-base-${{ github.event.pull_request.base.sha }} + + - name: Install (PR head) + run: pip install -e ".[docs]" + + - name: Render base + if: steps.base-cache.outputs.cache-hit != 'true' + run: | + git checkout '${{ github.event.pull_request.base.sha }}' + pip install -e ".[docs]" + python scripts/build_gallery.py --debug + mkdir -p /tmp/base_renders + cp docs/assets/renders/*.svg docs/assets/renders/manifest.json /tmp/base_renders/ + cp docs/assets/renders/metrics.json /tmp/base_renders/ 2>/dev/null || true + git checkout '${{ steps.strategy.outputs.render_ref }}' + pip install -e ".[docs]" + + - name: Render PR head + run: | + rm -rf docs/assets/renders + mkdir -p docs/assets/renders + if [ "${{ steps.strategy.outputs.mode }}" = "incremental" ]; then + cp -r /tmp/base_renders/. docs/assets/renders/ + python scripts/build_gallery.py --debug --changed-list /tmp/changed_mmd.txt + else + python scripts/build_gallery.py --debug + fi + mkdir -p /tmp/pr_renders + cp docs/assets/renders/*.svg docs/assets/renders/manifest.json /tmp/pr_renders/ + cp docs/assets/renders/metrics.json /tmp/pr_renders/ 2>/dev/null || true + + - name: Generate render diff + id: diff + run: | + set +e + python scripts/build_render_diff.py \ + /tmp/base_renders /tmp/pr_renders /tmp/diff_site \ + --pr ${{ github.event.number }} + EXIT_CODE=$? + set -e + if [ $EXIT_CODE -eq 0 ]; then + echo "has_changes=true" >> "$GITHUB_OUTPUT" + elif [ $EXIT_CODE -eq 2 ]; then + echo "has_changes=false" >> "$GITHUB_OUTPUT" + else + exit $EXIT_CODE + fi + + # A fork PR's GITHUB_TOKEN is read-only, so this job cannot deploy Pages or + # comment. Hand the site plus the publish decision to pr-render-publish.yml, + # which runs from the base repo with a write token via workflow_run. + - name: Stage preview metadata + run: | + mkdir -p /tmp/diff_site /tmp/preview_meta + echo "${{ github.event.number }}" > /tmp/preview_meta/pr_number.txt + echo "${{ steps.diff.outputs.has_changes }}" > /tmp/preview_meta/has_changes.txt + + - name: Upload preview artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: render-preview + path: | + /tmp/diff_site + /tmp/preview_meta + retention-days: 3 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..f83299d90 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,34 @@ +name: Publish to PyPI + +on: + release: + types: [published] + +permissions: + id-token: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.12" + - run: pip install build + - run: python -m build + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: dist + path: dist/ + + publish: + needs: build + runs-on: ubuntu-latest + environment: pypi + steps: + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + name: dist + path: dist/ + - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1 diff --git a/.gitignore b/.gitignore index 0b0abe668..f12c8126f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,23 @@ build/ *.egg .venv/ .env +site/ + +# Generated docs content (scripts/build_gallery.py): SVGs + content collection manifests. +# docs/ holds the hand-written markdown; the Astro site in website/ symlinks it. +docs/assets/renders/ +website/src/content/gallery.json +website/src/content/pipelines.json + +# Build-time SVG render cache for the remark-metro docs plugin. +website/.metro-cache/ + +# Root-level node_modules if prettier or other npm tools are run at repo root. +node_modules/ +package-lock.json + +# Claude Code per-session scratch state (prompts, locks, worktrees) +.claude/prompts/ +.claude/scheduled_tasks.lock +.claude/worktrees/ +.coverage diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..ea3cf53ca --- /dev/null +++ b/.prettierignore @@ -0,0 +1,33 @@ +# Programmatically generated outputs — never reformat these. + +# Generated docs content (scripts/build_gallery.py): markdown + rendered SVGs +docs/gallery/ +docs/pipelines/ +docs/assets/renders/ + +# Auto-generated dev doc (scripts/routing_gate_coverage.py) +docs/dev/routing_gate_coverage.md + +# Golden baselines written and compared by their generator scripts/tests +tests/data/ + +# Python package source and its runtime assets (templates with @@ placeholders, +# shipped JSON schema, render JS). This is ruff's domain, not prettier's. +src/ + +# Vendored Claude Code skills/tooling — not project source +.claude/ + +# Astro build output and generated types +website/dist/ +website/.astro/ + +# Generated playground manifest and dev wheels (scripts/build_playground_examples.py) +website/public/playground/examples.json +website/public/playground/wheels/ + +# npm-generated lockfiles +package-lock.json + +# Dependencies +node_modules/ diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 000000000..c50e616fe --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,17 @@ +// Prettier config. Plugins are resolved with require.resolve so the path is +// absolute: prettier v3 resolves bare plugin names from the working directory +// (the repo root, which has no node_modules), but the prek hook installs +// prettier-plugin-astro into its own isolated node env. require.resolve runs +// in that env and hands prettier a concrete path. See: +// https://github.com/prettier/prettier/issues/15388 +module.exports = { + plugins: [require.resolve("prettier-plugin-astro")], + overrides: [ + { + files: "*.astro", + options: { + parser: "astro", + }, + }, + ], +}; diff --git a/.test_durations b/.test_durations new file mode 100644 index 000000000..e5560ca9f --- /dev/null +++ b/.test_durations @@ -0,0 +1,23424 @@ +{ + "tests/test_animation.py::test_motion_path_segments_lie_on_rendered_geometry[epitopeprediction]": 0.06735741603188217, + "tests/test_animation.py::test_motion_path_segments_lie_on_rendered_geometry[fan_in_merge]": 0.04171016672626138, + "tests/test_animation.py::test_motion_path_segments_lie_on_rendered_geometry[genomeassembly]": 0.06234950106590986, + "tests/test_animation.py::test_motion_path_segments_lie_on_rendered_geometry[hlatyping]": 0.0676900832913816, + "tests/test_animation.py::test_motion_path_segments_lie_on_rendered_geometry[rnaseq_sections]": 0.6710705407895148, + "tests/test_animation.py::test_motion_path_segments_lie_on_rendered_geometry[section_diamond]": 0.03696554200723767, + "tests/test_animation.py::test_motion_path_segments_lie_on_rendered_geometry[wide_fan_in]": 0.045044542057439685, + "tests/test_api.py::test_prepare_graph_returns_settled_graph": 0.10100129200145602, + "tests/test_api.py::test_render_string_honours_theme_and_layout_options": 0.6629473329521716, + "tests/test_api.py::test_render_string_matches_cli_html[rnaseq_auto.mmd]": 0.5444930840749294, + "tests/test_api.py::test_render_string_matches_cli_html[rnaseq_sections.mmd]": 1.3538994169794023, + "tests/test_api.py::test_render_string_matches_cli_html[variantbenchmarking_auto.mmd]": 0.8047568339388818, + "tests/test_api.py::test_render_string_matches_cli_svg[rnaseq_auto.mmd]": 0.3421983339358121, + "tests/test_api.py::test_render_string_matches_cli_svg[rnaseq_sections.mmd]": 1.4189541249070317, + "tests/test_api.py::test_render_string_matches_cli_svg[variantbenchmarking_auto.mmd]": 0.47831554198637605, + "tests/test_api.py::test_render_string_matches_cli_with_explicit_options": 0.5951272079255432, + "tests/test_api.py::test_render_string_propagates_layout_error": 0.005399459041655064, + "tests/test_auto_layout.py::test_below_fold_sections_share_rows_with_return": 0.00025220890529453754, + "tests/test_auto_layout.py::test_build_section_dag": 0.00024391571059823036, + "tests/test_auto_layout.py::test_build_section_dag_multi_line": 0.00020295800641179085, + "tests/test_auto_layout.py::test_direction_explicit_preserved": 0.0001843748614192009, + "tests/test_auto_layout.py::test_direction_inference_lr": 0.00019154162146151066, + "tests/test_auto_layout.py::test_direction_inference_rl": 0.00018195831216871738, + "tests/test_auto_layout.py::test_explicit_grid_section_keeps_lr_against_auto_successor_below": 0.0001854998990893364, + "tests/test_auto_layout.py::test_explicit_grid_sections_default_lr[genomeassembly_staggered.mmd]": 0.25100200111046433, + "tests/test_auto_layout.py::test_explicit_grid_sections_default_lr[sarek_metro.mmd]": 0.16152137494646013, + "tests/test_auto_layout.py::test_explicit_grid_sections_default_lr[topologies/around_section_below.mmd]": 0.011903332313522696, + "tests/test_auto_layout.py::test_explicit_grid_sections_default_lr[topologies/inter_row_wrap_clearance.mmd]": 0.025740457931533456, + "tests/test_auto_layout.py::test_explicit_grid_sections_default_lr[topologies/stacked_lr_serpentine.mmd]": 0.032065917272120714, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[3-deep_linear]": 0.04998645908199251, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[3-fold_double]": 0.07160320808179677, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[3-fold_fan_across]": 0.06209937506355345, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[3-fold_stacked_branch]": 0.07901195902377367, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[3-u_turn_fold]": 0.05384779185988009, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[4-deep_linear]": 0.034650666173547506, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[4-fold_double]": 0.2758183751720935, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[4-fold_fan_across]": 0.05876645795069635, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[4-fold_stacked_branch]": 0.055036208825185895, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[4-u_turn_fold]": 0.03631629189476371, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[9-deep_linear]": 0.04660329082980752, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[9-fold_double]": 0.06145612499676645, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[9-fold_fan_across]": 0.03742837579920888, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[9-fold_stacked_branch]": 0.06251962506212294, + "tests/test_auto_layout.py::test_folded_grid_has_no_negative_columns[9-u_turn_fold]": 0.038906208239495754, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[3-deep_linear]": 0.03239816706627607, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[3-fold_double]": 0.0789882920216769, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[3-fold_fan_across]": 0.07558970805257559, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[3-fold_stacked_branch]": 0.2582775412593037, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[3-u_turn_fold]": 0.03074537613429129, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[4-deep_linear]": 0.03045466705225408, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[4-fold_double]": 0.07611637515947223, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[4-fold_fan_across]": 0.05611791578121483, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[4-fold_stacked_branch]": 0.06860191584564745, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[4-u_turn_fold]": 0.043629916151985526, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[9-deep_linear]": 0.061180499847978354, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[9-fold_double]": 0.07317620725370944, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[9-fold_fan_across]": 0.11315008392557502, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[9-fold_stacked_branch]": 0.07299754116684198, + "tests/test_auto_layout.py::test_folded_grid_preserves_topo_order_in_serpentine_read[9-u_turn_fold]": 0.038227624259889126, + "tests/test_auto_layout.py::test_grid_assignment_branching": 0.0001973749604076147, + "tests/test_auto_layout.py::test_grid_assignment_fold": 0.00021783309057354927, + "tests/test_auto_layout.py::test_grid_assignment_linear_chain": 0.00020016590133309364, + "tests/test_auto_layout.py::test_grid_preserves_explicit_overrides": 0.0001865839585661888, + "tests/test_auto_layout.py::test_no_sections_no_op": 0.00020204298198223114, + "tests/test_auto_layout.py::test_perp_entry_run_stays_in_section_bbox[rnaseq_auto.mmd]": 0.12578004179522395, + "tests/test_auto_layout.py::test_perp_entry_run_stays_in_section_bbox[sarek_metro.mmd]": 0.6984376669861376, + "tests/test_auto_layout.py::test_port_side_explicit_preserved": 0.00018749968148767948, + "tests/test_auto_layout.py::test_port_side_inference_entry": 0.0002278739120811224, + "tests/test_auto_layout.py::test_port_side_inference_exit": 0.00024466589093208313, + "tests/test_auto_layout.py::test_rl_sections_flow_aligned_ports": 0.00019441661424934864, + "tests/test_auto_layout.py::test_rnaseq_auto_grid_positions": 0.08122087502852082, + "tests/test_auto_layout.py::test_rnaseq_auto_renders": 0.13921550125814974, + "tests/test_auto_layout.py::test_rnaseq_auto_sections_have_ports": 0.04766420880332589, + "tests/test_auto_layout.py::test_single_section_no_op": 0.00019033299759030342, + "tests/test_auto_layout.py::test_stacked_lr_sections_flow_aligned_ports": 0.0002544580493122339, + "tests/test_auto_layout.py::test_stacked_sections_infer_left_entry": 0.2620698339305818, + "tests/test_axis_centrelines.py::test_axis_point_split_roundtrip[x]": 0.0004061248619109392, + "tests/test_axis_centrelines.py::test_axis_point_split_roundtrip[y]": 0.0005731671117246151, + "tests/test_axis_centrelines.py::test_diagonal_centreline_transposes_by_axis": 0.00017133192159235477, + "tests/test_axis_centrelines.py::test_lr_diagonal_routes_through_shared_diagonal_builder": 0.04274474969133735, + "tests/test_axis_centrelines.py::test_lr_perp_exit_routes_through_shared_corner_builder": 0.024448332143947482, + "tests/test_axis_centrelines.py::test_rl_shares_lr_orientation": 0.0007062081713229418, + "tests/test_axis_centrelines.py::test_single_corner_centreline_entry_swaps_leg_order": 0.00021820911206305027, + "tests/test_axis_centrelines.py::test_single_corner_centreline_exit_transposes_by_axis": 0.0005758330225944519, + "tests/test_axis_centrelines.py::test_tb_diagonal_routes_through_shared_diagonal_builder": 0.018527376232668757, + "tests/test_axis_centrelines.py::test_tb_lr_entry_routes_through_shared_corner_builder": 0.033455458004027605, + "tests/test_axis_centrelines.py::test_tb_lr_exit_routes_through_shared_corner_builder[tb_lr_exit_left.mmd]": 0.03672999981790781, + "tests/test_axis_centrelines.py::test_tb_lr_exit_routes_through_shared_corner_builder[tb_lr_exit_right.mmd]": 0.039516709046438336, + "tests/test_axis_frame.py::test_accessors_read_and_write_named_coordinate[LR]": 0.00019899988546967506, + "tests/test_axis_frame.py::test_accessors_read_and_write_named_coordinate[RL]": 0.0001982077956199646, + "tests/test_axis_frame.py::test_accessors_read_and_write_named_coordinate[TB]": 0.00019379076547920704, + "tests/test_axis_frame.py::test_axes_for_direction_names_vertical_and_horizontal_flow[BT-expected3]": 0.0002655410207808018, + "tests/test_axis_frame.py::test_axes_for_direction_names_vertical_and_horizontal_flow[LR-expected0]": 0.00027433293871581554, + "tests/test_axis_frame.py::test_axes_for_direction_names_vertical_and_horizontal_flow[RL-expected1]": 0.00043920776806771755, + "tests/test_axis_frame.py::test_axes_for_direction_names_vertical_and_horizontal_flow[TB-expected2]": 0.00021816673688590527, + "tests/test_axis_frame.py::test_for_direction_matches_axes_for_direction[BT]": 0.0002053340431302786, + "tests/test_axis_frame.py::test_for_direction_matches_axes_for_direction[LR]": 0.00264279218390584, + "tests/test_axis_frame.py::test_for_direction_matches_axes_for_direction[RL]": 0.0002337489277124405, + "tests/test_axis_frame.py::test_for_direction_matches_axes_for_direction[TB]": 0.0002152088563889265, + "tests/test_axis_frame.py::test_lane_delta_round_trips_to_positive_builder_offset[LR-travel0-12.5]": 0.00026145833544433117, + "tests/test_axis_frame.py::test_lane_delta_round_trips_to_positive_builder_offset[LR-travel0-4.0]": 0.0003386237658560276, + "tests/test_axis_frame.py::test_lane_delta_round_trips_to_positive_builder_offset[TB-travel1-12.5]": 0.0002507918979972601, + "tests/test_axis_frame.py::test_lane_delta_round_trips_to_positive_builder_offset[TB-travel1-4.0]": 0.0002397908829152584, + "tests/test_axis_frame.py::test_lane_delta_to_normal_offset_is_sign_lookup_for_axis_aligned_travel": 0.00017608259804546833, + "tests/test_axis_frame.py::test_lanes_run_along_y_tracks_secondary_axis[BT-False]": 0.0002504992298781872, + "tests/test_axis_frame.py::test_lanes_run_along_y_tracks_secondary_axis[LR-True]": 0.0003605831880122423, + "tests/test_axis_frame.py::test_lanes_run_along_y_tracks_secondary_axis[RL-True]": 0.00030362512916326523, + "tests/test_axis_frame.py::test_lanes_run_along_y_tracks_secondary_axis[TB-False]": 0.000271292170509696, + "tests/test_axis_frame.py::test_lr_primary_is_x_secondary_is_y": 0.00022837589494884014, + "tests/test_axis_frame.py::test_rl_shares_lr_axes_but_reverses_primary_sign": 0.0004300009459257126, + "tests/test_axis_frame.py::test_secondary_sign_fans_tb_lanes_opposite_lr[BT-1.0]": 0.00023712520487606525, + "tests/test_axis_frame.py::test_secondary_sign_fans_tb_lanes_opposite_lr[LR-1.0]": 0.00028916727751493454, + "tests/test_axis_frame.py::test_secondary_sign_fans_tb_lanes_opposite_lr[RL-1.0]": 0.0002613330725580454, + "tests/test_axis_frame.py::test_secondary_sign_fans_tb_lanes_opposite_lr[TB--1.0]": 0.00024779210798442364, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[BT-0.0]": 0.00021241605281829834, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[BT-12.5]": 0.0002424160484224558, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[BT-4.0]": 0.00022987578995525837, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[LR-0.0]": 0.00023349886760115623, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[LR-12.5]": 0.00023237522691488266, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[LR-4.0]": 0.00025087385438382626, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[RL-0.0]": 0.00022162403911352158, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[RL-12.5]": 0.0002244170755147934, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[RL-4.0]": 0.00024179206229746342, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[TB-0.0]": 0.00023808423429727554, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[TB-12.5]": 0.0002454579807817936, + "tests/test_axis_frame.py::test_station_lane_coord_applies_sign_at_draw_accessor[TB-4.0]": 0.00022316724061965942, + "tests/test_axis_frame.py::test_tb_transposes_axes": 0.0012456239201128483, + "tests/test_backward_feed.py::test_backward_feed_rejected_without_validate[lr]": 0.015199000015854836, + "tests/test_backward_feed.py::test_backward_feed_rejected_without_validate[rl]": 0.022210458992049098, + "tests/test_backward_feed.py::test_cli_rejects_backward_feed[render-lr]": 0.040660916827619076, + "tests/test_backward_feed.py::test_cli_rejects_backward_feed[render-rl]": 0.011415374930948019, + "tests/test_backward_feed.py::test_cli_rejects_backward_feed[validate-lr]": 0.03972725011408329, + "tests/test_backward_feed.py::test_cli_rejects_backward_feed[validate-rl]": 0.01359133212827146, + "tests/test_backward_feed.py::test_compute_layout_rejects_same_row_backward_feed[lr]": 0.015218083979561925, + "tests/test_backward_feed.py::test_compute_layout_rejects_same_row_backward_feed[rl]": 0.008152209222316742, + "tests/test_backward_feed.py::test_legitimate_backward_layouts_not_rejected[cross-row-around]": 0.028309999965131283, + "tests/test_backward_feed.py::test_legitimate_backward_layouts_not_rejected[explicit-exit-runway]": 0.022814084077253938, + "tests/test_bare_render.py::test_bare_canvas_narrower_multi_section": 0.721545834094286, + "tests/test_bare_render.py::test_bare_canvas_narrower_than_full": 0.0036143751349300146, + "tests/test_bare_render.py::test_bare_cli_flag": 1.4950589169748127, + "tests/test_bare_render.py::test_bare_height_includes_watermark": 0.0030526251066476107, + "tests/test_bare_render.py::test_bare_is_valid_svg": 0.003416666993871331, + "tests/test_bare_render.py::test_bare_keeps_watermark": 0.0028636252973228693, + "tests/test_bare_render.py::test_bare_no_title_class_element": 0.00395733374170959, + "tests/test_bare_render.py::test_bare_omits_title": 0.011665958212688565, + "tests/test_bare_render.py::test_bare_viewbox_starts_at_origin": 0.004386958898976445, + "tests/test_bare_render.py::test_full_chrome_still_has_title": 0.003953541861847043, + "tests/test_bare_render.py::test_full_viewbox_starts_at_origin": 0.009676791029050946, + "tests/test_bottom_row_climb_invariant.py::test_generated_clear_corridor_climb_stays_at_row_level[span4]": 0.023298332700505853, + "tests/test_bottom_row_climb_invariant.py::test_generated_clear_corridor_climb_stays_at_row_level[span5]": 0.02982924855314195, + "tests/test_bottom_row_climb_invariant.py::test_static_fixture_clear_corridor_climb_stays_at_row_level": 0.05711479182355106, + "tests/test_bridge_glyph.py::test_animation_paths_flow_over_gaps": 0.8409762908704579, + "tests/test_bridge_glyph.py::test_bridge_span_lies_on_under_segment[differentialabundance_default]": 0.5313621249515563, + "tests/test_bridge_glyph.py::test_bridge_span_lies_on_under_segment[genomic_pipeline]": 0.5729037921410054, + "tests/test_bridge_glyph.py::test_bridges_clear_of_nodes[differentialabundance_default]": 0.26140529103577137, + "tests/test_bridge_glyph.py::test_bridges_clear_of_nodes[genomic_pipeline]": 0.6038187919184566, + "tests/test_bridge_glyph.py::test_detection_is_deterministic[differentialabundance_default]": 0.5003398333210498, + "tests/test_bridge_glyph.py::test_detection_is_deterministic[genomic_pipeline]": 1.122070665936917, + "tests/test_bridge_glyph.py::test_distinct_colour_crossings_not_bridged": 0.8795894999057055, + "tests/test_bridge_glyph.py::test_genuine_crossings_produce_bridges[differentialabundance_default]": 0.24110662401653826, + "tests/test_bridge_glyph.py::test_genuine_crossings_produce_bridges[genomic_pipeline]": 0.5656817082781345, + "tests/test_bridge_glyph.py::test_issue484_same_colour_crossover_is_bridged": 0.00022875098511576653, + "tests/test_bridge_glyph.py::test_join_approach_not_bridged": 0.29024183307774365, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[complex_multipath]": 0.08221079176291823, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[differentialabundance]": 0.2917110421694815, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[funcprofiler_upstream]": 0.3186120828613639, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[genomeassembly]": 0.09408304211683571, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[rnaseq_auto]": 0.1367606681305915, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[rnaseq_sections]": 0.6744218750391155, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[shared_sink_parallel]": 0.06561562418937683, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[trunk_through_fan]": 0.03304820810444653, + "tests/test_bridge_glyph.py::test_no_bridges_without_crossings[variant_calling]": 0.04917112598195672, + "tests/test_bridge_glyph.py::test_rendered_under_line_has_pen_up": 0.6476246239617467, + "tests/test_bridge_glyph.py::test_same_line_fan_legs_are_not_a_crossover": 0.0002244170755147934, + "tests/test_bridge_glyph.py::test_same_line_independent_legs_are_a_crossover": 0.0001883762888610363, + "tests/test_bridge_glyph.py::test_shared_colour_bundle_breaks_whole": 0.27932479116134346, + "tests/test_bridge_glyph.py::test_theme_toggle_disables_bridges": 0.4500283331144601, + "tests/test_bt_orientation.py::test_bt_chain_fixture_renders": 0.00906629185192287, + "tests/test_bt_orientation.py::test_bt_chain_flows_bottom_to_top": 0.011875001015141606, + "tests/test_bt_orientation.py::test_bt_chain_is_tb_chain_mirrored_on_y": 0.016316625056788325, + "tests/test_bt_orientation.py::test_bt_frame_is_tb_reflected_on_flow_axis": 0.00017037522047758102, + "tests/test_bundle_order_invariant.py::test_check_skips_clean_bundle": 0.00022266595624387264, + "tests/test_bundle_order_invariant.py::test_check_skips_single_line_bundle": 0.0002451259642839432, + "tests/test_bundle_order_invariant.py::test_cross_column_perp_entry_preserves_bundle_order[lr_perp_bottom_exit_perp_entry]": 0.02965829079039395, + "tests/test_bundle_order_invariant.py::test_cross_column_perp_entry_preserves_bundle_order[lr_perp_top_exit_perp_entry]": 0.012326957890763879, + "tests/test_bundle_order_invariant.py::test_cross_column_perp_entry_preserves_bundle_order[lr_perp_top_exit_perp_entry_diverging]": 0.027789250947535038, + "tests/test_bundle_order_invariant.py::test_left_entry_wrap_preserves_bundle_order[down-1-0]": 0.01374683273024857, + "tests/test_bundle_order_invariant.py::test_left_entry_wrap_preserves_bundle_order[up-0-1]": 0.009770916076377034, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/centered_tracks.mmd]": 0.02448374987579882, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/cross_track_interchange.mmd]": 0.046729540918022394, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/diagonal_labels.mmd]": 0.04166570887900889, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/differentialabundance.mmd]": 0.3547565408516675, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/differentialabundance_default.mmd]": 0.1829632909502834, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/directional_flow.mmd]": 0.024572000140324235, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/disconnected_components.mmd]": 0.032121459022164345, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/epitopeprediction.mmd]": 0.08811120921745896, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/file_icons.mmd]": 0.032478000270202756, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/genomeassembly.mmd]": 0.09588137571699917, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/genomeassembly_staggered.mmd]": 0.09904004191048443, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/genomic_pipeline.mmd]": 0.28884133393876255, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/group_labels.mmd]": 0.023636248894035816, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/hlatyping.mmd]": 0.04297479218803346, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/legend_combo.mmd]": 0.018912124447524548, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/legend_logo_placement.mmd]": 0.03396850009448826, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/line_spread.mmd]": 0.0508367489092052, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/longread_variant_calling.mmd]": 0.14632458402775228, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/marker_styles.mmd]": 0.23811129084788263, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/off_track_outputs.mmd]": 0.013051207875832915, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/rail_mode.mmd]": 0.019522166112437844, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/rail_section.mmd]": 0.06413100007921457, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/rnaseq_auto.mmd]": 0.10857304208911955, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/rnaseq_sections.mmd]": 0.4836426249239594, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.4765056651085615, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/sarek_metro.mmd]": 0.15985637600533664, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/simple_pipeline.mmd]": 0.013560124905779958, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/tb_file_termini.mmd]": 0.030355207854881883, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.05605629179626703, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.028372999979183078, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/around_section_below.mmd]": 0.03808916686102748, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.042451499961316586, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.04734562570229173, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.03564849984832108, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.06028095888905227, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bt_chain.mmd]": 0.010682917200028896, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.021785875782370567, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.02385058393701911, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bt_fork.mmd]": 0.007359541952610016, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.020189958158880472, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.012593666790053248, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.019468626007437706, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.01404745876789093, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.06314574973657727, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.04100279323756695, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.03753095795400441, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.02144145919010043, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.06932320795021951, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.037371081998571754, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.030430958839133382, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.04338887520134449, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.027134709060192108, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.03762158425524831, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.01928283297456801, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/complex_multipath.mmd]": 0.04334820690564811, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.025902000023052096, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.23369245789945126, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.026975583052262664, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.016131791984662414, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.026614457834511995, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.009425333701074123, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.02371441712602973, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/deep_linear.mmd]": 0.054857166949659586, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.05516191688366234, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.024063457967713475, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.03763229097239673, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.012559498893097043, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.019094417104497552, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.030684081837534904, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.05522633297368884, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03196133277378976, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/fold_double.mmd]": 0.13939624978229403, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.1326770419254899, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.10874316608533263, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.25113395834341645, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/header_nudge.mmd]": 0.026703375158831477, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.011517791775986552, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.025827042059972882, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.10898070875555277, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.018892666092142463, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.04761937400326133, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.045837667072191834, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.028470665914937854, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.017125041922554374, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.010229292791336775, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.020895125111564994, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.019362084101885557, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.01896016695536673, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.025082875043153763, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.019291042117401958, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.022779626306146383, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.021433999994769692, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.01465712464414537, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.03326025023125112, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.016573790926486254, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.02076346008107066, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.014065917115658522, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.2321299167815596, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.033088665921241045, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.031223166966810822, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.028032250003889203, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.02400050009600818, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.023317499551922083, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.032936417032033205, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.036574207711964846, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.02892404212616384, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.052981749875470996, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.030373291112482548, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.0394488328602165, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.015375792048871517, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.01794429076835513, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.03947245771996677, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.036548292031511664, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.018210624810308218, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.041828209068626165, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.035649875877425075, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.10608320729807019, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/parallel_independent.mmd]": 0.028170417994260788, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.05704362504184246, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.03636875026859343, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.010038375156000257, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.012830373831093311, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.011543083004653454, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.01788958301767707, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.008723916718736291, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.11252000043168664, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.01004020869731903, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.011619959026575089, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.01955979084596038, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.010390708222985268, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.030644957907497883, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.06311212503351271, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.02518937597051263, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/section_diamond.mmd]": 0.023781499825417995, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.02423954103142023, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.04453183291479945, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/single_section.mmd]": 0.008323207963258028, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.01221754215657711, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.026985083939507604, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.03192374994978309, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.016036416869610548, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.03415049985051155, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.24925387394614518, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.011052542133256793, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.01353995781391859, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.020851917332038283, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.027146499138325453, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.019397916039451957, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.022851707879453897, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.0211714596953243, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.02995241736061871, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.026607624953612685, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.031824707286432385, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.020604958990588784, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.021272458136081696, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.019077624892815948, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/terminus_join.mmd]": 0.008421042002737522, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.027477748692035675, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.016356623731553555, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.08958395780064166, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.008868373930454254, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/upward_bypass.mmd]": 0.04606220778077841, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/variant_calling.mmd]": 0.1942565420176834, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.05643808422610164, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.0370129169896245, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.019231167621910572, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.013514334103092551, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/variant_calling.mmd]": 0.02268208423629403, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/variant_calling_tuned.mmd]": 0.0483925009611994, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/variantbenchmarking.mmd]": 0.39979545772075653, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.17373549891635776, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[examples/variantprioritization.mmd]": 0.04399995761923492, + "tests/test_bundle_order_invariant.py::test_no_bundle_order_violations_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.02877508313395083, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/centered_tracks.mmd]": 0.03954608319327235, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/cross_track_interchange.mmd]": 0.04960654187016189, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/diagonal_labels.mmd]": 0.0606647920794785, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/differentialabundance.mmd]": 0.20787220890633762, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/differentialabundance_default.mmd]": 0.17125937598757446, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/directional_flow.mmd]": 0.015423374949023128, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/disconnected_components.mmd]": 0.03471620776690543, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/epitopeprediction.mmd]": 0.24716141703538597, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/file_icons.mmd]": 0.02487491606734693, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/genomeassembly.mmd]": 0.06814404181204736, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/genomeassembly_staggered.mmd]": 0.09550633397884667, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/genomic_pipeline.mmd]": 0.3728843340650201, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/group_labels.mmd]": 0.032291874988004565, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/hlatyping.mmd]": 0.03912549908272922, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/legend_combo.mmd]": 0.028852667193859816, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/legend_logo_placement.mmd]": 0.054457166930660605, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/line_spread.mmd]": 0.050512625835835934, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/longread_variant_calling.mmd]": 0.15181791665963829, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/marker_styles.mmd]": 0.03169429232366383, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/off_track_outputs.mmd]": 0.02062291605398059, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/rail_mode.mmd]": 0.042305208975449204, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/rail_section.mmd]": 0.03162708296440542, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/rnaseq_auto.mmd]": 0.26560583314858377, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/rnaseq_sections.mmd]": 0.4199062918778509, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.34993725013919175, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/sarek_metro.mmd]": 0.1850808330345899, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/simple_pipeline.mmd]": 0.008897834224626422, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/tb_file_termini.mmd]": 0.042779960203915834, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.035352166974917054, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.02356054214760661, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/around_section_below.mmd]": 0.033665875205770135, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.034791541285812855, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.021083292085677385, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.04329420905560255, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.08605345827527344, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bt_chain.mmd]": 0.01861183298751712, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.01601862395182252, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.023046750109642744, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bt_fork.mmd]": 0.006335167214274406, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.01081391703337431, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.029331543250009418, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.011587125016376376, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.009750999044626951, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.07504133298061788, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.05273520830087364, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.052150582894682884, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.02947120787575841, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.06573429168201983, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.02698212512768805, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.042090625036507845, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.037639707792550325, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.02675408311188221, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.016022625844925642, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.017383042024448514, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/complex_multipath.mmd]": 0.036410250002518296, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.031208832748234272, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.12924229283817112, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.01985866785980761, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.011794625082984567, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.011300917016342282, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.013184665935114026, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.03289754223078489, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/deep_linear.mmd]": 0.060744999907910824, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.03349345806054771, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.015583083033561707, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.2344872490502894, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.013174792053177953, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.017411540960893035, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.025366708170622587, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.04850758286193013, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.0407349169254303, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/fold_double.mmd]": 0.09691408392973244, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.11799708311446011, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.2056131660938263, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.2681328330654651, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/header_nudge.mmd]": 0.027081001084297895, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.03253545891493559, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.015843084314838052, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.027924374910071492, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.01810870785266161, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.057048582937568426, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.03885366697795689, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.041121832793578506, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.027095333905890584, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.015626832842826843, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.018190667033195496, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.016165582928806543, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.024174582911655307, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.01784908422268927, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.020294749177992344, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.01020704093389213, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.014355710241943598, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.014677708968520164, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.016219957964494824, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.014742917148396373, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.018068874021992087, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.014803083147853613, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.010595083003863692, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.034229748882353306, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.023247833363711834, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.03225354012101889, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.04103287495672703, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.027077707927674055, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.03455649898387492, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.04279529210180044, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.029466750100255013, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.05304687493480742, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.03935404191724956, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.03023179154843092, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.20237987372092903, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.02838062448427081, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.03359291492961347, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.03170699975453317, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.03277800022624433, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.03846799908205867, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.025458625983446836, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.08893804205581546, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/parallel_independent.mmd]": 0.016897667199373245, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.03458904195576906, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.0356128322891891, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.010777624789625406, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.0178557513281703, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.02052358305081725, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.017641499871388078, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.01629529078491032, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.1310306249652058, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.013822918059304357, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.012134665856137872, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.017386707942932844, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.014511959161609411, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.02538079093210399, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.07650770805776119, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.021192417247220874, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/section_diamond.mmd]": 0.0438247078564018, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.07962570805102587, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.06398058426566422, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/single_section.mmd]": 0.009861709084361792, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.035745915956795216, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.028290499933063984, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.045757957734167576, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.01752345892600715, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.04158266703598201, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.03226191713474691, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.018575292080640793, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.011673666071146727, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.0198011239990592, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.04050912382081151, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.0431422081310302, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.028420249931514263, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.020389291923493147, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.02438908303156495, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.011749791214242578, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.05652233399450779, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.021347958128899336, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.02052345941774547, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.01884308340959251, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/terminus_join.mmd]": 0.004956124117597938, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.017434041015803814, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.03537304210476577, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.06826974987052381, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.01624966482631862, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/upward_bypass.mmd]": 0.05874883313663304, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/variant_calling.mmd]": 0.16234841709956527, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.2805070837493986, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.033200708916410804, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.011866374872624874, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.021973543101921678, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/variant_calling.mmd]": 0.030451166909188032, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/variant_calling_tuned.mmd]": 0.0318422089330852, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/variantbenchmarking.mmd]": 0.1995774160604924, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.3891183740925044, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[examples/variantprioritization.mmd]": 0.052319498965516686, + "tests/test_bundle_order_invariant.py::test_no_tb_exit_corner_column_flips_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.026197874220088124, + "tests/test_bundle_order_invariant.py::test_synthetic_flipped_corner_is_caught": 0.00043208408169448376, + "tests/test_bundle_order_invariant.py::test_tb_exit_corner_continues_column_and_keeps_bundle_order[04_directions]": 0.04444374912418425, + "tests/test_bundle_order_invariant.py::test_tb_exit_corner_continues_column_and_keeps_bundle_order[junction_entry_reversed_fold]": 0.022475999779999256, + "tests/test_bundle_order_invariant.py::test_violation_message_self_describing": 0.000177083071321249, + "tests/test_bypass_centreline.py::test_bypass_corner_radii_anchored_at_floor[bypass_gap2_rightward_overflow]": 0.0299982069991529, + "tests/test_bypass_centreline.py::test_bypass_corner_radii_anchored_at_floor[bypass_leftward_overflow]": 0.04840399930253625, + "tests/test_bypass_centreline.py::test_bypass_corner_radii_anchored_at_floor[differentialabundance]": 0.5046009160578251, + "tests/test_bypass_centreline.py::test_bypass_corner_radii_anchored_at_floor[fan_in_merge]": 0.048604041105136275, + "tests/test_bypass_centreline.py::test_bypass_corner_radii_anchored_at_floor[funcprofiler_upstream]": 0.24825224885717034, + "tests/test_bypass_centreline.py::test_bypass_corner_radii_anchored_at_floor[longread_variant_calling]": 0.17775079095736146, + "tests/test_bypass_centreline.py::test_bypass_corner_radii_anchored_at_floor[upward_bypass]": 0.04726224974729121, + "tests/test_bypass_centreline.py::test_bypass_corners_are_concentric_and_unflipped[bypass_gap2_rightward_overflow]": 0.04887258284725249, + "tests/test_bypass_centreline.py::test_bypass_corners_are_concentric_and_unflipped[bypass_leftward_overflow]": 0.05202441709116101, + "tests/test_bypass_centreline.py::test_bypass_corners_are_concentric_and_unflipped[differentialabundance]": 0.2097377898171544, + "tests/test_bypass_centreline.py::test_bypass_corners_are_concentric_and_unflipped[fan_in_merge]": 0.03301095776259899, + "tests/test_bypass_centreline.py::test_bypass_corners_are_concentric_and_unflipped[funcprofiler_upstream]": 0.27999966591596603, + "tests/test_bypass_centreline.py::test_bypass_corners_are_concentric_and_unflipped[longread_variant_calling]": 0.15750099997967482, + "tests/test_bypass_centreline.py::test_bypass_corners_are_concentric_and_unflipped[upward_bypass]": 0.06589658302254975, + "tests/test_bypass_centreline.py::test_bypass_routes_are_offset_baked[bypass_gap2_rightward_overflow]": 0.03935266681946814, + "tests/test_bypass_centreline.py::test_bypass_routes_are_offset_baked[bypass_leftward_overflow]": 0.08805212494917214, + "tests/test_bypass_centreline.py::test_bypass_routes_are_offset_baked[differentialabundance]": 0.18117854092270136, + "tests/test_bypass_centreline.py::test_bypass_routes_are_offset_baked[fan_in_merge]": 0.034563709050416946, + "tests/test_bypass_centreline.py::test_bypass_routes_are_offset_baked[funcprofiler_upstream]": 0.27976829186081886, + "tests/test_bypass_centreline.py::test_bypass_routes_are_offset_baked[longread_variant_calling]": 0.12001883191987872, + "tests/test_bypass_centreline.py::test_bypass_routes_are_offset_baked[upward_bypass]": 0.07839241623878479, + "tests/test_bypass_centreline.py::test_route_tapered_anchored_pairs_the_two_channel_fans": 0.00023595872335135937, + "tests/test_bypass_centreline.py::test_single_line_bypass_descent_turns_tight": 0.056540707824751735, + "tests/test_bypass_invariants.py::test_folded_genome_align_express_clears_skipped_marker": 0.13793795905075967, + "tests/test_bypass_invariants.py::test_folded_pseudo_align_entry_clears_sibling_marker": 0.09000125015154481, + "tests/test_bypass_invariants.py::test_guide_lines_dont_cross_non_consumer_markers[05_file_icons.mmd]": 0.01706275111064315, + "tests/test_bypass_invariants.py::test_guide_lines_dont_cross_non_consumer_markers[05c_files_icon.mmd]": 0.020623458083719015, + "tests/test_bypass_invariants.py::test_guide_lines_dont_cross_non_consumer_markers[05d_folder_icon.mmd]": 0.01690516620874405, + "tests/test_bypass_invariants.py::test_guide_lines_dont_cross_non_consumer_markers[06a_without_hidden.mmd]": 0.03623474994674325, + "tests/test_bypass_invariants.py::test_guide_lines_dont_cross_non_consumer_markers[06b_with_hidden.mmd]": 0.036942873848602176, + "tests/test_bypass_invariants.py::test_inrow_express_skip_bows_around_skipped_marker": 0.008963167201727629, + "tests/test_bypass_invariants.py::test_is_bypass_v_recognises_resolve_generated_helpers[05_file_icons.mmd]": 0.017740792129188776, + "tests/test_bypass_invariants.py::test_is_bypass_v_recognises_resolve_generated_helpers[05c_files_icon.mmd]": 0.018905708100646734, + "tests/test_bypass_invariants.py::test_is_bypass_v_recognises_resolve_generated_helpers[05d_folder_icon.mmd]": 0.23469191673211753, + "tests/test_bypass_invariants.py::test_is_bypass_v_recognises_resolve_generated_helpers[06a_without_hidden.mmd]": 0.026284125167876482, + "tests/test_bypass_invariants.py::test_is_bypass_v_recognises_resolve_generated_helpers[06b_with_hidden.mmd]": 0.028567873872816563, + "tests/test_bypass_invariants.py::test_no_bypass_inserted_for_quiet_fixtures[examples/epitopeprediction.mmd]": 0.04607016802765429, + "tests/test_bypass_invariants.py::test_no_bypass_inserted_for_quiet_fixtures[examples/rnaseq_auto.mmd]": 0.051747208926826715, + "tests/test_centered_tracks.py::test_demo_fixture_balanced_and_valid": 0.03179874992929399, + "tests/test_centered_tracks.py::test_flag_off_default": 0.018784250132739544, + "tests/test_centered_tracks.py::test_flag_off_tracks_unchanged": 0.021281166234984994, + "tests/test_centered_tracks.py::test_flag_on_layout_validates_and_centres_y": 0.02853150013834238, + "tests/test_centered_tracks.py::test_flag_on_parsed": 0.01739279180765152, + "tests/test_centered_tracks.py::test_flag_on_trunk_centred_and_exclusives_straddle": 0.012875083833932877, + "tests/test_centered_tracks.py::test_fork_weave_exclusive_runs_ride_their_line_rail": 0.01970516610890627, + "tests/test_centered_tracks.py::test_fork_weave_layout_each_line_run_on_correct_side": 0.016579917166382074, + "tests/test_centered_tracks.py::test_guard_balanced_runs_and_no_ops": 0.03188070701435208, + "tests/test_centered_tracks.py::test_guard_flags_collapsed_exclusive_run": 0.021979876095429063, + "tests/test_centered_tracks.py::test_per_section_centered_override_balances_and_validates": 0.03569312486797571, + "tests/test_centered_tracks.py::test_per_section_centered_override_parses": 0.017410709289833903, + "tests/test_centreline_inter_section.py::test_inter_section_bundles_are_concentric_and_unflipped[asymmetric_tree]": 0.11477470793761313, + "tests/test_centreline_inter_section.py::test_inter_section_bundles_are_concentric_and_unflipped[complex_multipath]": 0.0468523760791868, + "tests/test_centreline_inter_section.py::test_inter_section_bundles_are_concentric_and_unflipped[fold_stacked_branch]": 0.1520223340485245, + "tests/test_centreline_inter_section.py::test_inter_section_bundles_are_concentric_and_unflipped[rnaseq_sections]": 0.5527181678917259, + "tests/test_centreline_inter_section.py::test_inter_section_bundles_are_concentric_and_unflipped[variantbenchmarking_auto]": 0.21121679106727242, + "tests/test_centreline_inter_section.py::test_multi_line_inter_section_bundles_are_offset_baked[asymmetric_tree]": 0.04788399930112064, + "tests/test_centreline_inter_section.py::test_multi_line_inter_section_bundles_are_offset_baked[complex_multipath]": 0.05492841638624668, + "tests/test_centreline_inter_section.py::test_multi_line_inter_section_bundles_are_offset_baked[fold_stacked_branch]": 0.3507924589794129, + "tests/test_centreline_inter_section.py::test_multi_line_inter_section_bundles_are_offset_baked[rnaseq_sections]": 0.4474165830761194, + "tests/test_centreline_inter_section.py::test_multi_line_inter_section_bundles_are_offset_baked[variantbenchmarking_auto]": 0.15875316597521305, + "tests/test_clear_channel_target_push.py::test_push_direction_follows_target[-50.0-False]": 0.00023774988949298859, + "tests/test_clear_channel_target_push.py::test_push_direction_follows_target[200.0-False]": 0.00022604200057685375, + "tests/test_clear_channel_target_push.py::test_push_direction_follows_target[480.0-True]": 0.00028816726990044117, + "tests/test_clear_channel_target_push.py::test_push_direction_follows_target[None-False]": 0.0002328343689441681, + "tests/test_clear_channel_target_push.py::test_repro_rna_descent_routes_toward_target": 0.027504165656864643, + "tests/test_cli.py::test_info_captures_parse_warnings": 0.004852750105783343, + "tests/test_cli.py::test_info_default_matches_formatter": 0.28607991617172956, + "tests/test_cli.py::test_info_json_is_valid_and_structured": 0.533081165747717, + "tests/test_cli.py::test_info_output": 0.09511749888770282, + "tests/test_cli.py::test_info_verbose_adds_introspection": 0.1032479158602655, + "tests/test_cli.py::test_render_center_ports_cli_flag_accepted": 1.390911583090201, + "tests/test_cli.py::test_render_center_ports_cli_overrides_directive": 1.415303957881406, + "tests/test_cli.py::test_render_default_output": 0.612406250089407, + "tests/test_cli.py::test_render_nonexistent_file": 0.0015121260657906532, + "tests/test_cli.py::test_render_produces_svg": 0.6436189997475594, + "tests/test_cli.py::test_render_responsive_flag_omits_fixed_dimensions": 0.64621387491934, + "tests/test_cli.py::test_render_section_gap_options": 0.6151864582207054, + "tests/test_cli.py::test_render_svg_ends_with_newline": 0.6276617080438882, + "tests/test_cli.py::test_render_with_theme": 0.6975260418839753, + "tests/test_cli.py::test_validate_bad_file": 0.002737667178735137, + "tests/test_cli.py::test_validate_default_skips_layout[backward_feed_rl.mmd]": 0.008963125059381127, + "tests/test_cli.py::test_validate_default_skips_layout[merge_trunk_rightward_source.mmd]": 0.03317870758473873, + "tests/test_cli.py::test_validate_default_skips_layout[mixed_entry_opposing.mmd]": 0.010538458125665784, + "tests/test_cli.py::test_validate_default_skips_layout[mixed_entry_perpendicular.mmd]": 0.013178249821066856, + "tests/test_cli.py::test_validate_strict_escalates_warning_to_error": 0.002349876333028078, + "tests/test_cli.py::test_validate_success": 0.4098695002030581, + "tests/test_cli.py::test_validate_surfaces_warnings_without_failing": 0.002742708893492818, + "tests/test_cli.py::test_validate_svg_no_manifest": 0.7532593328505754, + "tests/test_cli.py::test_validate_svg_rejects_nonconforming": 0.6368429169524461, + "tests/test_cli.py::test_validate_svg_success": 0.7562121662776917, + "tests/test_cli.py::test_validate_with_layout_catches_layout_invariant[backward_feed_rl.mmd]": 0.012160833459347486, + "tests/test_cli.py::test_validate_with_layout_catches_layout_invariant[merge_trunk_rightward_source.mmd]": 0.022743082838132977, + "tests/test_cli.py::test_validate_with_layout_catches_layout_invariant[mixed_entry_opposing.mmd]": 0.02563675120472908, + "tests/test_cli.py::test_validate_with_layout_catches_layout_invariant[mixed_entry_perpendicular.mmd]": 0.010506875813007355, + "tests/test_cli.py::test_validate_with_layout_passes_clean_file": 1.0115377909969538, + "tests/test_cli.py::test_version": 0.0008403751999139786, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/centered_tracks.mmd]": 0.031426750123500824, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/cross_track_interchange.mmd]": 0.06167808291502297, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/diagonal_labels.mmd]": 0.0579994588624686, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/differentialabundance.mmd]": 0.20365441706962883, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/differentialabundance_default.mmd]": 0.16511075105518103, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/directional_flow.mmd]": 0.014778124634176493, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/disconnected_components.mmd]": 0.024377498775720596, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/epitopeprediction.mmd]": 0.08132758201099932, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/file_icons.mmd]": 0.018114792183041573, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/genomeassembly.mmd]": 0.06874120910651982, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/genomeassembly_staggered.mmd]": 0.2612977509852499, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/genomic_pipeline.mmd]": 0.36094020889140666, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/group_labels.mmd]": 0.02274179202504456, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/hlatyping.mmd]": 0.05875887512229383, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/legend_combo.mmd]": 0.02705795899964869, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/legend_logo_placement.mmd]": 0.052451335126534104, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/line_spread.mmd]": 0.06132995896041393, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/longread_variant_calling.mmd]": 0.17472249898128211, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/marker_styles.mmd]": 0.02080116607248783, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/off_track_outputs.mmd]": 0.02016358426772058, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/rail_mode.mmd]": 0.028717791894450784, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/rail_section.mmd]": 0.034169458784163, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/rnaseq_auto.mmd]": 0.11454458278603852, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/rnaseq_sections.mmd]": 0.4983573751524091, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/rnaseq_sections_manual.mmd]": 0.8239668339956552, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/sarek_metro.mmd]": 0.208651500986889, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/simple_pipeline.mmd]": 0.011306292144581676, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/tb_file_termini.mmd]": 0.022263000020757318, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.05540379183366895, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/around_below_ep_col_gt0.mmd]": 0.029212041292339563, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/around_section_below.mmd]": 0.0245040412992239, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/asymmetric_tree.mmd]": 0.048945833928883076, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.041982625145465136, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/branch_fold_forward.mmd]": 0.049474791856482625, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/branch_fold_stability.mmd]": 0.024374542059376836, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bt_chain.mmd]": 0.006234374130144715, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bt_exit_top_above.mmd]": 0.012667166069149971, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bt_exit_top_above_2line.mmd]": 0.01917304191738367, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bt_fork.mmd]": 0.006538542918860912, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bt_perp_entry_below.mmd]": 0.026183375157415867, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bt_to_lr.mmd]": 0.011634291149675846, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bt_to_tb.mmd]": 0.010161041980609298, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bundle_terminator_continuation.mmd]": 0.006992916576564312, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.06554841483011842, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.02304866723716259, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_label_rake.mmd]": 0.035405001137405634, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_label_rake_left.mmd]": 0.0354550841730088, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_label_rake_wide.mmd]": 0.041402958100661635, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.03566495794802904, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_leftward_overflow.mmd]": 0.03383641643449664, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/bypass_v_tight.mmd]": 0.021857626037672162, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/clear_channel_target_aware_push.mmd]": 0.01861145906150341, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/compact_gap_peer_conflict.mmd]": 0.016393832629546523, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/compact_hidden_passthrough.mmd]": 0.017060250975191593, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/complex_multipath.mmd]": 0.03714987589046359, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/convergence_stacked_sink.mmd]": 0.0531334588304162, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.27062775008380413, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.041019251104444265, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/cross_col_top_entry.mmd]": 0.008774834219366312, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/cross_column_perp_drop.mmd]": 0.010616375133395195, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.013087583938613534, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/cross_row_gap_wrap.mmd]": 0.03433549986220896, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/deep_linear.mmd]": 0.05713529186323285, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/disjoint_sameline_trunks.mmd]": 0.030606458196416497, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/divergent_fanout_split.mmd]": 0.01926033291965723, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/dogleg_exempt_distinct.mmd]": 0.023846748983487487, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/dogleg_exempt_sameline.mmd]": 0.012963043060153723, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/dogleg_twoline_fanout.mmd]": 0.01814270718023181, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.016064750961959362, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/fan_bypass_nesting.mmd]": 0.03234720905311406, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/fan_in_merge.mmd]": 0.2377665836829692, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/fold_double.mmd]": 0.24326162436045706, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/fold_fan_across.mmd]": 0.11475295783020556, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/fold_stacked_branch.mmd]": 0.128530457848683, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/funcprofiler_upstream.mmd]": 0.21604895778000355, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/header_nudge.mmd]": 0.013597666984423995, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/header_side_rotated.mmd]": 0.020941958064213395, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/inrow_skip_breeze.mmd]": 0.01907878997735679, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/inter_row_wrap_clearance.mmd]": 0.03958470933139324, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/interchange_lane_reorder.mmd]": 0.013124374905601144, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/junction_entry_align.mmd]": 0.05818404094316065, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/junction_entry_collision.mmd]": 0.02930699964053929, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/junction_entry_reversed_fold.mmd]": 0.018318625632673502, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/junction_fanout_convergence.mmd]": 0.021814166102558374, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/left_entry_up_wrap.mmd]": 0.036141248885542154, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/left_exit_sink_below.mmd]": 0.037418457912281156, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.03784849983640015, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.02863291697576642, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.02623524982482195, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.08049291791394353, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.01710375095717609, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.03611954185180366, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_to_tb_top_drop.mmd]": 0.011189833050593734, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.010615833103656769, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.02496420801617205, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.010158374207094312, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_top_entry_cross_column.mmd]": 0.009735041065141559, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.014542250195518136, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_around_below_leftmost.mmd]": 0.03168070665560663, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_bottom_row_bypass.mmd]": 0.04802937502972782, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.03347545792348683, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_offrow_continuation.mmd]": 0.022178792161867023, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_port_above_approach.mmd]": 0.04136487632058561, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_pullaway.mmd]": 0.01921649998985231, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_right_entry.mmd]": 0.04727529105730355, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.024493375793099403, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/merge_trunk_over_low_section.mmd]": 0.16637929086573422, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/mismatched_tracks.mmd]": 0.06153333396650851, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/mixed_bundle_column.mmd]": 0.1873036662582308, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/mixed_port_sides.mmd]": 0.01995716686360538, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/multi_input_convergence.mmd]": 0.026826916029676795, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/multi_line_bundle.mmd]": 0.02674141596071422, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.03606566716916859, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/near_vertical_junction_hook.mmd]": 0.021225792123004794, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/off_track_convergence.mmd]": 0.02927000098861754, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/off_track_convergence_multiline.mmd]": 0.03356658318080008, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/off_track_input_above_consumer.mmd]": 0.12154845800250769, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/parallel_independent.mmd]": 0.020808540983125567, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.02903079171665013, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/peeloff_riser_respace.mmd]": 0.0332572921179235, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/post_convergence_trunk.mmd]": 0.010834290878847241, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/rail_inter_section.mmd]": 0.01045570895075798, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/rail_offtrack_fan.mmd]": 0.012244956800714135, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/rail_offtrack_io.mmd]": 0.014685041503980756, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/rail_offtrack_plain_io.mmd]": 0.015702000120654702, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/reconverge_reversed_fold.mmd]": 0.0990467092487961, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/right_entry_from_above.mmd]": 0.01081837504170835, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/right_entry_from_above_far.mmd]": 0.015426042024046183, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.01844641612842679, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.014903041068464518, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/rl_entry_runway.mmd]": 0.028494790894910693, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/rnaseq_lite.mmd]": 0.07928008423186839, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/route_around_intervening.mmd]": 0.015018000034615397, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/section_diamond.mmd]": 0.02748650126159191, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/self_crossing_bridge.mmd]": 0.025952873984351754, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/shared_sink_parallel.mmd]": 0.044257208006456494, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/single_section.mmd]": 0.008329999865964055, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/stacked_left_exit_drop.mmd]": 0.010041957953944802, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/stacked_lr_serpentine.mmd]": 0.02323341672308743, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.043282957980409265, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.016842873767018318, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.03295150026679039, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.030329291243106127, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.014357416657730937, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_convergence_straight_drop.mmd]": 0.02920529106631875, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_internal_diagonal.mmd]": 0.019116208888590336, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_left_exit_step.mmd]": 0.02796325017698109, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_lr_exit_left.mmd]": 0.024693125160411, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_lr_exit_right.mmd]": 0.031746748834848404, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_passthrough_continuation.mmd]": 0.008444668026641011, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_passthrough_trunk.mmd]": 0.03303125035017729, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.015378916170448065, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_right_entry_stack.mmd]": 0.02260516700334847, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_trunk_through_fan.mmd]": 0.01451420783996582, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/tb_two_line_vert_seam.mmd]": 0.014924248913303018, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/terminal_symmetric_fan.mmd]": 0.02273724996484816, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/terminus_join.mmd]": 0.009686416946351528, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/top_entry_header_clash.mmd]": 0.019032999174669385, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/trunk_through_fan.mmd]": 0.04406466567888856, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/u_turn_fold.mmd]": 0.2853087910916656, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/uneven_diamond.mmd]": 0.013118334114551544, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/upward_bypass.mmd]": 0.04847795912064612, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/variant_calling.mmd]": 0.1821129999589175, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/wide_fan_in.mmd]": 0.032879500184208155, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/wide_fan_out.mmd]": 0.03536650072783232, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/wide_label_fan.mmd]": 0.013504624832421541, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/topologies/wrapped_label_trunk.mmd]": 0.008540833136066794, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/variant_calling.mmd]": 0.04536454100161791, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/variant_calling_tuned.mmd]": 0.05904029216617346, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/variantbenchmarking.mmd]": 0.21080233436077833, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/variantbenchmarking_auto.mmd]": 0.2625158322043717, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[examples/variantprioritization.mmd]": 0.2644075839780271, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/bubble_forced_label_clears_diagonal.mmd]": 0.017026500310748816, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/bubble_label_clears_diagonal.mmd]": 0.012556749861687422, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/bubble_output_above.mmd]": 0.010512291919440031, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/captioned_sibling_outputs.mmd]": 0.03354925033636391, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/da_pipeline.mmd]": 0.29406145797111094, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/diagonal_single_trunk_off_track.mmd]": 0.08185066585429013, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/file_icon_fanin.mmd]": 0.03701870911754668, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/font_scale.mmd]": 0.014725250890478492, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/genomeassembly_organellar.mmd]": 0.10524658299982548, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/icon_caption_wrap.mmd]": 0.0048458329401910305, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/leaf_file_icon_on_trunk.mmd]": 0.01624812581576407, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/multiline_labels.mmd]": 0.042678416008129716, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/off_track_output_branched.mmd]": 0.027783290948718786, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/off_track_outputs_along_trunk.mmd]": 0.19828316592611372, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rail_diagonal_labels.mmd]": 0.006905250949785113, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rail_marked_single_line.mmd]": 0.027446166845038533, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rail_marker_fill.mmd]": 0.006089040776714683, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rail_marker_subset_interchange.mmd]": 0.021461917087435722, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rail_pitch_vs_labels.mmd]": 0.027300291694700718, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rail_single_line_callers.mmd]": 0.010841958923265338, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rnaseq_sections.mmd]": 0.5263315418269485, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/rnaseq_simple.mmd]": 0.01450437493622303, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/tb_right_exit_feeder_slots.mmd]": 0.02430337597616017, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.024031709181144834, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/trunk_align_matching_bundle.mmd]": 0.0346870010253042, + "tests/test_coincide_track_radii.py::test_coincide_pass_corners_match_central_derivation[tests/fixtures/uneven_diamond.mmd]": 0.01390983210876584, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[topologies/convergence_stacked_sink.mmd]": 0.03778550121933222, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[topologies/divergent_fanout_split.mmd]": 0.013806917006149888, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[topologies/merge_around_below_leftmost.mmd]": 0.024966834113001823, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[topologies/merge_pullaway.mmd]": 0.03756758291274309, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[topologies/merge_right_entry.mmd]": 0.03214362496510148, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[topologies/merge_trunk_out_of_range_section.mmd]": 0.04250220814719796, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[variantbenchmarking.mmd]": 0.20802312507294118, + "tests/test_coincide_track_radii.py::test_named_coincide_fixtures_snap_at_least_one_corner[variantbenchmarking_auto.mmd]": 0.2160634167958051, + "tests/test_coincide_track_radii.py::test_reintroduced_hand_clobber_is_detected[topologies/merge_right_entry.mmd]": 0.020499291131272912, + "tests/test_coincide_track_radii.py::test_reintroduced_hand_clobber_is_detected[variantbenchmarking.mmd]": 0.18236383330076933, + "tests/test_coincide_track_radii.py::test_set_vchannel_x_rederives_flanking_corners_from_waypoints": 0.0008418329525738955, + "tests/test_collinear_overlay_1074.py::test_no_inter_section_collinear_overlay[fold_double]": 0.42146149976179004, + "tests/test_collinear_overlay_1074.py::test_no_inter_section_collinear_overlay[tb_bottom_exit_bundle_jog]": 0.02210537507198751, + "tests/test_collinear_overlay_1074.py::test_no_inter_section_collinear_overlay[tb_right_exit_feeder_slots]": 0.022595332004129887, + "tests/test_collinear_overlay_1074.py::test_no_inter_section_collinear_overlay[tb_trunk_through_fan]": 0.010904875118285418, + "tests/test_collinear_overlay_1074.py::test_no_inter_section_collinear_overlay[wide_fan_in]": 0.03204770712181926, + "tests/test_collinear_overlay_1074.py::test_no_intra_section_collinear_overlay[fold_double]": 0.11897574993781745, + "tests/test_collinear_overlay_1074.py::test_no_intra_section_collinear_overlay[tb_bottom_exit_bundle_jog]": 0.015229417011141777, + "tests/test_collinear_overlay_1074.py::test_no_intra_section_collinear_overlay[tb_right_exit_feeder_slots]": 0.028586999978870153, + "tests/test_collinear_overlay_1074.py::test_no_intra_section_collinear_overlay[tb_trunk_through_fan]": 0.01147674978710711, + "tests/test_collinear_overlay_1074.py::test_no_intra_section_collinear_overlay[wide_fan_in]": 0.03509829193353653, + "tests/test_concentric_bundle_corners.py::test_concentric_wholesale_corner_passes": 0.0009755836799740791, + "tests/test_concentric_bundle_corners.py::test_diagonal_leg_is_not_a_corner": 0.000191207742318511, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/centered_tracks.mmd]": 0.02636612392961979, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/cross_track_interchange.mmd]": 0.02614987501874566, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/diagonal_labels.mmd]": 0.28408116614446044, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/differentialabundance.mmd]": 0.18182641617022455, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/differentialabundance_default.mmd]": 0.1714308748487383, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/directional_flow.mmd]": 0.024851375026628375, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/disconnected_components.mmd]": 0.03141916706226766, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/epitopeprediction.mmd]": 0.0866157931741327, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/file_icons.mmd]": 0.031152959214523435, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/genomeassembly.mmd]": 0.09546974906697869, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/genomeassembly_staggered.mmd]": 0.06742112501524389, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/genomic_pipeline.mmd]": 0.3522541669663042, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/group_labels.mmd]": 0.02214391715824604, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/hlatyping.mmd]": 0.054140709107741714, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/legend_combo.mmd]": 0.012336707906797528, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/legend_logo_placement.mmd]": 0.04907774901948869, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/line_spread.mmd]": 0.2524814170319587, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/longread_variant_calling.mmd]": 0.11231883405707777, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/marker_styles.mmd]": 0.028795499820262194, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/off_track_outputs.mmd]": 0.02039645705372095, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/rail_mode.mmd]": 0.025110748829320073, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/rail_section.mmd]": 0.039723501075059175, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/rnaseq_auto.mmd]": 0.12877233396284282, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/rnaseq_sections.mmd]": 0.5388898341916502, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.4598480421118438, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/sarek_metro.mmd]": 0.3471376250963658, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/simple_pipeline.mmd]": 0.008643623907119036, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/tb_file_termini.mmd]": 0.028962292009964585, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.04115608427673578, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.023336791899055243, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/around_section_below.mmd]": 0.025123167084529996, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.03187612607143819, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.026282624807208776, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.024940540781244636, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.046492999885231256, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bt_chain.mmd]": 0.0070068747736513615, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.01668587513267994, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.01913212495855987, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bt_fork.mmd]": 0.018014042172580957, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.018859332893043756, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.01847183285281062, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.014406749745830894, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.007552833296358585, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.09642091603018343, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.046584540978074074, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.027788333827629685, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.032361458986997604, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.05886195879429579, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.02782754204235971, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.043385082855820656, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.3167412921320647, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.024326791986823082, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.024154957849532366, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.01759475003927946, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/complex_multipath.mmd]": 0.07425345899537206, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.04711708170361817, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.17825829121284187, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.03223799867555499, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.014795376220718026, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.015721709234640002, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.011633167043328285, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.03046125080436468, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/deep_linear.mmd]": 0.060041626216843724, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.04211220913566649, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.01462387409992516, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.03944220906123519, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.026006458792835474, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.01976916566491127, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.03886479209177196, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.043270457768812776, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03710283408872783, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/fold_double.mmd]": 0.10935691697522998, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.08124437578953803, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.1236402487847954, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.5065650001633912, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/header_nudge.mmd]": 0.023094041040167212, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.029457376105710864, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.01024720910936594, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.021487626247107983, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.01395391603000462, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.05371420830488205, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.029193083755671978, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.02239199890755117, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.02743787528015673, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.009844291722401977, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.03337104106321931, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.01680795894935727, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.023157625226303935, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.031360958237200975, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.019763750256970525, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.018367293290793896, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.022656500339508057, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.012727874098345637, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.019369707675650716, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.00980970892123878, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.018148624803870916, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.016550750005990267, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.025961960200220346, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.038999584736302495, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.030397083144634962, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.0454558739438653, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.022635874804109335, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.03218441712670028, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.03445720882155001, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.025631249183788896, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.03491758182644844, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.028801501030102372, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.028115749824792147, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.02309016603976488, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.01836195820942521, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.021006041672080755, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.027592791942879558, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.03390091680921614, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.032148292288184166, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.023608083138242364, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.020195999881252646, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.08729466586373746, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/parallel_independent.mmd]": 0.02669800096191466, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.031354666920378804, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.05211058305576444, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.07319583417847753, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.008015041472390294, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.008849499048665166, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.00899362494237721, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.011818957980722189, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.08843937516212463, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.012100416934117675, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.012803333112969995, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.014118790859356523, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.19185029109939933, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.031972582917660475, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.05546708405017853, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.028189499164000154, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/section_diamond.mmd]": 0.035833416040986776, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.022804874926805496, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.051176292123273015, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/single_section.mmd]": 0.005812417948618531, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.019877082901075482, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.03457720810547471, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.04249995783902705, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.02356508281081915, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.018102957867085934, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.027579875197261572, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.01345783262513578, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.010541165713220835, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.02092325105331838, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.03366504097357392, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.021259374218061566, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.02483737515285611, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.009419748792424798, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.023049292154610157, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.01019558310508728, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.025220874696969986, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.01617066585458815, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.025495792040601373, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.017663500970229506, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/terminus_join.mmd]": 0.004801874747499824, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.013423958094790578, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.04351662611588836, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.08062675013206899, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.012209750013425946, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/upward_bypass.mmd]": 0.04519329220056534, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/variant_calling.mmd]": 0.22700958419591188, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.022259500110521913, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.04324691626243293, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.026691207895055413, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.01924899988807738, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/variant_calling.mmd]": 0.05042300000786781, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/variant_calling_tuned.mmd]": 0.06176358298398554, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/variantbenchmarking.mmd]": 0.2239093752577901, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.17171916575171053, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[examples/variantprioritization.mmd]": 0.052245249040424824, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/bubble_forced_label_clears_diagonal.mmd]": 0.011210334254428744, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/bubble_label_clears_diagonal.mmd]": 0.010658541927114129, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/bubble_output_above.mmd]": 0.008718000026419759, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/captioned_sibling_outputs.mmd]": 0.010606293333694339, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/da_pipeline.mmd]": 0.17462591617368162, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/diagonal_single_trunk_off_track.mmd]": 0.06920191622339189, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/file_icon_fanin.mmd]": 0.03067770996131003, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/font_scale.mmd]": 0.010716583812609315, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/genomeassembly_organellar.mmd]": 0.09239387488923967, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/icon_caption_wrap.mmd]": 0.004367041168734431, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/leaf_file_icon_on_trunk.mmd]": 0.007937456713989377, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/multiline_labels.mmd]": 0.023728083353489637, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/off_track_output_branched.mmd]": 0.012128541246056557, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/off_track_outputs_along_trunk.mmd]": 0.02206395915709436, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rail_diagonal_labels.mmd]": 0.01166920829564333, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rail_marked_single_line.mmd]": 0.033878999995067716, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rail_marker_fill.mmd]": 0.006190290907397866, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rail_marker_subset_interchange.mmd]": 0.008142959326505661, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rail_pitch_vs_labels.mmd]": 0.029423749772831798, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rail_single_line_callers.mmd]": 0.010835501132532954, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rnaseq_sections.mmd]": 0.5192414592020214, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/rnaseq_simple.mmd]": 0.006221000105142593, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/tb_right_exit_feeder_slots.mmd]": 0.02018649992533028, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.022104459116235375, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/trunk_align_matching_bundle.mmd]": 0.02918079192750156, + "tests/test_concentric_bundle_corners.py::test_no_non_concentric_bundle_corners_in_gallery[tests/fixtures/uneven_diamond.mmd]": 0.010446208994835615, + "tests/test_concentric_bundle_corners.py::test_non_concentric_wholesale_corner_is_caught": 0.0002851241733878851, + "tests/test_concentric_bundle_corners.py::test_single_line_bundle_is_skipped": 0.00016783224418759346, + "tests/test_concentric_bundle_corners.py::test_transition_corner_with_one_pinned_leg_is_skipped": 0.0004054990131407976, + "tests/test_constant_relations.py::test_bypass_clearance_holds_two_corner_radii": 0.00016212486661970615, + "tests/test_constant_relations.py::test_coordinate_tolerance_tiers_strictly_ordered": 0.0001918321941047907, + "tests/test_constant_relations.py::test_offset_step_below_bypass_nest_step": 0.00016474979929625988, + "tests/test_constant_relations.py::test_relations_hold_on_current_values": 0.0002975841052830219, + "tests/test_constant_relations.py::test_same_coord_tolerance_below_offset_step": 0.000164498807862401, + "tests/test_constant_relations.py::test_station_elbow_tolerance_at_least_offset_step": 0.00020524999126791954, + "tests/test_constant_relations.py::test_violation_raises[BYPASS_CLEARANCE-1.0]": 0.0002437923103570938, + "tests/test_constant_relations.py::test_violation_raises[OFFSET_STEP-99.0]": 0.00023541739210486412, + "tests/test_constant_relations.py::test_violation_raises[SAME_COORD_TOLERANCE-5.0]": 0.0003110421821475029, + "tests/test_constant_relations.py::test_violation_raises[STATION_ELBOW_TOLERANCE-0.0]": 0.00024675019085407257, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/centered_tracks]": 0.03083762526512146, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/cross_track_interchange]": 0.07090787612833083, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/diagonal_labels]": 0.12352058314718306, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/differentialabundance]": 0.4092820829246193, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/differentialabundance_default]": 0.6083535409998149, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/directional_flow]": 0.02953295921906829, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/disconnected_components]": 0.05389666580595076, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/epitopeprediction]": 0.10644116625189781, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/file_icons]": 0.027432332979515195, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/genomeassembly]": 0.17489783302880824, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/genomeassembly_staggered]": 0.16331054270267487, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/genomic_pipeline]": 0.6473561672028154, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/group_labels]": 0.037409083219245076, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/hlatyping]": 0.09340574988164008, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/legend_combo]": 0.036023084074258804, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/legend_logo_placement]": 0.07640933408401906, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/longread_variant_calling]": 0.3411835841834545, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/marker_styles]": 0.06121945893391967, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/off_track_outputs]": 0.019983417121693492, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/rnaseq_auto]": 0.41405866597779095, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/rnaseq_sections]": 0.981598915765062, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/rnaseq_sections_manual]": 0.8499377081170678, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/simple_pipeline]": 0.025135040981695056, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/tb_file_termini]": 0.1228034570813179, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/variant_calling]": 0.06695349980145693, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/variant_calling_tuned]": 0.09330320777371526, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/variantbenchmarking]": 0.4837450839113444, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/variantbenchmarking_auto]": 0.3862724578939378, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[examples/variantprioritization]": 0.37554262508638203, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/01_minimal]": 0.018893166910856962, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/02_sections]": 0.04039462376385927, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/03_fan_out]": 0.09413699992001057, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/03b_fan_in_merge]": 0.06779966619797051, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/04_directions]": 0.0710825000423938, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/05_file_icons]": 0.049356625182554126, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/05b_multi_icons]": 0.04496479197405279, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/05c_files_icon]": 0.040748834144324064, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/05d_folder_icon]": 0.039365083212032914, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/05f_banner_labels]": 0.03920808411203325, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/06a_without_hidden]": 0.13291708286851645, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[guide/06b_with_hidden]": 0.07198208291083574, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[nextflow/duplicate_processes]": 0.02692037494853139, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[nextflow/flat_pipeline]": 0.028859624871984124, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[nextflow/unquoted_labels]": 0.01836245902813971, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[nextflow/variant_calling]": 0.08477566670626402, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[nextflow/with_subworkflows]": 0.049354041926562786, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/bubble_forced_label_clears_diagonal]": 0.04226270806975663, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/bubble_label_clears_diagonal]": 0.027798541821539402, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/bubble_output_above]": 0.0337799577973783, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/captioned_sibling_outputs]": 0.041463415836915374, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/da_pipeline]": 0.4244993329048157, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/diagonal_single_trunk_off_track]": 0.17160670878365636, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/file_icon_fanin]": 0.09899845789186656, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/font_scale]": 0.019598042126744986, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/genomeassembly_organellar]": 0.5548498746939003, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/icon_caption_wrap]": 0.01380804181098938, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/leaf_file_icon_on_trunk]": 0.02495966712012887, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/multiline_labels]": 0.03462762385606766, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/off_track_output_branched]": 0.036545957904309034, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/off_track_outputs_along_trunk]": 0.04297516797669232, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/rnaseq_sections]": 0.7162672919221222, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/rnaseq_simple]": 0.013619124656543136, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/tb_right_exit_feeder_slots]": 0.0689700001385063, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/trunk_align_matching_bundle]": 0.022716500097885728, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[tests/uneven_diamond]": 0.01045558275654912, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/aligner_row_pinned_continuation]": 0.16475283401086926, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/around_below_ep_col_gt0]": 0.04353378992527723, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/around_section_below]": 0.0535333335865289, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/asymmetric_tree]": 0.1392461669165641, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bottom_row_climb_clear_corridor]": 0.051890040980651975, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/branch_fold_forward]": 0.07151629077270627, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/branch_fold_stability]": 0.09828712465241551, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bt_chain]": 0.015564917121082544, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bt_exit_top_above]": 0.036930167116224766, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bt_exit_top_above_2line]": 0.06401183409616351, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bt_fork]": 0.02511987485922873, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bt_perp_entry_below]": 0.02416070713661611, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bt_to_lr]": 0.025579584063962102, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bt_to_tb]": 0.029090125113725662, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bundle_terminator_continuation]": 0.01648187404498458, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_fan_in_outer_slot]": 0.15480375080369413, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_gap2_rightward_overflow]": 0.13300933316349983, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_label_rake]": 0.048796084243804216, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_label_rake_left]": 0.05672187521122396, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_label_rake_wide]": 0.10723562398925424, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_leftward_far_side_entry]": 0.05139958206564188, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_leftward_overflow]": 0.047452166909351945, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/bypass_v_tight]": 0.07897120784036815, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/clear_channel_target_aware_push]": 0.06947766616940498, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/compact_gap_peer_conflict]": 0.0569582509342581, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/compact_hidden_passthrough]": 0.03615591605193913, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/complex_multipath]": 0.12744045816361904, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/convergence_stacked_sink]": 0.10368525004014373, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/convergent_offrow_exit_climb]": 0.3243097511585802, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/corridor_narrow_gap_fallback]": 0.04081349982880056, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/cross_col_top_entry]": 0.02894216706044972, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/cross_column_perp_drop]": 0.041740291053429246, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/cross_column_perp_drop_far_exit]": 0.017627834109589458, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/cross_row_gap_wrap]": 0.07829308393411338, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/deep_linear]": 0.1554164590779692, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/disjoint_sameline_trunks]": 0.2838291672524065, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/divergent_fanout_split]": 0.042876873863860965, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/dogleg_exempt_distinct]": 0.07253404101356864, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/dogleg_exempt_sameline]": 0.032736875116825104, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/dogleg_twoline_fanout]": 0.045299709076061845, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/exit_corner_offset_dogleg]": 0.07008583284914494, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/fan_bypass_nesting]": 0.091066999360919, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/fan_in_merge]": 0.13926195912063122, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/fold_double]": 0.23863891628570855, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/fold_fan_across]": 0.25121775083243847, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/fold_stacked_branch]": 0.34654954192228615, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/funcprofiler_upstream]": 0.47034500003792346, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/header_nudge]": 0.04445991711691022, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/header_side_rotated]": 0.018050750019028783, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/inrow_skip_breeze]": 0.028524748980998993, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/inter_row_wrap_clearance]": 0.03924991702660918, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/interchange_lane_reorder]": 0.04738200013525784, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/junction_entry_align]": 0.10421937494538724, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/junction_entry_collision]": 0.08722054213285446, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/junction_entry_reversed_fold]": 0.09012079308740795, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/junction_fanout_convergence]": 0.07196545810438693, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/left_entry_up_wrap]": 0.03537429217249155, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/left_exit_sink_below]": 0.04329183395020664, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_perp_bottom_exit_perp_entry]": 0.032470709178596735, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_perp_bottom_exit_side_entry]": 0.04007337405346334, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_perp_top_exit_perp_entry]": 0.04740079212933779, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.08171770977787673, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_perp_top_exit_side_entry]": 0.05330295697785914, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_to_tb_top_cross_col]": 0.039413748774677515, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_to_tb_top_drop]": 0.06460191588848829, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_to_tb_top_drop_two_lines]": 0.04288387531414628, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_to_tb_top_near_vertical]": 0.034227875992655754, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_to_tb_top_two_lines]": 0.02821991592645645, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_top_entry_cross_column]": 0.02148774964734912, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/lr_top_entry_cross_column_two_line]": 0.03442337503656745, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_around_below_leftmost]": 0.07666233298368752, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_bottom_row_bypass]": 0.08800158300437033, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_leftmost_sink_branch]": 0.10095133283175528, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_offrow_continuation]": 0.12636154191568494, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_port_above_approach]": 0.12437808304093778, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_pullaway]": 0.06331479107029736, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_right_entry]": 0.050734875025227666, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_trunk_out_of_range_section]": 0.1067490428686142, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/merge_trunk_over_low_section]": 0.07796858227811754, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/mismatched_tracks]": 0.0942601659335196, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/mixed_bundle_column]": 0.09980195807293057, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/mixed_port_sides]": 0.052988791139796376, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/multi_input_convergence]": 0.03658604226075113, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/multi_line_bundle]": 0.07123187510296702, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/multicarrier_offrow_exit_climb]": 0.07622891711071134, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/near_vertical_junction_hook]": 0.05846799979917705, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/off_track_convergence]": 0.043235540855675936, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/off_track_convergence_multiline]": 0.04974670917727053, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/off_track_input_above_consumer]": 0.18481662403792143, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/parallel_independent]": 0.048321374924853444, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/peeloff_extra_line_consumer]": 0.0971110831014812, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/peeloff_riser_respace]": 0.11377062485553324, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/post_convergence_trunk]": 0.012590751051902771, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/reconverge_reversed_fold]": 0.22834270796738565, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/right_entry_from_above]": 0.017297166865319014, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/right_entry_from_above_far]": 0.025642166147008538, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/right_entry_gap_above_empty_row]": 0.039339416893199086, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/right_entry_wrap_no_fan]": 0.018372749909758568, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/rl_entry_runway]": 0.03591070929542184, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/rnaseq_lite]": 0.14308100240305066, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/route_around_intervening]": 0.053830333054065704, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/section_diamond]": 0.05815645889379084, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/self_crossing_bridge]": 0.028966291807591915, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/shared_sink_parallel]": 0.1092573762871325, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/single_section]": 0.20551204192452133, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/stacked_left_exit_drop]": 0.027518958086147904, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/stacked_lr_serpentine]": 0.04710979200899601, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/symmetric_diamond_beside_wide_fan]": 0.07683887495659292, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_bottom_entry_flow_start]": 0.028435833053663373, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_bottom_exit_bundle_jog]": 0.06794925010763109, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_bottom_exit_fork_diamond]": 0.044379582861438394, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_column_continuation_two_lines]": 0.029102292144671082, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_convergence_straight_drop]": 0.0315399169921875, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_internal_diagonal]": 0.029313458828255534, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_left_exit_step]": 0.07189425081014633, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_lr_exit_left]": 0.04154824907891452, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_lr_exit_right]": 0.04097145819105208, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_passthrough_continuation]": 0.023433458991348743, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_passthrough_trunk]": 0.051691124914214015, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_perp_exit_side_neighbour]": 0.02772083319723606, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_right_entry_stack]": 0.029434250900521874, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_trunk_through_fan]": 0.01931595988571644, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/tb_two_line_vert_seam]": 0.02573941578157246, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/terminal_symmetric_fan]": 0.029751916648820043, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/terminus_join]": 0.007984917610883713, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/top_entry_header_clash]": 0.02794629125855863, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/trunk_through_fan]": 0.04456341709010303, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/u_turn_fold]": 0.12437354098074138, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/uneven_diamond]": 0.01657974999397993, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/upward_bypass]": 0.1403024580795318, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/variant_calling]": 0.4024905418045819, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/wide_fan_in]": 0.07097770902328193, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/wide_fan_out]": 0.07481245906092227, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/wide_label_fan]": 0.030475915176793933, + "tests/test_content_placement_idempotent.py::test_placement_phase_is_idempotent[topologies/wrapped_label_trunk]": 0.02004708442837, + "tests/test_content_placement_pure.py::test_content_placement_phases_complete": 18.63085737498477, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/centered_tracks]": 0.022884460166096687, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/cross_track_interchange]": 0.03698137425817549, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/diagonal_labels]": 0.1257173758931458, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/differentialabundance]": 0.5191749159712344, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/differentialabundance_default]": 0.34938354091718793, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/directional_flow]": 0.025919875130057335, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/disconnected_components]": 0.043455125065520406, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/epitopeprediction]": 0.13771145814098418, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/file_icons]": 0.027717417338863015, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/genomeassembly]": 0.17008970910683274, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/genomeassembly_staggered]": 0.16222662501968443, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/genomic_pipeline]": 0.739816291956231, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/group_labels]": 0.03220195882022381, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/hlatyping]": 0.08156541618518531, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/legend_combo]": 0.015699333045631647, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/legend_logo_placement]": 0.06347716599702835, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/longread_variant_calling]": 0.3069454589858651, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/marker_styles]": 0.0705042090266943, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/off_track_outputs]": 0.028844998916611075, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/rnaseq_auto]": 0.38932962506078184, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/rnaseq_sections]": 0.7662098745349795, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/rnaseq_sections_manual]": 0.8343172487802804, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/simple_pipeline]": 0.016077290987595916, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/tb_file_termini]": 0.056916457833722234, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/variant_calling]": 0.06650716695003211, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/variant_calling_tuned]": 0.08214724925346673, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/variantbenchmarking]": 0.443282374413684, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/variantbenchmarking_auto]": 0.5626989577431232, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[examples/variantprioritization]": 0.09182566707022488, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/01_minimal]": 0.017022457905113697, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/02_sections]": 0.05022979178465903, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/03_fan_out]": 0.09647962590679526, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/03b_fan_in_merge]": 0.08763387519866228, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/04_directions]": 0.11760933417826891, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/05_file_icons]": 0.03497158410027623, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/05b_multi_icons]": 0.03777545806951821, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/05c_files_icon]": 0.029250540770590305, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/05d_folder_icon]": 0.05400416674092412, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/05f_banner_labels]": 0.04184470837935805, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/06a_without_hidden]": 0.04224254284054041, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[guide/06b_with_hidden]": 0.06532083405181766, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[nextflow/duplicate_processes]": 0.04155583307147026, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[nextflow/flat_pipeline]": 0.01605749991722405, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[nextflow/unquoted_labels]": 0.03780166571959853, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[nextflow/variant_calling]": 0.08544325036928058, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[nextflow/with_subworkflows]": 0.09386858413927257, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/bubble_forced_label_clears_diagonal]": 0.02306045894511044, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/bubble_label_clears_diagonal]": 0.018104332964867353, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/bubble_output_above]": 0.031711749732494354, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/captioned_sibling_outputs]": 0.02940933289937675, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/da_pipeline]": 0.3860477500129491, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/diagonal_single_trunk_off_track]": 0.1982969578821212, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/file_icon_fanin]": 0.08300966722890735, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/font_scale]": 0.01770891691558063, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/genomeassembly_organellar]": 0.21526670805178583, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/icon_caption_wrap]": 0.009850043104961514, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/leaf_file_icon_on_trunk]": 0.032455042004585266, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/multiline_labels]": 0.047646583057940006, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/off_track_output_branched]": 0.03581291623413563, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/off_track_outputs_along_trunk]": 0.03155491664074361, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/rnaseq_sections]": 1.1382233330514282, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/rnaseq_simple]": 0.015425375197082758, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/tb_right_exit_feeder_slots]": 0.0774126248434186, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/trunk_align_matching_bundle]": 0.050184373976662755, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[tests/uneven_diamond]": 0.009501458145678043, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/aligner_row_pinned_continuation]": 0.09192995796911418, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/around_below_ep_col_gt0]": 0.048668666975572705, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/around_section_below]": 0.038688415894284844, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/asymmetric_tree]": 0.1117207498755306, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bottom_row_climb_clear_corridor]": 0.08587033301591873, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/branch_fold_forward]": 0.08528970903716981, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/branch_fold_stability]": 0.052591416984796524, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bt_chain]": 0.02043854189105332, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bt_exit_top_above]": 0.026795166777446866, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bt_exit_top_above_2line]": 0.0238816668279469, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bt_fork]": 0.022090584272518754, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bt_perp_entry_below]": 0.020359875867143273, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bt_to_lr]": 0.03485829196870327, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bt_to_tb]": 0.02369116712361574, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bundle_terminator_continuation]": 0.009404374053701758, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_fan_in_outer_slot]": 0.16628516698256135, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_gap2_rightward_overflow]": 0.11512137413956225, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_label_rake]": 0.0597016669344157, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_label_rake_left]": 0.05913683329708874, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_label_rake_wide]": 0.1343351670075208, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_leftward_far_side_entry]": 0.09037966607138515, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_leftward_overflow]": 0.09117133193649352, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/bypass_v_tight]": 0.05975370784290135, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/clear_channel_target_aware_push]": 0.0673379588406533, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/compact_gap_peer_conflict]": 0.049481291556730866, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/compact_hidden_passthrough]": 0.04479858325794339, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/complex_multipath]": 0.10202091513201594, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/convergence_stacked_sink]": 0.10944166593253613, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/convergent_offrow_exit_climb]": 0.3115899581462145, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/corridor_narrow_gap_fallback]": 0.04286241717636585, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/cross_col_top_entry]": 0.0349262491799891, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/cross_column_perp_drop]": 0.017649666871875525, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/cross_column_perp_drop_far_exit]": 0.026463499991223216, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/cross_row_gap_wrap]": 0.09919591713696718, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/deep_linear]": 0.25533454213291407, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/disjoint_sameline_trunks]": 0.061143501196056604, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/divergent_fanout_split]": 0.024538668105378747, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/dogleg_exempt_distinct]": 0.05270574986934662, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/dogleg_exempt_sameline]": 0.046513957902789116, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/dogleg_twoline_fanout]": 0.03966204100288451, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/exit_corner_offset_dogleg]": 0.053490248741582036, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/fan_bypass_nesting]": 0.10045845783315599, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/fan_in_merge]": 0.08961208490654826, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/fold_double]": 0.2160040840972215, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/fold_fan_across]": 0.18728837370872498, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/fold_stacked_branch]": 0.20075516612268984, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/funcprofiler_upstream]": 0.436860125977546, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/header_nudge]": 0.0264425000641495, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/header_side_rotated]": 0.01966745895333588, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/inrow_skip_breeze]": 0.03343304106965661, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/inter_row_wrap_clearance]": 0.04148858296684921, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/interchange_lane_reorder]": 0.026553167263045907, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/junction_entry_align]": 0.0866332077421248, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/junction_entry_collision]": 0.06864574900828302, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/junction_entry_reversed_fold]": 0.04977470776066184, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/junction_fanout_convergence]": 0.07337866583839059, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/left_entry_up_wrap]": 0.028416291810572147, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/left_exit_sink_below]": 0.05036104191094637, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_perp_bottom_exit_perp_entry]": 0.04358350019901991, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_perp_bottom_exit_side_entry]": 0.043699500849470496, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_perp_top_exit_perp_entry]": 0.032747417222708464, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.04318008269183338, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_perp_top_exit_side_entry]": 0.04162045870907605, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_to_tb_top_cross_col]": 0.03364783292636275, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_to_tb_top_drop]": 0.016279916977509856, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_to_tb_top_drop_two_lines]": 0.04452504077926278, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_to_tb_top_near_vertical]": 0.02328491723164916, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_to_tb_top_two_lines]": 0.029794751200824976, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_top_entry_cross_column]": 0.017726166173815727, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/lr_top_entry_cross_column_two_line]": 0.033421416068449616, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_around_below_leftmost]": 0.07277195807546377, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_bottom_row_bypass]": 0.2996612498536706, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_leftmost_sink_branch]": 0.08232066710479558, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_offrow_continuation]": 0.050811500987038016, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_port_above_approach]": 0.0345524160657078, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_pullaway]": 0.03493416588753462, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_right_entry]": 0.05266758310608566, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_trunk_out_of_range_section]": 0.07531749876216054, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/merge_trunk_over_low_section]": 0.08430462493561208, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/mismatched_tracks]": 0.0842070837970823, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/mixed_bundle_column]": 0.18694241694174707, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/mixed_port_sides]": 0.0366113327909261, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/multi_input_convergence]": 0.0536290411837399, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/multi_line_bundle]": 0.05256437510251999, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/multicarrier_offrow_exit_climb]": 0.04655625065788627, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/near_vertical_junction_hook]": 0.03966225101612508, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/off_track_convergence]": 0.03350608400069177, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/off_track_convergence_multiline]": 0.051267958246171474, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/off_track_input_above_consumer]": 0.1657761661335826, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/parallel_independent]": 0.02092924900352955, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/peeloff_extra_line_consumer]": 0.05804887507110834, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/peeloff_riser_respace]": 0.08985883393324912, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/post_convergence_trunk]": 0.010772624984383583, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/reconverge_reversed_fold]": 0.1556022500153631, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/right_entry_from_above]": 0.014996249694377184, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/right_entry_from_above_far]": 0.026489125099033117, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/right_entry_gap_above_empty_row]": 0.03264416707679629, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/right_entry_wrap_no_fan]": 0.01924491673707962, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/rl_entry_runway]": 0.043089042184874415, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/rnaseq_lite]": 0.15012912591919303, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/route_around_intervening]": 0.04541291738860309, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/section_diamond]": 0.0717632903251797, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/self_crossing_bridge]": 0.04023041692562401, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/shared_sink_parallel]": 0.16213524900376797, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/single_section]": 0.016197751043364406, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/stacked_left_exit_drop]": 0.015508833108469844, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/stacked_lr_serpentine]": 0.038316125981509686, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/symmetric_diamond_beside_wide_fan]": 0.11306158406659961, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_bottom_entry_flow_start]": 0.021336332894861698, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_bottom_exit_bundle_jog]": 0.054837165866047144, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_bottom_exit_fork_diamond]": 0.03757779090665281, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_column_continuation_two_lines]": 0.031267291167750955, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_convergence_straight_drop]": 0.013778751017525792, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_internal_diagonal]": 0.03979308297857642, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_left_exit_step]": 0.26992137380875647, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_lr_exit_left]": 0.04503712523728609, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_lr_exit_right]": 0.05817120894789696, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_passthrough_continuation]": 0.022005500039085746, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_passthrough_trunk]": 0.04528945800848305, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_perp_exit_side_neighbour]": 0.02687333384528756, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_right_entry_stack]": 0.06676587392576039, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_trunk_through_fan]": 0.02179841697216034, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/tb_two_line_vert_seam]": 0.032322209095582366, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/terminal_symmetric_fan]": 0.041605208767578006, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/terminus_join]": 0.006322917295619845, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/top_entry_header_clash]": 0.013232957804575562, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/trunk_through_fan]": 0.03239054186269641, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/u_turn_fold]": 0.11429599905386567, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/uneven_diamond]": 0.015717499889433384, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/upward_bypass]": 0.15518120815977454, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/variant_calling]": 0.38892949977889657, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/wide_fan_in]": 0.07929483288899064, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/wide_fan_out]": 0.08392425114288926, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/wide_label_fan]": 0.045060708886012435, + "tests/test_content_placement_pure.py::test_placement_phase_is_pure[topologies/wrapped_label_trunk]": 0.04641691711731255, + "tests/test_contract_lifecycle.py::test_contract_has_stage_table": 0.0010795430280268192, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[1.1]": 0.0004099169746041298, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[1.2]": 0.0008919998072087765, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[1.3]": 0.0003518329467624426, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[1.4]": 0.00024329102598130703, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[1.5]": 0.0002880420070141554, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[2.1]": 0.0002433739136904478, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[3.1]": 0.00022812513634562492, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[3.2]": 0.00023483391851186752, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[3.3]": 0.0003002067096531391, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[3.4]": 0.00023774988949298859, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[3.5]": 0.0003734997007995844, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.10]": 0.00022391625680029392, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.1]": 0.00025120913051068783, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.2]": 0.00022474909201264381, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.3]": 0.000212749931961298, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.4]": 0.00022187386639416218, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.5]": 0.00022404221817851067, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.6]": 0.00020899996161460876, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.7]": 0.00021687475964426994, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.8]": 0.00021350127644836903, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[4.9]": 0.00021170731633901596, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[5.1]": 0.00022254209034144878, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[5.2]": 0.00022529065608978271, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[5.3]": 0.0002106239553540945, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[5.4]": 0.00022062496282160282, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[5.5]": 0.0002119170967489481, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.10]": 0.00022470904514193535, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.11]": 0.0005284566432237625, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.12]": 0.00026833382435142994, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.13]": 0.00022595818154513836, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.14]": 0.00021349871531128883, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.15]": 0.00021825102157890797, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.15a]": 0.0002238750457763672, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.16]": 0.00023466581478714943, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.1]": 0.00021758326329290867, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.2]": 0.00040883407928049564, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.3]": 0.00022587506100535393, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.4]": 0.00022016698494553566, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.5]": 0.00022083288058638573, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.6]": 0.00022404221817851067, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.7]": 0.00021054199896752834, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.8]": 0.0002179576549679041, + "tests/test_contract_lifecycle.py::test_every_stage_has_lifecycle_tag[6.9]": 0.0002183760516345501, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[1.1]": 0.00026041711680591106, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[1.2]": 0.0003677918575704098, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[1.3]": 0.0002490419428795576, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[1.4]": 0.00022858311422169209, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[1.5]": 0.00022475025616586208, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[2.1]": 0.0002155420370399952, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[3.1]": 0.000226916978135705, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[3.2]": 0.00022808322682976723, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[3.3]": 0.00021629058755934238, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[3.4]": 0.00022258399985730648, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[3.5]": 0.00028287479653954506, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.10]": 0.0002503329887986183, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.1]": 0.00021370872855186462, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.2]": 0.00021512527018785477, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.3]": 0.002866542199626565, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.4]": 0.0003823747392743826, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.5]": 0.00048075104132294655, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.6]": 0.0004202078562229872, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.7]": 0.0002427510917186737, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.8]": 0.000260041793808341, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[4.9]": 0.00024083303287625313, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[5.1]": 0.00024729175493121147, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[5.2]": 0.00025158305652439594, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[5.3]": 0.00024495809338986874, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[5.4]": 0.0003240418154746294, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[5.5]": 0.00032379082404077053, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.10]": 0.00033312616869807243, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.11]": 0.00026433286257088184, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.12]": 0.00027208332903683186, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.13]": 0.0003136249724775553, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.14]": 0.0002839588560163975, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.15]": 0.00021758279763162136, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.15a]": 0.0003640840295702219, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.16]": 0.00023608282208442688, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.1]": 0.0007881668861955404, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.2]": 0.0002639591693878174, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.3]": 0.00024229218252003193, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.4]": 0.000872249947860837, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.5]": 0.0007905839011073112, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.6]": 0.0002908750902861357, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.7]": 0.0002521248534321785, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.8]": 0.0003515840508043766, + "tests/test_contract_lifecycle.py::test_transient_stages_name_superseding_stage[6.9]": 0.0004528320860117674, + "tests/test_convert.py::TestBreakCycles::test_no_cycle": 0.00017325114458799362, + "tests/test_convert.py::TestBreakCycles::test_simple_cycle": 0.0001771240495145321, + "tests/test_convert.py::TestBreakCycles::test_triangle_cycle": 0.0007007091771811247, + "tests/test_convert.py::TestConvertNextflowDag::test_abbreviation_applied": 0.001852542394772172, + "tests/test_convert.py::TestConvertNextflowDag::test_custom_title": 0.0009862510487437248, + "tests/test_convert.py::TestConvertNextflowDag::test_empty_dag": 0.00020087510347366333, + "tests/test_convert.py::TestConvertNextflowDag::test_flat_pipeline_output": 0.0016385407652705908, + "tests/test_convert.py::TestConvertNextflowDag::test_inter_section_edges_outside_subgraphs": 0.00038299988955259323, + "tests/test_convert.py::TestConvertNextflowDag::test_subworkflows_bypass_lines": 0.00036824983544647694, + "tests/test_convert.py::TestConvertNextflowDag::test_subworkflows_sections": 0.0007810408715158701, + "tests/test_convert.py::TestConvertNextflowDag::test_subworkflows_spur_line": 0.00040254206396639347, + "tests/test_convert.py::TestConvertNextflowDag::test_variant_calling_diamond": 0.0004200830589979887, + "tests/test_convert.py::TestConvertNextflowDag::test_variant_calling_sections": 0.0003834592644125223, + "tests/test_convert.py::TestDuplicateProcessLabels::test_duplicates_lay_out": 0.04189058323390782, + "tests/test_convert.py::TestDuplicateProcessLabels::test_no_duplicate_station_declarations": 0.00044120708480477333, + "tests/test_convert.py::TestDuplicateProcessLabels::test_no_self_loops": 0.0004345010966062546, + "tests/test_convert.py::TestDuplicateProcessLabels::test_unnamed_subgraph_duplicates_disambiguated": 0.0010093748569488525, + "tests/test_convert.py::TestHumanizeLabel::test_abbreviation_disabled": 0.0006446670740842819, + "tests/test_convert.py::TestHumanizeLabel::test_abbreviation_long": 0.000193500192835927, + "tests/test_convert.py::TestHumanizeLabel::test_abbreviation_very_long": 0.0008848751895129681, + "tests/test_convert.py::TestHumanizeLabel::test_multi_word": 0.00018149963580071926, + "tests/test_convert.py::TestHumanizeLabel::test_no_abbreviation_when_short": 0.0001727510243654251, + "tests/test_convert.py::TestHumanizeLabel::test_simple": 0.0002124581951647997, + "tests/test_convert.py::TestIsNextflowDag::test_flowchart_lr": 0.0025635419879108667, + "tests/test_convert.py::TestIsNextflowDag::test_flowchart_tb": 0.00023945816792547703, + "tests/test_convert.py::TestIsNextflowDag::test_graph_lr_is_not": 0.0010170415043830872, + "tests/test_convert.py::TestIsNextflowDag::test_metro_mmd_is_not": 0.001611415995284915, + "tests/test_convert.py::TestParseNextflowMermaid::test_flat_pipeline": 0.0009151657577604055, + "tests/test_convert.py::TestParseNextflowMermaid::test_space_subgraphs_ignored": 0.00038350000977516174, + "tests/test_convert.py::TestParseNextflowMermaid::test_variant_calling_subgraphs": 0.0004379998426884413, + "tests/test_convert.py::TestParseNextflowMermaid::test_with_subworkflows": 0.000650875037536025, + "tests/test_convert.py::TestReconnectEdges::test_chain_of_dropped": 0.00018504075706005096, + "tests/test_convert.py::TestReconnectEdges::test_direct_kept_to_kept": 0.0001948741264641285, + "tests/test_convert.py::TestReconnectEdges::test_dropped_root_lost": 0.0001696248073130846, + "tests/test_convert.py::TestReconnectEdges::test_fanout_through_operator": 0.0012428327463567257, + "tests/test_convert.py::TestReconnectEdges::test_no_self_loops": 0.00020162505097687244, + "tests/test_convert.py::TestReconnectEdges::test_simple_passthrough": 0.000179958064109087, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_layout[duplicate_processes]": 0.014153043273836374, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_layout[flat_pipeline]": 0.01553833275102079, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_layout[unquoted_labels]": 0.009000875987112522, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_layout[variant_calling]": 0.031877417117357254, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_layout[with_subworkflows]": 0.026780041866004467, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_parse[duplicate_processes]": 0.021304873982444406, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_parse[flat_pipeline]": 0.01145604089833796, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_parse[unquoted_labels]": 0.013262457679957151, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_parse[variant_calling]": 0.02171570691280067, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_parse[with_subworkflows]": 0.024448293028399348, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_render[duplicate_processes]": 0.022097041830420494, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_render[flat_pipeline]": 0.011891416972503066, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_render[unquoted_labels]": 0.020559582859277725, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_render[variant_calling]": 0.049879916943609715, + "tests/test_convert.py::TestRoundtrip::test_roundtrip_render[with_subworkflows]": 0.04168374906294048, + "tests/test_convert.py::TestSanitizeId::test_simple": 0.0004590421449393034, + "tests/test_convert.py::TestSanitizeId::test_special_chars": 0.0006124998908489943, + "tests/test_convert.py::TestSanitizeId::test_with_underscore": 0.0005532081704586744, + "tests/test_convert.py::TestUnquotedLabels::test_mixed_quoted_and_unquoted": 0.00017170910723507404, + "tests/test_convert.py::TestUnquotedLabels::test_unquoted_convert_non_empty": 0.00032899947836995125, + "tests/test_convert.py::TestUnquotedLabels::test_unquoted_stadium_parses": 0.00016899872571229935, + "tests/test_corner_radius_ratchet.py::test_every_curve_radius_traces_to_a_corners_helper": 0.13140404131263494, + "tests/test_corner_radius_ratchet.py::test_handler_bundle_base_radius_is_curve_radius_only": 0.25315383286215365, + "tests/test_corner_radius_ratchet.py::test_helper_derived_radii_accepted[alias-hop]": 0.0003133320715278387, + "tests/test_corner_radius_ratchet.py::test_helper_derived_radii_accepted[annotated-helper-assignment]": 0.0002650418318808079, + "tests/test_corner_radius_ratchet.py::test_helper_derived_radii_accepted[direct-helper-call]": 0.00035779201425611973, + "tests/test_corner_radius_ratchet.py::test_helper_derived_radii_accepted[if-expr-branches]": 0.0015280838124454021, + "tests/test_corner_radius_ratchet.py::test_helper_derived_radii_accepted[list-comp-via-name]": 0.0002583328168839216, + "tests/test_corner_radius_ratchet.py::test_helper_derived_radii_accepted[tuple-unpack]": 0.0007057078182697296, + "tests/test_corner_radius_ratchet.py::test_helper_derived_radii_accepted[wrapped-base-literal]": 0.0002696241717785597, + "tests/test_corner_radius_ratchet.py::test_raw_radii_rejected[annotated-arithmetic]": 0.00044920993968844414, + "tests/test_corner_radius_ratchet.py::test_raw_radii_rejected[arithmetic-hidden-in-variable]": 0.0003188750706613064, + "tests/test_corner_radius_ratchet.py::test_raw_radii_rejected[augmented-assignment-on-helper-result]": 0.0006864590104669333, + "tests/test_corner_radius_ratchet.py::test_raw_radii_rejected[bare-attribute-literal]": 0.00031941733323037624, + "tests/test_corner_radius_ratchet.py::test_raw_radii_rejected[inline-arithmetic]": 0.0028431680984795094, + "tests/test_corner_radius_ratchet.py::test_raw_radii_rejected[module-constant-literal]": 0.0007762089371681213, + "tests/test_corner_radius_ratchet.py::test_raw_radii_rejected[non-helper-call]": 0.0003294171765446663, + "tests/test_corners.py::TestBypassStagger::test_horizontal_r_matches_l_shape[1]": 0.00021024909801781178, + "tests/test_corners.py::TestBypassStagger::test_horizontal_r_matches_l_shape[2]": 0.00019725109450519085, + "tests/test_corners.py::TestBypassStagger::test_horizontal_r_matches_l_shape[3]": 0.0001966669224202633, + "tests/test_corners.py::TestBypassStagger::test_left_going_mirrors_indices[2]": 0.00041699898429214954, + "tests/test_corners.py::TestBypassStagger::test_left_going_mirrors_indices[3]": 0.00022866600193083286, + "tests/test_corners.py::TestBypassStagger::test_single_line": 0.00017770705744624138, + "tests/test_corners.py::TestConcentricCornerRadius::test_arcs_are_concentric_in_every_orientation": 0.00022920803166925907, + "tests/test_corners.py::TestConcentricCornerRadius::test_bundle_is_nested_step_spaced": 0.000202834140509367, + "tests/test_corners.py::TestConcentricCornerRadius::test_down_and_right_goes_through_one_routine": 0.00015204236842691898, + "tests/test_corners.py::TestConcentricCornerRadius::test_min_radius_floors_deep_inside_lines": 0.0001556661445647478, + "tests/test_corners.py::TestConcentricCornerRadius::test_radius_matches_both_axis_projections": 0.00018041604198515415, + "tests/test_corners.py::TestConcentricCornerRadius::test_reference_line_is_base": 0.00015708408318459988, + "tests/test_corners.py::TestCornerOutsideSign::test_hand_checked_cases": 0.0001719172578305006, + "tests/test_corners.py::TestCornerOutsideSign::test_matches_reference_formula": 0.00024083303287625313, + "tests/test_corners.py::TestCornerOutsideSign::test_returns_unit_sign_in_every_orientation": 0.0002867497969418764, + "tests/test_corners.py::TestCornerRadius::test_custom_base": 0.00016008317470550537, + "tests/test_corners.py::TestCornerRadius::test_inside_endpoints": 0.00015916582196950912, + "tests/test_corners.py::TestCornerRadius::test_inside_uses_reversed_offset": 0.00016379216685891151, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[1-Direction.D]": 0.0002811248414218426, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[1-Direction.U]": 0.0002309582196176052, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[2-Direction.D]": 0.0009283747058361769, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[2-Direction.U]": 0.0006806680466979742, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[3-Direction.D]": 0.00044604181312024593, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[3-Direction.U]": 0.0002572920639067888, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[5-Direction.D]": 0.00024620979093015194, + "tests/test_corners.py::TestCornerRadius::test_matches_l_shape_radii[5-Direction.U]": 0.00024670688435435295, + "tests/test_corners.py::TestCornerRadius::test_outside_endpoints": 0.0001571248285472393, + "tests/test_corners.py::TestCornerRadius::test_outside_uses_raw_offset": 0.0004617080558091402, + "tests/test_corners.py::TestCornerRadius::test_single_line": 0.00020733289420604706, + "tests/test_corners.py::TestLShapeRadii::test_all_radii_distinct[2-Direction.D]": 0.00021537463180720806, + "tests/test_corners.py::TestLShapeRadii::test_all_radii_distinct[2-Direction.U]": 0.00022474909201264381, + "tests/test_corners.py::TestLShapeRadii::test_all_radii_distinct[3-Direction.D]": 0.0002129997592419386, + "tests/test_corners.py::TestLShapeRadii::test_all_radii_distinct[3-Direction.U]": 0.00021233432926237583, + "tests/test_corners.py::TestLShapeRadii::test_all_radii_distinct[5-Direction.D]": 0.00022045779041945934, + "tests/test_corners.py::TestLShapeRadii::test_all_radii_distinct[5-Direction.U]": 0.00022354116663336754, + "tests/test_corners.py::TestLShapeRadii::test_mirror_symmetry[2]": 0.00019595911726355553, + "tests/test_corners.py::TestLShapeRadii::test_mirror_symmetry[3]": 0.00022254209034144878, + "tests/test_corners.py::TestLShapeRadii::test_mirror_symmetry[5]": 0.00022541801445186138, + "tests/test_corners.py::TestLShapeRadii::test_no_crossing_in_vertical_channel[2-Direction.D]": 0.00023945793509483337, + "tests/test_corners.py::TestLShapeRadii::test_no_crossing_in_vertical_channel[2-Direction.U]": 0.00022204103879630566, + "tests/test_corners.py::TestLShapeRadii::test_no_crossing_in_vertical_channel[3-Direction.D]": 0.0002077086828649044, + "tests/test_corners.py::TestLShapeRadii::test_no_crossing_in_vertical_channel[3-Direction.U]": 0.0002174170222133398, + "tests/test_corners.py::TestLShapeRadii::test_no_crossing_in_vertical_channel[5-Direction.D]": 0.00021729222498834133, + "tests/test_corners.py::TestLShapeRadii::test_no_crossing_in_vertical_channel[5-Direction.U]": 0.00021370803005993366, + "tests/test_corners.py::TestLShapeRadii::test_outermost_gets_largest_radius_corner1[Direction.D]": 0.00019837403669953346, + "tests/test_corners.py::TestLShapeRadii::test_outermost_gets_largest_radius_corner1[Direction.U]": 0.00019166595302522182, + "tests/test_corners.py::TestLShapeRadii::test_r_first_and_r_second_are_complementary[2-Direction.D]": 0.00021879305131733418, + "tests/test_corners.py::TestLShapeRadii::test_r_first_and_r_second_are_complementary[2-Direction.U]": 0.00021391594782471657, + "tests/test_corners.py::TestLShapeRadii::test_r_first_and_r_second_are_complementary[3-Direction.D]": 0.00022062519565224648, + "tests/test_corners.py::TestLShapeRadii::test_r_first_and_r_second_are_complementary[3-Direction.U]": 0.0002177502028644085, + "tests/test_corners.py::TestLShapeRadii::test_r_first_and_r_second_are_complementary[5-Direction.D]": 0.00021704193204641342, + "tests/test_corners.py::TestLShapeRadii::test_r_first_and_r_second_are_complementary[5-Direction.U]": 0.00022849999368190765, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[1-Direction.D]": 0.000312041025608778, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[1-Direction.U]": 0.0002291251439601183, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[2-Direction.D]": 0.0005797091871500015, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[2-Direction.U]": 0.0006713762413710356, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[3-Direction.D]": 0.0002788328565657139, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[3-Direction.U]": 0.00024145795032382011, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[5-Direction.D]": 0.00024304073303937912, + "tests/test_corners.py::TestLShapeRadii::test_radii_are_concentric[5-Direction.U]": 0.00022904109209775925, + "tests/test_corners.py::TestLShapeRadii::test_radii_cover_full_range[2-Direction.D]": 0.00021770712919533253, + "tests/test_corners.py::TestLShapeRadii::test_radii_cover_full_range[2-Direction.U]": 0.00031270808540284634, + "tests/test_corners.py::TestLShapeRadii::test_radii_cover_full_range[3-Direction.D]": 0.000224041985347867, + "tests/test_corners.py::TestLShapeRadii::test_radii_cover_full_range[3-Direction.U]": 0.00021712598390877247, + "tests/test_corners.py::TestLShapeRadii::test_radii_cover_full_range[5-Direction.D]": 0.00022795796394348145, + "tests/test_corners.py::TestLShapeRadii::test_radii_cover_full_range[5-Direction.U]": 0.0002143331803381443, + "tests/test_corners.py::TestLShapeRadii::test_single_line": 0.00015691597945988178, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[1-Direction.D]": 0.00021487497724592686, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[1-Direction.U]": 0.0002136260736733675, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[2-Direction.D]": 0.00022645783610641956, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[2-Direction.U]": 0.00021370803005993366, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[3-Direction.D]": 0.00021712388843297958, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[3-Direction.U]": 0.00022033276036381721, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[4-Direction.D]": 0.00021616811864078045, + "tests/test_corners.py::TestLShapeStagger::test_matches_l_shape_radii_delta[4-Direction.U]": 0.0002221250906586647, + "tests/test_corners.py::TestLShapeStagger::test_symmetric_about_zero[2-Direction.D]": 0.0002340411301702261, + "tests/test_corners.py::TestLShapeStagger::test_symmetric_about_zero[2-Direction.U]": 0.00023649889044463634, + "tests/test_corners.py::TestLShapeStagger::test_symmetric_about_zero[3-Direction.D]": 0.00023833336308598518, + "tests/test_corners.py::TestLShapeStagger::test_symmetric_about_zero[3-Direction.U]": 0.00021366612054407597, + "tests/test_corners.py::TestLShapeStagger::test_symmetric_about_zero[4-Direction.D]": 0.00021920818835496902, + "tests/test_corners.py::TestLShapeStagger::test_symmetric_about_zero[4-Direction.U]": 0.00023395824246108532, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_concentricity_invariant": 0.0001921667717397213, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_custom_base": 0.00015187496319413185, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_inside_goes_below_base": 0.00016095931641757488, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_matches_offset_bundle_arithmetic": 0.0001705000177025795, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_min_radius_floors_a_tight_jog": 0.00015924894250929356, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_min_radius_inactive_when_above_floor": 0.00015837396495044231, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_outside_adds_offset": 0.00016054115258157253, + "tests/test_corners.py::TestReferenceAnchoredRadius::test_reference_line_is_base": 0.00016904319636523724, + "tests/test_corners.py::TestResolveCurveRadii::test_adjacent_corners_proportional_allocation": 0.00016341707669198513, + "tests/test_corners.py::TestResolveCurveRadii::test_adjacent_corners_tight_segment": 0.00016025081276893616, + "tests/test_corners.py::TestResolveCurveRadii::test_adjacent_corners_unequal_radii": 0.0001615830697119236, + "tests/test_corners.py::TestResolveCurveRadii::test_concentric_radii_stay_distinct": 0.0001665828749537468, + "tests/test_corners.py::TestResolveCurveRadii::test_four_corner_bypass": 0.00017175008542835712, + "tests/test_corners.py::TestResolveCurveRadii::test_no_corners": 0.00016100029461085796, + "tests/test_corners.py::TestResolveCurveRadii::test_none_radii_uses_default": 0.00017241714522242546, + "tests/test_corners.py::TestResolveCurveRadii::test_single_corner_clamped_by_segment": 0.00020733405835926533, + "tests/test_corners.py::TestResolveCurveRadii::test_single_corner_no_clamping": 0.010523541830480099, + "tests/test_corners.py::TestReversedOffset::test_involutory": 0.000876834150403738, + "tests/test_corners.py::TestReversedOffset::test_max_becomes_zero": 0.0006661249790340662, + "tests/test_corners.py::TestReversedOffset::test_middle_stays": 0.0005143750458955765, + "tests/test_corners.py::TestReversedOffset::test_zero_becomes_max": 0.0002107077743858099, + "tests/test_corners.py::TestReversedOffset::test_zero_bundle": 0.0006655422039330006, + "tests/test_coverage_gaps.py::TestAlignUncenteredSiblings::test_majority_path_aligns_outlier": 0.0002119988203048706, + "tests/test_coverage_gaps.py::TestAlignUncenteredSiblings::test_majority_updates_route_endpoints": 0.00019008410163223743, + "tests/test_coverage_gaps.py::TestAlignUncenteredSiblings::test_tie_skips_alignment": 0.00018987571820616722, + "tests/test_coverage_gaps.py::TestLabelObstacleFlip::test_flip_produces_closer_label_than_push": 0.010959917213767767, + "tests/test_coverage_gaps.py::TestLabelObstacleFlip::test_single_obstacle_flips_to_clear_side": 0.004705042112618685, + "tests/test_coverage_gaps.py::TestResolveDownstreamEntryYViaJunction::test_junction_traversal_produces_valid_layout": 0.018672415986657143, + "tests/test_coverage_gaps.py::TestResolveDownstreamEntryYViaJunction::test_junction_traversal_topology": 0.02052733302116394, + "tests/test_css_custom_properties.py::test_background_rect_has_nf_metro_bg_class": 0.009930625790730119, + "tests/test_css_custom_properties.py::test_chrome_css_default_emits_var_block": 0.02730999980121851, + "tests/test_css_custom_properties.py::test_chrome_css_fallbacks_match_light_theme": 0.01131883286871016, + "tests/test_css_custom_properties.py::test_chrome_css_fallbacks_match_nfcore_theme": 0.010276290122419596, + "tests/test_css_custom_properties.py::test_chrome_css_false_keeps_concrete_chrome_colors": 0.009714416693896055, + "tests/test_css_custom_properties.py::test_chrome_css_false_omits_var_references": 0.02101862500421703, + "tests/test_css_custom_properties.py::test_chrome_css_false_rasterizes_with_cairosvg": 0.33456395799294114, + "tests/test_css_custom_properties.py::test_chrome_css_uses_namespaced_class_selectors": 0.008171043125912547, + "tests/test_css_custom_properties.py::test_legend_background_has_nf_metro_legend_bg_class": 0.017666041618213058, + "tests/test_css_custom_properties.py::test_legend_text_has_nf_metro_legend_text_class": 0.008479500189423561, + "tests/test_css_custom_properties.py::test_line_colors_not_in_chrome_css_vars": 0.011438125278800726, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_bg_property": 0.008854708168655634, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_label_color_property": 0.013983166078105569, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_legend_bg_property": 0.013144334312528372, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_legend_text_color_property": 0.007509416900575161, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_section_fill_property": 0.013000082923099399, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_section_label_color_property": 0.014571126084774733, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_section_stroke_property": 0.014354293001815677, + "tests/test_css_custom_properties.py::test_svg_contains_nfm_title_color_property": 0.0076786670833826065, + "tests/test_cyclic_graph.py::test_cli_rejects_cycle[render-self-loop]": 0.0026435412000864744, + "tests/test_cyclic_graph.py::test_cli_rejects_cycle[render-two-node-cycle]": 0.003661999013274908, + "tests/test_cyclic_graph.py::test_cli_rejects_cycle[validate-self-loop]": 0.004358166828751564, + "tests/test_cyclic_graph.py::test_cli_rejects_cycle[validate-two-node-cycle]": 0.004227624274790287, + "tests/test_cyclic_graph.py::test_compute_layout_rejects_cycle[self-loop]": 0.0021489569917321205, + "tests/test_cyclic_graph.py::test_compute_layout_rejects_cycle[two-node-cycle]": 0.0029394999146461487, + "tests/test_cyclic_graph.py::test_validate_graph_flags_cycle[self-loop]": 0.0015220409259200096, + "tests/test_cyclic_graph.py::test_validate_graph_flags_cycle[two-node-cycle]": 0.002296124817803502, + "tests/test_debug_row_grid.py::test_debug_grid_sits_at_anchor_not_pill_centre": 0.6423707511276007, + "tests/test_debug_row_grid.py::test_debug_row_grid_marks_placement_anchors[diagonal_labels.mmd]": 0.07738008419983089, + "tests/test_debug_row_grid.py::test_debug_row_grid_marks_placement_anchors[differentialabundance.mmd]": 0.3123045826796442, + "tests/test_debug_row_grid.py::test_debug_row_grid_marks_placement_anchors[differentialabundance_default.mmd]": 0.2854000423103571, + "tests/test_debug_row_grid.py::test_debug_row_grid_marks_placement_anchors[sarek_metro.mmd]": 0.3889547921717167, + "tests/test_debug_row_grid.py::test_debug_row_grid_marks_placement_anchors[topologies/bypass_label_rake_wide.mmd]": 0.08086575008928776, + "tests/test_diagonal_labels.py::test_angled_label_offset_clears_pill": 0.02501695789396763, + "tests/test_diagonal_labels.py::test_angled_labels_reserve_room_above_row_below": 0.03738412517122924, + "tests/test_diagonal_labels.py::test_angled_trunk_packs_tighter_than_horizontal": 0.03564945817925036, + "tests/test_diagonal_labels.py::test_angled_trunk_pitch_at_marker_floor": 0.17217600112780929, + "tests/test_diagonal_labels.py::test_disconnected_rail_panel_does_not_inflate_trunk_pitch": 0.03486574860289693, + "tests/test_diagonal_labels.py::test_feeder_exits_right_of_section_box_not_through_bottom": 0.14119287580251694, + "tests/test_diagonal_labels.py::test_label_angle_declined_on_tb_section": 0.018237333046272397, + "tests/test_directional_markers.py::test_chevron_headings_point_downstream[genomic_pipeline]": 0.3234849169384688, + "tests/test_directional_markers.py::test_chevron_headings_point_downstream[longread_variant_calling]": 0.14483195799402893, + "tests/test_directional_markers.py::test_chevron_headings_point_downstream[rnaseq_auto]": 0.12958362372592092, + "tests/test_directional_markers.py::test_chevron_headings_point_downstream[simple_pipeline]": 0.028452791972085834, + "tests/test_directional_markers.py::test_directional_flag_emits_chevrons[genomic_pipeline]": 0.5877323341555893, + "tests/test_directional_markers.py::test_directional_flag_emits_chevrons[longread_variant_calling]": 0.4467304591089487, + "tests/test_directional_markers.py::test_directional_flag_emits_chevrons[rnaseq_auto]": 0.1732437510509044, + "tests/test_directional_markers.py::test_directional_flag_emits_chevrons[simple_pipeline]": 0.010517126182094216, + "tests/test_directional_markers.py::test_directional_off_by_default_emits_no_chevrons": 0.02054091519676149, + "tests/test_distinct_fanout_crossing_invariant.py::test_checker_fires_without_divergence_reorder": 0.04116766597144306, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/centered_tracks.mmd]": 0.03461137623526156, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/cross_track_interchange.mmd]": 0.09500512527301908, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/diagonal_labels.mmd]": 0.09730183286592364, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/differentialabundance.mmd]": 0.2859231240581721, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/differentialabundance_default.mmd]": 0.1779849580489099, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/directional_flow.mmd]": 0.025311083998531103, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/disconnected_components.mmd]": 0.026966249803081155, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/epitopeprediction.mmd]": 0.135614792117849, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/file_icons.mmd]": 0.041020960081368685, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/genomeassembly.mmd]": 0.49379183328710496, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/genomeassembly_staggered.mmd]": 0.07621949911117554, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/genomic_pipeline.mmd]": 0.29671595920808613, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/group_labels.mmd]": 0.03230224992148578, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/hlatyping.mmd]": 0.08921304089017212, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/legend_combo.mmd]": 0.026644958648830652, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/legend_logo_placement.mmd]": 0.06717362417839468, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/line_spread.mmd]": 0.037806042237207294, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/longread_variant_calling.mmd]": 0.09504629019647837, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/marker_styles.mmd]": 0.058871209155768156, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/off_track_outputs.mmd]": 0.02187483385205269, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/rail_mode.mmd]": 0.03992891684174538, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/rail_section.mmd]": 0.05103312525898218, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/rnaseq_auto.mmd]": 0.115910500055179, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/rnaseq_sections.mmd]": 0.6580434599891305, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.4562456246931106, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/sarek_metro.mmd]": 0.1379494161810726, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/simple_pipeline.mmd]": 0.018683708738535643, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/tb_file_termini.mmd]": 0.042675459291785955, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.046812874265015125, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.026956832967698574, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/around_section_below.mmd]": 0.026082874974235892, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.03516020905226469, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.03040599962696433, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.037912792060524225, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.04185874992981553, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bt_chain.mmd]": 0.012758166762068868, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.011524459114298224, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.02643804089166224, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bt_fork.mmd]": 0.0060484991408884525, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.009650124935433269, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.01828937465324998, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.010069458745419979, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.009177042171359062, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.09588508307933807, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.03523804130963981, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.0288116242736578, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.038197042886167765, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.07349883276037872, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.044469916028901935, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.028702251380309463, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.03269837494008243, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.02711879089474678, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.04489783430472016, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.02455970924347639, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/complex_multipath.mmd]": 0.04145716596394777, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.03932429198175669, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.15158924972638488, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.02404237585142255, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.010738249868154526, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.009302166989073157, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.010491998866200447, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.10438979091122746, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/deep_linear.mmd]": 0.05304833361878991, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.04010025016032159, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.027891751145944, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.03446195786818862, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.026495749829337, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.021198791917413473, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.04958766605705023, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.04985112394206226, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03614675090648234, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/fold_double.mmd]": 0.32641008379869163, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.12163599976338446, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.12054916704073548, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.2976188329048455, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/header_nudge.mmd]": 0.02091008424758911, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.03606899990700185, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.015834083082154393, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.027392582967877388, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.014487624866887927, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.06502612493932247, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.04216454201377928, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.034475167049095035, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.02255229069851339, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.017274624202400446, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.017096792114898562, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.016919916728511453, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.010393875185400248, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.03421866684220731, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.019631791161373258, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.017515750136226416, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.02190208318643272, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.01142491726204753, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.017035249853506684, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.010295707965269685, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.0141654999461025, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.01397562469355762, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.009323624894022942, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.024865124840289354, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.034455668181180954, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.03834429127164185, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.024256749777123332, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.03395383432507515, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.024074707878753543, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.03539908304810524, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.04046504222787917, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.02537629078142345, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.02991887414827943, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.032084624050185084, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.025831251172348857, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.013270708033815026, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.23369604093022645, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.04499491606839001, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.026048917323350906, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.03034945810213685, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.020620958879590034, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.09401400084607303, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/parallel_independent.mmd]": 0.031189374858513474, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.03013283316977322, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.03662879182957113, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.010006207972764969, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.006953959818929434, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.0231929172296077, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.015953582944348454, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.011894542025402188, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.11194829177111387, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.00974816712550819, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.025499666342511773, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.01576912635937333, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.014778540935367346, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.029488624073565006, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.09297541715204716, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.02010600082576275, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/section_diamond.mmd]": 0.023072709096595645, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.026735999155789614, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.05672591831535101, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/single_section.mmd]": 0.011129833292216063, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.0143719173502177, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.03478387580253184, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.055416082963347435, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.009144250070676208, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.02541395789012313, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.04289437527768314, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.030754333827644587, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.010753415990620852, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.03133770823478699, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.04252008395269513, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.019786958815529943, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.02319612610153854, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.041270708898082376, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.03354037506505847, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.01658579194918275, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.04781341808848083, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.01714879274368286, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.016474416945129633, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.05106391618028283, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/terminus_join.mmd]": 0.009483374888077378, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.0321494578383863, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.020472166826948524, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.07927300012670457, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.014858042122796178, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/upward_bypass.mmd]": 0.07105625001713634, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/variant_calling.mmd]": 0.5440656247083098, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.028573208022862673, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.030220750020816922, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.0191899579949677, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.00840183300897479, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/variant_calling.mmd]": 0.0414319580886513, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/variant_calling_tuned.mmd]": 0.041704165982082486, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/variantbenchmarking.mmd]": 0.240919625852257, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.439938124967739, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[examples/variantprioritization.mmd]": 0.03510829177685082, + "tests/test_distinct_fanout_crossing_invariant.py::test_no_distinct_line_fanout_crossing_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.020097543019801378, + "tests/test_dogleg_exempt_trunk_invariant.py::test_checker_flags_crossing_dogleg": 0.00020612403750419617, + "tests/test_dogleg_exempt_trunk_invariant.py::test_checker_passes_parallel_dogleg": 0.0009515839628875256, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/centered_tracks.mmd]": 0.02824720786884427, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/cross_track_interchange.mmd]": 0.03345699980854988, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/diagonal_labels.mmd]": 0.068552833981812, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/differentialabundance.mmd]": 0.2519561250228435, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/differentialabundance_default.mmd]": 0.2172352923080325, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/directional_flow.mmd]": 0.016545332968235016, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/disconnected_components.mmd]": 0.041533542796969414, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/epitopeprediction.mmd]": 0.07384712621569633, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/file_icons.mmd]": 0.03135070810094476, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/genomeassembly.mmd]": 0.07400583219714463, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/genomeassembly_staggered.mmd]": 0.07389095798134804, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/genomic_pipeline.mmd]": 0.25802887394092977, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/group_labels.mmd]": 0.24300008406862617, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/hlatyping.mmd]": 0.08672349993139505, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/legend_combo.mmd]": 0.02252933382987976, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/legend_logo_placement.mmd]": 0.06833449983969331, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/line_spread.mmd]": 0.0591042919550091, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/longread_variant_calling.mmd]": 0.13557983306236565, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/marker_styles.mmd]": 0.07488641608506441, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/off_track_outputs.mmd]": 0.01675258274190128, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/rail_mode.mmd]": 0.04607004206627607, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/rail_section.mmd]": 0.03826333396136761, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/rnaseq_auto.mmd]": 0.11121020815335214, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/rnaseq_sections.mmd]": 0.5188916253391653, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.5188942500390112, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/sarek_metro.mmd]": 0.4813101668842137, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/simple_pipeline.mmd]": 0.02514504105783999, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/tb_file_termini.mmd]": 0.040062249870970845, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.057927208952605724, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.022516125114634633, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/around_section_below.mmd]": 0.024996041553094983, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.05398016725666821, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.028711458202451468, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.04454641696065664, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.03388845804147422, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bt_chain.mmd]": 0.008728374959900975, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.010017290944233537, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.020766792353242636, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bt_fork.mmd]": 0.008635916979983449, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.013534249970689416, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.019646457862108946, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.014531082939356565, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.011377959279343486, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.2948348340578377, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.0209820419549942, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.01976462476886809, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.03882704209536314, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.05201495694927871, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.03285025106742978, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.026875499170273542, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.04013079218566418, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.029578916961327195, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.035078708082437515, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.03372387494891882, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/complex_multipath.mmd]": 0.08275229181163013, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.03759550116956234, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.12771849986165762, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.036927375709638, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.023055292200297117, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.009682874195277691, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.0095558762550354, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.03385408339090645, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/deep_linear.mmd]": 0.05365041806362569, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.0476021240465343, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.012219500029459596, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.026669751154258847, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.019203043077141047, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.026976291788741946, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.03513987408950925, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.044349166098982096, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.031131875002756715, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/fold_double.mmd]": 0.09454570803791285, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.11447033402509987, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.09078737604431808, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.47381579084321856, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/header_nudge.mmd]": 0.01686141570098698, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.016353664919734, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.014274708926677704, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.01827300013974309, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.01697012479417026, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.04527020896784961, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.03444933379068971, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.018352792831137776, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.025369584327563643, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.04627258260734379, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.03984245890751481, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.01904816599562764, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.027785334270447493, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.01531812478788197, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.03057079203426838, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.0209777916315943, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.02904341695830226, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.023032667115330696, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.012675999896600842, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.011768708936870098, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.024719791719689965, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.016287083039060235, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.009438665816560388, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.04452866595238447, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.04274245887063444, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.10441470798105001, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.034713832661509514, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.025619249790906906, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.02638366585597396, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.01998599898070097, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.04046004102565348, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.049294875701889396, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.02780941710807383, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.05102350004017353, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.01603387505747378, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.023136874893680215, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.0363835000898689, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.05370525014586747, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.02154837502166629, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.023630167124792933, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.02597145806066692, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.09240358206443489, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/parallel_independent.mmd]": 0.0476566250436008, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.025588583201169968, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.04302716697566211, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.008867790922522545, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.09868146013468504, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.014370708027854562, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.013021665858104825, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.009292125003412366, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.30143420794047415, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.013110374798998237, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.020001668017357588, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.018919417168945074, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.01900224993005395, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.019433708861470222, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.06372879282571375, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.020616124849766493, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/section_diamond.mmd]": 0.025022000074386597, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.03315079165622592, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.03961941692978144, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/single_section.mmd]": 0.011212208773940802, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.011838750215247273, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.030612791888415813, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0270283748395741, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.009997043060138822, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.027912751073017716, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.021633417112752795, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.009713584091514349, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.005942042218521237, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.023051542229950428, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.023696790914982557, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.017571333097293973, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.029729209141805768, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.011310666101053357, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.013956333277747035, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.009464165894314647, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.01893429015763104, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.015139708295464516, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.010973459808155894, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.012602373957633972, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/terminus_join.mmd]": 0.004980458877980709, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.0219267092179507, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.01889774901792407, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.0759442918933928, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.011657666880637407, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/upward_bypass.mmd]": 0.061302084010094404, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/variant_calling.mmd]": 0.18686691811308265, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.03220424917526543, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.05123724904842675, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.01949908398091793, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.012269917177036405, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/variant_calling.mmd]": 0.04328504204750061, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/variant_calling_tuned.mmd]": 0.06493008323013783, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/variantbenchmarking.mmd]": 0.23972349963150918, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.1975094999652356, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[examples/variantprioritization.mmd]": 0.07012754189781845, + "tests/test_dogleg_exempt_trunk_invariant.py::test_no_dogleg_crosses_exempt_trunk_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.016909209080040455, + "tests/test_edge_clearance_invariant.py::test_collector_merge_descent_clears_source_right_edge": 0.26592579181306064, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[centered_tracks]": 0.020768500166013837, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[cross_track_interchange]": 0.279167041182518, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[diagonal_labels]": 0.0676249589305371, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[differentialabundance]": 0.15902674989774823, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[differentialabundance_default]": 0.18224766594357789, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[directional_flow]": 0.01622516685165465, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[disconnected_components]": 0.02361812489107251, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[epitopeprediction]": 0.0751257911324501, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[file_icons]": 0.0224352921359241, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[genomeassembly]": 0.053500374779105186, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[genomeassembly_staggered]": 0.051163666881620884, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[genomic_pipeline]": 0.3756075422279537, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[group_labels]": 0.030585750238969922, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[hlatyping]": 0.0466180422808975, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[legend_combo]": 0.02127383300103247, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[legend_logo_placement]": 0.2187556258868426, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[line_spread]": 0.05699033313430846, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[longread_variant_calling]": 0.1270743333734572, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[marker_styles]": 0.024101708084344864, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[off_track_outputs]": 0.012811667053028941, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[rail_mode]": 0.0286597921513021, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[rail_section]": 0.036508499877527356, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[rnaseq_auto]": 0.0965981672052294, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[rnaseq_sections]": 0.526631582994014, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[rnaseq_sections_manual]": 0.5465481660794467, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[sarek_metro]": 0.3788723750039935, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[simple_pipeline]": 0.01614783308468759, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[stacked_collector_fanin]": 0.25055712508037686, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[tb_file_termini]": 0.03303750022314489, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[twoline_fanout_up]": 0.020563458325341344, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[variant_calling]": 0.03817937523126602, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[variant_calling_tuned]": 0.043300958117470145, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[variantbenchmarking]": 0.21155858202837408, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[variantbenchmarking_auto]": 0.18707041628658772, + "tests/test_edge_clearance_invariant.py::test_no_incidental_edge_graze[variantprioritization]": 0.049266334157437086, + "tests/test_embed_contract.py::test_driver_contract_version_constant": 0.0002907910384237766, + "tests/test_embed_contract.py::test_driver_js_exists_and_importable": 0.0010787502396851778, + "tests/test_embed_contract.py::test_driver_js_exposes_required_api_methods": 0.0007256250828504562, + "tests/test_embed_contract.py::test_driver_js_returns_api_object": 0.0005603339523077011, + "tests/test_embed_contract.py::test_embed_script_cli_exits_zero": 0.0005345419049263, + "tests/test_embed_contract.py::test_embed_script_cli_output_contains_api_methods": 0.0004140830133110285, + "tests/test_embed_contract.py::test_embed_script_cli_output_contains_attach_function": 0.0003597082104533911, + "tests/test_embed_contract.py::test_embed_script_matches_inlined_driver": 0.0006505411583930254, + "tests/test_embed_contract.py::test_embed_script_writes_file": 0.0010780422016978264, + "tests/test_embed_contract.py::test_html_inlines_driver_source_verbatim": 0.002191790845245123, + "tests/test_embed_contract.py::test_inline_snippet_dispatches_ready_event": 0.0003035429399460554, + "tests/test_embed_contract.py::test_standalone_html_assigns_api_to_window": 0.7848323327489197, + "tests/test_embed_contract.py::test_standalone_html_contains_all_api_methods": 0.00042383396066725254, + "tests/test_embed_contract.py::test_svg_carries_line_data_attributes": 0.0001963342074304819, + "tests/test_embed_contract.py::test_svg_carries_section_data_attributes": 0.00018458301201462746, + "tests/test_embed_contract.py::test_svg_carries_station_data_attributes": 0.6528179589658976, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/centered_tracks.mmd]": 0.020460124826058745, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/cross_track_interchange.mmd]": 0.03329683281481266, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/diagonal_labels.mmd]": 0.29364758310839534, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/differentialabundance.mmd]": 0.2423791259061545, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/differentialabundance_default.mmd]": 0.19985345820896327, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/directional_flow.mmd]": 0.016280374955385923, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/disconnected_components.mmd]": 0.030757165979593992, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/epitopeprediction.mmd]": 0.0682449999731034, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/file_icons.mmd]": 0.020168749848380685, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/genomeassembly.mmd]": 0.0746323752682656, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/genomeassembly_staggered.mmd]": 0.09537316672503948, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/genomic_pipeline.mmd]": 0.3486109171062708, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/group_labels.mmd]": 0.020536707947030663, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/01_minimal.mmd]": 0.016029916936531663, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/02_sections.mmd]": 0.0348315411247313, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/03_fan_out.mmd]": 0.034562624990940094, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/03b_fan_in_merge.mmd]": 0.036491540959104896, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/04_directions.mmd]": 0.043326251208782196, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/05_file_icons.mmd]": 0.020680416841059923, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/05b_multi_icons.mmd]": 0.024138667155057192, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/05c_files_icon.mmd]": 0.04198591713793576, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/05d_folder_icon.mmd]": 0.013182208873331547, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/05f_banner_labels.mmd]": 0.015030290931463242, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/06a_without_hidden.mmd]": 0.031216123839840293, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/guide/06b_with_hidden.mmd]": 0.028144167037680745, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/hlatyping.mmd]": 0.05809904192574322, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/legend_combo.mmd]": 0.015506290830671787, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/legend_logo_placement.mmd]": 0.04488691687583923, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/line_spread.mmd]": 0.06795770931057632, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/longread_variant_calling.mmd]": 0.31691895704716444, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/marker_styles.mmd]": 0.027155750896781683, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/off_track_outputs.mmd]": 0.022081043105572462, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/rail_mode.mmd]": 0.029114000033587217, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/rail_section.mmd]": 0.046678124694153666, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/rnaseq_auto.mmd]": 0.09952800092287362, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/rnaseq_sections.mmd]": 0.6259827914182097, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/rnaseq_sections_manual.mmd]": 0.49754829215817153, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/sarek_metro.mmd]": 0.17793308291584253, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/simple_pipeline.mmd]": 0.011349749751389027, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/tb_file_termini.mmd]": 0.033242749981582165, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/aligner_row_pinned_continuation.mmd]": 0.04402700113132596, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/around_below_ep_col_gt0.mmd]": 0.03231233195401728, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/around_section_below.mmd]": 0.020621290896087885, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/asymmetric_tree.mmd]": 0.061022249050438404, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.016022542025893927, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/branch_fold_forward.mmd]": 0.0333014577627182, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/branch_fold_stability.mmd]": 0.036078040022403, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bt_chain.mmd]": 0.013257667189463973, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bt_exit_top_above.mmd]": 0.013334291987121105, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bt_exit_top_above_2line.mmd]": 0.01602583285421133, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bt_fork.mmd]": 0.013539624400436878, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bt_perp_entry_below.mmd]": 0.013063874561339617, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bt_to_lr.mmd]": 0.018011956941336393, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bt_to_tb.mmd]": 0.015030249720439315, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bundle_terminator_continuation.mmd]": 0.008551041828468442, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.05363966780714691, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.04293624986894429, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_label_rake.mmd]": 0.036185042234137654, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_label_rake_left.mmd]": 0.030757041880860925, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_label_rake_wide.mmd]": 0.06007508421316743, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.030348624102771282, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_leftward_overflow.mmd]": 0.026426666881889105, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/bypass_v_tight.mmd]": 0.040021833032369614, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/clear_channel_target_aware_push.mmd]": 0.03055800125002861, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/compact_gap_peer_conflict.mmd]": 0.023129833163693547, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/compact_hidden_passthrough.mmd]": 0.027612584177404642, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/complex_multipath.mmd]": 0.0460207920987159, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/convergence_stacked_sink.mmd]": 0.30429154192097485, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/convergent_offrow_exit_climb.mmd]": 0.14690320868976414, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.02855733409523964, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/cross_col_top_entry.mmd]": 0.008321873843669891, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/cross_column_perp_drop.mmd]": 0.016323041636496782, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.012051082914695144, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/cross_row_gap_wrap.mmd]": 0.044546041870489717, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/deep_linear.mmd]": 0.044795292895287275, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/disjoint_sameline_trunks.mmd]": 0.04367208434268832, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/divergent_fanout_split.mmd]": 0.020419875159859657, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/dogleg_exempt_distinct.mmd]": 0.026597500080242753, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/dogleg_exempt_sameline.mmd]": 0.04022799897938967, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/dogleg_twoline_fanout.mmd]": 0.03126325109042227, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/exit_corner_offset_dogleg.mmd]": 0.03768062498420477, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/fan_bypass_nesting.mmd]": 0.1250115828588605, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/fan_in_merge.mmd]": 0.047173958737403154, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/fold_double.mmd]": 0.11513962596654892, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/fold_fan_across.mmd]": 0.12596904207020998, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/fold_stacked_branch.mmd]": 0.11024045804515481, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/funcprofiler_upstream.mmd]": 0.23048291634768248, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/header_nudge.mmd]": 0.024672166910022497, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/header_side_rotated.mmd]": 0.016152082942426205, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/inrow_skip_breeze.mmd]": 0.008073084056377411, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/inter_row_wrap_clearance.mmd]": 0.036374291870743036, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/interchange_lane_reorder.mmd]": 0.017736793030053377, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/junction_entry_align.mmd]": 0.043874582974240184, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/junction_entry_collision.mmd]": 0.04437591601163149, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/junction_entry_reversed_fold.mmd]": 0.02215824881568551, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/junction_fanout_convergence.mmd]": 0.016600167145952582, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/left_entry_up_wrap.mmd]": 0.010032125981524587, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/left_exit_sink_below.mmd]": 0.02089137607254088, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.017545748967677355, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.01168875116854906, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.02328420802950859, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.029261832823976874, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.22794095799326897, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.025345125002786517, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_to_tb_top_drop.mmd]": 0.012286416022107005, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.012904666131362319, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.017905167769640684, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.017104458063840866, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_top_entry_cross_column.mmd]": 0.015357457101345062, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.021722582867369056, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_around_below_leftmost.mmd]": 0.034708417020738125, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_bottom_row_bypass.mmd]": 0.04276995873078704, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_leftmost_sink_branch.mmd]": 0.0254935419652611, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_offrow_continuation.mmd]": 0.028203542111441493, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_port_above_approach.mmd]": 0.03592537576332688, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_pullaway.mmd]": 0.03156608436256647, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_right_entry.mmd]": 0.030034499941393733, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.03960704174824059, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/merge_trunk_over_low_section.mmd]": 0.031264418037608266, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/mismatched_tracks.mmd]": 0.020730000222101808, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/mixed_bundle_column.mmd]": 0.03789491578936577, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/mixed_port_sides.mmd]": 0.022107125259935856, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/multi_input_convergence.mmd]": 0.020649584010243416, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/multi_line_bundle.mmd]": 0.02376500004902482, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.04404400009661913, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/near_vertical_junction_hook.mmd]": 0.03052541660144925, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/off_track_convergence.mmd]": 0.01949583413079381, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/off_track_convergence_multiline.mmd]": 0.015944832004606724, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/off_track_input_above_consumer.mmd]": 0.1143769167829305, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/parallel_independent.mmd]": 0.014742833096534014, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/peeloff_extra_line_consumer.mmd]": 0.04345045890659094, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/peeloff_riser_respace.mmd]": 0.03017804166302085, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/post_convergence_trunk.mmd]": 0.006737957708537579, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/rail_inter_section.mmd]": 0.007173874881118536, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/rail_offtrack_fan.mmd]": 0.019036625046283007, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/rail_offtrack_io.mmd]": 0.017013084143400192, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/rail_offtrack_plain_io.mmd]": 0.012522459030151367, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/reconverge_reversed_fold.mmd]": 0.12030633329413831, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/right_entry_from_above.mmd]": 0.010873791296035051, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/right_entry_from_above_far.mmd]": 0.01184379099868238, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.04273962415754795, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/right_entry_wrap_no_fan.mmd]": 0.02294437470845878, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/rl_entry_runway.mmd]": 0.023188041988760233, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/rnaseq_lite.mmd]": 0.0852595828473568, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/route_around_intervening.mmd]": 0.035070207668468356, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/section_diamond.mmd]": 0.048523373901844025, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/self_crossing_bridge.mmd]": 0.03221391700208187, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/shared_sink_parallel.mmd]": 0.04585662507452071, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/single_section.mmd]": 0.0077567503321915865, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/stacked_left_exit_drop.mmd]": 0.016299750888720155, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/stacked_lr_serpentine.mmd]": 0.025517749832943082, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.04561870894394815, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.014195333002135158, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.019243376329541206, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.022087625926360488, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_column_continuation_two_lines.mmd]": 0.01690345909446478, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_convergence_straight_drop.mmd]": 0.01154416799545288, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_internal_diagonal.mmd]": 0.016264375997707248, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_left_exit_step.mmd]": 0.025422832928597927, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_lr_exit_left.mmd]": 0.02802708395756781, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_lr_exit_right.mmd]": 0.03362895897589624, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_passthrough_continuation.mmd]": 0.008352998876944184, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_passthrough_trunk.mmd]": 0.035923626041039824, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.009010292822495103, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_right_entry_stack.mmd]": 0.02574229217134416, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_trunk_through_fan.mmd]": 0.007423208095133305, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/tb_two_line_vert_seam.mmd]": 0.009822542080655694, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/terminal_symmetric_fan.mmd]": 0.026466500014066696, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/terminus_join.mmd]": 0.005207000765949488, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/top_entry_header_clash.mmd]": 0.008791250176727772, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/trunk_through_fan.mmd]": 0.017533251084387302, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/u_turn_fold.mmd]": 0.07039337488822639, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/uneven_diamond.mmd]": 0.01248929207213223, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/upward_bypass.mmd]": 0.03854045900516212, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/variant_calling.mmd]": 0.1688645409885794, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/wide_fan_in.mmd]": 0.051741791889071465, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/wide_fan_out.mmd]": 0.2446705000475049, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/wide_label_fan.mmd]": 0.017201416892930865, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/topologies/wrapped_label_trunk.mmd]": 0.019838626263663173, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/variant_calling.mmd]": 0.04551204200834036, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/variant_calling_tuned.mmd]": 0.04920662590302527, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/variantbenchmarking.mmd]": 0.5970390839502215, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/variantbenchmarking_auto.mmd]": 0.21824537497013807, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/examples/variantprioritization.mmd]": 0.046086834045127034, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/bubble_forced_label_clears_diagonal.mmd]": 0.010790917091071606, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/bubble_label_clears_diagonal.mmd]": 0.011240290943533182, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/bubble_output_above.mmd]": 0.008919706800952554, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/captioned_sibling_outputs.mmd]": 0.011707250028848648, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/da_pipeline.mmd]": 0.1661154159810394, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/diagonal_single_trunk_off_track.mmd]": 0.0641751668881625, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/file_icon_fanin.mmd]": 0.025473624700680375, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/font_scale.mmd]": 0.023650749819353223, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/genomeassembly_organellar.mmd]": 0.09597662510350347, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/icon_caption_wrap.mmd]": 0.0045607921201735735, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/leaf_file_icon_on_trunk.mmd]": 0.015118874842301011, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/multiline_labels.mmd]": 0.020491040777415037, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/off_track_output_branched.mmd]": 0.014095209073275328, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/off_track_outputs_along_trunk.mmd]": 0.042352335061877966, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rail_diagonal_labels.mmd]": 0.009552708128467202, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rail_marked_single_line.mmd]": 0.03292166581377387, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rail_marker_fill.mmd]": 0.006676624994724989, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rail_marker_subset_interchange.mmd]": 0.015376667026430368, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rail_pitch_vs_labels.mmd]": 0.0314309170935303, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rail_single_line_callers.mmd]": 0.00939062493853271, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rnaseq_sections.mmd]": 0.47032225015573204, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/rnaseq_simple.mmd]": 0.006115541094914079, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/tb_right_exit_feeder_slots.mmd]": 0.04008508287370205, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.014315958833321929, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/trunk_align_matching_bundle.mmd]": 0.014818791998550296, + "tests/test_engine_guards_perf.py::test_closed_form_at_least_as_strict_as_sampled[/Users/jonathan.manning/projects/nf-metro/tests/fixtures/uneven_diamond.mmd]": 0.012858500238507986, + "tests/test_engine_guards_perf.py::test_closed_form_unit_cases": 0.00019175000488758087, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corner_radii_anchored_at_floor[around_section_below]": 0.04312916588969529, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corner_radii_anchored_at_floor[convergence_stacked_sink]": 0.03458887501619756, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corner_radii_anchored_at_floor[junction_entry_align]": 0.0449883749242872, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corner_radii_anchored_at_floor[longread_variant_calling]": 0.139348333934322, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corner_radii_anchored_at_floor[right_entry_gap_above_empty_row]": 0.021060249069705606, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corner_radii_anchored_at_floor[right_entry_wrap_no_fan]": 0.01857675123028457, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corner_radii_anchored_at_floor[stacked_lr_serpentine]": 0.03160183387808502, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corners_are_concentric_and_unflipped[around_section_below]": 0.014521459117531776, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corners_are_concentric_and_unflipped[convergence_stacked_sink]": 0.03837362490594387, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corners_are_concentric_and_unflipped[junction_entry_align]": 0.046955415746197104, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corners_are_concentric_and_unflipped[longread_variant_calling]": 0.12229491723701358, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corners_are_concentric_and_unflipped[right_entry_gap_above_empty_row]": 0.011404083576053381, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corners_are_concentric_and_unflipped[right_entry_wrap_no_fan]": 0.008921792032197118, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_corners_are_concentric_and_unflipped[stacked_lr_serpentine]": 0.02629412617534399, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_routes_are_offset_baked[around_section_below]": 0.013829291565343738, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_routes_are_offset_baked[convergence_stacked_sink]": 0.04882479226216674, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_routes_are_offset_baked[junction_entry_align]": 0.04119762498885393, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_routes_are_offset_baked[longread_variant_calling]": 0.28392366715706885, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_routes_are_offset_baked[right_entry_gap_above_empty_row]": 0.024070543237030506, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_routes_are_offset_baked[right_entry_wrap_no_fan]": 0.013310082955285907, + "tests/test_entry_wrap_centreline.py::test_entry_wrap_routes_are_offset_baked[stacked_lr_serpentine]": 0.030305041931569576, + "tests/test_exit_corner_offset_invariant.py::test_generated_exit_leaves_on_offset_track[span1]": 0.03134208405390382, + "tests/test_exit_corner_offset_invariant.py::test_generated_exit_leaves_on_offset_track[span2]": 0.03097933321259916, + "tests/test_exit_corner_offset_invariant.py::test_generated_exit_leaves_on_offset_track[span3]": 0.028662750031799078, + "tests/test_exit_corner_offset_invariant.py::test_runtime_guard_clean_on_fixture": 0.02461779210716486, + "tests/test_exit_corner_offset_invariant.py::test_static_fixture_exit_leaves_on_offset_track": 0.01773650012910366, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[aligner_row_pinned_continuation]": 0.054701208136975765, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[around_below_ep_col_gt0]": 0.013757791137322783, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[around_section_below]": 0.011921040946617723, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[asymmetric_tree]": 0.024207208771258593, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bottom_row_climb_clear_corridor]": 0.024752042954787612, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[branch_fold_forward]": 0.018652250058948994, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[branch_fold_stability]": 0.016434791032224894, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bt_chain]": 0.0047112079337239265, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bt_exit_top_above]": 0.010774666676297784, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bt_exit_top_above_2line]": 0.011076331604272127, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bt_fork]": 0.006131458096206188, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bt_perp_entry_below]": 0.0127447082195431, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bt_to_lr]": 0.01356600015424192, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bt_to_tb]": 0.008300373796373606, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bundle_terminator_continuation]": 0.01586333313025534, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_fan_in_outer_slot]": 0.034349832916632295, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_gap2_rightward_overflow]": 0.02131045702844858, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_label_rake]": 0.02169550023972988, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_label_rake_left]": 0.024010709254071116, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_label_rake_wide]": 0.016879874747246504, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_leftward_far_side_entry]": 0.01472912565805018, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_leftward_overflow]": 0.012784751132130623, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[bypass_v_tight]": 0.009615624090656638, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[centered_tracks]": 0.010726833017542958, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[clear_channel_target_aware_push]": 0.018865332705900073, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[compact_gap_peer_conflict]": 0.01112062600441277, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[compact_hidden_passthrough]": 0.03796000010333955, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[complex_multipath]": 0.02559612481854856, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[convergence_stacked_sink]": 0.048899083863943815, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[convergent_offrow_exit_climb]": 0.09776362497359514, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[corridor_narrow_gap_fallback]": 0.01570241618901491, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[cross_col_top_entry]": 0.007108667166903615, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[cross_column_perp_drop]": 0.014238667208701372, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[cross_column_perp_drop_far_exit]": 0.017719457857310772, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[cross_row_gap_wrap]": 0.027397082885727286, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[cross_track_interchange]": 0.03816425031982362, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[deep_linear]": 0.03514879220165312, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[diagonal_labels]": 0.05512512498535216, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[differentialabundance]": 0.11739291693083942, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[differentialabundance_default]": 0.22716241609305143, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[directional_flow]": 0.043936124769970775, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[disconnected_components]": 0.030865290900692344, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[disjoint_sameline_trunks]": 0.024380584247410297, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[divergent_fanout_split]": 0.011321667116135359, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[dogleg_exempt_distinct]": 0.023402791935950518, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[dogleg_exempt_sameline]": 0.015015542041510344, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[dogleg_twoline_fanout]": 0.02693083416670561, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[epitopeprediction]": 0.047678624046966434, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[exit_corner_offset_dogleg]": 0.018574124900624156, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[fan_bypass_nesting]": 0.04591012489981949, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[fan_in_merge]": 0.18937079212628305, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[file_icons]": 0.028257417026907206, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[fold_double]": 0.07978241611272097, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[fold_fan_across]": 0.07702504121698439, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[fold_stacked_branch]": 0.058298249961808324, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[funcprofiler_upstream]": 0.04738654103130102, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[genomeassembly]": 0.24330095807090402, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[genomeassembly_staggered]": 0.059667374240234494, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[genomic_pipeline]": 0.15926733380183578, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[group_labels]": 0.012212625937536359, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[header_nudge]": 0.017304250271990895, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[header_side_rotated]": 0.024874665774405003, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[hlatyping]": 0.047600749880075455, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[inrow_skip_breeze]": 0.007345415884628892, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[inter_row_wrap_clearance]": 0.012803917052224278, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[interchange_lane_reorder]": 0.010376250138506293, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[junction_entry_align]": 0.05535350018180907, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[junction_entry_collision]": 0.015015000244602561, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[junction_entry_reversed_fold]": 0.013080124277621508, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[junction_fanout_convergence]": 0.023123084101825953, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[left_entry_up_wrap]": 0.014420666033402085, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[left_exit_sink_below]": 0.015971875749528408, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[legend_combo]": 0.029001250863075256, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[legend_logo_placement]": 0.0424838331528008, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[line_spread]": 0.04048416716977954, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[longread_variant_calling]": 0.07909474871121347, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_perp_bottom_exit_perp_entry]": 0.009185581933706999, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_perp_bottom_exit_side_entry]": 0.008619374828413129, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_perp_top_exit_perp_entry]": 0.0252668762113899, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_perp_top_exit_perp_entry_diverging]": 0.01759683294221759, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_perp_top_exit_side_entry]": 0.017177459318190813, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_to_tb_top_cross_col]": 0.0186617081053555, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_to_tb_top_drop]": 0.015441874973475933, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_to_tb_top_drop_two_lines]": 0.013752124272286892, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_to_tb_top_near_vertical]": 0.01065904088318348, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_to_tb_top_two_lines]": 0.009027208900079131, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_top_entry_cross_column]": 0.006817706627771258, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[lr_top_entry_cross_column_two_line]": 0.007357249967753887, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[marker_styles]": 0.025759457144886255, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_around_below_leftmost]": 0.013585207983851433, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_bottom_row_bypass]": 0.027645248686894774, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_leftmost_sink_branch]": 0.027947915950790048, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_offrow_continuation]": 0.023047957802191377, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_port_above_approach]": 0.028166376054286957, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_pullaway]": 0.025023375870659947, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_right_entry]": 0.017623084131628275, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_trunk_out_of_range_section]": 0.015650708926841617, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[merge_trunk_over_low_section]": 0.022705208975821733, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[mismatched_tracks]": 0.02147916704416275, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[mixed_bundle_column]": 0.2297236251179129, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[mixed_port_sides]": 0.033932456746697426, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[multi_input_convergence]": 0.052423999877646565, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[multi_line_bundle]": 0.03620500094257295, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[multicarrier_offrow_exit_climb]": 0.0325737907551229, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[near_vertical_junction_hook]": 0.019977792166173458, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[off_track_convergence]": 0.03712054202333093, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[off_track_convergence_multiline]": 0.014360249973833561, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[off_track_input_above_consumer]": 0.06330820801667869, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[off_track_outputs]": 0.014232124900445342, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[parallel_independent]": 0.014205874875187874, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[peeloff_extra_line_consumer]": 0.019879499915987253, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[peeloff_riser_respace]": 0.013310875277966261, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[post_convergence_trunk]": 0.005639082984998822, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rail_inter_section]": 0.008417832665145397, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rail_mode]": 0.04309762408956885, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rail_offtrack_fan]": 0.009658958995714784, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rail_offtrack_io]": 0.009972624946385622, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rail_offtrack_plain_io]": 0.009947792161256075, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rail_section]": 0.04744870797730982, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[reconverge_reversed_fold]": 0.0757299589458853, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[right_entry_from_above]": 0.015942541183903813, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[right_entry_from_above_far]": 0.01895604212768376, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[right_entry_gap_above_empty_row]": 0.01607074891217053, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[right_entry_wrap_no_fan]": 0.00896908319555223, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rl_entry_runway]": 0.014505375875160098, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rnaseq_auto]": 0.08883516560308635, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rnaseq_lite]": 0.03570366511121392, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rnaseq_sections]": 0.24022762523964047, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[rnaseq_sections_manual]": 0.11729570827446878, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[route_around_intervening]": 0.010341583751142025, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[sarek_metro]": 0.1214736660476774, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[section_diamond]": 0.04026037501171231, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[self_crossing_bridge]": 0.017726417165249586, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[shared_sink_parallel]": 0.039510457776486874, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[simple_pipeline]": 0.01785045792348683, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[single_section]": 0.0055313329212367535, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[stacked_left_exit_drop]": 0.03373029245994985, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[stacked_lr_serpentine]": 0.018983501009643078, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[symmetric_diamond_beside_wide_fan]": 0.02777233300730586, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_bottom_entry_flow_start]": 0.006351166637614369, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_bottom_exit_bundle_jog]": 0.024554625153541565, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_bottom_exit_fork_diamond]": 0.017138750990852714, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_column_continuation_two_lines]": 0.011672333115711808, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_convergence_straight_drop]": 0.005950375692918897, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_file_termini]": 0.013414041139185429, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_internal_diagonal]": 0.014148873975500464, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_left_exit_step]": 0.016311874613165855, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_lr_exit_left]": 0.023939166916534305, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_lr_exit_right]": 0.013882040977478027, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_passthrough_continuation]": 0.019300999818369746, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_passthrough_trunk]": 0.01159979123622179, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_perp_exit_side_neighbour]": 0.020043083932250738, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_right_entry_stack]": 0.031315290834754705, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_trunk_through_fan]": 0.00603670789860189, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[tb_two_line_vert_seam]": 0.014531458029523492, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[terminal_symmetric_fan]": 0.007975124986842275, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[terminus_join]": 0.010661666980013251, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[top_entry_header_clash]": 0.014087956864386797, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[trunk_through_fan]": 0.04276679316535592, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[u_turn_fold]": 0.25853908294811845, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[uneven_diamond]": 0.006632708245888352, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[upward_bypass]": 0.026675374945625663, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[variant_calling0]": 0.021847376134246588, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[variant_calling1]": 0.03498450107872486, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[variant_calling_tuned]": 0.029115000972524285, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[variantbenchmarking]": 0.11819875123910606, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[variantbenchmarking_auto]": 0.28787412494421005, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[variantprioritization]": 0.03377212514169514, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[wide_fan_in]": 0.020779042737558484, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[wide_fan_out]": 0.02746337605640292, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[wide_label_fan]": 0.006793082691729069, + "tests/test_explain.py::test_explain_all_fixtures_no_crash[wrapped_label_trunk]": 0.01854533259756863, + "tests/test_explain.py::test_explain_bypass_station": 0.0862972920294851, + "tests/test_explain.py::test_explain_cli_json": 0.06928404094651341, + "tests/test_explain.py::test_explain_cli_matches_formatter": 0.2145504578948021, + "tests/test_explain.py::test_explain_cli_runs": 0.3364566240925342, + "tests/test_explain.py::test_explain_cli_section_filter": 0.0692571671679616, + "tests/test_explain.py::test_explain_decision_schema": 0.06288629188202322, + "tests/test_explain.py::test_explain_explicit_direction_not_reported": 0.08938154112547636, + "tests/test_explain.py::test_explain_explicit_grid_sections_skipped_in_directions": 0.1377787501551211, + "tests/test_explain.py::test_explain_fan_out_junction": 0.28857491607777774, + "tests/test_explain.py::test_explain_fold_fires_for_auto_layout": 0.06823637383058667, + "tests/test_explain.py::test_explain_fold_silent_for_explicit_grid": 0.09604983380995691, + "tests/test_explain.py::test_explain_no_decisions_single_section": 0.0025971669238060713, + "tests/test_explain.py::test_explain_port_sides_inferred": 0.07556279189884663, + "tests/test_explain.py::test_explain_returns_required_keys": 0.052164666121825576, + "tests/test_explain.py::test_explain_rnaseq_auto_directions": 0.054145292146131396, + "tests/test_explain.py::test_explain_section_filter_restricts_output": 0.06980895809829235, + "tests/test_explain.py::test_explain_section_filter_unknown_section": 0.05700179189443588, + "tests/test_explain.py::test_explain_station_filter": 0.08713141712360084, + "tests/test_explain.py::test_explain_summary_counts": 0.05791862495243549, + "tests/test_explain.py::test_format_explain_json_is_valid": 0.07851254078559577, + "tests/test_explain.py::test_format_explain_text_empty_graph": 0.008499416988343, + "tests/test_explain.py::test_format_explain_text_structure": 0.1328605841845274, + "tests/test_fan_merge_crossing_invariant.py::test_checker_fires_without_seam_free_positive_fan[tb_convergence_straight_drop]": 0.010529251070693135, + "tests/test_fan_merge_crossing_invariant.py::test_checker_fires_without_seam_free_positive_fan[tb_passthrough_continuation]": 0.01651858282275498, + "tests/test_fan_merge_crossing_invariant.py::test_checker_fires_without_seam_free_positive_fan[tb_trunk_through_fan]": 0.022051459178328514, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/centered_tracks.mmd]": 0.028519666753709316, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/cross_track_interchange.mmd]": 0.02395808300934732, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/diagonal_labels.mmd]": 0.0688562907744199, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/differentialabundance.mmd]": 0.1688856661785394, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/differentialabundance_default.mmd]": 0.17839120887219906, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/directional_flow.mmd]": 0.017968666972592473, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/disconnected_components.mmd]": 0.03604512521997094, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/epitopeprediction.mmd]": 0.06510662473738194, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/file_icons.mmd]": 0.019019708037376404, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/genomeassembly.mmd]": 0.08419395890086889, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/genomeassembly_staggered.mmd]": 0.07946229190565646, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/genomic_pipeline.mmd]": 0.5221849577501416, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/group_labels.mmd]": 0.016403998946771026, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/hlatyping.mmd]": 0.06162425014190376, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/legend_combo.mmd]": 0.023613625206053257, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/legend_logo_placement.mmd]": 0.06787620903924108, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/line_spread.mmd]": 0.06226245895959437, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/longread_variant_calling.mmd]": 0.16465933294966817, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/marker_styles.mmd]": 0.027287625009194016, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/off_track_outputs.mmd]": 0.02632145886309445, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/rail_mode.mmd]": 0.02451204275712371, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/rail_section.mmd]": 0.03359149978496134, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/rnaseq_auto.mmd]": 0.14476612489670515, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/rnaseq_sections.mmd]": 0.627024750225246, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.5724970831070095, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/sarek_metro.mmd]": 0.4061030421871692, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/simple_pipeline.mmd]": 0.01704512583091855, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/tb_file_termini.mmd]": 0.041859209071844816, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.05199729115702212, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.023434292059391737, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/around_section_below.mmd]": 0.017209958052262664, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.042359708808362484, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.0356757091358304, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.03703966783359647, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.2497267066501081, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bt_chain.mmd]": 0.005397498840466142, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.010799042182043195, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.02093612472526729, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bt_fork.mmd]": 0.013351833913475275, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.02484970702789724, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.011859792284667492, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.011209748219698668, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.03335574991069734, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.08608870790340006, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.04852845915593207, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.037017374066635966, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.04135279101319611, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.10900004114955664, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.042285499861463904, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.03508891724050045, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.03011891688220203, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.03465437493287027, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.02013120800256729, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.01946825021877885, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/complex_multipath.mmd]": 0.04505495890043676, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.03991441708058119, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.13151983194984496, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.058889167848974466, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.021458208095282316, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.02068133419379592, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.015201167901977897, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.03787245904095471, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/deep_linear.mmd]": 0.07524737529456615, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.03530837409198284, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.017536334227770567, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.03569800080731511, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.02386608417145908, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.01688253995962441, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.03833541693165898, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.050543207209557295, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.026498791994526982, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/fold_double.mmd]": 0.13617958221584558, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.09426212613470852, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.35511724976822734, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.28030954021960497, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/header_nudge.mmd]": 0.021878166822716594, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.0226712494622916, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.010079041123390198, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.03588200104422867, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.015185959171503782, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.05469020898453891, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.037663832074031234, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.04127941722981632, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.04099991591647267, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.01056175003759563, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.035107958130538464, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.02099058381281793, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.015593500109389424, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.024926251266151667, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.020694916136562824, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.01697654207237065, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.04269333416596055, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.020701792323961854, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.010420042322948575, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.011185625102370977, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.01803970825858414, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.02408579201437533, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.025730417110025883, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.022677167784422636, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.04302749992348254, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.03410270810127258, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.043107499135658145, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.01774604176171124, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.029326542047783732, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.03396087512373924, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.05068029114045203, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.04922624980099499, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.030510958982631564, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.03301708307117224, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.024631249951198697, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.0373391667380929, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.03215779084712267, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.048748083179816604, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.02176612475886941, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.019093834096565843, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.034452749881893396, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.2435212917625904, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/parallel_independent.mmd]": 0.02645012503489852, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.021303751040250063, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.02679075114428997, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.008523582946509123, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.017402414930984378, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.017627541907131672, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.018532207934185863, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.011892207898199558, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.15586837497539818, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.01592037407681346, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.025892416015267372, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.02198312501423061, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.028313999995589256, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.014306999742984772, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.0713039580732584, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.019962041871622205, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/section_diamond.mmd]": 0.020969374105334282, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.024382083909586072, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.03329883283004165, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/single_section.mmd]": 0.010937291197478771, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.010258749825879931, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.03422729205340147, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.03444279171526432, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.010279374895617366, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.021998709300532937, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.04538020817562938, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.016027166740968823, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.00687041599303484, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.013466583099216223, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.018801916856318712, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.01644866680726409, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.016745500033721328, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.01183408428914845, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.01660875021480024, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.015050583286210895, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.014469959074631333, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.007572458824142814, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.012505792081356049, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.012181165860965848, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/terminus_join.mmd]": 0.005935666151344776, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.011799251195043325, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.024696208769455552, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.0723427499178797, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.006645998917520046, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/upward_bypass.mmd]": 0.05352629232220352, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/variant_calling.mmd]": 0.18661733414046466, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.031795666087418795, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.03554145805537701, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.02836429188027978, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.009176083141937852, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/variant_calling.mmd]": 0.032527333823964, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/variant_calling_tuned.mmd]": 0.06200104276649654, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/variantbenchmarking.mmd]": 0.22633466683328152, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.21066762413829565, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[examples/variantprioritization.mmd]": 0.044649749994277954, + "tests/test_fan_merge_crossing_invariant.py::test_no_fan_merge_partition_crossing_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.01634416775777936, + "tests/test_fan_merge_crossing_invariant.py::test_seam_free_trio_is_crossing_free[tb_convergence_straight_drop]": 0.006312500219792128, + "tests/test_fan_merge_crossing_invariant.py::test_seam_free_trio_is_crossing_free[tb_passthrough_continuation]": 0.01440437464043498, + "tests/test_fan_merge_crossing_invariant.py::test_seam_free_trio_is_crossing_free[tb_trunk_through_fan]": 0.014245916856452823, + "tests/test_fanout_tail_join_invariant.py::test_handoff_join_is_driven_by_coincide_pass": 0.05759308207780123, + "tests/test_fanout_tail_join_invariant.py::test_merge_junctions_excluded_from_fanout": 4.056556584080681, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/centered_tracks.mmd]": 0.03943908307701349, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/cross_track_interchange.mmd]": 0.048755083000287414, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/diagonal_labels.mmd]": 0.0761917510535568, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/differentialabundance.mmd]": 0.48876541666686535, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/differentialabundance_default.mmd]": 0.26707083312794566, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/directional_flow.mmd]": 0.027913415106013417, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/disconnected_components.mmd]": 0.044106333050876856, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/epitopeprediction.mmd]": 0.06782483286224306, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/file_icons.mmd]": 0.04011183325201273, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/genomeassembly.mmd]": 0.05750783206894994, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/genomeassembly_staggered.mmd]": 0.09221329307183623, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/genomic_pipeline.mmd]": 0.27939770882949233, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/group_labels.mmd]": 0.023894458077847958, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/hlatyping.mmd]": 0.13274887506850064, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/legend_combo.mmd]": 0.02195683284662664, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/legend_logo_placement.mmd]": 0.052732833893969655, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/line_spread.mmd]": 0.03555095801129937, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/longread_variant_calling.mmd]": 0.34963962505571544, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/marker_styles.mmd]": 0.037539249984547496, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/off_track_outputs.mmd]": 0.013203166890889406, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/rail_mode.mmd]": 0.03357000113464892, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/rail_section.mmd]": 0.04440304194577038, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/rnaseq_auto.mmd]": 0.11664958321489394, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/rnaseq_sections.mmd]": 0.427884625736624, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.4256454568821937, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/sarek_metro.mmd]": 0.14686437603086233, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/simple_pipeline.mmd]": 0.008835041895508766, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/tb_file_termini.mmd]": 0.030479334061965346, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/variant_calling.mmd]": 0.2665910830255598, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/variant_calling_tuned.mmd]": 0.05789345898665488, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/variantbenchmarking.mmd]": 0.21935037593357265, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.22119024908170104, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[examples/variantprioritization.mmd]": 0.05211137398146093, + "tests/test_fanout_tail_join_invariant.py::test_no_fanout_tail_gaps_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.029132666997611523, + "tests/test_fanout_tail_join_invariant.py::test_variant_calling_tuned_junction6_joins": 0.03479583282023668, + "tests/test_far_side_left_entry.py::test_around_below_entry_takes_feeder_order_transposed": 0.02212120871990919, + "tests/test_far_side_left_entry.py::test_far_side_wrap_arrival_order_is_monotonic": 0.03293241700157523, + "tests/test_far_side_left_entry.py::test_far_side_wrap_delivers_each_line_to_its_entry_offset": 0.023280165856704116, + "tests/test_far_side_left_entry.py::test_far_side_wrap_passes_curve_invariants": 0.029985208762809634, + "tests/test_far_side_left_entry.py::test_far_side_wrap_stays_clear_of_target_interior": 0.03806212404742837, + "tests/test_far_side_left_entry.py::test_far_side_wrap_stays_within_canvas": 0.044152248883619905, + "tests/test_file_icon_label_suppression.py::test_file_icon_stations_have_no_name_label[differentialabundance_default.mmd]": 0.1962037931662053, + "tests/test_file_icon_label_suppression.py::test_file_icon_stations_have_no_name_label[file_icon_fanin.mmd]": 0.03303862502798438, + "tests/test_file_icon_label_suppression.py::test_file_icon_stations_have_no_name_label[genomeassembly_staggered.mmd]": 0.0807572090998292, + "tests/test_file_icon_label_suppression.py::test_terminus_label_suppressed_even_with_nonblank_label": 0.0003370409831404686, + "tests/test_font_portability.py::test_embed_font_contains_base64_data_uri": 0.4212228318210691, + "tests/test_font_portability.py::test_embed_font_injects_font_face_block": 0.2825179579667747, + "tests/test_font_portability.py::test_embed_font_replaces_font_family_with_inter": 0.3122496248688549, + "tests/test_font_portability.py::test_plain_render_uses_helvetica": 0.247501292033121, + "tests/test_font_portability.py::test_text_to_paths_is_valid_svg": 0.6725559991318733, + "tests/test_font_portability.py::test_text_to_paths_no_font_family_attributes": 0.36899299919605255, + "tests/test_font_portability.py::test_text_to_paths_produces_path_elements": 0.3842019580770284, + "tests/test_font_portability.py::test_text_to_paths_removes_all_text_elements": 0.41607154184021056, + "tests/test_fork_anchor_invariants.py::test_fork_group_symmetric_about_trunk[da_pipeline]": 0.17165224999189377, + "tests/test_fork_anchor_invariants.py::test_fork_group_symmetric_about_trunk[differentialabundance]": 0.18089366611093283, + "tests/test_fork_anchor_invariants.py::test_fork_group_symmetric_about_trunk[epitopeprediction]": 0.0741249576676637, + "tests/test_fork_anchor_invariants.py::test_fork_group_symmetric_about_trunk[rnaseq_sections]": 0.7765456659253687, + "tests/test_fork_anchor_invariants.py::test_fork_group_symmetric_about_trunk[variantbenchmarking]": 0.19861308415420353, + "tests/test_fork_anchor_invariants.py::test_fork_group_symmetric_about_trunk[variantbenchmarking_auto]": 0.17546008294448256, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/centered_tracks]": 0.03385341726243496, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/cross_track_interchange]": 0.033201040932908654, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/diagonal_labels]": 0.06545154214836657, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/differentialabundance]": 0.19098687497898936, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/differentialabundance_default]": 0.16064462601207197, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/directional_flow]": 0.022438582964241505, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/disconnected_components]": 0.0244851668830961, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/epitopeprediction]": 0.062266041757538915, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/file_icons]": 0.020207250025123358, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/genomeassembly]": 0.07239491702057421, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/genomeassembly_staggered]": 0.09099625097587705, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/genomic_pipeline]": 0.5639554997906089, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/group_labels]": 0.029957542195916176, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/hlatyping]": 0.04751425003632903, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/legend_combo]": 0.014489291235804558, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/legend_logo_placement]": 0.032509082928299904, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/longread_variant_calling]": 0.09657200006768107, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/marker_styles]": 0.020578917115926743, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/off_track_outputs]": 0.020975375082343817, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/rnaseq_auto]": 0.07072525098919868, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/rnaseq_sections]": 0.44010487594641745, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/rnaseq_sections_manual]": 0.5598021671175957, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/simple_pipeline]": 0.011683332966640592, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/tb_file_termini]": 0.03418179205618799, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/variant_calling]": 0.03339700005017221, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/variant_calling_tuned]": 0.057280748849734664, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/variantbenchmarking]": 0.48162966477684677, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/variantbenchmarking_auto]": 0.19756025006063282, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[examples/variantprioritization]": 0.045234834076836705, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/01_minimal]": 0.02098791697062552, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/02_sections]": 0.01527745882049203, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/03_fan_out]": 0.031245209043845534, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/03b_fan_in_merge]": 0.0433051239233464, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/04_directions]": 0.04600058286450803, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/05_file_icons]": 0.022227707784622908, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/05b_multi_icons]": 0.026148000033572316, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/05c_files_icon]": 0.04248995799571276, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/05d_folder_icon]": 0.01477291714400053, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/05f_banner_labels]": 0.04316445905715227, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/06a_without_hidden]": 0.02071533282287419, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[guide/06b_with_hidden]": 0.03902520891278982, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[nextflow/duplicate_processes]": 0.02189241675660014, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[nextflow/flat_pipeline]": 0.01740237488411367, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[nextflow/unquoted_labels]": 0.011185541050508618, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[nextflow/variant_calling]": 0.03338954201899469, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[nextflow/with_subworkflows]": 0.050367833115160465, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/bubble_forced_label_clears_diagonal]": 0.0199838331900537, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/bubble_label_clears_diagonal]": 0.01505491673015058, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/bubble_output_above]": 0.008906916016712785, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/captioned_sibling_outputs]": 0.02026770799420774, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/da_pipeline]": 0.2914382491726428, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/diagonal_single_trunk_off_track]": 0.09613325004465878, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/file_icon_fanin]": 0.06280112522654235, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/font_scale]": 0.01212320919148624, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/genomeassembly_organellar]": 0.328085333108902, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/icon_caption_wrap]": 0.01026141713373363, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/leaf_file_icon_on_trunk]": 0.014363292139023542, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/multiline_labels]": 0.03427650104276836, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/off_track_output_branched]": 0.01713241683319211, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/off_track_outputs_along_trunk]": 0.013574916869401932, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/rnaseq_sections]": 0.7483835001476109, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/rnaseq_simple]": 0.007674959022551775, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/tb_right_exit_feeder_slots]": 0.031919625820592046, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/trunk_align_matching_bundle]": 0.013849374139681458, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[tests/uneven_diamond]": 0.013602459104731679, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/aligner_row_pinned_continuation]": 0.06775970826856792, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/around_below_ep_col_gt0]": 0.02675729081965983, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/around_section_below]": 0.030126040801405907, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/asymmetric_tree]": 0.04578729113563895, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bottom_row_climb_clear_corridor]": 0.029304916271939874, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/branch_fold_forward]": 0.03623175108805299, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/branch_fold_stability]": 0.024279501056298614, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bt_chain]": 0.005989249795675278, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bt_exit_top_above]": 0.009009250905364752, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bt_exit_top_above_2line]": 0.019613418029621243, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bt_fork]": 0.006815208354964852, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bt_perp_entry_below]": 0.011539876228198409, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bt_to_lr]": 0.027693584095686674, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bt_to_tb]": 0.01679458306171, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bundle_terminator_continuation]": 0.012945331865921617, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_fan_in_outer_slot]": 0.03716091578826308, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_gap2_rightward_overflow]": 0.0280710409861058, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_label_rake]": 0.024835125310346484, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_label_rake_left]": 0.05274016712792218, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_label_rake_wide]": 0.044963500928133726, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_leftward_far_side_entry]": 0.04279579082503915, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_leftward_overflow]": 0.04977612616494298, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/bypass_v_tight]": 0.036148167913779616, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/clear_channel_target_aware_push]": 0.028168499935418367, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/compact_gap_peer_conflict]": 0.02689145994372666, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/compact_hidden_passthrough]": 0.022626374615356326, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/complex_multipath]": 0.06211691605858505, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/convergence_stacked_sink]": 0.04658279079012573, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/convergent_offrow_exit_climb]": 0.1701621247921139, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/corridor_narrow_gap_fallback]": 0.02929825009778142, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/cross_col_top_entry]": 0.00836783298291266, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/cross_column_perp_drop]": 0.011887292144820094, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/cross_column_perp_drop_far_exit]": 0.01484999991953373, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/cross_row_gap_wrap]": 0.030801626155152917, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/deep_linear]": 0.06500387587584555, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/disjoint_sameline_trunks]": 0.03273333399556577, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/divergent_fanout_split]": 0.011953749926760793, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/dogleg_exempt_distinct]": 0.03640195890329778, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/dogleg_exempt_sameline]": 0.015116540947929025, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/dogleg_twoline_fanout]": 0.03229870763607323, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/exit_corner_offset_dogleg]": 0.02282454213127494, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/fan_bypass_nesting]": 0.06290566804818809, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/fan_in_merge]": 0.03622995922341943, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/fold_double]": 0.15016045793890953, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/fold_fan_across]": 0.13739341613836586, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/fold_stacked_branch]": 0.10374070703983307, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/funcprofiler_upstream]": 0.2244352912530303, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/header_nudge]": 0.019461749121546745, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/header_side_rotated]": 0.018431165954098105, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/inrow_skip_breeze]": 0.008487083949148655, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/inter_row_wrap_clearance]": 0.01527020800858736, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/interchange_lane_reorder]": 0.010423208121210337, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/junction_entry_align]": 0.03567983419634402, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/junction_entry_collision]": 0.04767483286559582, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/junction_entry_reversed_fold]": 0.03151141689158976, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/junction_fanout_convergence]": 0.019085416803136468, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/left_entry_up_wrap]": 0.02471266593784094, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/left_exit_sink_below]": 0.021871624048799276, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_perp_bottom_exit_perp_entry]": 0.02429675101302564, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_perp_bottom_exit_side_entry]": 0.014903168193995953, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_perp_top_exit_perp_entry]": 0.2270197917241603, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.025633916025981307, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_perp_top_exit_side_entry]": 0.023653374053537846, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_to_tb_top_cross_col]": 0.023137167096138, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_to_tb_top_drop]": 0.018304041121155024, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_to_tb_top_drop_two_lines]": 0.02913758298382163, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_to_tb_top_near_vertical]": 0.014445916749536991, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_to_tb_top_two_lines]": 0.011575374286621809, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_top_entry_cross_column]": 0.012696916935965419, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/lr_top_entry_cross_column_two_line]": 0.019441958982497454, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_around_below_leftmost]": 0.030956291826441884, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_bottom_row_bypass]": 0.04879112495109439, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_leftmost_sink_branch]": 0.022756041726097465, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_offrow_continuation]": 0.03017604211345315, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_port_above_approach]": 0.0266325818374753, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_pullaway]": 0.03724520793184638, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_right_entry]": 0.03262374992482364, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_trunk_out_of_range_section]": 0.03289658296853304, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/merge_trunk_over_low_section]": 0.04139916622079909, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/mismatched_tracks]": 0.027456999756395817, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/mixed_bundle_column]": 0.02127416688017547, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/mixed_port_sides]": 0.02098274906165898, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/multi_input_convergence]": 0.01819904218427837, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/multi_line_bundle]": 0.027649166993796825, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/multicarrier_offrow_exit_climb]": 0.04259166680276394, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/near_vertical_junction_hook]": 0.01486429083161056, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/off_track_convergence]": 0.01693962374702096, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/off_track_convergence_multiline]": 0.035421250155195594, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/off_track_input_above_consumer]": 0.10958399996161461, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/parallel_independent]": 0.014396625105291605, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/peeloff_extra_line_consumer]": 0.037997249979525805, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/peeloff_riser_respace]": 0.027600582921877503, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/post_convergence_trunk]": 0.010359416017308831, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/reconverge_reversed_fold]": 0.12921791593544185, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/right_entry_from_above]": 0.017860249849036336, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/right_entry_from_above_far]": 0.015599792124703526, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/right_entry_gap_above_empty_row]": 0.014710416784510016, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/right_entry_wrap_no_fan]": 0.01060395804233849, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/rl_entry_runway]": 0.03282208391465247, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/rnaseq_lite]": 0.07736937492154539, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/route_around_intervening]": 0.027429708978161216, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/section_diamond]": 0.021531124832108617, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/self_crossing_bridge]": 0.016606916906312108, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/shared_sink_parallel]": 0.21893787500448525, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/single_section]": 0.005751999793574214, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/stacked_left_exit_drop]": 0.008669041795656085, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/stacked_lr_serpentine]": 0.023626625072211027, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/symmetric_diamond_beside_wide_fan]": 0.025889291893690825, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_bottom_entry_flow_start]": 0.010989793110638857, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_bottom_exit_bundle_jog]": 0.029370083939284086, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_bottom_exit_fork_diamond]": 0.02454133378341794, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_column_continuation_two_lines]": 0.009266873821616173, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_convergence_straight_drop]": 0.006278084125369787, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_internal_diagonal]": 0.010001375805586576, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_left_exit_step]": 0.016349832760170102, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_lr_exit_left]": 0.05102745979093015, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_lr_exit_right]": 0.03728670789860189, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_passthrough_continuation]": 0.008760001277551055, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_passthrough_trunk]": 0.017588748829439282, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_perp_exit_side_neighbour]": 0.009092166787013412, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_right_entry_stack]": 0.019619083032011986, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_trunk_through_fan]": 0.02223462495021522, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/tb_two_line_vert_seam]": 0.009656499838456511, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/terminal_symmetric_fan]": 0.01757308398373425, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/terminus_join]": 0.004965540952980518, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/top_entry_header_clash]": 0.012330624740570784, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/trunk_through_fan]": 0.03390195802785456, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/u_turn_fold]": 0.056129624834284186, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/uneven_diamond]": 0.014645667048171163, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/upward_bypass]": 0.06057733204215765, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/variant_calling]": 0.22779687494039536, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/wide_fan_in]": 0.04610991617664695, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/wide_fan_out]": 0.054226792184636, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/wide_label_fan]": 0.02795849903486669, + "tests/test_gap_slot.py::test_every_gap_channel_is_declared[topologies/wrapped_label_trunk]": 0.02481133514083922, + "tests/test_gap_slot.py::test_gap_slot_carries_documented_fields": 0.00019029178656637669, + "tests/test_gap_slot.py::test_guard_flags_an_undeclared_gap_channel": 0.0009682090021669865, + "tests/test_gap_slot.py::test_handlers_emit_gap_slots[NOTSET]": 0.00021087494678795338, + "tests/test_gap_slot.py::test_normalize_gap_channels_is_gone": 0.00019754213280975819, + "tests/test_gap_slot.py::test_routed_path_gap_slots_default_to_empty": 0.00022554094903171062, + "tests/test_grid_alignment.py::TestFanInExitPreservation::test_bcftools_survivor_same_x": 0.2024674580898136, + "tests/test_grid_alignment.py::TestFanInExitPreservation::test_filtering_exit_not_collapsed_to_source": 0.20588412578217685, + "tests/test_grid_alignment.py::TestGridInvariants::test_bbox_top_aligned[hlatyping]": 0.032954206923022866, + "tests/test_grid_alignment.py::TestGridInvariants::test_bbox_top_aligned[rnaseq_sections]": 0.48146295780315995, + "tests/test_grid_alignment.py::TestGridInvariants::test_bbox_top_aligned[rnaseq_sections_manual]": 0.6835150411352515, + "tests/test_grid_alignment.py::TestGridInvariants::test_bbox_top_aligned[variant_calling]": 0.03950233291834593, + "tests/test_grid_alignment.py::TestGridInvariants::test_bbox_top_aligned[variant_calling_tuned]": 0.06009699986316264, + "tests/test_grid_alignment.py::TestGridInvariants::test_bbox_top_aligned[variantbenchmarking]": 0.20982524985447526, + "tests/test_grid_alignment.py::TestGridInvariants::test_bbox_top_aligned[variantprioritization]": 0.03881554212421179, + "tests/test_grid_alignment.py::TestGridInvariants::test_bottom_padding_at_least_top[hlatyping]": 0.04729758272878826, + "tests/test_grid_alignment.py::TestGridInvariants::test_bottom_padding_at_least_top[rnaseq_sections]": 0.4857272510416806, + "tests/test_grid_alignment.py::TestGridInvariants::test_bottom_padding_at_least_top[rnaseq_sections_manual]": 0.5690559588838369, + "tests/test_grid_alignment.py::TestGridInvariants::test_bottom_padding_at_least_top[variant_calling]": 0.028899999801069498, + "tests/test_grid_alignment.py::TestGridInvariants::test_bottom_padding_at_least_top[variant_calling_tuned]": 0.0419258342590183, + "tests/test_grid_alignment.py::TestGridInvariants::test_bottom_padding_at_least_top[variantbenchmarking]": 0.22456329222768545, + "tests/test_grid_alignment.py::TestGridInvariants::test_bottom_padding_at_least_top[variantprioritization]": 0.04667895892634988, + "tests/test_grid_alignment.py::TestGridInvariants::test_stations_on_grid[hlatyping]": 0.05244895908981562, + "tests/test_grid_alignment.py::TestGridInvariants::test_stations_on_grid[rnaseq_sections]": 0.6644382493104786, + "tests/test_grid_alignment.py::TestGridInvariants::test_stations_on_grid[rnaseq_sections_manual]": 0.4833572490606457, + "tests/test_grid_alignment.py::TestGridInvariants::test_stations_on_grid[variant_calling]": 0.03239387599751353, + "tests/test_grid_alignment.py::TestGridInvariants::test_stations_on_grid[variant_calling_tuned]": 0.04259012499824166, + "tests/test_grid_alignment.py::TestGridInvariants::test_stations_on_grid[variantbenchmarking]": 0.2822571259457618, + "tests/test_grid_alignment.py::TestGridInvariants::test_stations_on_grid[variantprioritization]": 0.036727708065882325, + "tests/test_grid_alignment.py::TestInterSectionPortSnap::test_auto_layout_unaffected": 0.06041383394040167, + "tests/test_grid_alignment.py::TestInterSectionPortSnap::test_snap_aligns_rowspan_neighbour_to_row_trunk": 0.0109158328268677, + "tests/test_grid_alignment.py::TestIssue938::test_exit_and_junction_sit_on_carrier_row": 0.039386749966070056, + "tests/test_grid_alignment.py::TestIssue938::test_in_section_carrier_runs_are_flat": 0.08624316612258554, + "tests/test_grid_alignment.py::TestIssueK::test_preprocess_exit_sits_on_carrier_row": 0.4241162077523768, + "tests/test_grid_alignment.py::TestIssueL::test_alignment_exit_matches_variant_calling_entry": 0.05225837440229952, + "tests/test_grid_alignment.py::TestIssueM::test_fastp_trimgalore_separated": 0.4362163327168673, + "tests/test_grid_alignment.py::TestIssueM::test_three_distinct_fan_out_levels": 0.4763864588458091, + "tests/test_grid_alignment.py::TestIssueN::test_liftover_subsample_single_slot": 0.3971654998604208, + "tests/test_grid_alignment.py::TestIssueN::test_multiqc_has_2_slot_gap_above": 0.2237782918382436, + "tests/test_grid_alignment.py::TestVariantbenchmarkingSpacing::test_benchmarking_layer1_same_x": 0.2118340409360826, + "tests/test_grid_alignment.py::TestVariantbenchmarkingSpacing::test_liftover_one_slot_below_subsample": 0.27620024885982275, + "tests/test_grid_alignment.py::TestVariantbenchmarkingSpacing::test_output_processing_uniform_gaps": 0.5361274171154946, + "tests/test_grid_alignment.py::TestVariantprioritizationGermline::test_cpsr_get_pcgr_same_y": 0.06586616719141603, + "tests/test_grid_alignment.py::TestVariantprioritizationGermline::test_cpsr_report_cpsr_same_y": 0.046357790706679225, + "tests/test_grid_alignment.py::TestVariantprioritizationGermline::test_sec3_exit_at_get_pcgr_y": 0.06631375080905855, + "tests/test_grid_alignment.py::TestVariantprioritizationGermline::test_sec5_entry_at_cpsr_y": 0.05293925083242357, + "tests/test_guard_registry.py::test_check_registry_classifies_every_check": 0.000196375185623765, + "tests/test_guard_registry.py::test_derived_bisection_first_valid_matches_registry": 0.00016391579993069172, + "tests/test_guard_registry.py::test_every_guard_is_classified_in_exactly_one_registry": 0.0011329578701406717, + "tests/test_guard_registry.py::test_guard_registry_tiers_are_well_formed": 0.00020412495359778404, + "tests/test_guard_registry.py::test_issue_pinned_guards_document_why_they_are_narrow": 0.00020912475883960724, + "tests/test_guard_registry.py::test_issue_pinned_guards_record_their_issue_as_data": 0.04584566783159971, + "tests/test_guard_registry.py::test_no_registry_guard_duplicates_an_always_on_check": 0.040264040697366, + "tests/test_guard_registry.py::test_registry_bisection_set_is_the_pass_c_prefix": 0.00017362600192427635, + "tests/test_guard_registry.py::test_render_layout_chokepoint_is_tier_a_minus_authoring_guards": 0.0020456667989492416, + "tests/test_guard_registry.py::test_tier_a_checks_are_exactly_the_render_chokepoint": 0.002373042283579707, + "tests/test_guard_registry_golden.py::test_baseline_covers_every_fixture": 0.011070957873016596, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/centered_tracks.mmd]": 0.1557495000306517, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/cross_track_interchange.mmd]": 0.28576025017537177, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/diagonal_labels.mmd]": 0.635021791793406, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/differentialabundance.mmd]": 1.5775140840560198, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/differentialabundance_default.mmd]": 1.4923961670137942, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/directional_flow.mmd]": 0.12346374895423651, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/disconnected_components.mmd]": 0.18083954346366227, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/epitopeprediction.mmd]": 0.4293177919462323, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/file_icons.mmd]": 0.1321964575909078, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/genomeassembly.mmd]": 0.5756000000983477, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/genomeassembly_staggered.mmd]": 0.6085159159265459, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/genomic_pipeline.mmd]": 2.69085512496531, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/group_labels.mmd]": 0.2052750822622329, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/01_minimal.mmd]": 0.08199533284641802, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/02_sections.mmd]": 0.13196391589008272, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/03_fan_out.mmd]": 0.33066624915227294, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/03b_fan_in_merge.mmd]": 0.23453358397819102, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/04_directions.mmd]": 0.272622040938586, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/05_file_icons.mmd]": 0.12004616810008883, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/05b_multi_icons.mmd]": 0.15332679077982903, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/05c_files_icon.mmd]": 0.13331020716577768, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/05d_folder_icon.mmd]": 0.1256519160233438, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/05f_banner_labels.mmd]": 0.15412804088555276, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/06a_without_hidden.mmd]": 0.2295610010623932, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/guide/06b_with_hidden.mmd]": 0.20301249879412353, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/hlatyping.mmd]": 0.255806541768834, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/legend_combo.mmd]": 0.08738529216498137, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/legend_logo_placement.mmd]": 0.24044000101275742, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/line_spread.mmd]": 0.37833187519572675, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/longread_variant_calling.mmd]": 0.9423175407573581, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/marker_styles.mmd]": 0.1924908752553165, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/off_track_outputs.mmd]": 0.14862204110249877, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/rail_mode.mmd]": 0.11949479207396507, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/rail_section.mmd]": 0.32847070903517306, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/rnaseq_auto.mmd]": 0.866735708899796, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/rnaseq_sections.mmd]": 3.5244407078716904, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/rnaseq_sections_manual.mmd]": 3.6937193328049034, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/sarek_metro.mmd]": 1.1983547932468355, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/simple_pipeline.mmd]": 0.06722737499512732, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/tb_file_termini.mmd]": 0.30336395814083517, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.6286249167751521, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/around_below_ep_col_gt0.mmd]": 0.207622415618971, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/around_section_below.mmd]": 0.19225554214790463, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/asymmetric_tree.mmd]": 0.34865224990062416, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.23712533409707248, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/branch_fold_forward.mmd]": 0.2573557919822633, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/branch_fold_stability.mmd]": 0.2407249161042273, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bt_chain.mmd]": 0.04821441718377173, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bt_exit_top_above.mmd]": 0.14116008183918893, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bt_exit_top_above_2line.mmd]": 0.10889791697263718, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bt_fork.mmd]": 0.07484579226002097, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bt_perp_entry_below.mmd]": 0.12739366735331714, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bt_to_lr.mmd]": 0.12059595878235996, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bt_to_tb.mmd]": 0.2217707911040634, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bundle_terminator_continuation.mmd]": 0.06657154089771211, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.7348419579211622, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.4132444157730788, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_label_rake.mmd]": 0.2974201668985188, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_label_rake_left.mmd]": 0.1866003756877035, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_label_rake_wide.mmd]": 0.4204575838521123, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.30027999985031784, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_leftward_overflow.mmd]": 0.32444300106726587, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/bypass_v_tight.mmd]": 0.26894849888049066, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/clear_channel_target_aware_push.mmd]": 0.18309179181233048, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/compact_gap_peer_conflict.mmd]": 0.19079812476411462, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/compact_hidden_passthrough.mmd]": 0.12475349893793464, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/complex_multipath.mmd]": 0.4542122499551624, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/convergence_stacked_sink.mmd]": 0.3390995832160115, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/convergent_offrow_exit_climb.mmd]": 1.4978345402050763, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.2314462496433407, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/cross_col_top_entry.mmd]": 0.10722933406941593, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/cross_column_perp_drop.mmd]": 0.10656329221092165, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.10607516812160611, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/cross_row_gap_wrap.mmd]": 0.2643987908959389, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/deep_linear.mmd]": 0.48027379089035094, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/disjoint_sameline_trunks.mmd]": 0.3703842922113836, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/divergent_fanout_split.mmd]": 0.11877108388580382, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/dogleg_exempt_distinct.mmd]": 0.19461104203946888, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/dogleg_exempt_sameline.mmd]": 0.15720979101024568, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/dogleg_twoline_fanout.mmd]": 0.1852683329489082, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.27971195918507874, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/fan_bypass_nesting.mmd]": 0.4966859167907387, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/fan_in_merge.mmd]": 0.31952725048176944, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/fold_double.mmd]": 1.4083335839677602, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/fold_fan_across.mmd]": 1.0893725021742284, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/fold_stacked_branch.mmd]": 0.9097486671525985, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/funcprofiler_upstream.mmd]": 1.8237938331440091, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/header_nudge.mmd]": 0.12865291512571275, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/header_side_rotated.mmd]": 0.08361241710372269, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/inrow_skip_breeze.mmd]": 0.08061312511563301, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/inter_row_wrap_clearance.mmd]": 0.18653549998998642, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/interchange_lane_reorder.mmd]": 0.1747872920241207, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/junction_entry_align.mmd]": 0.39295045798644423, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/junction_entry_collision.mmd]": 0.2594148749485612, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/junction_entry_reversed_fold.mmd]": 0.20975695899687707, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/junction_fanout_convergence.mmd]": 0.17031074897386134, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/left_entry_up_wrap.mmd]": 0.1671935843769461, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/left_exit_sink_below.mmd]": 0.20526762399822474, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.2000905422028154, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.12565179099328816, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.14820899977348745, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.13843479310162365, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.14722204208374023, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.1441653340589255, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_to_tb_top_drop.mmd]": 0.08304962399415672, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.10045445803552866, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.0887687907088548, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.12666754168458283, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_top_entry_cross_column.mmd]": 0.192617290886119, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.10314229223877192, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_around_below_leftmost.mmd]": 0.2754413331858814, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_bottom_row_bypass.mmd]": 0.26615933305583894, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.27485295897349715, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_offrow_continuation.mmd]": 0.19157066708430648, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_port_above_approach.mmd]": 0.2665933750104159, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_pullaway.mmd]": 0.21606741729192436, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_right_entry.mmd]": 0.24037045799195766, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.5176816671155393, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/merge_trunk_over_low_section.mmd]": 0.27475587581284344, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/mismatched_tracks.mmd]": 0.24050766602158546, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/mixed_bundle_column.mmd]": 0.2833784590475261, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/mixed_port_sides.mmd]": 0.14082808303646743, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/multi_input_convergence.mmd]": 0.15041670785285532, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/multi_line_bundle.mmd]": 0.31888795900158584, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.28341474989429116, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/near_vertical_junction_hook.mmd]": 0.27800462604500353, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/off_track_convergence.mmd]": 0.1835741251707077, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/off_track_convergence_multiline.mmd]": 0.24767866684123874, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/off_track_input_above_consumer.mmd]": 0.9412292088381946, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/parallel_independent.mmd]": 0.18297512480057776, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.36254516686312854, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/peeloff_riser_respace.mmd]": 0.43239679117687047, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/post_convergence_trunk.mmd]": 0.0772705408744514, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/rail_inter_section.mmd]": 0.04742949898354709, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/rail_offtrack_fan.mmd]": 0.11021475028246641, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/rail_offtrack_io.mmd]": 0.08187025017105043, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/rail_offtrack_plain_io.mmd]": 0.0773940000217408, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/reconverge_reversed_fold.mmd]": 0.9799777092412114, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/right_entry_from_above.mmd]": 0.11079470789991319, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/right_entry_from_above_far.mmd]": 0.11960475123487413, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.12748354207724333, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.12065041693858802, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/rl_entry_runway.mmd]": 0.16179520916193724, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/rnaseq_lite.mmd]": 0.9142767512239516, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/route_around_intervening.mmd]": 0.23986916709691286, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/section_diamond.mmd]": 0.22981295897625387, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/self_crossing_bridge.mmd]": 0.17995237628929317, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/shared_sink_parallel.mmd]": 0.4645752077922225, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/single_section.mmd]": 0.09374895808286965, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/stacked_left_exit_drop.mmd]": 0.10894325096160173, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/stacked_lr_serpentine.mmd]": 0.19173991587013006, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.41665362496860325, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.09373400011099875, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.1780745422001928, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.15978133166208863, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.12318570911884308, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_convergence_straight_drop.mmd]": 0.06753716617822647, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_internal_diagonal.mmd]": 0.44250100012868643, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_left_exit_step.mmd]": 0.29438379197381437, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_lr_exit_left.mmd]": 0.18923066603019834, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_lr_exit_right.mmd]": 0.19633637578226626, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_passthrough_continuation.mmd]": 0.09123437502421439, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_passthrough_trunk.mmd]": 0.14981787488795817, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.06361525086686015, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_right_entry_stack.mmd]": 0.21190208406187594, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_trunk_through_fan.mmd]": 0.08058483409695327, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/tb_two_line_vert_seam.mmd]": 0.11969466600567102, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/terminal_symmetric_fan.mmd]": 0.1468369159847498, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/terminus_join.mmd]": 0.0410379592794925, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/top_entry_header_clash.mmd]": 0.10643291682936251, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/trunk_through_fan.mmd]": 0.17982474970631301, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/u_turn_fold.mmd]": 0.49332070793025196, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/uneven_diamond.mmd]": 0.10185799980536103, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/upward_bypass.mmd]": 0.5787949170917273, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/variant_calling.mmd]": 1.353159043006599, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/wide_fan_in.mmd]": 0.20403891615569592, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/wide_fan_out.mmd]": 0.24312420771457255, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/wide_label_fan.mmd]": 0.1286539169959724, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/topologies/wrapped_label_trunk.mmd]": 0.08346587489359081, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/variant_calling.mmd]": 0.2937074170913547, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/variant_calling_tuned.mmd]": 0.3484371257945895, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/variantbenchmarking.mmd]": 1.698269581887871, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/variantbenchmarking_auto.mmd]": 1.7779352078214288, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[examples/variantprioritization.mmd]": 0.387830956839025, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/bubble_forced_label_clears_diagonal.mmd]": 0.11078087543137372, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/bubble_label_clears_diagonal.mmd]": 0.09681137488223612, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/bubble_output_above.mmd]": 0.12645120709203184, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/captioned_sibling_outputs.mmd]": 0.09013654082082212, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/da_pipeline.mmd]": 1.6267517488449812, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/diagonal_single_trunk_off_track.mmd]": 0.607821875018999, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/file_icon_fanin.mmd]": 0.30787091609090567, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/font_scale.mmd]": 0.07734454330056906, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/genomeassembly_organellar.mmd]": 0.9346131251659244, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/icon_caption_wrap.mmd]": 0.039475332014262676, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/leaf_file_icon_on_trunk.mmd]": 0.1234813320916146, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/multiline_labels.mmd]": 0.15812249924056232, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/off_track_output_branched.mmd]": 0.10263604181818664, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/off_track_outputs_along_trunk.mmd]": 0.16614799993112683, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rail_diagonal_labels.mmd]": 0.044048458337783813, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rail_marked_single_line.mmd]": 0.18168241600506008, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rail_marker_fill.mmd]": 0.049525457667186856, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rail_marker_subset_interchange.mmd]": 0.0734569588676095, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rail_pitch_vs_labels.mmd]": 0.17740987590514123, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rail_single_line_callers.mmd]": 0.0851946659386158, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rnaseq_sections.mmd]": 0.7445930410176516, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/rnaseq_simple.mmd]": 0.04903487511910498, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/tb_right_exit_feeder_slots.mmd]": 0.3675487919244915, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.18965758406557143, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/trunk_align_matching_bundle.mmd]": 0.1453723330050707, + "tests/test_guard_registry_golden.py::test_guard_trace_matches_golden_baseline[tests/fixtures/uneven_diamond.mmd]": 0.06693033315241337, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/centered_tracks.mmd]": 0.03273850120604038, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/cross_track_interchange.mmd]": 0.04044895712286234, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/diagonal_labels.mmd]": 0.060174791142344475, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/differentialabundance.mmd]": 0.18538879114203155, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/differentialabundance_default.mmd]": 0.4649354601278901, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/directional_flow.mmd]": 0.014491124777123332, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/disconnected_components.mmd]": 0.025584792951121926, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/epitopeprediction.mmd]": 0.054716998944059014, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/file_icons.mmd]": 0.04774087364785373, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/genomeassembly.mmd]": 0.0781650417484343, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/genomeassembly_staggered.mmd]": 0.09095116565003991, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/genomic_pipeline.mmd]": 0.32776408293284476, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/group_labels.mmd]": 0.03529508295468986, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/01_minimal.mmd]": 0.00940183294005692, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/02_sections.mmd]": 0.012597749941051006, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/03_fan_out.mmd]": 0.02947679185308516, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/03b_fan_in_merge.mmd]": 0.0222165840677917, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/04_directions.mmd]": 0.02881237491965294, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/05_file_icons.mmd]": 0.06324508390389383, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/05b_multi_icons.mmd]": 0.03596487478353083, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/05c_files_icon.mmd]": 0.016311250859871507, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/05d_folder_icon.mmd]": 0.013982415897771716, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/05f_banner_labels.mmd]": 0.01669095829129219, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/06a_without_hidden.mmd]": 0.019667540909722447, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/guide/06b_with_hidden.mmd]": 0.020826751133427024, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/hlatyping.mmd]": 0.058220415841788054, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/legend_combo.mmd]": 0.014215082861483097, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/legend_logo_placement.mmd]": 0.05266754189506173, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/line_spread.mmd]": 0.04231712594628334, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/longread_variant_calling.mmd]": 0.15606633317656815, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/marker_styles.mmd]": 0.025837709195911884, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/off_track_outputs.mmd]": 0.04074487485922873, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/rail_mode.mmd]": 0.07971770805306733, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/rail_section.mmd]": 0.27067470899783075, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/rnaseq_auto.mmd]": 0.09521387494169176, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/rnaseq_sections.mmd]": 0.4362622923217714, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.5578927490860224, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/sarek_metro.mmd]": 0.26801158324815333, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/simple_pipeline.mmd]": 0.012855042237788439, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/tb_file_termini.mmd]": 0.031106416834518313, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.0582312080077827, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.022285417653620243, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/around_section_below.mmd]": 0.015069459099322557, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.05813387501984835, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.025377999991178513, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.03544275020249188, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.03577733295969665, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bt_chain.mmd]": 0.009601541794836521, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.016177916200831532, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.025990791153162718, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bt_fork.mmd]": 0.014368707779794931, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.018463790882378817, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.01087016612291336, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.010352290933951735, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.01687058317475021, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.05536133283749223, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.04353133402764797, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.039859957760199904, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.026622749865055084, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.058823208790272474, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.033520583994686604, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.0319656259380281, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.029410333139821887, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.020228040870279074, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.01803545793518424, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.016909583238884807, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/complex_multipath.mmd]": 0.0754549999255687, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.053124541183933616, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.12734024971723557, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.0322672079782933, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.2288336670026183, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.0175284577999264, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.029228374594822526, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.045683665899559855, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/deep_linear.mmd]": 0.06653204234316945, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.026253500021994114, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.018200125079602003, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.030314082745462656, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.01615149900317192, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.023714542156085372, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.018589582992717624, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.06941729178652167, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.031254498986527324, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/fold_double.mmd]": 0.13710154127329588, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.12443600012920797, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.08526699966751039, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.29878770816139877, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/header_nudge.mmd]": 0.01684241695329547, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.012362207984551787, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.00926520791836083, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.03817945788614452, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.01667616586200893, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.042341000167652965, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.028252667048946023, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.03128849994391203, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.028579375008121133, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.0262317496817559, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.026369999861344695, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.03279024898074567, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.030456666834652424, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.017042999155819416, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.02619591704569757, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.018481874838471413, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.02351700095459819, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.02609087573364377, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.011365707963705063, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.023896167054772377, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.016105916118249297, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.026087709004059434, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.032000916777178645, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.031786083010956645, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.0565941259264946, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.07935929205268621, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.04295479110442102, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.08489641593769193, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.0501459997612983, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.04490666720084846, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.4385225409641862, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.055789791978895664, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.03901854110881686, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.030472165904939175, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.015044208383187652, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.01615791697986424, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.028319043340161443, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.03186804195865989, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.021764000179246068, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.01968733174726367, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.01924158283509314, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.06319666584022343, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/parallel_independent.mmd]": 0.015540415653958917, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.024911707965657115, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.022164832102134824, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.007586666848510504, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.007564999861642718, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.009789375821128488, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.010088292183354497, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.009033124893903732, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.06556529132649302, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.010264748940244317, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.009225166868418455, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.012049125274643302, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.009243915788829327, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.014460250968113542, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.049378250259906054, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.018714667996391654, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/section_diamond.mmd]": 0.02373737609013915, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.02356337383389473, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.03274091589264572, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/single_section.mmd]": 0.005566541105508804, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.010691624134778976, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.01676141587086022, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.024792500073090196, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.00807508290745318, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.04586483398452401, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.016967209056019783, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.0116431238129735, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.007078542141243815, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.011258498765528202, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.01740650087594986, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.013666499638929963, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.013015041826292872, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.008674957789480686, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.01465587504208088, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.007885124767199159, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.014989623799920082, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.007995834108442068, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.010576000204309821, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.011719749076291919, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/terminus_join.mmd]": 0.004936999175697565, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.009778292151167989, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.017023083055391908, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.14939329191111028, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.007209832081571221, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/upward_bypass.mmd]": 0.033126375172287226, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/variant_calling.mmd]": 0.11107016704045236, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.019425000064074993, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.02132729208096862, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.010292082792147994, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.010029499651864171, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/variant_calling.mmd]": 0.036316415993496776, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/variant_calling_tuned.mmd]": 0.07271049986593425, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/variantbenchmarking.mmd]": 0.5509271251503378, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.25590787502005696, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[examples/variantprioritization.mmd]": 0.06748495902866125, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/bubble_forced_label_clears_diagonal.mmd]": 0.010797374183312058, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/bubble_label_clears_diagonal.mmd]": 0.010725751053541899, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/bubble_output_above.mmd]": 0.008743416983634233, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/captioned_sibling_outputs.mmd]": 0.014209625078365207, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/da_pipeline.mmd]": 0.17979608313180506, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/diagonal_single_trunk_off_track.mmd]": 0.07577287522144616, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/file_icon_fanin.mmd]": 0.05994474911130965, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/font_scale.mmd]": 0.016830333275720477, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/genomeassembly_organellar.mmd]": 0.12361554219387472, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/icon_caption_wrap.mmd]": 0.005120416171848774, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/leaf_file_icon_on_trunk.mmd]": 0.0188638751860708, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/multiline_labels.mmd]": 0.038849083008244634, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/off_track_output_branched.mmd]": 0.010369792114943266, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/off_track_outputs_along_trunk.mmd]": 0.010866333032026887, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rail_diagonal_labels.mmd]": 0.00722983293235302, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rail_marked_single_line.mmd]": 0.02646700106561184, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rail_marker_fill.mmd]": 0.0056477931793779135, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rail_marker_subset_interchange.mmd]": 0.028977292124181986, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rail_pitch_vs_labels.mmd]": 0.029032957972958684, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rail_single_line_callers.mmd]": 0.009021749021485448, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rnaseq_sections.mmd]": 0.5204790001735091, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/rnaseq_simple.mmd]": 0.006091041956096888, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/tb_right_exit_feeder_slots.mmd]": 0.025920707965269685, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/trunk_align_matching_bundle.mmd]": 0.017926832661032677, + "tests/test_hanging_route_invariant.py::test_no_hanging_routes_in_gallery[tests/fixtures/uneven_diamond.mmd]": 0.021184375975281, + "tests/test_hanging_route_invariant.py::test_planted_hanging_tail_aborts_render_path": 0.4995700411964208, + "tests/test_hanging_route_invariant.py::test_planted_hanging_tail_is_caught": 0.7421367079950869, + "tests/test_html.py::test_render_html_closing_script_tag_escaped": 0.6588596247602254, + "tests/test_html.py::test_render_html_default_output_extension": 0.6704078330658376, + "tests/test_html.py::test_render_html_embed_font_via_cli": 0.7278587911278009, + "tests/test_html.py::test_render_html_embed_snippet_present": 0.6302407919429243, + "tests/test_html.py::test_render_html_embedded_svg_matches_standalone_render": 1.4370239577256143, + "tests/test_html.py::test_render_html_embeds_svg": 0.6528696662280709, + "tests/test_html.py::test_render_html_exits_zero_and_writes_nonempty": 0.6687064997386187, + "tests/test_html.py::test_render_html_forwards_font_portability_embed": 0.7893755829427391, + "tests/test_html.py::test_render_html_interactive_scaffolding": 0.8611494568176568, + "tests/test_html.py::test_render_html_is_self_contained": 1.105371416779235, + "tests/test_html.py::test_render_html_title_in_markup": 0.6326718749478459, + "tests/test_html.py::test_render_html_warns_on_svg_only_flags": 0.6562528759241104, + "tests/test_independent_components.py::test_component_placement_is_deterministic_across_hash_seeds": 0.042846207739785314, + "tests/test_independent_components.py::test_component_placement_is_deterministic_in_process": 0.637688374845311, + "tests/test_independent_components.py::test_disconnected_components_are_separated_vertically": 0.0375952091999352, + "tests/test_independent_components.py::test_explicit_grid_keeps_shared_grid": 0.03423770796507597, + "tests/test_independent_components.py::test_single_component_placement_unchanged": 0.018258250318467617, + "tests/test_independent_components.py::test_top_component_keeps_single_grid_origin": 0.050038374960422516, + "tests/test_independent_components.py::test_wide_disconnected_section_does_not_push_trunk_right": 0.0379595011472702, + "tests/test_inter_section_descriptor.py::test_empty_turn_sequence_has_parity_false": 0.00017450004816055298, + "tests/test_inter_section_descriptor.py::test_l_shape_parity_is_true": 0.00017349980771541595, + "tests/test_inter_section_descriptor.py::test_left_entry_wrap_parity_is_true": 0.00027516623958945274, + "tests/test_inter_section_descriptor.py::test_same_handedness_pair_parity_is_false": 0.0001664168667048216, + "tests/test_inter_section_descriptor.py::test_wrap_descriptor_parity_delegates_to_turn_sequence": 0.00017875107005238533, + "tests/test_inter_section_descriptor.py::test_wrap_table_is_non_empty": 0.00015670922584831715, + "tests/test_inter_section_descriptor.py::test_wrap_table_keys_are_well_formed": 0.00016033300198614597, + "tests/test_inter_section_dispatch.py::test_corpus_keeps_rules_reachable": 9.812356374925002, + "tests/test_inter_section_dispatch.py::test_merge_entry_family_route_is_in_table": 0.00015591690316796303, + "tests/test_inter_section_dispatch.py::test_rule_names_unique": 0.00015262514352798462, + "tests/test_inter_section_dispatch.py::test_rule_selection[bottom-exit-junction]": 0.00022520823404192924, + "tests/test_inter_section_dispatch.py::test_rule_selection[bt-top-exit]": 0.00023745675571262836, + "tests/test_inter_section_dispatch.py::test_rule_selection[bypass]": 0.00023024901747703552, + "tests/test_inter_section_dispatch.py::test_rule_selection[left-entry-wrap]": 0.0002212079707533121, + "tests/test_inter_section_dispatch.py::test_rule_selection[merge-branch-beats-merge-entry]": 0.00022350088693201542, + "tests/test_inter_section_dispatch.py::test_rule_selection[merge-entry]": 0.0002335838507860899, + "tests/test_inter_section_dispatch.py::test_rule_selection[merge-trunk-beats-bypass]": 0.00022874982096254826, + "tests/test_inter_section_dispatch.py::test_rule_selection[near-vertical-junction]": 0.00022891699336469173, + "tests/test_inter_section_dispatch.py::test_rule_selection[perp-exit-beats-same-Y]": 0.0003663748502731323, + "tests/test_inter_section_dispatch.py::test_rule_selection[right-entry-wrap]": 0.00022895890288054943, + "tests/test_inter_section_dispatch.py::test_rule_selection[same-X]": 0.00022195931524038315, + "tests/test_inter_section_dispatch.py::test_rule_selection[same-Y]": 0.00023275078274309635, + "tests/test_inter_section_dispatch.py::test_rule_selection[serpentine-left-exit-left-entry]": 0.00022604200057685375, + "tests/test_inter_section_dispatch.py::test_rule_selection[tb-bottom-exit]": 0.0003295009955763817, + "tests/test_inter_section_dispatch.py::test_rule_selection[top-entry-beats-same-X]": 0.00023720902390778065, + "tests/test_inter_section_dispatch.py::test_would_route_around_section_below[merge-family-around]": 0.000285708112642169, + "tests/test_inter_section_dispatch.py::test_would_route_around_section_below[merge-family-l-shape]": 0.00026029162108898163, + "tests/test_inter_section_dispatch.py::test_would_route_around_section_below[no-rule-claims-it]": 0.0002542920410633087, + "tests/test_inter_section_dispatch.py::test_would_route_around_section_below[shadowed-by-earlier-rule]": 0.00024883286096155643, + "tests/test_inter_section_dispatch.py::test_would_route_around_section_below_abstains_on_missing_endpoint": 0.00018504145555198193, + "tests/test_interchange.py::test_auto_detection_abstains_when_a_diverging_member_cannot_be_un_straddled": 0.07938250107690692, + "tests/test_interchange.py::test_auto_detection_abstains_when_lanes_share_a_neighbour": 0.006393208401277661, + "tests/test_interchange.py::test_auto_detection_infers_parallel_lane_interchange": 0.009144708048552275, + "tests/test_interchange.py::test_auto_detection_reorders_interleaving_lane_out_of_bar_span[fixture]": 0.013169540325179696, + "tests/test_interchange.py::test_auto_detection_reorders_interleaving_lane_out_of_bar_span[inline]": 0.016119373962283134, + "tests/test_interchange.py::test_directive_bundles_multiple_lines_on_one_rail": 0.014599957969039679, + "tests/test_interchange.py::test_directive_expands_node_into_per_rail_substations": 0.026158042019233108, + "tests/test_interchange.py::test_directive_skipped_when_under_two_live_rails": 0.017113375011831522, + "tests/test_interchange.py::test_each_lane_runs_straight_through_the_interchange": 0.010085250018164515, + "tests/test_interchange.py::test_example_fixture_renders_with_inferred_and_explicit_agreeing": 0.05988120776601136, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[aligner_row_pinned_continuation.mmd]": 0.1514231243636459, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[around_below_ep_col_gt0.mmd]": 0.030296543147414923, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[around_section_below.mmd]": 0.03427137597464025, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[asymmetric_tree.mmd]": 0.03605316672474146, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bottom_row_climb_clear_corridor.mmd]": 0.024679791880771518, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[branch_fold_forward.mmd]": 0.03672279231250286, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[branch_fold_stability.mmd]": 0.040225500939413905, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bt_chain.mmd]": 0.006872083991765976, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bt_exit_top_above.mmd]": 0.017773500876501203, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bt_exit_top_above_2line.mmd]": 0.015964957885444164, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bt_fork.mmd]": 0.005717709194868803, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bt_perp_entry_below.mmd]": 0.018926874734461308, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bt_to_lr.mmd]": 0.013893208932131529, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bt_to_tb.mmd]": 0.03312616725452244, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bundle_terminator_continuation.mmd]": 0.007676832610741258, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_fan_in_outer_slot.mmd]": 0.05104741733521223, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_gap2_rightward_overflow.mmd]": 0.03405679203569889, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_label_rake.mmd]": 0.03373320703394711, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_label_rake_left.mmd]": 0.04842108185403049, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_label_rake_wide.mmd]": 0.0652148318476975, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_leftward_far_side_entry.mmd]": 0.037952000042423606, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_leftward_overflow.mmd]": 0.03996854228898883, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[bypass_v_tight.mmd]": 0.022718832828104496, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[centered_tracks.mmd]": 0.014606457902118564, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[clear_channel_target_aware_push.mmd]": 0.030457959044724703, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[compact_gap_peer_conflict.mmd]": 0.01993037504144013, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[compact_hidden_passthrough.mmd]": 0.030614333925768733, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[complex_multipath.mmd]": 0.06332037411630154, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[convergence_stacked_sink.mmd]": 0.044373791897669435, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[convergent_offrow_exit_climb.mmd]": 0.15176129108294845, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[corridor_narrow_gap_fallback.mmd]": 0.02594691701233387, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[cross_col_top_entry.mmd]": 0.00808766670525074, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[cross_column_perp_drop.mmd]": 0.008935541147366166, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[cross_column_perp_drop_far_exit.mmd]": 0.022626332938671112, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[cross_row_gap_wrap.mmd]": 0.03388758283108473, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[cross_track_interchange.mmd]": 0.027472374960780144, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[deep_linear.mmd]": 0.24991395906545222, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[diagonal_labels.mmd]": 0.059358458034694195, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[differentialabundance.mmd]": 0.30211483407765627, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[differentialabundance_default.mmd]": 0.3832607918884605, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[directional_flow.mmd]": 0.025077792815864086, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[disconnected_components.mmd]": 0.037292541936039925, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[disjoint_sameline_trunks.mmd]": 0.02633383311331272, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[divergent_fanout_split.mmd]": 0.017969292122870684, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[dogleg_exempt_distinct.mmd]": 0.026839167112484574, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[dogleg_exempt_sameline.mmd]": 0.014125292655080557, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[dogleg_twoline_fanout.mmd]": 0.012901042122393847, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[epitopeprediction.mmd]": 0.06702491734176874, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[exit_corner_offset_dogleg.mmd]": 0.017659791046753526, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[fan_bypass_nesting.mmd]": 0.029778792057186365, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[fan_in_merge.mmd]": 0.03269125102087855, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[file_icons.mmd]": 0.014369625831022859, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[fold_double.mmd]": 0.1198849999345839, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[fold_fan_across.mmd]": 0.09279845771379769, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[fold_stacked_branch.mmd]": 0.12475158413872123, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[funcprofiler_upstream.mmd]": 0.1945617499295622, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[genomeassembly.mmd]": 0.07298054173588753, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[genomeassembly_staggered.mmd]": 0.08260291698388755, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[genomic_pipeline.mmd]": 0.25286966608837247, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[group_labels.mmd]": 0.0246114160399884, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[header_nudge.mmd]": 0.0242918748408556, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[header_side_rotated.mmd]": 0.011343333637341857, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[hlatyping.mmd]": 0.05043816799297929, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[inrow_skip_breeze.mmd]": 0.024103667121380568, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[inter_row_wrap_clearance.mmd]": 0.0326052091550082, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[interchange_lane_reorder.mmd]": 0.019137167371809483, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[junction_entry_align.mmd]": 0.039459124905988574, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[junction_entry_collision.mmd]": 0.08264758321456611, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[junction_entry_reversed_fold.mmd]": 0.027800292242318392, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[junction_fanout_convergence.mmd]": 0.02985141729004681, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[left_entry_up_wrap.mmd]": 0.017073248978704214, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[left_exit_sink_below.mmd]": 0.026121541392058134, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[legend_combo.mmd]": 0.036922125378623605, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[legend_logo_placement.mmd]": 0.03624141705222428, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[line_spread.mmd]": 0.05539304274134338, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[longread_variant_calling.mmd]": 0.09901200071908534, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_perp_bottom_exit_perp_entry.mmd]": 0.02069295896217227, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_perp_bottom_exit_side_entry.mmd]": 0.019677708158269525, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_perp_top_exit_perp_entry.mmd]": 0.012881583767011762, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_perp_top_exit_perp_entry_diverging.mmd]": 0.01441891584545374, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_perp_top_exit_side_entry.mmd]": 0.022693498991429806, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_to_tb_top_cross_col.mmd]": 0.03030520910397172, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_to_tb_top_drop.mmd]": 0.028688750229775906, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_to_tb_top_drop_two_lines.mmd]": 0.02110479073598981, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_to_tb_top_near_vertical.mmd]": 0.03396170795895159, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_to_tb_top_two_lines.mmd]": 0.02872295747511089, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_top_entry_cross_column.mmd]": 0.010768709005787969, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[lr_top_entry_cross_column_two_line.mmd]": 0.023905707988888025, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[marker_styles.mmd]": 0.03637933195568621, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_around_below_leftmost.mmd]": 0.023270208854228258, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_bottom_row_bypass.mmd]": 0.04412279115058482, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_leftmost_sink_branch.mmd]": 0.1844209167174995, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_offrow_continuation.mmd]": 0.026150458957999945, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_port_above_approach.mmd]": 0.035741500090807676, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_pullaway.mmd]": 0.03711808403022587, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_right_entry.mmd]": 0.024847750086337328, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_trunk_out_of_range_section.mmd]": 0.03688991582021117, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[merge_trunk_over_low_section.mmd]": 0.03712266683578491, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[mismatched_tracks.mmd]": 0.032827458111569285, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[mixed_bundle_column.mmd]": 0.03763854177668691, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[mixed_port_sides.mmd]": 0.018935207976028323, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[multi_input_convergence.mmd]": 0.025218917056918144, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[multi_line_bundle.mmd]": 0.03134566708467901, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[multicarrier_offrow_exit_climb.mmd]": 0.05837133317254484, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[near_vertical_junction_hook.mmd]": 0.032519915141165257, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[off_track_convergence.mmd]": 0.021279457956552505, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[off_track_convergence_multiline.mmd]": 0.024244168074801564, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[off_track_input_above_consumer.mmd]": 0.08604904171079397, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[off_track_outputs.mmd]": 0.029472332913428545, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[parallel_independent.mmd]": 0.03024466708302498, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[peeloff_extra_line_consumer.mmd]": 0.02931616804562509, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[peeloff_riser_respace.mmd]": 0.027954166755080223, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[post_convergence_trunk.mmd]": 0.008896082872524858, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rail_inter_section.mmd]": 0.02029025088995695, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rail_mode.mmd]": 0.03719737520441413, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rail_offtrack_fan.mmd]": 0.013411207823082805, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rail_offtrack_io.mmd]": 0.016714043216779828, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rail_offtrack_plain_io.mmd]": 0.014851043000817299, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rail_section.mmd]": 0.03625258384272456, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[reconverge_reversed_fold.mmd]": 0.08225108310580254, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[right_entry_from_above.mmd]": 0.013367666862905025, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[right_entry_from_above_far.mmd]": 0.011871916009113193, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[right_entry_gap_above_empty_row.mmd]": 0.01645562518388033, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[right_entry_wrap_no_fan.mmd]": 0.01158270868472755, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rl_entry_runway.mmd]": 0.025444458005949855, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rnaseq_auto.mmd]": 0.31564620789140463, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rnaseq_lite.mmd]": 0.06348450086079538, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rnaseq_sections.mmd]": 0.4827423330862075, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[rnaseq_sections_manual.mmd]": 0.46264574979431927, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[route_around_intervening.mmd]": 0.018852542154490948, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[sarek_metro.mmd]": 0.17184012499637902, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[section_diamond.mmd]": 0.02109558298252523, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[self_crossing_bridge.mmd]": 0.014814374037086964, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[shared_sink_parallel.mmd]": 0.035856249975040555, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[simple_pipeline.mmd]": 0.020655500004068017, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[single_section.mmd]": 0.005448417970910668, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[stacked_left_exit_drop.mmd]": 0.013892874820157886, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[stacked_lr_serpentine.mmd]": 0.04632516694255173, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[symmetric_diamond_beside_wide_fan.mmd]": 0.034959417302161455, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_bottom_entry_flow_start.mmd]": 0.00823791790753603, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_bottom_exit_bundle_jog.mmd]": 0.01239170809276402, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_bottom_exit_fork_diamond.mmd]": 0.026397957932204008, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_column_continuation_two_lines.mmd]": 0.014778167009353638, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_convergence_straight_drop.mmd]": 0.010915250051766634, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_file_termini.mmd]": 0.027585499919950962, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_internal_diagonal.mmd]": 0.020558042218908668, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_left_exit_step.mmd]": 0.23516779206693172, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_lr_exit_left.mmd]": 0.032299457816407084, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_lr_exit_right.mmd]": 0.01572070806287229, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_passthrough_continuation.mmd]": 0.008284458890557289, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_passthrough_trunk.mmd]": 0.031675250036641955, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_perp_exit_side_neighbour.mmd]": 0.009848874993622303, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_right_entry_stack.mmd]": 0.02884820895269513, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_trunk_through_fan.mmd]": 0.010574333602562547, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[tb_two_line_vert_seam.mmd]": 0.009230040945112705, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[terminal_symmetric_fan.mmd]": 0.013095915783196688, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[terminus_join.mmd]": 0.005669667152687907, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[top_entry_header_clash.mmd]": 0.02132174908183515, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[trunk_through_fan.mmd]": 0.04113141680136323, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[u_turn_fold.mmd]": 0.06756374915130436, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[uneven_diamond.mmd]": 0.013578458223491907, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[upward_bypass.mmd]": 0.05662487493827939, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[variant_calling.mmd0]": 0.032506706891581416, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[variant_calling.mmd1]": 0.1402620009612292, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[variant_calling_tuned.mmd]": 0.04150683293119073, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[variantbenchmarking.mmd]": 0.3731245012022555, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[variantbenchmarking_auto.mmd]": 0.16777654108591378, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[variantprioritization.mmd]": 0.05990425031632185, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[wide_fan_in.mmd]": 0.025194957153871655, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[wide_fan_out.mmd]": 0.04761916701681912, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[wide_label_fan.mmd]": 0.01925049931742251, + "tests/test_interchange.py::test_interchange_bar_never_spans_a_non_member_station[wrapped_label_trunk.mmd]": 0.013945624697953463, + "tests/test_interchange.py::test_interchange_members_share_a_column_at_distinct_tracks": 0.015666874824091792, + "tests/test_interchange.py::test_marked_interchange_renders_as_a_tinted_interchange": 0.017029666109010577, + "tests/test_interchange.py::test_render_emits_single_connector_and_suppresses_duplicate_pill": 0.035482042003422976, + "tests/test_interchange.py::test_reorder_respects_explicit_line_order_directive": 0.008891416946426034, + "tests/test_interchange.py::test_runtime_guard_flags_an_interchange_bar_over_a_non_member": 0.16639904188923538, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_clears_floor_when_fanned[lr_perp_bottom_exit_perp_entry]": 0.017427582992240787, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_clears_floor_when_fanned[lr_perp_bottom_exit_side_entry]": 0.017526709008961916, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_clears_floor_when_fanned[lr_perp_top_exit_perp_entry]": 0.017915042117238045, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_clears_floor_when_fanned[lr_perp_top_exit_perp_entry_diverging]": 0.020781668135896325, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_clears_floor_when_fanned[lr_perp_top_exit_side_entry]": 0.01463379175402224, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_clears_floor_when_fanned[lr_to_tb_top_drop_two_lines]": 0.022510499227792025, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_is_concentric_when_fanned[lr_perp_bottom_exit_perp_entry]": 0.012455165153369308, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_is_concentric_when_fanned[lr_perp_bottom_exit_side_entry]": 0.04347395896911621, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_is_concentric_when_fanned[lr_perp_top_exit_perp_entry]": 0.019305375637486577, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_is_concentric_when_fanned[lr_perp_top_exit_perp_entry_diverging]": 0.020305626094341278, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_is_concentric_when_fanned[lr_perp_top_exit_side_entry]": 0.019038208993151784, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_corner_is_concentric_when_fanned[lr_to_tb_top_drop_two_lines]": 0.021632707910612226, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_natural_render_is_clean[lr_perp_bottom_exit_perp_entry]": 0.02090654196217656, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_natural_render_is_clean[lr_perp_bottom_exit_side_entry]": 0.01880404190160334, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_natural_render_is_clean[lr_perp_top_exit_perp_entry]": 0.024307292886078358, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_natural_render_is_clean[lr_perp_top_exit_perp_entry_diverging]": 0.025097291683778167, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_natural_render_is_clean[lr_perp_top_exit_side_entry]": 0.03894887585192919, + "tests/test_intra_perp_exit_centreline.py::test_intra_perp_exit_natural_render_is_clean[lr_to_tb_top_drop_two_lines]": 0.017460540868341923, + "tests/test_introspect.py::test_counts_match_graph[epitopeprediction.mmd]": 0.05124079086817801, + "tests/test_introspect.py::test_counts_match_graph[genomeassembly.mmd]": 0.05426704091951251, + "tests/test_introspect.py::test_counts_match_graph[rnaseq_auto.mmd]": 0.07365833292715251, + "tests/test_introspect.py::test_counts_match_graph[rnaseq_sections.mmd]": 0.09592229197733104, + "tests/test_introspect.py::test_default_text_is_a_prefix_of_verbose[epitopeprediction.mmd]": 0.04942362476140261, + "tests/test_introspect.py::test_default_text_is_a_prefix_of_verbose[genomeassembly.mmd]": 0.05296562518924475, + "tests/test_introspect.py::test_default_text_is_a_prefix_of_verbose[rnaseq_auto.mmd]": 0.37066020793281496, + "tests/test_introspect.py::test_default_text_is_a_prefix_of_verbose[rnaseq_sections.mmd]": 0.08828712371177971, + "tests/test_introspect.py::test_explicit_directives_reported_as_explicit": 0.3361756671220064, + "tests/test_introspect.py::test_inferred_when_no_directives": 0.09195383288897574, + "tests/test_introspect.py::test_info_has_all_top_level_keys[epitopeprediction.mmd]": 0.04921666579321027, + "tests/test_introspect.py::test_info_has_all_top_level_keys[genomeassembly.mmd]": 0.2816477499436587, + "tests/test_introspect.py::test_info_has_all_top_level_keys[rnaseq_auto.mmd]": 0.05496374890208244, + "tests/test_introspect.py::test_info_has_all_top_level_keys[rnaseq_sections.mmd]": 0.10253904201090336, + "tests/test_introspect.py::test_json_round_trips[epitopeprediction.mmd]": 0.04716524900868535, + "tests/test_introspect.py::test_json_round_trips[genomeassembly.mmd]": 0.08138587605208158, + "tests/test_introspect.py::test_json_round_trips[rnaseq_auto.mmd]": 0.06312608323059976, + "tests/test_introspect.py::test_json_round_trips[rnaseq_sections.mmd]": 0.08708662516437471, + "tests/test_introspect.py::test_layout_rows_reflect_folding": 0.11476104194298387, + "tests/test_introspect.py::test_port_side_inferred_tracks_section_directive": 0.0802611680701375, + "tests/test_introspect.py::test_routes_exclude_synthetic_stations[epitopeprediction.mmd]": 0.05147029319778085, + "tests/test_introspect.py::test_routes_exclude_synthetic_stations[genomeassembly.mmd]": 0.0540648743044585, + "tests/test_introspect.py::test_routes_exclude_synthetic_stations[rnaseq_auto.mmd]": 0.08915624907240272, + "tests/test_introspect.py::test_routes_exclude_synthetic_stations[rnaseq_sections.mmd]": 0.0998402088880539, + "tests/test_introspect.py::test_section_dag_edges_match[epitopeprediction.mmd]": 0.06167654134333134, + "tests/test_introspect.py::test_section_dag_edges_match[genomeassembly.mmd]": 0.06427533319219947, + "tests/test_introspect.py::test_section_dag_edges_match[rnaseq_auto.mmd]": 0.06042179185897112, + "tests/test_introspect.py::test_section_dag_edges_match[rnaseq_sections.mmd]": 0.0856831248383969, + "tests/test_introspect.py::test_synthetic_elements_surfaced[epitopeprediction.mmd]": 0.04779433226212859, + "tests/test_introspect.py::test_synthetic_elements_surfaced[genomeassembly.mmd]": 0.04316608305089176, + "tests/test_introspect.py::test_synthetic_elements_surfaced[rnaseq_auto.mmd]": 0.2611032500863075, + "tests/test_introspect.py::test_synthetic_elements_surfaced[rnaseq_sections.mmd]": 0.09664729190990329, + "tests/test_introspect.py::test_warnings_passed_through": 0.058472375851124525, + "tests/test_is_fold_section.py::test_is_fold_section[BT-1-True]": 0.00023687421344220638, + "tests/test_is_fold_section.py::test_is_fold_section[LR-1-False]": 0.0003242508973926306, + "tests/test_is_fold_section.py::test_is_fold_section[LR-2-True]": 0.0006142081692814827, + "tests/test_is_fold_section.py::test_is_fold_section[RL-1-False]": 0.00025704200379550457, + "tests/test_is_fold_section.py::test_is_fold_section[RL-3-True]": 0.0002821260131895542, + "tests/test_is_fold_section.py::test_is_fold_section[TB-1-True]": 0.00027312501333653927, + "tests/test_is_fold_section.py::test_is_fold_section[TB-2-True]": 0.0002556659746915102, + "tests/test_labels.py::TestAvoidDiagonalRoutes::test_horizontal_segment_ignored": 0.00046370807103812695, + "tests/test_labels.py::TestAvoidDiagonalRoutes::test_label_flipped_off_diagonal": 0.0010174168273806572, + "tests/test_labels.py::TestAvoidDiagonalRoutes::test_no_route_collision_no_flip": 0.00018299906514585018, + "tests/test_labels.py::TestComputePortLabelPreference::test_conflicting_ports_cancel": 0.0001793750561773777, + "tests/test_labels.py::TestComputePortLabelPreference::test_entry_port_ignored": 0.0001763759646564722, + "tests/test_labels.py::TestComputePortLabelPreference::test_exit_port_above_prefers_label_below": 0.00017375010065734386, + "tests/test_labels.py::TestComputePortLabelPreference::test_exit_port_below_prefers_label_above": 0.00020774896256625652, + "tests/test_labels.py::TestComputePortLabelPreference::test_max_dx_filters_distant_ports": 0.00016474886797368526, + "tests/test_labels.py::TestComputePortLabelPreference::test_multiple_consistent_ports_keep_preference": 0.0001656238455325365, + "tests/test_labels.py::TestComputePortLabelPreference::test_same_y_ignored": 0.00022616703063249588, + "tests/test_labels.py::TestSegmentIntersectsBbox::test_diagonal_clips_corner": 0.00019458401948213577, + "tests/test_labels.py::TestSegmentIntersectsBbox::test_diagonal_misses_bbox": 0.00016400008462369442, + "tests/test_labels.py::TestSegmentIntersectsBbox::test_segment_crosses_bbox": 0.00016445806249976158, + "tests/test_labels.py::TestSegmentIntersectsBbox::test_segment_inside_bbox": 0.00015724985860288143, + "tests/test_labels.py::TestSegmentIntersectsBbox::test_segment_outside_bbox": 0.00015299790538847446, + "tests/test_layout.py::TestPassCBisection::test_bisection_first_valid_threshold[_guard_no_coincident_station_coords-after Stage 6.4]": 0.0002401249948889017, + "tests/test_layout.py::TestPassCBisection::test_bisection_first_valid_threshold[_guard_no_line_crosses_non_consumer-after Stage 6.14]": 0.00023791706189513206, + "tests/test_layout.py::TestPassCBisection::test_bisection_first_valid_threshold[_guard_no_station_overlap-after Stage 6.4]": 0.0002939170226454735, + "tests/test_layout.py::TestPassCBisection::test_bisection_first_valid_threshold[_guard_stations_in_sections-after Stage 5.3]": 0.004597834078595042, + "tests/test_layout.py::TestPassCBisection::test_clean_layout_does_not_fire_bisection_guards": 0.018285915721207857, + "tests/test_layout.py::TestPassCBisection::test_gated_overlap_guard_fires_at_later_bisection_checkpoints": 0.017433249857276678, + "tests/test_layout.py::TestPassCBisection::test_overlap_localises_to_phase[_align_terminus_to_upstream-after Stage 6.10]": 0.010913165984675288, + "tests/test_layout.py::TestPassCBisection::test_overlap_localises_to_phase[_compact_row_content_to_bbox_top-after Stage 6.4]": 0.015257749939337373, + "tests/test_layout.py::TestPassCBisection::test_overlap_localises_to_phase[_lift_off_track_stations-after Stage 6.4]": 0.014256000984460115, + "tests/test_layout.py::TestPassCBisection::test_overlap_localises_to_phase[_shrink_bboxes_to_content_bottom-after Stage 6.13]": 0.031222833786159754, + "tests/test_layout.py::TestPassCBisection::test_overlap_localises_to_phase[_snap_all_y_to_grid-after Stage 6.4]": 0.018010917119681835, + "tests/test_layout.py::TestPassCBisection::test_overlap_localises_to_phase[_snap_canvas_y_to_grid-after Stage 6.15]": 0.024212124990299344, + "tests/test_layout.py::TestPassCBisection::test_overlap_localises_to_phase[_top_align_row_bboxes_only-after Stage 6.4]": 0.01868516788817942, + "tests/test_layout.py::TestPassCBisection::test_phase_13h_subphase_checkpoint_fires_on_center_ports": 0.015904458239674568, + "tests/test_layout.py::TestPhaseGuards::test_differentialabundance": 0.4188902503810823, + "tests/test_layout.py::TestPhaseGuards::test_flat_graph": 0.0026057499926537275, + "tests/test_layout.py::TestPhaseGuards::test_rnaseq_auto": 0.22689029085449874, + "tests/test_layout.py::TestPhaseGuards::test_rnaseq_sections": 1.0654952090699226, + "tests/test_layout.py::TestPhaseGuards::test_simple_two_sections": 0.012128165923058987, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[aligner_row_pinned_continuation]": 0.08395133423618972, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[around_below_ep_col_gt0]": 0.056255748961120844, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[around_section_below]": 0.12234220909886062, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[asymmetric_tree]": 0.31322645815089345, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.06548612471669912, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[branch_fold_forward]": 0.05999941728077829, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[branch_fold_stability]": 0.0606021243147552, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bt_chain]": 0.011633000103756785, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bt_exit_top_above]": 0.02735087601467967, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bt_exit_top_above_2line]": 0.03414987516589463, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bt_fork]": 0.025160000193864107, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bt_perp_entry_below]": 0.023747000144794583, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bt_to_lr]": 0.019426665967330337, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bt_to_tb]": 0.022736832033842802, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bundle_terminator_continuation]": 0.010044956812635064, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.159759541740641, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.12382295890711248, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_label_rake]": 0.06016724999062717, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_label_rake_left]": 0.06312574911862612, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_label_rake_wide]": 0.12257058382965624, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.06384499999694526, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_leftward_overflow]": 0.08485666615888476, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[bypass_v_tight]": 0.05614520865492523, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[clear_channel_target_aware_push]": 0.06197512382641435, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[compact_gap_peer_conflict]": 0.051838790997862816, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[compact_hidden_passthrough]": 0.03423675009980798, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[complex_multipath]": 0.10173079185187817, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[convergence_stacked_sink]": 0.07282995781861246, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[convergent_offrow_exit_climb]": 0.31623195786960423, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.07494370779022574, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[cross_col_top_entry]": 0.027299458859488368, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[cross_column_perp_drop]": 0.030109917279332876, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.03022545902058482, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[cross_row_gap_wrap]": 0.06461654230952263, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[deep_linear]": 0.0875429988373071, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[disjoint_sameline_trunks]": 0.09024812607094646, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[divergent_fanout_split]": 0.03354591690003872, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[dogleg_exempt_distinct]": 0.06817620899528265, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[dogleg_exempt_sameline]": 0.04575733374804258, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[dogleg_twoline_fanout]": 0.06063970900140703, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[exit_corner_offset_dogleg]": 0.04686408187262714, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[fan_bypass_nesting]": 0.10996541590429842, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[fan_in_merge]": 0.08716558385640383, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[fold_double]": 0.2185644991695881, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[fold_fan_across]": 0.39140054071322083, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[fold_stacked_branch]": 0.216195581946522, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[funcprofiler_upstream]": 0.572645456995815, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[header_nudge]": 0.044646916911005974, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[header_side_rotated]": 0.0244447507429868, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[inrow_skip_breeze]": 0.04911933420225978, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[inter_row_wrap_clearance]": 0.0463665418792516, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[interchange_lane_reorder]": 0.03322416730225086, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[junction_entry_align]": 0.12209658324718475, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[junction_entry_collision]": 0.0709045419935137, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[junction_entry_reversed_fold]": 0.0527384162414819, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[junction_fanout_convergence]": 0.04632987501099706, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[left_entry_up_wrap]": 0.03276679222472012, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[left_exit_sink_below]": 0.05354983313009143, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.0488046258687973, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.03133262391202152, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.04064224986359477, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.03214637585915625, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.03805720806121826, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.03646275005303323, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_to_tb_top_drop]": 0.024763833032920957, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.05885750101879239, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.02241204190067947, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.04331979178823531, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_top_entry_cross_column]": 0.029263458913192153, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.026070459047332406, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_around_below_leftmost]": 0.05187554191797972, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_bottom_row_bypass]": 0.06736349989660084, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_leftmost_sink_branch]": 0.06196445785462856, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_offrow_continuation]": 0.06181850004941225, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_port_above_approach]": 0.09777337498962879, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_pullaway]": 0.06024766783230007, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_right_entry]": 0.052338832756504416, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.08644316717982292, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[merge_trunk_over_low_section]": 0.1032408750616014, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[mismatched_tracks]": 0.06410737475380301, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[mixed_bundle_column]": 0.09792629303410649, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[mixed_port_sides]": 0.04560616705566645, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[multi_input_convergence]": 0.03234883211553097, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[multi_line_bundle]": 0.044908042065799236, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.04950729105621576, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[near_vertical_junction_hook]": 0.030485583003610373, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[off_track_convergence]": 0.02336104237474501, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[off_track_convergence_multiline]": 0.029555376153439283, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[off_track_input_above_consumer]": 0.3321639581117779, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[parallel_independent]": 0.042176249669864774, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[peeloff_extra_line_consumer]": 0.09699108405038714, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[peeloff_riser_respace]": 0.11867670784704387, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[post_convergence_trunk]": 0.013074625050649047, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[rail_inter_section]": 0.01363087398931384, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[rail_offtrack_fan]": 0.026064374018460512, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[rail_offtrack_io]": 0.018246124032884836, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[rail_offtrack_plain_io]": 0.016427916940301657, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[reconverge_reversed_fold]": 0.2720559590961784, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[right_entry_from_above]": 0.026756957871839404, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[right_entry_from_above_far]": 0.04211525130085647, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.03703195694833994, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[right_entry_wrap_no_fan]": 0.04203991708345711, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[rl_entry_runway]": 0.03971820999868214, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[rnaseq_lite]": 0.15000233286991715, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[route_around_intervening]": 0.04854191467165947, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[section_diamond]": 0.11798624903894961, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[self_crossing_bridge]": 0.03670800011605024, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[shared_sink_parallel]": 0.09739337489008904, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[single_section]": 0.010239916853606701, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[stacked_left_exit_drop]": 0.026310540735721588, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[stacked_lr_serpentine]": 0.04515304113738239, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.09420266607776284, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.022440040949732065, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.0512579579371959, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.0527544179931283, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_column_continuation_two_lines]": 0.021339040948078036, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_convergence_straight_drop]": 0.02393358387053013, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_internal_diagonal]": 0.020457792095839977, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_left_exit_step]": 0.07940874993801117, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_lr_exit_left]": 0.031403291737660766, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_lr_exit_right]": 0.03274408308789134, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_passthrough_continuation]": 0.01897229324094951, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_passthrough_trunk]": 0.04657241515815258, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.012197208125144243, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_right_entry_stack]": 0.05767900124192238, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_trunk_through_fan]": 0.02417720900848508, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[tb_two_line_vert_seam]": 0.03608774999156594, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[terminal_symmetric_fan]": 0.032937915064394474, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[terminus_join]": 0.009356957860291004, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[top_entry_header_clash]": 0.02561812475323677, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[trunk_through_fan]": 0.05577112501487136, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[u_turn_fold]": 0.12042220798321068, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[uneven_diamond]": 0.010191123699769378, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[upward_bypass]": 0.1095760001335293, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[variant_calling]": 0.3295259999576956, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[wide_fan_in]": 0.04114949889481068, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[wide_fan_out]": 0.06103254109621048, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[wide_label_fan]": 0.04018370807170868, + "tests/test_layout.py::TestPhaseGuards::test_topology_fixtures[wrapped_label_trunk]": 0.012454457813873887, + "tests/test_layout.py::TestShiftGraphIntoCanvas::test_double_call_is_safe": 0.00019112415611743927, + "tests/test_layout.py::TestShiftGraphIntoCanvas::test_idempotent_when_already_in_canvas": 0.00019479240290820599, + "tests/test_layout.py::TestShiftGraphIntoCanvas::test_shifts_overflowing_section_down_to_padding": 0.00019245781004428864, + "tests/test_layout.py::test_around_section_diversion_up_leg_centers_in_row_gap": 0.293632083106786, + "tests/test_layout.py::test_bundles_in_gap_dedupes_fanout_to_multiple_columns": 0.2218321249820292, + "tests/test_layout.py::test_bundles_in_gap_dedupes_synthetic_fanout": 0.012582666939124465, + "tests/test_layout.py::test_cli_diamond_style_default": 0.011357666924595833, + "tests/test_layout.py::test_cli_diamond_style_symmetric": 0.0175370832439512, + "tests/test_layout.py::test_compute_layout_branching": 0.012447707820683718, + "tests/test_layout.py::test_compute_layout_captioned_off_track_clears_line_bundle": 0.03707133303396404, + "tests/test_layout.py::test_compute_layout_off_track_bbox_contains_stations": 0.009130874648690224, + "tests/test_layout.py::test_compute_layout_off_track_lifts_above_topmost": 0.004620459163561463, + "tests/test_layout.py::test_compute_layout_off_track_terminus_does_not_kink_port": 0.009585123974829912, + "tests/test_layout.py::test_compute_layout_rowspan_section_compacts_content": 0.01976570999249816, + "tests/test_layout.py::test_compute_layout_sets_coordinates": 0.011785416165366769, + "tests/test_layout.py::test_cross_col_top_entry_channel_clears_title_band": 0.07391054322943091, + "tests/test_layout.py::test_cross_col_top_entry_port_on_boundary": 0.0186601672321558, + "tests/test_layout.py::test_flat_layout_no_named_lines": 0.00737524894066155, + "tests/test_layout.py::test_flat_layout_unnamed_edges": 0.0016593330074101686, + "tests/test_layout.py::test_full_bundle_column_fans_around_trunk_with_center_ports": 0.013196915853768587, + "tests/test_layout.py::test_full_bundle_column_fans_non_terminal_section": 0.031367874937132, + "tests/test_layout.py::test_full_bundle_column_no_op_without_center_ports": 0.00757691590115428, + "tests/test_layout.py::test_is_diamond_fanout": 0.00021654111333191395, + "tests/test_layout.py::test_junction_sourced_bundle_centers_in_gap[mixed_port_sides-gap1]": 0.0202089159283787, + "tests/test_layout.py::test_junction_sourced_bundle_centers_in_gap[section_diamond-gap0]": 0.07648991723544896, + "tests/test_layout.py::test_label_clamp_expands_bbox_when_both_sides_tight": 0.00029262411408126354, + "tests/test_layout.py::test_label_clamp_flips_when_overlapping_pill": 0.010145252104848623, + "tests/test_layout.py::test_label_text_width_empty": 0.00017270888201892376, + "tests/test_layout.py::test_label_text_width_multiline": 0.00016387412324547768, + "tests/test_layout.py::test_label_text_width_single_line": 0.00017212401144206524, + "tests/test_layout.py::test_layer_assignment_branching": 0.012093083700165153, + "tests/test_layout.py::test_layer_assignment_linear": 0.007218667073175311, + "tests/test_layout.py::test_lift_would_cause_uturn_allows_when_feeder_above": 0.00019729090854525566, + "tests/test_layout.py::test_lift_would_cause_uturn_ignores_single_feeder": 0.00017170794308185577, + "tests/test_layout.py::test_lift_would_cause_uturn_skips_when_feeders_below_anchor": 0.0006815830711275339, + "tests/test_layout.py::test_line_order_definition_default": 0.006751790875568986, + "tests/test_layout.py::test_line_order_span_e2e": 0.04397212387993932, + "tests/test_layout.py::test_line_order_span_preserves_ties": 0.007098542992025614, + "tests/test_layout.py::test_line_order_span_reorders": 0.011543584056198597, + "tests/test_layout.py::test_lr_exit_clearance_skipped_for_single_track": 0.02006212482228875, + "tests/test_layout.py::test_lr_exit_clearance_widens_bbox_for_multi_track": 0.012325040996074677, + "tests/test_layout.py::test_lr_label_clearance_expands_bbox": 0.00660320813767612, + "tests/test_layout.py::test_mismatched_tracks_port_alignment": 0.03240571008063853, + "tests/test_layout.py::test_multi_path_gap_separates_by_b_and_centers": 0.023725373670458794, + "tests/test_layout.py::test_multiple_off_track_inputs_share_consumer_stack_above_it": 0.016087250784039497, + "tests/test_layout.py::test_no_upward_inter_section_route_across_rowspan_neighbour": 0.03384083299897611, + "tests/test_layout.py::test_normalization_adds_no_inter_line_crossings[examples/differentialabundance.mmd]": 0.33232129202224314, + "tests/test_layout.py::test_normalization_adds_no_inter_line_crossings[examples/genomeassembly.mmd]": 0.1879647090099752, + "tests/test_layout.py::test_normalization_adds_no_inter_line_crossings[examples/variant_calling.mmd]": 0.03288045898079872, + "tests/test_layout.py::test_normalization_adds_no_inter_line_crossings[examples/variant_calling_tuned.mmd]": 0.06132883415557444, + "tests/test_layout.py::test_normalization_adds_no_inter_line_crossings[examples/variantprioritization.mmd]": 0.05421391595155001, + "tests/test_layout.py::test_off_track_convergence_keeps_consumer_on_trunk": 0.02313033281825483, + "tests/test_layout.py::test_off_track_input_sits_adjacent_to_its_consumer": 0.005597915733233094, + "tests/test_layout.py::test_port_terminus_spacing_basic": 0.014179001096636057, + "tests/test_layout.py::test_port_terminus_spacing_multi_terminus": 0.019504709169268608, + "tests/test_layout.py::test_port_terminus_spacing_no_station_as_elbow": 0.034261083230376244, + "tests/test_layout.py::test_rl_exit_clearance_preserves_bbox_x": 0.02252845815382898, + "tests/test_layout.py::test_rowspan_trim_doesnt_misalign_tb_bbox_bottom": 0.15576116694137454, + "tests/test_layout.py::test_same_direction_lines_in_gap_bundle_at_offset_step[examples/differentialabundance.mmd-1-2-4]": 0.44494691700674593, + "tests/test_layout.py::test_same_line_segments_in_gap_bundle_share_x[examples/differentialabundance.mmd]": 0.30277112405747175, + "tests/test_layout.py::test_same_line_segments_in_gap_bundle_share_x[examples/genomeassembly.mmd]": 0.08156004175543785, + "tests/test_layout.py::test_section_content_y_stable_under_neutral_layout": 0.02662191679701209, + "tests/test_layout.py::test_section_gap_bundle_aware_minimum": 0.018238125136122108, + "tests/test_layout.py::test_section_gap_increases_distance": 0.014769417699426413, + "tests/test_layout.py::test_section_gap_no_warning_when_sufficient": 0.010045667178928852, + "tests/test_layout.py::test_section_layout_assigns_coordinates": 0.007668000878766179, + "tests/test_layout.py::test_section_layout_ports_skip_rendering": 0.023559083230793476, + "tests/test_layout.py::test_section_layout_preserves_edge_order": 0.007335291244089603, + "tests/test_layout.py::test_section_layout_sec1_left_of_sec2": 0.006413458846509457, + "tests/test_layout.py::test_section_layout_sections_dont_overlap": 0.011566748609766364, + "tests/test_layout.py::test_section_layout_with_grid_override": 0.022436668165028095, + "tests/test_layout.py::test_sections_top_aligned_in_same_row": 0.019585707690566778, + "tests/test_layout.py::test_single_bundle_inter_section_gap_is_centered[differentialabundance.mmd]": 0.22407624986954033, + "tests/test_layout.py::test_single_bundle_inter_section_gap_is_centered[differentialabundance_default.mmd]": 0.22828295803628862, + "tests/test_layout.py::test_straight_diamond_inter_section_port_alignment": 0.011088125174865127, + "tests/test_layout.py::test_straight_diamond_merge_returns_to_trunk": 0.013740083435550332, + "tests/test_layout.py::test_straight_diamond_top_branch_stays_flat": 0.00744941714219749, + "tests/test_layout.py::test_symmetric_diamond_both_branches_deviate": 0.015266833826899529, + "tests/test_layout.py::test_symmetric_diamond_survives_offset_trunk[3]": 0.025312709156423807, + "tests/test_layout.py::test_symmetric_diamond_survives_offset_trunk[6]": 0.02232624962925911, + "tests/test_layout.py::test_symmetric_diamond_symmetric_beside_wider_fan[3]": 0.0416527078486979, + "tests/test_layout.py::test_symmetric_diamond_symmetric_beside_wider_fan[6]": 0.05536433425731957, + "tests/test_layout.py::test_track_assignment": 0.045824539847671986, + "tests/test_layout.py::test_uneven_reconverging_diamond_short_branch_on_trunk": 0.02065945789217949, + "tests/test_layout_invariants.py::test_aligner_siblings_stack_evenly_over_pinned_continuation": 0.0009560009930282831, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[bubble_forced_label_clears_diagonal.mmd]": 0.010703542036935687, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[bubble_label_clears_diagonal.mmd]": 0.01266029174439609, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[bubble_output_above.mmd]": 0.013789501274004579, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[captioned_sibling_outputs.mmd]": 0.013588457833975554, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[centered_tracks.mmd]": 0.018351166043430567, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[cross_track_interchange.mmd]": 0.04316099965944886, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[da_pipeline.mmd]": 0.005001583136618137, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[diagonal_labels.mmd]": 0.0470298333093524, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[diagonal_single_trunk_off_track.mmd]": 0.056176999816671014, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[differentialabundance.mmd]": 0.19432095880620182, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[differentialabundance_default.mmd]": 0.17947004083544016, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[directional_flow.mmd]": 0.013562332838773727, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[disconnected_components.mmd]": 0.027279375353828073, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[epitopeprediction.mmd]": 0.0696104581002146, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[file_icon_fanin.mmd]": 0.033604499185457826, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[file_icons.mmd]": 0.025446374900639057, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[font_scale.mmd]": 0.01720758411101997, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[genomeassembly.mmd]": 0.08534041605889797, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[genomeassembly_organellar.mmd]": 0.2626766669563949, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[genomeassembly_staggered.mmd]": 0.08287437469698489, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[genomic_pipeline.mmd]": 0.6243826241698116, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[group_labels.mmd]": 0.05283254198729992, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/01_minimal.mmd]": 0.014936249935999513, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/02_sections.mmd]": 0.026063958881422877, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/03_fan_out.mmd]": 0.03384041599929333, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/03b_fan_in_merge.mmd]": 0.022173416800796986, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/04_directions.mmd]": 0.05154991801828146, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/05_file_icons.mmd]": 0.02081991615705192, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/05b_multi_icons.mmd]": 0.02019279100932181, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/05c_files_icon.mmd]": 0.018288376042619348, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/05d_folder_icon.mmd]": 0.013183375122025609, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/05f_banner_labels.mmd]": 0.026901708217337728, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/06a_without_hidden.mmd]": 0.04153191624209285, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[guide/06b_with_hidden.mmd]": 0.052345915930345654, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[hlatyping.mmd]": 0.04698674916289747, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[icon_caption_wrap.mmd]": 0.008676916360855103, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[leaf_file_icon_on_trunk.mmd]": 0.014389374991878867, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[legend_combo.mmd]": 0.024648915976285934, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[legend_logo_placement.mmd]": 0.05433891690336168, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[longread_variant_calling.mmd]": 0.1590408340562135, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[marker_styles.mmd]": 0.05093849892728031, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[multiline_labels.mmd]": 0.029167792294174433, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[off_track_output_branched.mmd]": 0.011527249589562416, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[off_track_outputs.mmd]": 0.03044133516959846, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[off_track_outputs_along_trunk.mmd]": 0.012107166927307844, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[rnaseq_auto.mmd]": 0.107305042212829, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[rnaseq_sections.mmd]": 0.19419974996708333, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[rnaseq_sections_manual.mmd]": 0.17884783307090402, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[rnaseq_simple.mmd]": 0.014504248974844813, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[simple_pipeline.mmd]": 0.02169787511229515, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[tb_file_termini.mmd]": 0.03576537407934666, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[tb_right_exit_feeder_slots.mmd]": 0.02862445800565183, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/aligner_row_pinned_continuation.mmd]": 0.045807582791894674, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/around_below_ep_col_gt0.mmd]": 0.019643916049972177, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/around_section_below.mmd]": 0.025986250955611467, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/asymmetric_tree.mmd]": 0.049725166987627745, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bottom_row_climb_clear_corridor.mmd]": 0.017698083072900772, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/branch_fold_forward.mmd]": 0.047753707971423864, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/branch_fold_stability.mmd]": 0.026998333167284727, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bt_chain.mmd]": 0.0059655418153852224, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bt_exit_top_above.mmd]": 0.009836834156885743, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bt_exit_top_above_2line.mmd]": 0.012841625139117241, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bt_fork.mmd]": 0.00598975014872849, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bt_perp_entry_below.mmd]": 0.019903834210708737, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bt_to_lr.mmd]": 0.01470920816063881, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bt_to_tb.mmd]": 0.012471958994865417, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bundle_terminator_continuation.mmd]": 0.01638337573967874, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_fan_in_outer_slot.mmd]": 0.05850700009614229, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_gap2_rightward_overflow.mmd]": 0.03444274887442589, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_label_rake.mmd]": 0.041938792914152145, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_label_rake_left.mmd]": 0.057485375087708235, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_label_rake_wide.mmd]": 0.06670633400790393, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_leftward_far_side_entry.mmd]": 0.04390000109560788, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_leftward_overflow.mmd]": 0.04383020778186619, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/bypass_v_tight.mmd]": 0.05066241673193872, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/clear_channel_target_aware_push.mmd]": 0.04452575114555657, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/compact_gap_peer_conflict.mmd]": 0.04491012520156801, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/compact_hidden_passthrough.mmd]": 0.017706208862364292, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/complex_multipath.mmd]": 0.06156533188186586, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/convergence_stacked_sink.mmd]": 0.05010104109533131, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/convergent_offrow_exit_climb.mmd]": 0.1902102092280984, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/corridor_narrow_gap_fallback.mmd]": 0.025031124940142035, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/cross_col_top_entry.mmd]": 0.015353333204984665, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/cross_column_perp_drop.mmd]": 0.020301667973399162, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/cross_column_perp_drop_far_exit.mmd]": 0.01649216585792601, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/cross_row_gap_wrap.mmd]": 0.027949125040322542, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/deep_linear.mmd]": 0.2590421256609261, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/disjoint_sameline_trunks.mmd]": 0.023041750071570277, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/divergent_fanout_split.mmd]": 0.029452709015458822, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/dogleg_exempt_distinct.mmd]": 0.03289700020104647, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/dogleg_exempt_sameline.mmd]": 0.024148207856342196, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/dogleg_twoline_fanout.mmd]": 0.021693957969546318, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/exit_corner_offset_dogleg.mmd]": 0.03472849982790649, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/fan_bypass_nesting.mmd]": 0.05047791707329452, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/fan_in_merge.mmd]": 0.026748124975711107, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/fold_double.mmd]": 0.13503291620872915, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/fold_fan_across.mmd]": 0.1074398742057383, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/fold_stacked_branch.mmd]": 0.1298062507994473, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/funcprofiler_upstream.mmd]": 0.1901379581540823, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/header_nudge.mmd]": 0.030883043073117733, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/header_side_rotated.mmd]": 0.020993208047002554, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/inrow_skip_breeze.mmd]": 0.018209875095635653, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/inter_row_wrap_clearance.mmd]": 0.05126908398233354, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/interchange_lane_reorder.mmd]": 0.02225779090076685, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/junction_entry_align.mmd]": 0.0517219603061676, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/junction_entry_collision.mmd]": 0.05516812507994473, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/junction_entry_reversed_fold.mmd]": 0.02643037517555058, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/junction_fanout_convergence.mmd]": 0.029061583802103996, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/left_entry_up_wrap.mmd]": 0.06390629196539521, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/left_exit_sink_below.mmd]": 0.03221191605553031, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.03546958393417299, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.027803707867860794, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.022460418054834008, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.015572916017845273, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_perp_top_exit_side_entry.mmd]": 0.023842707509174943, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_to_tb_top_cross_col.mmd]": 0.027985417749732733, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_to_tb_top_drop.mmd]": 0.029198584146797657, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.018080748850479722, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0245404161978513, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_to_tb_top_two_lines.mmd]": 0.01554512488655746, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_top_entry_cross_column.mmd]": 0.017102417070418596, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.012339001288637519, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_around_below_leftmost.mmd]": 0.024746624054387212, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_bottom_row_bypass.mmd]": 0.0435177490580827, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_leftmost_sink_branch.mmd]": 0.031764959217980504, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_offrow_continuation.mmd]": 0.026112584164366126, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_port_above_approach.mmd]": 0.01888179173693061, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_pullaway.mmd]": 0.028381540905684233, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_right_entry.mmd]": 0.02217066683806479, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_trunk_out_of_range_section.mmd]": 0.03230108390562236, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/merge_trunk_over_low_section.mmd]": 0.031927457777783275, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/mismatched_tracks.mmd]": 0.0271245411131531, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/mixed_bundle_column.mmd]": 0.035497291246429086, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/mixed_port_sides.mmd]": 0.024154583225026727, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/multi_input_convergence.mmd]": 0.2232444181572646, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/multi_line_bundle.mmd]": 0.029021084075793624, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/multicarrier_offrow_exit_climb.mmd]": 0.03479625005275011, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/near_vertical_junction_hook.mmd]": 0.016876874957233667, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/off_track_convergence.mmd]": 0.03144758311100304, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/off_track_convergence_multiline.mmd]": 0.02757862419821322, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/off_track_input_above_consumer.mmd]": 0.09041279298253357, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/parallel_independent.mmd]": 0.020268666790798306, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/peeloff_extra_line_consumer.mmd]": 0.04951641708612442, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/peeloff_riser_respace.mmd]": 0.049686707789078355, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/post_convergence_trunk.mmd]": 0.01513954228721559, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/reconverge_reversed_fold.mmd]": 0.10457650013267994, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/right_entry_from_above.mmd]": 0.02599062491208315, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/right_entry_from_above_far.mmd]": 0.01665029115974903, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/right_entry_gap_above_empty_row.mmd]": 0.02217708295211196, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/right_entry_wrap_no_fan.mmd]": 0.011905667139217257, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/rl_entry_runway.mmd]": 0.02144862525165081, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/rnaseq_lite.mmd]": 0.07364554237574339, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/route_around_intervening.mmd]": 0.018772208131849766, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/section_diamond.mmd]": 0.022968789795413613, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/self_crossing_bridge.mmd]": 0.025966915534809232, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/shared_sink_parallel.mmd]": 0.05561320995911956, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/single_section.mmd]": 0.012130583170801401, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/stacked_left_exit_drop.mmd]": 0.013215250801295042, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/stacked_lr_serpentine.mmd]": 0.020290666026994586, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.05597220780327916, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_bottom_entry_flow_start.mmd]": 0.02282687579281628, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.03810512600466609, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.042547082994133234, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_column_continuation_two_lines.mmd]": 0.024041373981162906, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_convergence_straight_drop.mmd]": 0.009920459240674973, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_internal_diagonal.mmd]": 0.020475084194913507, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_left_exit_step.mmd]": 0.024764541070908308, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_lr_exit_left.mmd]": 0.01806883397512138, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_lr_exit_right.mmd]": 0.024257250130176544, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_passthrough_continuation.mmd]": 0.00923641724511981, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_passthrough_trunk.mmd]": 0.03574791713617742, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_perp_exit_side_neighbour.mmd]": 0.03180504194460809, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_right_entry_stack.mmd]": 0.028145084157586098, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_trunk_through_fan.mmd]": 0.015122583135962486, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/tb_two_line_vert_seam.mmd]": 0.017414999194443226, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/terminal_symmetric_fan.mmd]": 0.024701416725292802, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/terminus_join.mmd]": 0.007616416085511446, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/top_entry_header_clash.mmd]": 0.021038874052464962, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/trunk_through_fan.mmd]": 0.024494081968441606, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/twoline_fanout_up.mmd]": 0.018431083764880896, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/u_turn_fold.mmd]": 0.11676537501625717, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/uneven_diamond.mmd]": 0.021748750936239958, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/upward_bypass.mmd]": 0.07662954204715788, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/variant_calling.mmd]": 0.16706908284686506, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/wide_fan_in.mmd]": 0.23313820781186223, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/wide_fan_out.mmd]": 0.05888875084929168, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/wide_label_fan.mmd]": 0.024291998939588666, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[topologies/wrapped_label_trunk.mmd]": 0.01638516690582037, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[trunk_align_matching_bundle.mmd]": 0.023324084235355258, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[uneven_diamond.mmd]": 0.013175165746361017, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[variant_calling.mmd]": 0.1689644167199731, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[variant_calling_tuned.mmd]": 0.06670958315953612, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[variantbenchmarking.mmd]": 0.5284667499363422, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[variantbenchmarking_auto.mmd]": 0.21682425122708082, + "tests/test_layout_invariants.py::test_all_stations_snap_to_grid[variantprioritization.mmd]": 0.049328832887113094, + "tests/test_layout_invariants.py::test_anchor_guard_catches_a_displaced_port[differentialabundance.mmd-sides0-y]": 0.14726770669221878, + "tests/test_layout_invariants.py::test_anchor_guard_catches_a_displaced_port[differentialabundance.mmd-sides2-x]": 0.13131116586737335, + "tests/test_layout_invariants.py::test_anchor_guard_catches_a_displaced_port[rnaseq_sections.mmd-sides1-x]": 0.15202720928937197, + "tests/test_layout_invariants.py::test_auto_y_spacing_fits_content[differentialabundance.mmd]": 0.00206808396615088, + "tests/test_layout_invariants.py::test_auto_y_spacing_fits_content[differentialabundance_default.mmd]": 0.0032269172370433807, + "tests/test_layout_invariants.py::test_auto_y_spacing_fits_content[genomeassembly.mmd]": 0.0012992511037737131, + "tests/test_layout_invariants.py::test_auto_y_spacing_fits_content[rnaseq_auto.mmd]": 0.0023180420976132154, + "tests/test_layout_invariants.py::test_auto_y_spacing_fits_content[rnaseq_sections.mmd]": 0.46347370790317655, + "tests/test_layout_invariants.py::test_auto_y_spacing_fits_content[variantprioritization.mmd]": 0.001257625175639987, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[bubble_forced_label_clears_diagonal.mmd]": 0.0009098330046981573, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[bubble_label_clears_diagonal.mmd]": 0.0007929170969873667, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[bubble_output_above.mmd]": 0.001804957864806056, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[captioned_sibling_outputs.mmd]": 0.00871470826677978, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[da_pipeline.mmd]": 0.021167541854083538, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[diagonal_single_trunk_off_track.mmd]": 0.0026502080727368593, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[differentialabundance.mmd]": 0.012586082564666867, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[differentialabundance_default.mmd]": 0.02212845766916871, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[off_track_output_branched.mmd]": 0.001426916802302003, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[off_track_outputs.mmd]": 0.001132042147219181, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[off_track_outputs_along_trunk.mmd]": 0.001023417105898261, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[topologies/off_track_convergence.mmd]": 0.0013061249628663063, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[topologies/off_track_convergence_multiline.mmd]": 0.005106708034873009, + "tests/test_layout_invariants.py::test_bubble_label_clears_convergence_diagonal[topologies/off_track_input_above_consumer.mmd]": 0.009377083042636514, + "tests/test_layout_invariants.py::test_build_concentric_bundle_anchors_innermost_at_base": 0.00019974983297288418, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[font_scale.mmd]": 0.0004655420780181885, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[topologies/bundle_terminator_continuation.mmd]": 0.00036125117912888527, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[topologies/dogleg_exempt_distinct.mmd]": 0.0006931249517947435, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[topologies/peeloff_extra_line_consumer.mmd]": 0.0019665409345179796, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[topologies/post_convergence_trunk.mmd]": 0.0010420409962534904, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[topologies/rl_entry_runway.mmd]": 0.0016073330771178007, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[variantbenchmarking.mmd]": 0.0026104587595909834, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[variantbenchmarking_auto.mmd]": 0.0022373332176357508, + "tests/test_layout_invariants.py::test_bundle_terminator_successor_stays_on_trunk[variantprioritization.mmd]": 0.0009978751186281443, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[da_pipeline.mmd]": 0.003919166279956698, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[differentialabundance.mmd]": 0.0019102089572697878, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[differentialabundance_default.mmd]": 0.0018783342093229294, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[guide/05_file_icons.mmd]": 0.001591915963217616, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[guide/05b_multi_icons.mmd]": 0.0006360840052366257, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[guide/05c_files_icon.mmd]": 0.0005672087427228689, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[guide/05d_folder_icon.mmd]": 0.0005837921053171158, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[guide/05f_banner_labels.mmd]": 0.0005788740236312151, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[guide/06a_without_hidden.mmd]": 0.0007331250235438347, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[guide/06b_with_hidden.mmd]": 0.0007170008029788733, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[topologies/bypass_label_rake.mmd]": 0.000738208182156086, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[topologies/bypass_label_rake_left.mmd]": 0.00073441700078547, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[topologies/bypass_label_rake_wide.mmd]": 0.0007274169474840164, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[topologies/bypass_v_tight.mmd]": 0.0006068749353289604, + "tests/test_layout_invariants.py::test_bypass_avoids_off_track_inputs[topologies/inrow_skip_breeze.mmd]": 0.0004369989037513733, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[da_pipeline.mmd]": 0.003016500035300851, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[differentialabundance.mmd]": 0.001889748964458704, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[differentialabundance_default.mmd]": 0.0018400000408291817, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[guide/05_file_icons.mmd]": 0.0005259988829493523, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[guide/05b_multi_icons.mmd]": 0.0005632499232888222, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[guide/05c_files_icon.mmd]": 0.0005269169341772795, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[guide/05d_folder_icon.mmd]": 0.0005262501072138548, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[guide/05f_banner_labels.mmd]": 0.0005677922163158655, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[guide/06a_without_hidden.mmd]": 0.000705790938809514, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[guide/06b_with_hidden.mmd]": 0.0006950001697987318, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[topologies/bypass_label_rake.mmd]": 0.0007316248957067728, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[topologies/bypass_label_rake_left.mmd]": 0.0007152911275625229, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[topologies/bypass_label_rake_wide.mmd]": 0.0007082512602210045, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[topologies/bypass_v_tight.mmd]": 0.0005766672547906637, + "tests/test_layout_invariants.py::test_bypass_clearance_from_lower_section[topologies/inrow_skip_breeze.mmd]": 0.0003780829720199108, + "tests/test_layout_invariants.py::test_bypass_fan_in_outer_slot[topologies/bypass_fan_in_outer_slot.mmd]": 0.005291707115247846, + "tests/test_layout_invariants.py::test_bypass_v_clears_wide_bypassed_label[guide/06a_without_hidden.mmd]": 0.002479333896189928, + "tests/test_layout_invariants.py::test_bypass_v_clears_wide_bypassed_label[guide/06b_with_hidden.mmd]": 0.001997583080083132, + "tests/test_layout_invariants.py::test_bypass_v_clears_wide_bypassed_label[topologies/bypass_label_rake.mmd]": 0.0026522919069975615, + "tests/test_layout_invariants.py::test_bypass_v_clears_wide_bypassed_label[topologies/bypass_label_rake_left.mmd]": 0.002009958028793335, + "tests/test_layout_invariants.py::test_bypass_v_clears_wide_bypassed_label[topologies/bypass_label_rake_wide.mmd]": 0.016905042342841625, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[bubble_forced_label_clears_diagonal.mmd]": 0.00599074992351234, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[bubble_label_clears_diagonal.mmd]": 0.002126833889633417, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[bubble_output_above.mmd]": 0.000838833162561059, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[captioned_sibling_outputs.mmd]": 0.0007244166918098927, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[centered_tracks.mmd]": 0.0010575831402093172, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[cross_track_interchange.mmd]": 0.001717875013127923, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[da_pipeline.mmd]": 0.010153833776712418, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[diagonal_labels.mmd]": 0.002523540984839201, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[diagonal_single_trunk_off_track.mmd]": 0.0024983345065265894, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[differentialabundance.mmd]": 0.00880112498998642, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[differentialabundance_default.mmd]": 0.008541374932974577, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[directional_flow.mmd]": 0.0010262501891702414, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[disconnected_components.mmd]": 0.0015432501677423716, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[epitopeprediction.mmd]": 0.0034791261423379183, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[file_icon_fanin.mmd]": 0.0020204170141369104, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[file_icons.mmd]": 0.0009024988394230604, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[font_scale.mmd]": 0.0006503339391201735, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[genomeassembly.mmd]": 0.004089499823749065, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[genomeassembly_organellar.mmd]": 0.004755833884701133, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[genomeassembly_staggered.mmd]": 0.00585400010459125, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[genomic_pipeline.mmd]": 0.028717166977003217, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[group_labels.mmd]": 0.003912042127922177, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/01_minimal.mmd]": 0.0007419991306960583, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/02_sections.mmd]": 0.0014064160641282797, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/03_fan_out.mmd]": 0.005614458117634058, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/03b_fan_in_merge.mmd]": 0.002309165894985199, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/04_directions.mmd]": 0.0035553749185055494, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/05_file_icons.mmd]": 0.001216790871694684, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/05b_multi_icons.mmd]": 0.0011805410031229258, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/05c_files_icon.mmd]": 0.0010240830015391111, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/05d_folder_icon.mmd]": 0.0010317086707800627, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/05f_banner_labels.mmd]": 0.0011755411978811026, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/06a_without_hidden.mmd]": 0.001756165875121951, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[guide/06b_with_hidden.mmd]": 0.0023501671385020018, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[hlatyping.mmd]": 0.0030765009578317404, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[icon_caption_wrap.mmd]": 0.0038412907160818577, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[leaf_file_icon_on_trunk.mmd]": 0.0022842499893158674, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[legend_combo.mmd]": 0.00955641595646739, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[legend_logo_placement.mmd]": 0.002978875068947673, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[longread_variant_calling.mmd]": 0.008834250271320343, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[marker_styles.mmd]": 0.0013971258886158466, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[multiline_labels.mmd]": 0.01116329082287848, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[off_track_output_branched.mmd]": 0.0010319170542061329, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[off_track_outputs.mmd]": 0.000978916883468628, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[off_track_outputs_along_trunk.mmd]": 0.0008626661729067564, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[rnaseq_auto.mmd]": 0.009277666918933392, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[rnaseq_sections.mmd]": 0.019187709083780646, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[rnaseq_sections_manual.mmd]": 0.018061457900330424, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[rnaseq_simple.mmd]": 0.0007083751261234283, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[simple_pipeline.mmd]": 0.0009277921635657549, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[tb_file_termini.mmd]": 0.0024188749957829714, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[tb_right_exit_feeder_slots.mmd]": 0.006274084094911814, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/aligner_row_pinned_continuation.mmd]": 0.005335667170584202, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/around_below_ep_col_gt0.mmd]": 0.0016634990461170673, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/around_section_below.mmd]": 0.0015458341222256422, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/asymmetric_tree.mmd]": 0.002828374970704317, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0017339158803224564, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/branch_fold_forward.mmd]": 0.0022873752750456333, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/branch_fold_stability.mmd]": 0.0019741246942430735, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bt_chain.mmd]": 0.0005874999333173037, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bt_exit_top_above.mmd]": 0.0008300433401018381, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bt_exit_top_above_2line.mmd]": 0.0009277909994125366, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bt_fork.mmd]": 0.0005879171658307314, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bt_perp_entry_below.mmd]": 0.0008197079878300428, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bt_to_lr.mmd]": 0.000946166692301631, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bt_to_tb.mmd]": 0.0022792909294366837, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bundle_terminator_continuation.mmd]": 0.0009457080159336329, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_fan_in_outer_slot.mmd]": 0.010209833038970828, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002832084195688367, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_label_rake.mmd]": 0.0017761250492185354, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_label_rake_left.mmd]": 0.0017313738353550434, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_label_rake_wide.mmd]": 0.0017475837375968695, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_leftward_far_side_entry.mmd]": 0.0022075423039495945, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_leftward_overflow.mmd]": 0.004098541801795363, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/bypass_v_tight.mmd]": 0.00813774997368455, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/clear_channel_target_aware_push.mmd]": 0.00271425093524158, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/compact_gap_peer_conflict.mmd]": 0.0018398752436041832, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/compact_hidden_passthrough.mmd]": 0.0014607927296310663, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/complex_multipath.mmd]": 0.0038076681084930897, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/convergence_stacked_sink.mmd]": 0.002897332888096571, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/convergent_offrow_exit_climb.mmd]": 0.026181749999523163, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/corridor_narrow_gap_fallback.mmd]": 0.0016987090930342674, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/cross_col_top_entry.mmd]": 0.0008717079181224108, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/cross_column_perp_drop.mmd]": 0.0014805838000029325, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/cross_column_perp_drop_far_exit.mmd]": 0.001034290762618184, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/cross_row_gap_wrap.mmd]": 0.007234581978991628, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/deep_linear.mmd]": 0.0071130001451820135, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/disjoint_sameline_trunks.mmd]": 0.0026919590309262276, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/divergent_fanout_split.mmd]": 0.002117415890097618, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/dogleg_exempt_distinct.mmd]": 0.0022654987405985594, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/dogleg_exempt_sameline.mmd]": 0.0014044172130525112, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/dogleg_twoline_fanout.mmd]": 0.0014260828029364347, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/exit_corner_offset_dogleg.mmd]": 0.008279125904664397, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/fan_bypass_nesting.mmd]": 0.005694292020052671, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/fan_in_merge.mmd]": 0.005641166353598237, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/fold_double.mmd]": 0.02150470856577158, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/fold_fan_across.mmd]": 0.008982292143628001, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/fold_stacked_branch.mmd]": 0.015196458203718066, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/funcprofiler_upstream.mmd]": 0.007238791091367602, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/header_nudge.mmd]": 0.000964165898039937, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/header_side_rotated.mmd]": 0.0008778332266956568, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/inrow_skip_breeze.mmd]": 0.0009945000056177378, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/inter_row_wrap_clearance.mmd]": 0.005750918062403798, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/interchange_lane_reorder.mmd]": 0.0009174591396003962, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/junction_entry_align.mmd]": 0.006366625893861055, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/junction_entry_collision.mmd]": 0.0026895010378211737, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/junction_entry_reversed_fold.mmd]": 0.0019088750705122948, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/junction_fanout_convergence.mmd]": 0.0014817912597209215, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/left_entry_up_wrap.mmd]": 0.001050707884132862, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/left_exit_sink_below.mmd]": 0.0016206249129027128, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0058441259898245335, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.002430540043860674, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0014202932361513376, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0015073760878294706, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_perp_top_exit_side_entry.mmd]": 0.001254458911716938, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_to_tb_top_cross_col.mmd]": 0.0011559170670807362, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_to_tb_top_drop.mmd]": 0.0015603762585669756, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.000995083013549447, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_to_tb_top_near_vertical.mmd]": 0.000851667020469904, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_to_tb_top_two_lines.mmd]": 0.0010770841035991907, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_top_entry_cross_column.mmd]": 0.0009640420321375132, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.006819125264883041, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_around_below_leftmost.mmd]": 0.0022789170034229755, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_bottom_row_bypass.mmd]": 0.0021882911678403616, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_leftmost_sink_branch.mmd]": 0.0019667919259518385, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_offrow_continuation.mmd]": 0.0014455001801252365, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_port_above_approach.mmd]": 0.0014470419846475124, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_pullaway.mmd]": 0.005535458214581013, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_right_entry.mmd]": 0.0075763738714158535, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_trunk_out_of_range_section.mmd]": 0.0021621668711304665, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/merge_trunk_over_low_section.mmd]": 0.004927875939756632, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/mismatched_tracks.mmd]": 0.0031948331743478775, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/mixed_bundle_column.mmd]": 0.004883334040641785, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/mixed_port_sides.mmd]": 0.014875415246933699, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/multi_input_convergence.mmd]": 0.001738833962008357, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/multi_line_bundle.mmd]": 0.01977808284573257, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/multicarrier_offrow_exit_climb.mmd]": 0.02010045782662928, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/near_vertical_junction_hook.mmd]": 0.0016627078875899315, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/off_track_convergence.mmd]": 0.0013090420980006456, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/off_track_convergence_multiline.mmd]": 0.0021069590002298355, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/off_track_input_above_consumer.mmd]": 0.018682124093174934, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/parallel_independent.mmd]": 0.0029960854444652796, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/peeloff_extra_line_consumer.mmd]": 0.002992291934788227, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/peeloff_riser_respace.mmd]": 0.0022999579086899757, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/post_convergence_trunk.mmd]": 0.0007287079934030771, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/reconverge_reversed_fold.mmd]": 0.012683667009696364, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/right_entry_from_above.mmd]": 0.0009090418461710215, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/right_entry_from_above_far.mmd]": 0.0008465831633657217, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/right_entry_gap_above_empty_row.mmd]": 0.0021769169252365828, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/right_entry_wrap_no_fan.mmd]": 0.0012059998698532581, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/rl_entry_runway.mmd]": 0.0015022081788629293, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/rnaseq_lite.mmd]": 0.0055972912814468145, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/route_around_intervening.mmd]": 0.0015195012092590332, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/section_diamond.mmd]": 0.004878749838098884, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/self_crossing_bridge.mmd]": 0.0018939170986413956, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/shared_sink_parallel.mmd]": 0.0034587918780744076, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/single_section.mmd]": 0.0005953330546617508, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/stacked_left_exit_drop.mmd]": 0.0008462928235530853, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/stacked_lr_serpentine.mmd]": 0.001491582952439785, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.002499750116840005, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_bottom_entry_flow_start.mmd]": 0.0048390820156782866, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.007264833897352219, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0027158751618117094, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_column_continuation_two_lines.mmd]": 0.0009183341171592474, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_convergence_straight_drop.mmd]": 0.0005657502915710211, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_internal_diagonal.mmd]": 0.001117542153224349, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_left_exit_step.mmd]": 0.003303081961348653, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_lr_exit_left.mmd]": 0.002521666930988431, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_lr_exit_right.mmd]": 0.0019316659308969975, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_passthrough_continuation.mmd]": 0.0009570419788360596, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_passthrough_trunk.mmd]": 0.0014825831167399883, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0008924170397222042, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_right_entry_stack.mmd]": 0.012589500984176993, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_trunk_through_fan.mmd]": 0.0007348340004682541, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/tb_two_line_vert_seam.mmd]": 0.001093082595616579, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/terminal_symmetric_fan.mmd]": 0.0011482920963317156, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/terminus_join.mmd]": 0.001185583882033825, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/top_entry_header_clash.mmd]": 0.0009332490153610706, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/trunk_through_fan.mmd]": 0.01004737475886941, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/twoline_fanout_up.mmd]": 0.0013074169401079416, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/u_turn_fold.mmd]": 0.007738542044535279, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/uneven_diamond.mmd]": 0.0008572498336434364, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/upward_bypass.mmd]": 0.012949125375598669, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/variant_calling.mmd]": 0.00896149966865778, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/wide_fan_in.mmd]": 0.008430750109255314, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/wide_fan_out.mmd]": 0.0033284989185631275, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/wide_label_fan.mmd]": 0.0010476240422576666, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[topologies/wrapped_label_trunk.mmd]": 0.0011002498213201761, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[trunk_align_matching_bundle.mmd]": 0.0012587499804794788, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[uneven_diamond.mmd]": 0.0007282907608896494, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[variant_calling.mmd]": 0.002146083163097501, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[variant_calling_tuned.mmd]": 0.002670624991878867, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[variantbenchmarking.mmd]": 0.016987165668979287, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[variantbenchmarking_auto.mmd]": 0.020089334109798074, + "tests/test_layout_invariants.py::test_bypass_v_does_not_strike_diverging_station_label[variantprioritization.mmd]": 0.002813375787809491, + "tests/test_layout_invariants.py::test_bypass_v_flat_guard_catches_a_collapse": 0.040968624874949455, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[da_pipeline.mmd]": 0.011511001037433743, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[differentialabundance.mmd]": 0.00583462486974895, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[differentialabundance_default.mmd]": 0.007972707971930504, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[guide/05_file_icons.mmd]": 0.002799457870423794, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[guide/05b_multi_icons.mmd]": 0.0024703750386834145, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[guide/05c_files_icon.mmd]": 0.0009485420305281878, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[guide/05d_folder_icon.mmd]": 0.0008285001385957003, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[guide/05f_banner_labels.mmd]": 0.0032935007475316525, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[guide/06a_without_hidden.mmd]": 0.005118248984217644, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[guide/06b_with_hidden.mmd]": 0.0018021650612354279, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[topologies/bypass_label_rake.mmd]": 0.0015955420676618814, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[topologies/bypass_label_rake_left.mmd]": 0.0017633752431720495, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[topologies/bypass_label_rake_wide.mmd]": 0.001394749851897359, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[topologies/bypass_v_tight.mmd]": 0.0009834577795118093, + "tests/test_layout_invariants.py::test_bypass_v_has_horizontal_segment[topologies/inrow_skip_breeze.mmd]": 0.0009104169439524412, + "tests/test_layout_invariants.py::test_captioned_sibling_outputs_clear_caption_band": 0.0008117908146232367, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[da_pipeline.mmd]": 0.018234875053167343, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[differentialabundance.mmd]": 0.004540084162726998, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[differentialabundance_default.mmd]": 0.0041345832869410515, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[genomeassembly.mmd]": 0.0015302500687539577, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[genomeassembly_organellar.mmd]": 0.005185042042285204, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[genomeassembly_staggered.mmd]": 0.001568000065162778, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[genomic_pipeline.mmd]": 0.0030905830208212137, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[topologies/compact_hidden_passthrough.mmd]": 0.0007580011151731014, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[topologies/funcprofiler_upstream.mmd]": 0.0015247897244989872, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[variantbenchmarking.mmd]": 0.0025229172315448523, + "tests/test_layout_invariants.py::test_compact_multiline_entry_ports_pre_separated[variantbenchmarking_auto.mmd]": 0.00455308286473155, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[cross_track_interchange.mmd]": 0.05150808277539909, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[da_pipeline.mmd]": 0.18259408278390765, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[diagonal_labels.mmd]": 0.07171549997292459, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[diagonal_single_trunk_off_track.mmd]": 0.13936870824545622, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[differentialabundance.mmd]": 0.19520483305677772, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[differentialabundance_default.mmd]": 0.17684129206463695, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[disconnected_components.mmd]": 0.04615266527980566, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[epitopeprediction.mmd]": 0.07099291612394154, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[file_icon_fanin.mmd]": 0.08957875077612698, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[file_icons.mmd]": 0.029978083912283182, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[genomeassembly.mmd]": 0.07574054202996194, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[genomeassembly_organellar.mmd]": 0.3851009588688612, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[genomeassembly_staggered.mmd]": 0.09063145774416625, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[genomic_pipeline.mmd]": 0.582328331656754, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[group_labels.mmd]": 0.019512749975547194, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/02_sections.mmd]": 0.019167958293110132, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/03_fan_out.mmd]": 0.04475116729736328, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/03b_fan_in_merge.mmd]": 0.030917458003386855, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/04_directions.mmd]": 0.04117499920539558, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/05_file_icons.mmd]": 0.0220512505620718, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/05b_multi_icons.mmd]": 0.022949291858822107, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/05c_files_icon.mmd]": 0.014998417347669601, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/05d_folder_icon.mmd]": 0.013066999148577452, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/05f_banner_labels.mmd]": 0.02189270919188857, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/06a_without_hidden.mmd]": 0.03656883421353996, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[guide/06b_with_hidden.mmd]": 0.040556708350777626, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[hlatyping.mmd]": 0.05708079179748893, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[legend_logo_placement.mmd]": 0.0616476247087121, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[longread_variant_calling.mmd]": 0.10152562474831939, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[marker_styles.mmd]": 0.02770987502299249, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[multiline_labels.mmd]": 0.023428416810929775, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[rnaseq_auto.mmd]": 0.10371308284811676, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[rnaseq_sections.mmd]": 0.46594395814463496, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[rnaseq_sections_manual.mmd]": 0.47633712366223335, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[tb_file_termini.mmd]": 0.028001917293295264, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[tb_right_exit_feeder_slots.mmd]": 0.01843554084189236, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/aligner_row_pinned_continuation.mmd]": 0.04186504101380706, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/around_below_ep_col_gt0.mmd]": 0.028362124925479293, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/around_section_below.mmd]": 0.014651917153969407, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/asymmetric_tree.mmd]": 0.06295254174619913, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bottom_row_climb_clear_corridor.mmd]": 0.028491624863818288, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/branch_fold_forward.mmd]": 0.031119748950004578, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/branch_fold_stability.mmd]": 0.02245279191993177, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bt_exit_top_above.mmd]": 0.022980874869972467, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bt_exit_top_above_2line.mmd]": 0.03294899873435497, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bt_perp_entry_below.mmd]": 0.010210625128820539, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bt_to_lr.mmd]": 0.018311250023543835, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bt_to_tb.mmd]": 0.018448083195835352, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_fan_in_outer_slot.mmd]": 0.06492825108580291, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_gap2_rightward_overflow.mmd]": 0.039561958983540535, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_label_rake.mmd]": 0.035445540910586715, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_label_rake_left.mmd]": 0.027401207014918327, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_label_rake_wide.mmd]": 0.08053779299370944, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_leftward_far_side_entry.mmd]": 0.03459758311510086, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_leftward_overflow.mmd]": 0.041173917008563876, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/bypass_v_tight.mmd]": 0.031959249870851636, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/clear_channel_target_aware_push.mmd]": 0.025840706890448928, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/compact_gap_peer_conflict.mmd]": 0.04762395890429616, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/compact_hidden_passthrough.mmd]": 0.015508543001487851, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/complex_multipath.mmd]": 0.10401787399314344, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/convergence_stacked_sink.mmd]": 0.02666829200461507, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/convergent_offrow_exit_climb.mmd]": 0.14113470911979675, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/corridor_narrow_gap_fallback.mmd]": 0.029036459047347307, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/cross_col_top_entry.mmd]": 0.01185458293184638, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/cross_column_perp_drop.mmd]": 0.011721123941242695, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/cross_column_perp_drop_far_exit.mmd]": 0.013261957792565227, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/cross_row_gap_wrap.mmd]": 0.028056207578629255, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/deep_linear.mmd]": 0.05296895792707801, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/disjoint_sameline_trunks.mmd]": 0.0338104588445276, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/divergent_fanout_split.mmd]": 0.0183897502720356, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/dogleg_exempt_distinct.mmd]": 0.033757082652300596, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/dogleg_exempt_sameline.mmd]": 0.022333623841404915, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/dogleg_twoline_fanout.mmd]": 0.018006332917138934, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/exit_corner_offset_dogleg.mmd]": 0.03519012499600649, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/fan_bypass_nesting.mmd]": 0.04383587487973273, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/fan_in_merge.mmd]": 0.025480916956439614, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/fold_double.mmd]": 0.32760595832951367, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/fold_fan_across.mmd]": 0.1113568739965558, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/fold_stacked_branch.mmd]": 0.10865220800042152, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/funcprofiler_upstream.mmd]": 0.19900654209777713, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/header_nudge.mmd]": 0.01596504310145974, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/header_side_rotated.mmd]": 0.012679248582571745, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/inter_row_wrap_clearance.mmd]": 0.03825204190798104, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/junction_entry_align.mmd]": 0.032896208111196756, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/junction_entry_collision.mmd]": 0.037308209110051394, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/junction_entry_reversed_fold.mmd]": 0.05951591581106186, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/junction_fanout_convergence.mmd]": 0.025564667070284486, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/left_entry_up_wrap.mmd]": 0.013087500119581819, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/left_exit_sink_below.mmd]": 0.035411540884524584, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.01760645885951817, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.015561708016321063, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.01964554307051003, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.028996125096455216, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_perp_top_exit_side_entry.mmd]": 0.01851449883542955, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_to_tb_top_cross_col.mmd]": 0.028336583636701107, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_to_tb_top_drop.mmd]": 0.011396917048841715, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0165757080540061, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_to_tb_top_near_vertical.mmd]": 0.017475956585258245, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_to_tb_top_two_lines.mmd]": 0.027176249772310257, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_top_entry_cross_column.mmd]": 0.012211999855935574, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.013888541841879487, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_around_below_leftmost.mmd]": 0.03126854193396866, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_bottom_row_bypass.mmd]": 0.044323583133518696, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_leftmost_sink_branch.mmd]": 0.03760066791437566, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_offrow_continuation.mmd]": 0.02885683299973607, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_port_above_approach.mmd]": 0.017474499763920903, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_pullaway.mmd]": 0.02475729095749557, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_right_entry.mmd]": 0.018366916105151176, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_trunk_out_of_range_section.mmd]": 0.040934790624305606, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/merge_trunk_over_low_section.mmd]": 0.04114279174245894, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/mismatched_tracks.mmd]": 0.03438637615181506, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/mixed_bundle_column.mmd]": 0.028966124169528484, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/mixed_port_sides.mmd]": 0.012444958090782166, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/multi_input_convergence.mmd]": 0.03204816789366305, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/multi_line_bundle.mmd]": 0.017260499764233828, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/multicarrier_offrow_exit_climb.mmd]": 0.023641665000468493, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/near_vertical_junction_hook.mmd]": 0.028031000867486, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/off_track_convergence.mmd]": 0.022394458996132016, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/off_track_convergence_multiline.mmd]": 0.29380737501196563, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/off_track_input_above_consumer.mmd]": 0.1047744587995112, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/parallel_independent.mmd]": 0.017248874064534903, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/peeloff_extra_line_consumer.mmd]": 0.03212783299386501, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/peeloff_riser_respace.mmd]": 0.039859959157183766, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/reconverge_reversed_fold.mmd]": 0.10074237501248717, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/right_entry_from_above.mmd]": 0.01651996048167348, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/right_entry_from_above_far.mmd]": 0.013652291847392917, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/right_entry_gap_above_empty_row.mmd]": 0.024747459217905998, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/right_entry_wrap_no_fan.mmd]": 0.024649000028148293, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/rl_entry_runway.mmd]": 0.01382783381268382, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/rnaseq_lite.mmd]": 0.05849287495948374, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/route_around_intervening.mmd]": 0.031679625855758786, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/section_diamond.mmd]": 0.029031164944171906, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/self_crossing_bridge.mmd]": 0.027676583034917712, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/shared_sink_parallel.mmd]": 0.03133066580630839, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/stacked_left_exit_drop.mmd]": 0.009451791178435087, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/stacked_lr_serpentine.mmd]": 0.03137524798512459, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_bottom_entry_flow_start.mmd]": 0.014876164961606264, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.014202208025380969, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.04418783378787339, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_column_continuation_two_lines.mmd]": 0.011419751215726137, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_internal_diagonal.mmd]": 0.010975291952490807, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_left_exit_step.mmd]": 0.03869933309033513, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_lr_exit_left.mmd]": 0.013995124725624919, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_lr_exit_right.mmd]": 0.016215750714764, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_passthrough_trunk.mmd]": 0.025233207968994975, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_perp_exit_side_neighbour.mmd]": 0.007925416808575392, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_right_entry_stack.mmd]": 0.023619833169505, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/tb_two_line_vert_seam.mmd]": 0.014621208887547255, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/terminal_symmetric_fan.mmd]": 0.013378416886553168, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/top_entry_header_clash.mmd]": 0.01188566698692739, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/trunk_through_fan.mmd]": 0.015909709967672825, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/twoline_fanout_up.mmd]": 0.012664166744798422, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/u_turn_fold.mmd]": 0.07215925003401935, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/upward_bypass.mmd]": 0.39456995809450746, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/variant_calling.mmd]": 0.1943799580913037, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/wide_fan_in.mmd]": 0.03375220904126763, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[topologies/wide_fan_out.mmd]": 0.029148041969165206, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[trunk_align_matching_bundle.mmd]": 0.01915800105780363, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[variant_calling.mmd]": 0.029647083953022957, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[variant_calling_tuned.mmd]": 0.03685199888423085, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[variantbenchmarking.mmd]": 0.19459575111977756, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[variantbenchmarking_auto.mmd]": 0.3676694571040571, + "tests/test_layout_invariants.py::test_content_placement_leaves_port_anchors_frozen[variantprioritization.mmd]": 0.03366570803336799, + "tests/test_layout_invariants.py::test_corridor_viability_requires_full_clearance_band": 0.012408124981448054, + "tests/test_layout_invariants.py::test_cross_column_perp_drop_leadin_clears_trunk": 0.000706082908436656, + "tests/test_layout_invariants.py::test_cross_column_perp_drop_renders_cleanly": 0.0009600420016795397, + "tests/test_layout_invariants.py::test_cross_column_perp_entry_stays_in_bbox": 0.44992258376441896, + "tests/test_layout_invariants.py::test_cross_row_top_entry_bundle_corners_are_concentric": 0.001983876107260585, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[bubble_forced_label_clears_diagonal.mmd]": 0.0004938328638672829, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[bubble_label_clears_diagonal.mmd]": 0.0012940000742673874, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[bubble_output_above.mmd]": 0.0012966657523065805, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[captioned_sibling_outputs.mmd]": 0.0004496658220887184, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[centered_tracks.mmd]": 0.000489081721752882, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[cross_track_interchange.mmd]": 0.0008632091339677572, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[da_pipeline.mmd]": 0.0018954582046717405, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[diagonal_labels.mmd]": 0.0008625839836895466, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[diagonal_single_trunk_off_track.mmd]": 0.0009880829602479935, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[differentialabundance.mmd]": 0.001814250135794282, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[differentialabundance_default.mmd]": 0.0018352088518440723, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[directional_flow.mmd]": 0.0004327921196818352, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[disconnected_components.mmd]": 0.0007138329092413187, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[epitopeprediction.mmd]": 0.0034234989434480667, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[file_icon_fanin.mmd]": 0.0007800406310707331, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[file_icons.mmd]": 0.0007233759388327599, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[font_scale.mmd]": 0.00038858200423419476, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[genomeassembly.mmd]": 0.003859500167891383, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[genomeassembly_organellar.mmd]": 0.0014897501096129417, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[genomeassembly_staggered.mmd]": 0.006105792010203004, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[genomic_pipeline.mmd]": 0.0031849166844040155, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[group_labels.mmd]": 0.0006174989975988865, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/01_minimal.mmd]": 0.002402501180768013, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/02_sections.mmd]": 0.0008438329678028822, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/03_fan_out.mmd]": 0.001372041879221797, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/03b_fan_in_merge.mmd]": 0.0009107498917728662, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/04_directions.mmd]": 0.0009672089945524931, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/05_file_icons.mmd]": 0.000567668117582798, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/05b_multi_icons.mmd]": 0.0005933737847954035, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/05c_files_icon.mmd]": 0.0015157503075897694, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/05d_folder_icon.mmd]": 0.0007921669166535139, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/05f_banner_labels.mmd]": 0.0016287490725517273, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/06a_without_hidden.mmd]": 0.001313958317041397, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[guide/06b_with_hidden.mmd]": 0.0013239583931863308, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[hlatyping.mmd]": 0.0008903758134692907, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[icon_caption_wrap.mmd]": 0.00038366601802408695, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[leaf_file_icon_on_trunk.mmd]": 0.0004207910969853401, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[legend_combo.mmd]": 0.0004566668067127466, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[legend_logo_placement.mmd]": 0.001104998867958784, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[longread_variant_calling.mmd]": 0.004119498888030648, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[marker_styles.mmd]": 0.000908541027456522, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[multiline_labels.mmd]": 0.0005479161627590656, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[off_track_output_branched.mmd]": 0.00043591693975031376, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[off_track_outputs.mmd]": 0.0005416250787675381, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[off_track_outputs_along_trunk.mmd]": 0.0004485419485718012, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[rnaseq_auto.mmd]": 0.0017458752263337374, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[rnaseq_sections.mmd]": 0.0028319580014795065, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[rnaseq_sections_manual.mmd]": 0.0022195838391780853, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[rnaseq_simple.mmd]": 0.00039008306339383125, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[simple_pipeline.mmd]": 0.0004057101905345917, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[tb_file_termini.mmd]": 0.0006047922652214766, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[tb_right_exit_feeder_slots.mmd]": 0.0007442091591656208, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/aligner_row_pinned_continuation.mmd]": 0.001021415926516056, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/around_below_ep_col_gt0.mmd]": 0.0006236250046640635, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/around_section_below.mmd]": 0.0006392921786755323, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/asymmetric_tree.mmd]": 0.0010640420950949192, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0009284587576985359, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/branch_fold_forward.mmd]": 0.0033203749917447567, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/branch_fold_stability.mmd]": 0.0008234991692006588, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bt_chain.mmd]": 0.00036295782774686813, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bt_exit_top_above.mmd]": 0.0004597089719027281, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bt_exit_top_above_2line.mmd]": 0.0006105839274823666, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bt_fork.mmd]": 0.0011925837025046349, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bt_perp_entry_below.mmd]": 0.0037368752527981997, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bt_to_lr.mmd]": 0.002801416674628854, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bt_to_tb.mmd]": 0.0005575830582529306, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bundle_terminator_continuation.mmd]": 0.00037179095670580864, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_fan_in_outer_slot.mmd]": 0.001483290921896696, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_gap2_rightward_overflow.mmd]": 0.000790292164310813, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_label_rake.mmd]": 0.0007364167831838131, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_label_rake_left.mmd]": 0.0007494168821722269, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_label_rake_wide.mmd]": 0.0008450828026980162, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_leftward_far_side_entry.mmd]": 0.0007140839006751776, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_leftward_overflow.mmd]": 0.0007012088317424059, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/bypass_v_tight.mmd]": 0.0006104568019509315, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/clear_channel_target_aware_push.mmd]": 0.0006782922428101301, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/compact_gap_peer_conflict.mmd]": 0.0006928329821676016, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/compact_hidden_passthrough.mmd]": 0.0006290427409112453, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/complex_multipath.mmd]": 0.004195791902020574, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/convergence_stacked_sink.mmd]": 0.0015235829632729292, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/convergent_offrow_exit_climb.mmd]": 0.002270708093419671, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/corridor_narrow_gap_fallback.mmd]": 0.0007405830547213554, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/cross_col_top_entry.mmd]": 0.0004936668556183577, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/cross_column_perp_drop.mmd]": 0.0004950831644237041, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/cross_column_perp_drop_far_exit.mmd]": 0.000512333819642663, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/cross_row_gap_wrap.mmd]": 0.0009081242606043816, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/deep_linear.mmd]": 0.0013240829575806856, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/disjoint_sameline_trunks.mmd]": 0.0008472511544823647, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/divergent_fanout_split.mmd]": 0.0005497497040778399, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/dogleg_exempt_distinct.mmd]": 0.0010112081654369831, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/dogleg_exempt_sameline.mmd]": 0.0006572920829057693, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/dogleg_twoline_fanout.mmd]": 0.0006192070432007313, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/exit_corner_offset_dogleg.mmd]": 0.0010027491953223944, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/fan_bypass_nesting.mmd]": 0.0013243751600384712, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/fan_in_merge.mmd]": 0.000902791740372777, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/fold_double.mmd]": 0.0023732499685138464, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/fold_fan_across.mmd]": 0.001764083979651332, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/fold_stacked_branch.mmd]": 0.001871249871328473, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/funcprofiler_upstream.mmd]": 0.0012540407478809357, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/header_nudge.mmd]": 0.012064748909324408, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/header_side_rotated.mmd]": 0.003921249881386757, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/inrow_skip_breeze.mmd]": 0.0010117092169821262, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/inter_row_wrap_clearance.mmd]": 0.0006839169654995203, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/interchange_lane_reorder.mmd]": 0.0005642930045723915, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/junction_entry_align.mmd]": 0.0011523331049829721, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/junction_entry_collision.mmd]": 0.0008570849895477295, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/junction_entry_reversed_fold.mmd]": 0.000772582832723856, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/junction_fanout_convergence.mmd]": 0.0006526238285005093, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/left_entry_up_wrap.mmd]": 0.0005053330678492785, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/left_exit_sink_below.mmd]": 0.0007902916986495256, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006195842288434505, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0006254161708056927, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0009475841652601957, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.000660792225971818, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0006179590709507465, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_to_tb_top_cross_col.mmd]": 0.0006032909732311964, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_to_tb_top_drop.mmd]": 0.0004944573156535625, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0005098762921988964, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0005032091867178679, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005339577328413725, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_top_entry_cross_column.mmd]": 0.0004995418712496758, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005669998936355114, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_around_below_leftmost.mmd]": 0.0007584169507026672, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_bottom_row_bypass.mmd]": 0.0008047907613217831, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_leftmost_sink_branch.mmd]": 0.0009651230648159981, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_offrow_continuation.mmd]": 0.0006935831625014544, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_port_above_approach.mmd]": 0.00071320915594697, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_pullaway.mmd]": 0.0008184988982975483, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_right_entry.mmd]": 0.0007875002920627594, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_trunk_out_of_range_section.mmd]": 0.00291583314538002, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/merge_trunk_over_low_section.mmd]": 0.0015928749926388264, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/mismatched_tracks.mmd]": 0.0008106669411063194, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/mixed_bundle_column.mmd]": 0.0010532080195844173, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/mixed_port_sides.mmd]": 0.0006761671975255013, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/multi_input_convergence.mmd]": 0.0007644991856068373, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/multi_line_bundle.mmd]": 0.0008822490926831961, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007652509957551956, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/near_vertical_junction_hook.mmd]": 0.005175792146474123, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/off_track_convergence.mmd]": 0.0018078749999403954, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/off_track_convergence_multiline.mmd]": 0.0043142917566001415, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/off_track_input_above_consumer.mmd]": 0.009732124861329794, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/parallel_independent.mmd]": 0.0021795418579131365, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/peeloff_extra_line_consumer.mmd]": 0.0008626659400761127, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/peeloff_riser_respace.mmd]": 0.0012569588143378496, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/post_convergence_trunk.mmd]": 0.000425875186920166, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/reconverge_reversed_fold.mmd]": 0.001961875008419156, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/right_entry_from_above.mmd]": 0.0004719181451946497, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/right_entry_from_above_far.mmd]": 0.00047141709364950657, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/right_entry_gap_above_empty_row.mmd]": 0.00054154172539711, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/right_entry_wrap_no_fan.mmd]": 0.00045974995009601116, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/rl_entry_runway.mmd]": 0.0005520412232726812, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/rnaseq_lite.mmd]": 0.0019640421960502863, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/route_around_intervening.mmd]": 0.0006712919566780329, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/section_diamond.mmd]": 0.0007948749698698521, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/self_crossing_bridge.mmd]": 0.0006509157828986645, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/shared_sink_parallel.mmd]": 0.0010650840122252703, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/single_section.mmd]": 0.00046875025145709515, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/stacked_left_exit_drop.mmd]": 0.001370459096506238, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/stacked_lr_serpentine.mmd]": 0.0007870420813560486, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007390000391751528, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_bottom_entry_flow_start.mmd]": 0.00046845898032188416, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0006009580101817846, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007257496472448111, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_column_continuation_two_lines.mmd]": 0.0004887089598923922, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_convergence_straight_drop.mmd]": 0.00035070907324552536, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_internal_diagonal.mmd]": 0.006935749901458621, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_left_exit_step.mmd]": 0.004127124324440956, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_lr_exit_left.mmd]": 0.0019104178063571453, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_lr_exit_right.mmd]": 0.0011263338383287191, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_passthrough_continuation.mmd]": 0.0004568749573081732, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_passthrough_trunk.mmd]": 0.0006158740725368261, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0004599587991833687, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_right_entry_stack.mmd]": 0.0006487499922513962, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_trunk_through_fan.mmd]": 0.0003938749432563782, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/tb_two_line_vert_seam.mmd]": 0.0005032091867178679, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/terminal_symmetric_fan.mmd]": 0.0005190842784941196, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/terminus_join.mmd]": 0.00033629080280661583, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/top_entry_header_clash.mmd]": 0.0004894579760730267, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/trunk_through_fan.mmd]": 0.0007663751021027565, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/twoline_fanout_up.mmd]": 0.0006280841771513224, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/u_turn_fold.mmd]": 0.008862417191267014, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/uneven_diamond.mmd]": 0.00045633292756974697, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/upward_bypass.mmd]": 0.0010012909770011902, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/variant_calling.mmd]": 0.0015700417570769787, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/wide_fan_in.mmd]": 0.0007937080226838589, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/wide_fan_out.mmd]": 0.0008154583629220724, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/wide_label_fan.mmd]": 0.0003936667926609516, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[topologies/wrapped_label_trunk.mmd]": 0.012277250178158283, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[trunk_align_matching_bundle.mmd]": 0.0005936671514064074, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[uneven_diamond.mmd]": 0.00038270908407866955, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[variant_calling.mmd]": 0.004733332898467779, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[variant_calling_tuned.mmd]": 0.001860043266788125, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[variantbenchmarking.mmd]": 0.0027550843078643084, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[variantbenchmarking_auto.mmd]": 0.002311999211087823, + "tests/test_layout_invariants.py::test_debug_grid_overlay_boundaries_outside_section_bboxes[variantprioritization.mmd]": 0.0020565828308463097, + "tests/test_layout_invariants.py::test_descent_edge_clearance_distinguishes_descent_from_short_hop[points0-True]": 0.0003773749340325594, + "tests/test_layout_invariants.py::test_descent_edge_clearance_distinguishes_descent_from_short_hop[points1-False]": 0.0002568748313933611, + "tests/test_layout_invariants.py::test_diagonal_overlay_check_detects_collapse": 0.00018104235641658306, + "tests/test_layout_invariants.py::test_diagonal_strike_guard_teeth_and_exemptions": 0.29077595891430974, + "tests/test_layout_invariants.py::test_disjoint_sameline_trunks_bundle_tight": 0.003679251065477729, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[cross_track_interchange.mmd]": 0.0011935001239180565, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[da_pipeline.mmd]": 0.005057750036939979, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[diagonal_labels.mmd]": 0.0016159170772880316, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[diagonal_single_trunk_off_track.mmd]": 0.001688291085883975, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[differentialabundance.mmd]": 0.005152622936293483, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[differentialabundance_default.mmd]": 0.004913001321256161, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[disconnected_components.mmd]": 0.0010413732379674911, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[epitopeprediction.mmd]": 0.0019560419023036957, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[file_icon_fanin.mmd]": 0.001446249894797802, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[file_icons.mmd]": 0.0007423332426697016, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[genomeassembly.mmd]": 0.0028205830603837967, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[genomeassembly_organellar.mmd]": 0.0032399159390479326, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[genomeassembly_staggered.mmd]": 0.005271915812045336, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[genomic_pipeline.mmd]": 0.02105458313599229, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[group_labels.mmd]": 0.0009027498308569193, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/02_sections.mmd]": 0.001148583134636283, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/03_fan_out.mmd]": 0.0018982498440891504, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/03b_fan_in_merge.mmd]": 0.0018252087756991386, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/04_directions.mmd]": 0.00432800012640655, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/05_file_icons.mmd]": 0.002235749736428261, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/05b_multi_icons.mmd]": 0.0014290420804172754, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/05c_files_icon.mmd]": 0.0008305422961711884, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/05d_folder_icon.mmd]": 0.0007856250740587711, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/05f_banner_labels.mmd]": 0.000894750002771616, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/06a_without_hidden.mmd]": 0.0017405850812792778, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[guide/06b_with_hidden.mmd]": 0.001277916133403778, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[hlatyping.mmd]": 0.0015144578646868467, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[legend_logo_placement.mmd]": 0.002741376170888543, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[longread_variant_calling.mmd]": 0.005229123868048191, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[marker_styles.mmd]": 0.0009537918958812952, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[multiline_labels.mmd]": 0.0008188332431018353, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[rnaseq_auto.mmd]": 0.003573749912902713, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[rnaseq_sections.mmd]": 0.012136750156059861, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[rnaseq_sections_manual.mmd]": 0.02144483313895762, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[tb_file_termini.mmd]": 0.005265456857159734, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[tb_right_exit_feeder_slots.mmd]": 0.001841292018070817, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/aligner_row_pinned_continuation.mmd]": 0.006190749816596508, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/around_below_ep_col_gt0.mmd]": 0.004016791004687548, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/around_section_below.mmd]": 0.002191083272919059, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/asymmetric_tree.mmd]": 0.00311599881388247, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0038847068790346384, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/branch_fold_forward.mmd]": 0.0020464169792830944, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/branch_fold_stability.mmd]": 0.0014943329151719809, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bt_exit_top_above.mmd]": 0.0008047933224588633, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bt_exit_top_above_2line.mmd]": 0.0008312910795211792, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bt_perp_entry_below.mmd]": 0.000722791999578476, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bt_to_lr.mmd]": 0.0031574999447911978, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bt_to_tb.mmd]": 0.0020627917256206274, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_fan_in_outer_slot.mmd]": 0.00425583403557539, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0021965010091662407, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_label_rake.mmd]": 0.0012257490307092667, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_label_rake_left.mmd]": 0.0012087919749319553, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_label_rake_wide.mmd]": 0.0012052091769874096, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017036264762282372, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_leftward_overflow.mmd]": 0.0029370421543717384, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/bypass_v_tight.mmd]": 0.002966625150293112, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/clear_channel_target_aware_push.mmd]": 0.003247709246352315, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/compact_gap_peer_conflict.mmd]": 0.0013240419793874025, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/compact_hidden_passthrough.mmd]": 0.001139206811785698, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/complex_multipath.mmd]": 0.002683293307200074, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/convergence_stacked_sink.mmd]": 0.004639333114027977, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/convergent_offrow_exit_climb.mmd]": 0.0061517502181231976, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/corridor_narrow_gap_fallback.mmd]": 0.0017793329898267984, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/cross_col_top_entry.mmd]": 0.0007061662618070841, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/cross_column_perp_drop.mmd]": 0.0006989166140556335, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/cross_column_perp_drop_far_exit.mmd]": 0.002165209036320448, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/cross_row_gap_wrap.mmd]": 0.0032080819364637136, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/deep_linear.mmd]": 0.005327416816726327, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/disjoint_sameline_trunks.mmd]": 0.002339832717552781, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/divergent_fanout_split.mmd]": 0.002235792111605406, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/dogleg_exempt_distinct.mmd]": 0.008705584099516273, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/dogleg_exempt_sameline.mmd]": 0.0032551658805459738, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/dogleg_twoline_fanout.mmd]": 0.0019202912226319313, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/exit_corner_offset_dogleg.mmd]": 0.003697667270898819, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/fan_bypass_nesting.mmd]": 0.002564498921856284, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/fan_in_merge.mmd]": 0.001860584132373333, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/fold_double.mmd]": 0.008591415826231241, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/fold_fan_across.mmd]": 0.003505708184093237, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/fold_stacked_branch.mmd]": 0.009274584241211414, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/funcprofiler_upstream.mmd]": 0.0047392921987921, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/header_nudge.mmd]": 0.0008973747026175261, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/header_side_rotated.mmd]": 0.0009253339376300573, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/inter_row_wrap_clearance.mmd]": 0.006716292118653655, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/junction_entry_align.mmd]": 0.004449124913662672, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/junction_entry_collision.mmd]": 0.0016505829989910126, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/junction_entry_reversed_fold.mmd]": 0.0013872489798814058, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/junction_fanout_convergence.mmd]": 0.0011370412539690733, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/left_entry_up_wrap.mmd]": 0.0008045420981943607, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/left_exit_sink_below.mmd]": 0.005753375357016921, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011095828376710415, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0009912510868161917, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010008332319557667, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0010055419988930225, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0009382923599332571, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_to_tb_top_cross_col.mmd]": 0.005417792126536369, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_to_tb_top_drop.mmd]": 0.0007211659103631973, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007890418637543917, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006711240857839584, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_to_tb_top_two_lines.mmd]": 0.000803791917860508, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_top_entry_cross_column.mmd]": 0.0007733749225735664, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007964170072227716, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_around_below_leftmost.mmd]": 0.011234416393563151, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_bottom_row_bypass.mmd]": 0.0016781250014901161, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_leftmost_sink_branch.mmd]": 0.0037168751005083323, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_offrow_continuation.mmd]": 0.0012542500626295805, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_port_above_approach.mmd]": 0.0011414159089326859, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_pullaway.mmd]": 0.0014217076823115349, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_right_entry.mmd]": 0.02247470780275762, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_trunk_out_of_range_section.mmd]": 0.0022192092146724463, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/merge_trunk_over_low_section.mmd]": 0.0021569158416241407, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/mismatched_tracks.mmd]": 0.0016773759853094816, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/mixed_bundle_column.mmd]": 0.006657959194853902, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/mixed_port_sides.mmd]": 0.001083374721929431, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/multi_input_convergence.mmd]": 0.0013004171196371317, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/multi_line_bundle.mmd]": 0.0017555831000208855, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/multicarrier_offrow_exit_climb.mmd]": 0.004972875118255615, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/near_vertical_junction_hook.mmd]": 0.0053565409034490585, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/off_track_convergence.mmd]": 0.002614458091557026, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/off_track_convergence_multiline.mmd]": 0.0017378341872245073, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/off_track_input_above_consumer.mmd]": 0.0035553339403122663, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/parallel_independent.mmd]": 0.00092262402176857, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/peeloff_extra_line_consumer.mmd]": 0.0018325841519981623, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/peeloff_riser_respace.mmd]": 0.002874665893614292, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/reconverge_reversed_fold.mmd]": 0.003750417148694396, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/right_entry_from_above.mmd]": 0.0007070419378578663, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/right_entry_from_above_far.mmd]": 0.002569834003224969, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/right_entry_gap_above_empty_row.mmd]": 0.0008572088554501534, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/right_entry_wrap_no_fan.mmd]": 0.0023867080453783274, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/rl_entry_runway.mmd]": 0.0019193748012185097, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/rnaseq_lite.mmd]": 0.0028128759004175663, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/route_around_intervening.mmd]": 0.0031312499195337296, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/section_diamond.mmd]": 0.0014700409956276417, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/self_crossing_bridge.mmd]": 0.0009875418618321419, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/shared_sink_parallel.mmd]": 0.0026087919250130653, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/stacked_left_exit_drop.mmd]": 0.0006529989186674356, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/stacked_lr_serpentine.mmd]": 0.0011129158083349466, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_bottom_entry_flow_start.mmd]": 0.0007397078443318605, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0011717088054865599, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.001175625016912818, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_column_continuation_two_lines.mmd]": 0.0007286248728632927, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_internal_diagonal.mmd]": 0.0008708320092409849, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_left_exit_step.mmd]": 0.0016047079116106033, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_lr_exit_left.mmd]": 0.0010298327542841434, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_lr_exit_right.mmd]": 0.0011230839882045984, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_passthrough_trunk.mmd]": 0.0015332081820815802, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0007092088926583529, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_right_entry_stack.mmd]": 0.0012478739954531193, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/tb_two_line_vert_seam.mmd]": 0.000900292070582509, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/terminal_symmetric_fan.mmd]": 0.0008157079573720694, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/top_entry_header_clash.mmd]": 0.0018332081381231546, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/trunk_through_fan.mmd]": 0.0025750838685780764, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/twoline_fanout_up.mmd]": 0.0014991669449955225, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/u_turn_fold.mmd]": 0.01110999914817512, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/upward_bypass.mmd]": 0.003044959157705307, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/variant_calling.mmd]": 0.0031469170935451984, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/wide_fan_in.mmd]": 0.004832749022170901, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[topologies/wide_fan_out.mmd]": 0.003251084126532078, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[trunk_align_matching_bundle.mmd]": 0.0009708728175610304, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[variant_calling.mmd]": 0.0017450398299843073, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[variant_calling_tuned.mmd]": 0.005050834268331528, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[variantbenchmarking.mmd]": 0.007428166456520557, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[variantbenchmarking_auto.mmd]": 0.0055558751337230206, + "tests/test_layout_invariants.py::test_distinct_trunk_not_hidden_behind_exempt[variantprioritization.mmd]": 0.005567082902416587, + "tests/test_layout_invariants.py::test_downward_off_track_output_route_clears_producer_label[off_track_output_branched.mmd]": 0.0012215422466397285, + "tests/test_layout_invariants.py::test_downward_off_track_output_route_clears_producer_label[off_track_outputs.mmd]": 0.00120066711679101, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[cross_track_interchange.mmd]": 0.0011557091493159533, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[da_pipeline.mmd]": 0.006297332933172584, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[diagonal_labels.mmd]": 0.0014076682273298502, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[diagonal_single_trunk_off_track.mmd]": 0.0014005417469888926, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[differentialabundance.mmd]": 0.01300525083206594, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[differentialabundance_default.mmd]": 0.004997333977371454, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[disconnected_components.mmd]": 0.0010792932007461786, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[epitopeprediction.mmd]": 0.0018109176307916641, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[file_icon_fanin.mmd]": 0.0012841678690165281, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[file_icons.mmd]": 0.005782999796792865, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[genomeassembly.mmd]": 0.00793366739526391, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[genomeassembly_organellar.mmd]": 0.007462750189006329, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[genomeassembly_staggered.mmd]": 0.005060999887064099, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[genomic_pipeline.mmd]": 0.007771248929202557, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[group_labels.mmd]": 0.0007852090056985617, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/02_sections.mmd]": 0.0009068739600479603, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/03_fan_out.mmd]": 0.0015022079460322857, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/03b_fan_in_merge.mmd]": 0.0016146251000463963, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/04_directions.mmd]": 0.005850124871358275, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/05_file_icons.mmd]": 0.0008429158478975296, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/05b_multi_icons.mmd]": 0.0008565010502934456, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/05c_files_icon.mmd]": 0.0007169169839471579, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/05d_folder_icon.mmd]": 0.0007130829617381096, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/05f_banner_labels.mmd]": 0.0007945001125335693, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/06a_without_hidden.mmd]": 0.0011295001022517681, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[guide/06b_with_hidden.mmd]": 0.0010392498224973679, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[hlatyping.mmd]": 0.0012165410444140434, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[legend_logo_placement.mmd]": 0.0012530419044196606, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[longread_variant_calling.mmd]": 0.0042249588295817375, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[marker_styles.mmd]": 0.0008023749105632305, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[multiline_labels.mmd]": 0.002026916015893221, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[regressions/stacked_collector_fanin.mmd]": 0.009710792684927583, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[rnaseq_auto.mmd]": 0.0076507090125232935, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[rnaseq_sections.mmd]": 0.006425750907510519, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[rnaseq_sections_manual.mmd]": 0.004438207717612386, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[tb_file_termini.mmd]": 0.0023953330237418413, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[tb_right_exit_feeder_slots.mmd]": 0.006370292045176029, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/aligner_row_pinned_continuation.mmd]": 0.0036970828659832478, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/around_below_ep_col_gt0.mmd]": 0.0011330840643495321, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/around_section_below.mmd]": 0.0010193341877311468, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/asymmetric_tree.mmd]": 0.007532707881182432, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0013621249236166477, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/branch_fold_forward.mmd]": 0.0013321249280124903, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/branch_fold_stability.mmd]": 0.0011224590707570314, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bt_exit_top_above.mmd]": 0.0005856251809746027, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bt_exit_top_above_2line.mmd]": 0.0006760430987924337, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bt_perp_entry_below.mmd]": 0.004371874732896686, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bt_to_lr.mmd]": 0.005236041033640504, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bt_to_tb.mmd]": 0.0007371250540018082, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_fan_in_outer_slot.mmd]": 0.0028547069523483515, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002146083163097501, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_label_rake.mmd]": 0.0049814998637884855, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_label_rake_left.mmd]": 0.002894042292609811, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_label_rake_wide.mmd]": 0.0026563326828181744, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_leftward_far_side_entry.mmd]": 0.0025843321345746517, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_leftward_overflow.mmd]": 0.00274620926938951, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/bypass_v_tight.mmd]": 0.002510417951270938, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/clear_channel_target_aware_push.mmd]": 0.0010757921263575554, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/compact_gap_peer_conflict.mmd]": 0.0009967489168047905, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/compact_hidden_passthrough.mmd]": 0.0008445843122899532, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/complex_multipath.mmd]": 0.003439665073528886, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/convergence_stacked_sink.mmd]": 0.003966126125305891, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/convergent_offrow_exit_climb.mmd]": 0.0041210828348994255, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/corridor_narrow_gap_fallback.mmd]": 0.0009852508082985878, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/cross_col_top_entry.mmd]": 0.000600459286943078, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/cross_column_perp_drop.mmd]": 0.0006094600539654493, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006247912533581257, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/cross_row_gap_wrap.mmd]": 0.0013799171429127455, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/deep_linear.mmd]": 0.0017930008471012115, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/disjoint_sameline_trunks.mmd]": 0.0062554581090807915, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/divergent_fanout_split.mmd]": 0.0027116257697343826, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/dogleg_exempt_distinct.mmd]": 0.0012723749969154596, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/dogleg_exempt_sameline.mmd]": 0.0009263339452445507, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/dogleg_twoline_fanout.mmd]": 0.0009424588643014431, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/exit_corner_offset_dogleg.mmd]": 0.0011182092130184174, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/fan_bypass_nesting.mmd]": 0.0036136240232735872, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/fan_in_merge.mmd]": 0.0034719991963356733, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/fold_double.mmd]": 0.0033205002546310425, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/fold_fan_across.mmd]": 0.0030194998253136873, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/fold_stacked_branch.mmd]": 0.003091250080615282, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/funcprofiler_upstream.mmd]": 0.003485666820779443, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/header_nudge.mmd]": 0.0007567089051008224, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/header_side_rotated.mmd]": 0.005128748714923859, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/inter_row_wrap_clearance.mmd]": 0.0013677501119673252, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/junction_entry_align.mmd]": 0.0016797920688986778, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/junction_entry_collision.mmd]": 0.0013808750081807375, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/junction_entry_reversed_fold.mmd]": 0.0012162919156253338, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/junction_fanout_convergence.mmd]": 0.0009841660503298044, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/left_entry_up_wrap.mmd]": 0.0007024998776614666, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/left_exit_sink_below.mmd]": 0.0010367492213845253, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0012937497813254595, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0008636242710053921, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.004236916778609157, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0009660420473664999, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0009449159260839224, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_to_tb_top_cross_col.mmd]": 0.000830416101962328, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_to_tb_top_drop.mmd]": 0.0019552502781152725, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0019604589324444532, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0015267906710505486, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_to_tb_top_two_lines.mmd]": 0.0009777091909199953, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_top_entry_cross_column.mmd]": 0.0007278751581907272, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007634591311216354, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_around_below_leftmost.mmd]": 0.0019615418277680874, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_bottom_row_bypass.mmd]": 0.00807537604123354, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_leftmost_sink_branch.mmd]": 0.0013811253011226654, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_offrow_continuation.mmd]": 0.000973123824223876, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_port_above_approach.mmd]": 0.000944624887779355, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_pullaway.mmd]": 0.0012545417994260788, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_right_entry.mmd]": 0.0012586251832544804, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_trunk_out_of_range_section.mmd]": 0.00173941720277071, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/merge_trunk_over_low_section.mmd]": 0.0032640411518514156, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/mismatched_tracks.mmd]": 0.008774417219683528, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/mixed_bundle_column.mmd]": 0.01167925214394927, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/mixed_port_sides.mmd]": 0.0009312909096479416, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/multi_input_convergence.mmd]": 0.0009927498176693916, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/multi_line_bundle.mmd]": 0.0014657508581876755, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0011702498886734247, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/near_vertical_junction_hook.mmd]": 0.002987041836604476, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/off_track_convergence.mmd]": 0.0010295829270035028, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/off_track_convergence_multiline.mmd]": 0.00106795784085989, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/off_track_input_above_consumer.mmd]": 0.003205458400771022, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/parallel_independent.mmd]": 0.0009155839215964079, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/peeloff_extra_line_consumer.mmd]": 0.0016723328735679388, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/peeloff_riser_respace.mmd]": 0.0017092081252485514, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/reconverge_reversed_fold.mmd]": 0.00477241724729538, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/right_entry_from_above.mmd]": 0.0013624997809529305, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/right_entry_from_above_far.mmd]": 0.0006411659996956587, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/right_entry_gap_above_empty_row.mmd]": 0.0007278339471668005, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/right_entry_wrap_no_fan.mmd]": 0.000587499001994729, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/rl_entry_runway.mmd]": 0.0009299579542130232, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/rnaseq_lite.mmd]": 0.001978041138499975, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/route_around_intervening.mmd]": 0.0009527911897748709, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/section_diamond.mmd]": 0.0011377918999642134, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/self_crossing_bridge.mmd]": 0.0009344990830868483, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/shared_sink_parallel.mmd]": 0.006365416804328561, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/stacked_left_exit_drop.mmd]": 0.0009310001041740179, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/stacked_lr_serpentine.mmd]": 0.0010335829574614763, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_bottom_entry_flow_start.mmd]": 0.0016568736173212528, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001274916809052229, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.00117958290502429, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_column_continuation_two_lines.mmd]": 0.0021627512760460377, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_internal_diagonal.mmd]": 0.0008660010062158108, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_left_exit_step.mmd]": 0.0014230827800929546, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_lr_exit_left.mmd]": 0.002517957240343094, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_lr_exit_right.mmd]": 0.001204376108944416, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_passthrough_trunk.mmd]": 0.0009366259910166264, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_perp_exit_side_neighbour.mmd]": 0.001419668085873127, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_right_entry_stack.mmd]": 0.0025131250731647015, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/tb_two_line_vert_seam.mmd]": 0.0008347921539098024, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/terminal_symmetric_fan.mmd]": 0.000705209095031023, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/top_entry_header_clash.mmd]": 0.0006429988425225019, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/trunk_through_fan.mmd]": 0.001230292022228241, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/twoline_fanout_up.mmd]": 0.0015921671874821186, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/u_turn_fold.mmd]": 0.0027472497895359993, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/upward_bypass.mmd]": 0.013230832992121577, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/variant_calling.mmd]": 0.0031615830957889557, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/wide_fan_in.mmd]": 0.0011787069961428642, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[topologies/wide_fan_out.mmd]": 0.001281291013583541, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[trunk_align_matching_bundle.mmd]": 0.000791001133620739, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[variant_calling.mmd]": 0.0012749158777296543, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[variant_calling_tuned.mmd]": 0.0014821670483797789, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[variantbenchmarking.mmd]": 0.004755042027682066, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[variantbenchmarking_auto.mmd]": 0.007017373805865645, + "tests/test_layout_invariants.py::test_entry_approach_arrives_from_port_side[variantprioritization.mmd]": 0.0044274162501096725, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[cross_track_interchange.mmd]": 0.001102166948840022, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[da_pipeline.mmd]": 0.0018662908114492893, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[diagonal_labels.mmd]": 0.0008978319820016623, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[diagonal_single_trunk_off_track.mmd]": 0.0008753747679293156, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[differentialabundance.mmd]": 0.004620125284418464, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[differentialabundance_default.mmd]": 0.001965456875041127, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[disconnected_components.mmd]": 0.0007674151565879583, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[epitopeprediction.mmd]": 0.001146041788160801, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[file_icon_fanin.mmd]": 0.0007532511372119188, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[file_icons.mmd]": 0.0005725009832531214, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[genomeassembly.mmd]": 0.0016643325798213482, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[genomeassembly_organellar.mmd]": 0.0013823749031871557, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[genomeassembly_staggered.mmd]": 0.0015319578815251589, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[genomic_pipeline.mmd]": 0.005034374771639705, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[group_labels.mmd]": 0.0006511257961392403, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/02_sections.mmd]": 0.0008707081433385611, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/03_fan_out.mmd]": 0.000970418332144618, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/03b_fan_in_merge.mmd]": 0.0008832078892737627, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/04_directions.mmd]": 0.0010632502380758524, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/05_file_icons.mmd]": 0.0005937491077929735, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/05b_multi_icons.mmd]": 0.0005847497377544641, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/05c_files_icon.mmd]": 0.0005542491562664509, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/05d_folder_icon.mmd]": 0.0005304578226059675, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/05f_banner_labels.mmd]": 0.0005864989943802357, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/06a_without_hidden.mmd]": 0.0007191668264567852, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[guide/06b_with_hidden.mmd]": 0.0007294588722288609, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[hlatyping.mmd]": 0.0009001668076962233, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[legend_logo_placement.mmd]": 0.0009237092453986406, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[longread_variant_calling.mmd]": 0.001777959056198597, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[marker_styles.mmd]": 0.003262957790866494, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[multiline_labels.mmd]": 0.0012584999203681946, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[rnaseq_auto.mmd]": 0.0017172079533338547, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[rnaseq_sections.mmd]": 0.021651124814525247, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[rnaseq_sections_manual.mmd]": 0.009579833829775453, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[tb_file_termini.mmd]": 0.002866914728656411, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[tb_right_exit_feeder_slots.mmd]": 0.0014552921056747437, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/aligner_row_pinned_continuation.mmd]": 0.0023368329275399446, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/around_below_ep_col_gt0.mmd]": 0.0009758742526173592, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/around_section_below.mmd]": 0.0006875828839838505, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/asymmetric_tree.mmd]": 0.0011196660343557596, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0008091661147773266, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/branch_fold_forward.mmd]": 0.001138209132477641, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/branch_fold_stability.mmd]": 0.0009385000448673964, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bt_exit_top_above.mmd]": 0.000584959052503109, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bt_exit_top_above_2line.mmd]": 0.0010726670734584332, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bt_perp_entry_below.mmd]": 0.000821791123598814, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bt_to_lr.mmd]": 0.0006322497501969337, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bt_to_tb.mmd]": 0.0005363340023905039, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_fan_in_outer_slot.mmd]": 0.001460500992834568, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_gap2_rightward_overflow.mmd]": 0.000773875042796135, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_label_rake.mmd]": 0.0009610839188098907, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_label_rake_left.mmd]": 0.000756000867113471, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_label_rake_wide.mmd]": 0.0007246667519211769, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_leftward_far_side_entry.mmd]": 0.0006652080919593573, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_leftward_overflow.mmd]": 0.0006579989567399025, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/bypass_v_tight.mmd]": 0.0005847066640853882, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/clear_channel_target_aware_push.mmd]": 0.0006563328206539154, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/compact_gap_peer_conflict.mmd]": 0.0007820832543075085, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/compact_hidden_passthrough.mmd]": 0.0034366240724921227, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/complex_multipath.mmd]": 0.003196166129782796, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/convergence_stacked_sink.mmd]": 0.0011601659934967756, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/convergent_offrow_exit_climb.mmd]": 0.007571000838652253, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/corridor_narrow_gap_fallback.mmd]": 0.001674541039392352, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/cross_col_top_entry.mmd]": 0.001391707919538021, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/cross_column_perp_drop.mmd]": 0.0005763748195022345, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0014745420776307583, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/cross_row_gap_wrap.mmd]": 0.001117791747674346, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/deep_linear.mmd]": 0.0014924590941518545, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/disjoint_sameline_trunks.mmd]": 0.008511124877259135, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/divergent_fanout_split.mmd]": 0.0017413741443306208, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/dogleg_exempt_distinct.mmd]": 0.0009537921287119389, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/dogleg_exempt_sameline.mmd]": 0.0008004999253898859, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/dogleg_twoline_fanout.mmd]": 0.0006473332177847624, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/exit_corner_offset_dogleg.mmd]": 0.0006930420640856028, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/fan_bypass_nesting.mmd]": 0.001195874996483326, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/fan_in_merge.mmd]": 0.0012707491405308247, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/fold_double.mmd]": 0.0021210000850260258, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/fold_fan_across.mmd]": 0.0017100842669606209, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/fold_stacked_branch.mmd]": 0.0029487910214811563, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/funcprofiler_upstream.mmd]": 0.004373501054942608, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/header_nudge.mmd]": 0.0008628342766314745, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/header_side_rotated.mmd]": 0.0005852498579770327, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/inter_row_wrap_clearance.mmd]": 0.0018410009797662497, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/junction_entry_align.mmd]": 0.000952916918322444, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/junction_entry_collision.mmd]": 0.000771665945649147, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/junction_entry_reversed_fold.mmd]": 0.0008379588834941387, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/junction_fanout_convergence.mmd]": 0.0006501672323793173, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/left_entry_up_wrap.mmd]": 0.0004998340737074614, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/left_exit_sink_below.mmd]": 0.000751374987885356, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006515840068459511, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0006377920508384705, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006021670997142792, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0006024579051882029, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005971661303192377, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_to_tb_top_cross_col.mmd]": 0.004402083111926913, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_to_tb_top_drop.mmd]": 0.0005913758650422096, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0005554158706218004, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_to_tb_top_near_vertical.mmd]": 0.00047208298929035664, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_to_tb_top_two_lines.mmd]": 0.0004845408257097006, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_top_entry_cross_column.mmd]": 0.0005430013407021761, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.000509417150169611, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_around_below_leftmost.mmd]": 0.0007413330022245646, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_bottom_row_bypass.mmd]": 0.0008604582399129868, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_leftmost_sink_branch.mmd]": 0.001073791878297925, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_offrow_continuation.mmd]": 0.005968875018879771, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_port_above_approach.mmd]": 0.003179416758939624, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_pullaway.mmd]": 0.007104625925421715, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_right_entry.mmd]": 0.0009009172208607197, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_trunk_out_of_range_section.mmd]": 0.0016959162894636393, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/merge_trunk_over_low_section.mmd]": 0.0013017498422414064, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/mismatched_tracks.mmd]": 0.0015819580294191837, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/mixed_bundle_column.mmd]": 0.0011428329162299633, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/mixed_port_sides.mmd]": 0.001132166013121605, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/multi_input_convergence.mmd]": 0.0011691679246723652, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/multi_line_bundle.mmd]": 0.0009079172741621733, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0008259997703135014, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/near_vertical_junction_hook.mmd]": 0.0006662500090897083, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/off_track_convergence.mmd]": 0.0006482917815446854, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/off_track_convergence_multiline.mmd]": 0.0007948759011924267, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/off_track_input_above_consumer.mmd]": 0.001902915770187974, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/parallel_independent.mmd]": 0.0020249588415026665, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/peeloff_extra_line_consumer.mmd]": 0.002031126292422414, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/peeloff_riser_respace.mmd]": 0.0008604577742516994, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/reconverge_reversed_fold.mmd]": 0.0017985000740736723, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/right_entry_from_above.mmd]": 0.0005609989166259766, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/right_entry_from_above_far.mmd]": 0.0006057091522961855, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005385419353842735, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/right_entry_wrap_no_fan.mmd]": 0.0004539575893431902, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/rl_entry_runway.mmd]": 0.0005390830338001251, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/rnaseq_lite.mmd]": 0.003958124667406082, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/route_around_intervening.mmd]": 0.0020782502833753824, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/section_diamond.mmd]": 0.0008171671070158482, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/self_crossing_bridge.mmd]": 0.0006383343134075403, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/shared_sink_parallel.mmd]": 0.002455958165228367, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/stacked_left_exit_drop.mmd]": 0.0005008752923458815, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/stacked_lr_serpentine.mmd]": 0.0017650432419031858, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_bottom_entry_flow_start.mmd]": 0.0018452920485287905, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0009797082748264074, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007623760029673576, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_column_continuation_two_lines.mmd]": 0.0005078332033008337, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_internal_diagonal.mmd]": 0.000513917300850153, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_left_exit_step.mmd]": 0.0007468338590115309, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_lr_exit_left.mmd]": 0.0035672090016305447, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_lr_exit_right.mmd]": 0.002029459225013852, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_passthrough_trunk.mmd]": 0.0006507080979645252, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005115410313010216, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_right_entry_stack.mmd]": 0.0011137498077005148, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/tb_two_line_vert_seam.mmd]": 0.0005557490512728691, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/terminal_symmetric_fan.mmd]": 0.0005077079404145479, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/top_entry_header_clash.mmd]": 0.00045908382162451744, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/trunk_through_fan.mmd]": 0.0007419169414788485, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/twoline_fanout_up.mmd]": 0.0006448328495025635, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/u_turn_fold.mmd]": 0.0016756250988692045, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/upward_bypass.mmd]": 0.0010549162980169058, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/variant_calling.mmd]": 0.0030522930901497602, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/wide_fan_in.mmd]": 0.0017895419150590897, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[topologies/wide_fan_out.mmd]": 0.0023030841257423162, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[trunk_align_matching_bundle.mmd]": 0.0007142920512706041, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[variant_calling.mmd]": 0.0008709989488124847, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[variant_calling_tuned.mmd]": 0.0036373736802488565, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[variantbenchmarking.mmd]": 0.0033495419193059206, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[variantbenchmarking_auto.mmd]": 0.0072344159707427025, + "tests/test_layout_invariants.py::test_entry_port_fed_only_by_ports[variantprioritization.mmd]": 0.0010828343220055103, + "tests/test_layout_invariants.py::test_fan_station_centered_on_loop[da_pipeline.mmd]": 0.013162167277187109, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[bubble_forced_label_clears_diagonal.mmd]": 0.0004650831688195467, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[bubble_label_clears_diagonal.mmd]": 0.00045083416625857353, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[bubble_output_above.mmd]": 0.00041954126209020615, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[captioned_sibling_outputs.mmd]": 0.0011745842639356852, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[centered_tracks.mmd]": 0.0005314170848578215, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[cross_track_interchange.mmd]": 0.0007862083148211241, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[da_pipeline.mmd]": 0.0022665420547127724, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[diagonal_labels.mmd]": 0.0008987910114228725, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[diagonal_single_trunk_off_track.mmd]": 0.001328126061707735, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[differentialabundance.mmd]": 0.0018942516762763262, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[differentialabundance_default.mmd]": 0.004745791899040341, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[directional_flow.mmd]": 0.000529332784935832, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[disconnected_components.mmd]": 0.0007514588069170713, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[epitopeprediction.mmd]": 0.0011397101916372776, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[file_icon_fanin.mmd]": 0.0008171661756932735, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[file_icons.mmd]": 0.003841456724330783, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[font_scale.mmd]": 0.00039979233406484127, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[genomeassembly.mmd]": 0.0014513337519019842, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[genomeassembly_organellar.mmd]": 0.0014609589707106352, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[genomeassembly_staggered.mmd]": 0.0012834169901907444, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[genomic_pipeline.mmd]": 0.007265624823048711, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[group_labels.mmd]": 0.0024403331335633993, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/01_minimal.mmd]": 0.001024541910737753, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/02_sections.mmd]": 0.0012366657610982656, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/03_fan_out.mmd]": 0.0009740830864757299, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/03b_fan_in_merge.mmd]": 0.000943582970649004, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/04_directions.mmd]": 0.0009340827818959951, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/05_file_icons.mmd]": 0.0005396248307079077, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/05b_multi_icons.mmd]": 0.006807499099522829, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/05c_files_icon.mmd]": 0.00403316505253315, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/05d_folder_icon.mmd]": 0.004742125980556011, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/05f_banner_labels.mmd]": 0.004286209121346474, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/06a_without_hidden.mmd]": 0.001992165809497237, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[guide/06b_with_hidden.mmd]": 0.0007855419535189867, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[hlatyping.mmd]": 0.0010030013509094715, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[icon_caption_wrap.mmd]": 0.0003360421396791935, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[leaf_file_icon_on_trunk.mmd]": 0.0003964998759329319, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[legend_combo.mmd]": 0.00047875079326331615, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[legend_logo_placement.mmd]": 0.0009450418874621391, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[longread_variant_calling.mmd]": 0.004848208045586944, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[marker_styles.mmd]": 0.0020331668201833963, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[multiline_labels.mmd]": 0.0005202507600188255, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[off_track_output_branched.mmd]": 0.0010003338102251291, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[off_track_outputs.mmd]": 0.0009191262070089579, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[off_track_outputs_along_trunk.mmd]": 0.0004409579560160637, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[rnaseq_auto.mmd]": 0.00481262500397861, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[rnaseq_sections.mmd]": 0.0023991670459508896, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[rnaseq_sections_manual.mmd]": 0.010843958240002394, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[rnaseq_simple.mmd]": 0.00036075012758374214, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[simple_pipeline.mmd]": 0.0014400011859834194, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[tb_file_termini.mmd]": 0.000711832894012332, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[tb_right_exit_feeder_slots.mmd]": 0.04985595680773258, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/aligner_row_pinned_continuation.mmd]": 0.0009293751791119576, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/around_below_ep_col_gt0.mmd]": 0.0007380831521004438, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/around_section_below.mmd]": 0.0006552489940077066, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/asymmetric_tree.mmd]": 0.0013600841630250216, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0030723754316568375, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/branch_fold_forward.mmd]": 0.0009958748705685139, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/branch_fold_stability.mmd]": 0.0019424168858677149, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bt_chain.mmd]": 0.001482250401750207, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bt_exit_top_above.mmd]": 0.0011818741913884878, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bt_exit_top_above_2line.mmd]": 0.0012657491024583578, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bt_fork.mmd]": 0.000985042192041874, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bt_perp_entry_below.mmd]": 0.0028971671126782894, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bt_to_lr.mmd]": 0.0005233320407569408, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bt_to_tb.mmd]": 0.0004957499913871288, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bundle_terminator_continuation.mmd]": 0.0003845829050987959, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_fan_in_outer_slot.mmd]": 0.0023764159996062517, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0025561670772731304, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_label_rake.mmd]": 0.0027897912077605724, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_label_rake_left.mmd]": 0.0009611661080271006, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_label_rake_wide.mmd]": 0.000794457970187068, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_leftward_far_side_entry.mmd]": 0.0007129157893359661, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_leftward_overflow.mmd]": 0.0006872918456792831, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/bypass_v_tight.mmd]": 0.0008970010094344616, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/clear_channel_target_aware_push.mmd]": 0.000769664766266942, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/compact_gap_peer_conflict.mmd]": 0.0007381243631243706, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/compact_hidden_passthrough.mmd]": 0.0006252487655729055, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/complex_multipath.mmd]": 0.0013982083182781935, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/convergence_stacked_sink.mmd]": 0.0010494568850845098, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/convergent_offrow_exit_climb.mmd]": 0.0017848340794444084, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006206671241670847, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/cross_col_top_entry.mmd]": 0.0004636659286916256, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/cross_column_perp_drop.mmd]": 0.0038535010535269976, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0020942932460457087, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/cross_row_gap_wrap.mmd]": 0.0033202499616891146, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/deep_linear.mmd]": 0.0033292919397354126, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/disjoint_sameline_trunks.mmd]": 0.005467667011544108, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/divergent_fanout_split.mmd]": 0.0015887490008026361, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/dogleg_exempt_distinct.mmd]": 0.0009961246978491545, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/dogleg_exempt_sameline.mmd]": 0.0006233337335288525, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/dogleg_twoline_fanout.mmd]": 0.0006204580422490835, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/exit_corner_offset_dogleg.mmd]": 0.0007085409015417099, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/fan_bypass_nesting.mmd]": 0.0011899173259735107, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/fan_in_merge.mmd]": 0.0008555001113563776, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/fold_double.mmd]": 0.006206416059285402, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/fold_fan_across.mmd]": 0.001787208253517747, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/fold_stacked_branch.mmd]": 0.002572916215285659, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/funcprofiler_upstream.mmd]": 0.005414582090452313, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/header_nudge.mmd]": 0.0016903330106288195, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/header_side_rotated.mmd]": 0.0015166669618338346, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/inrow_skip_breeze.mmd]": 0.0011345420498400927, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/inter_row_wrap_clearance.mmd]": 0.0030819580424576998, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/interchange_lane_reorder.mmd]": 0.0005574158858507872, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/junction_entry_align.mmd]": 0.003482332918792963, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/junction_entry_collision.mmd]": 0.0015399579424411058, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/junction_entry_reversed_fold.mmd]": 0.000788375036790967, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/junction_fanout_convergence.mmd]": 0.0006439159624278545, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/left_entry_up_wrap.mmd]": 0.0011192511301487684, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/left_exit_sink_below.mmd]": 0.0013876263983547688, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006785839796066284, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0005890412721782923, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006168750114738941, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0005906252190470695, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005677922163158655, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005697919987142086, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_to_tb_top_drop.mmd]": 0.006027166964486241, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0012352499179542065, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0005446670111268759, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005191240925341845, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_top_entry_cross_column.mmd]": 0.00047112395986914635, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.000519416993483901, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_around_below_leftmost.mmd]": 0.0007362079340964556, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_bottom_row_bypass.mmd]": 0.0007777081336826086, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_leftmost_sink_branch.mmd]": 0.0009425838943570852, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_offrow_continuation.mmd]": 0.0006623330991715193, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_port_above_approach.mmd]": 0.002261499874293804, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_pullaway.mmd]": 0.002602082910016179, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_right_entry.mmd]": 0.0021925840992480516, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_trunk_out_of_range_section.mmd]": 0.0009511669632047415, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/merge_trunk_over_low_section.mmd]": 0.0009411247447133064, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/mismatched_tracks.mmd]": 0.0009963337797671556, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/mixed_bundle_column.mmd]": 0.002666708780452609, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/mixed_port_sides.mmd]": 0.0014248329680413008, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/multi_input_convergence.mmd]": 0.0007040009368211031, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/multi_line_bundle.mmd]": 0.000898625236004591, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0018073329702019691, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/near_vertical_junction_hook.mmd]": 0.0009525001514703035, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/off_track_convergence.mmd]": 0.00079774996265769, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/off_track_convergence_multiline.mmd]": 0.0008255830034613609, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/off_track_input_above_consumer.mmd]": 0.001840583048760891, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/parallel_independent.mmd]": 0.0006535418797284365, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/peeloff_extra_line_consumer.mmd]": 0.0007098333444446325, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/peeloff_riser_respace.mmd]": 0.0025601666420698166, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/post_convergence_trunk.mmd]": 0.0022234159987419844, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/reconverge_reversed_fold.mmd]": 0.0018571664113551378, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/right_entry_from_above.mmd]": 0.0004634580109268427, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/right_entry_from_above_far.mmd]": 0.00046000094152987003, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005069160833954811, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/right_entry_wrap_no_fan.mmd]": 0.00045091682113707066, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/rl_entry_runway.mmd]": 0.0005502486601471901, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/rnaseq_lite.mmd]": 0.0013030432164669037, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/route_around_intervening.mmd]": 0.0006259577348828316, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/section_diamond.mmd]": 0.0007609578315168619, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/self_crossing_bridge.mmd]": 0.0006174999289214611, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/shared_sink_parallel.mmd]": 0.003618875052779913, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/single_section.mmd]": 0.0007571249734610319, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/stacked_left_exit_drop.mmd]": 0.0006828748155385256, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/stacked_lr_serpentine.mmd]": 0.000762042123824358, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007594171911478043, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_bottom_entry_flow_start.mmd]": 0.00046541611663997173, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0005769580602645874, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.000710250111296773, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_column_continuation_two_lines.mmd]": 0.0004892509896308184, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_convergence_straight_drop.mmd]": 0.0003582076169550419, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_internal_diagonal.mmd]": 0.0005060830153524876, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_left_exit_step.mmd]": 0.00075329071842134, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_lr_exit_left.mmd]": 0.0005912499036639929, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_lr_exit_right.mmd]": 0.0005995419342070818, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_passthrough_continuation.mmd]": 0.00038929120637476444, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_passthrough_trunk.mmd]": 0.0005686669610440731, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0004324568435549736, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_right_entry_stack.mmd]": 0.0015814988873898983, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_trunk_through_fan.mmd]": 0.001899417256936431, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/tb_two_line_vert_seam.mmd]": 0.003004874801263213, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/terminal_symmetric_fan.mmd]": 0.001499083125963807, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/terminus_join.mmd]": 0.0014342500362545252, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/top_entry_header_clash.mmd]": 0.0019074988085776567, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/trunk_through_fan.mmd]": 0.0007142079994082451, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/twoline_fanout_up.mmd]": 0.0013106667902320623, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/u_turn_fold.mmd]": 0.0030079171992838383, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/uneven_diamond.mmd]": 0.0004214579239487648, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/upward_bypass.mmd]": 0.0010206678416579962, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/variant_calling.mmd]": 0.0016570838633924723, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/wide_fan_in.mmd]": 0.0008876249194145203, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/wide_fan_out.mmd]": 0.0018160827457904816, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/wide_label_fan.mmd]": 0.0008502500131726265, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[topologies/wrapped_label_trunk.mmd]": 0.0004693749360740185, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[trunk_align_matching_bundle.mmd]": 0.002235040068626404, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[uneven_diamond.mmd]": 0.0008424581028521061, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[variant_calling.mmd]": 0.0008569590281695127, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[variant_calling_tuned.mmd]": 0.0016119168139994144, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[variantbenchmarking.mmd]": 0.006023499881848693, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[variantbenchmarking_auto.mmd]": 0.0023727500811219215, + "tests/test_layout_invariants.py::test_fanout_branches_at_distinct_y[variantprioritization.mmd]": 0.0010162906255573034, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[cross_track_interchange.mmd]": 0.0023322091437876225, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[da_pipeline.mmd]": 0.0028795001562684774, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[diagonal_labels.mmd]": 0.00107849994674325, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[diagonal_single_trunk_off_track.mmd]": 0.0024649580009281635, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[differentialabundance.mmd]": 0.002513707149773836, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[differentialabundance_default.mmd]": 0.002588125178590417, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[disconnected_components.mmd]": 0.0007779987063258886, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[epitopeprediction.mmd]": 0.001288916915655136, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[file_icon_fanin.mmd]": 0.002245167037472129, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[file_icons.mmd]": 0.0005881250835955143, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[genomeassembly.mmd]": 0.0030673739966005087, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[genomeassembly_organellar.mmd]": 0.0016325418837368488, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[genomeassembly_staggered.mmd]": 0.0014287088997662067, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[genomic_pipeline.mmd]": 0.0026701660826802254, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[group_labels.mmd]": 0.000568249961361289, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/02_sections.mmd]": 0.0006454591639339924, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/03_fan_out.mmd]": 0.001571374712511897, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/03b_fan_in_merge.mmd]": 0.0013205008581280708, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/04_directions.mmd]": 0.0009827918838709593, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/05_file_icons.mmd]": 0.000561125110834837, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/05b_multi_icons.mmd]": 0.0006122079212218523, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/05c_files_icon.mmd]": 0.0005623330362141132, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/05d_folder_icon.mmd]": 0.0005348320119082928, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/05f_banner_labels.mmd]": 0.0005830421578139067, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/06a_without_hidden.mmd]": 0.0007120829541236162, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[guide/06b_with_hidden.mmd]": 0.002007832983508706, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[hlatyping.mmd]": 0.0008802921511232853, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[legend_logo_placement.mmd]": 0.0009360420517623425, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[longread_variant_calling.mmd]": 0.001764500979334116, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[marker_styles.mmd]": 0.0006182086654007435, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[multiline_labels.mmd]": 0.0016870410181581974, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[rnaseq_auto.mmd]": 0.0015949590597301722, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[rnaseq_sections.mmd]": 0.0038666678592562675, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[rnaseq_sections_manual.mmd]": 0.006137708900496364, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[tb_file_termini.mmd]": 0.0006121669430285692, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[tb_right_exit_feeder_slots.mmd]": 0.010963416192680597, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/aligner_row_pinned_continuation.mmd]": 0.0010524997487664223, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/around_below_ep_col_gt0.mmd]": 0.0009639172349125147, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/around_section_below.mmd]": 0.0018939999863505363, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/asymmetric_tree.mmd]": 0.001150541938841343, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0007653343491256237, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/branch_fold_forward.mmd]": 0.0008947507012635469, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/branch_fold_stability.mmd]": 0.0007351657841354609, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bt_exit_top_above.mmd]": 0.0007507905829697847, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bt_exit_top_above_2line.mmd]": 0.0005217080470174551, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bt_perp_entry_below.mmd]": 0.00048370775766670704, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bt_to_lr.mmd]": 0.00048220762982964516, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bt_to_tb.mmd]": 0.0004822933115065098, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_fan_in_outer_slot.mmd]": 0.0014991671778261662, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0028019577730447054, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_label_rake.mmd]": 0.0022789579816162586, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_label_rake_left.mmd]": 0.0007525852415710688, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_label_rake_wide.mmd]": 0.0017139168921858072, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_leftward_far_side_entry.mmd]": 0.0011608749628067017, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_leftward_overflow.mmd]": 0.0017401240766048431, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/bypass_v_tight.mmd]": 0.0006438330747187138, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/clear_channel_target_aware_push.mmd]": 0.0006848329212516546, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/compact_gap_peer_conflict.mmd]": 0.0016200416721403599, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/compact_hidden_passthrough.mmd]": 0.0006535407155752182, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/complex_multipath.mmd]": 0.0012807080056518316, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/convergence_stacked_sink.mmd]": 0.0012248761486262083, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/convergent_offrow_exit_climb.mmd]": 0.002072584116831422, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006301668472588062, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/cross_col_top_entry.mmd]": 0.00046408316120505333, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/cross_column_perp_drop.mmd]": 0.006902000168338418, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006507490761578083, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/cross_row_gap_wrap.mmd]": 0.0008990832138806581, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/deep_linear.mmd]": 0.0013004587963223457, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/disjoint_sameline_trunks.mmd]": 0.0007956258486956358, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/divergent_fanout_split.mmd]": 0.0005458751693367958, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/dogleg_exempt_distinct.mmd]": 0.0006829181220382452, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/dogleg_exempt_sameline.mmd]": 0.002116790972650051, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/dogleg_twoline_fanout.mmd]": 0.005900498945266008, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/exit_corner_offset_dogleg.mmd]": 0.003340124851092696, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/fan_bypass_nesting.mmd]": 0.0028495830483734608, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/fan_in_merge.mmd]": 0.001735958969220519, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/fold_double.mmd]": 0.002745957812294364, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/fold_fan_across.mmd]": 0.004098708042874932, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/fold_stacked_branch.mmd]": 0.001819040859118104, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/funcprofiler_upstream.mmd]": 0.0012047509662806988, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/header_nudge.mmd]": 0.0005478726234287024, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/header_side_rotated.mmd]": 0.0005278342869132757, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/inter_row_wrap_clearance.mmd]": 0.0021897510159760714, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/junction_entry_align.mmd]": 0.0025396249257028103, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/junction_entry_collision.mmd]": 0.0009486658964306116, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/junction_entry_reversed_fold.mmd]": 0.000840876018628478, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/junction_fanout_convergence.mmd]": 0.0006337910890579224, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/left_entry_up_wrap.mmd]": 0.0013134179171174765, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/left_exit_sink_below.mmd]": 0.001868541818112135, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0017442507669329643, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0015936261042952538, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0027214158326387405, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0007827081717550755, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0006055841222405434, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005758320912718773, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_to_tb_top_drop.mmd]": 0.005054207984358072, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0005118751432746649, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004789570812135935, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_to_tb_top_two_lines.mmd]": 0.0004906670656055212, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_top_entry_cross_column.mmd]": 0.0005758751649409533, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.004856208106502891, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_around_below_leftmost.mmd]": 0.0016792500391602516, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_bottom_row_bypass.mmd]": 0.0009072499815374613, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_leftmost_sink_branch.mmd]": 0.0009845001623034477, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_offrow_continuation.mmd]": 0.0006900832522660494, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_port_above_approach.mmd]": 0.0006618751212954521, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_pullaway.mmd]": 0.0008813338354229927, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_right_entry.mmd]": 0.0007696668617427349, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_trunk_out_of_range_section.mmd]": 0.0009816670790314674, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/merge_trunk_over_low_section.mmd]": 0.0011901671532541513, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/mismatched_tracks.mmd]": 0.0009450002107769251, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/mixed_bundle_column.mmd]": 0.0013226668816059828, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/mixed_port_sides.mmd]": 0.002256416715681553, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/multi_input_convergence.mmd]": 0.0007538758218288422, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/multi_line_bundle.mmd]": 0.0024914173409342766, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0015607920940965414, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/near_vertical_junction_hook.mmd]": 0.0007330009248107672, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/off_track_convergence.mmd]": 0.0024096237029880285, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/off_track_convergence_multiline.mmd]": 0.0009315421339124441, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/off_track_input_above_consumer.mmd]": 0.004620123887434602, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/parallel_independent.mmd]": 0.0012145426589995623, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/peeloff_extra_line_consumer.mmd]": 0.0008471256587654352, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/peeloff_riser_respace.mmd]": 0.0007327909115701914, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/reconverge_reversed_fold.mmd]": 0.003078291891142726, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/right_entry_from_above.mmd]": 0.013640707824379206, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/right_entry_from_above_far.mmd]": 0.006591040641069412, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/right_entry_gap_above_empty_row.mmd]": 0.0051383329555392265, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/right_entry_wrap_no_fan.mmd]": 0.0107488336507231, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/rl_entry_runway.mmd]": 0.001423833891749382, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/rnaseq_lite.mmd]": 0.0016460001934319735, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/route_around_intervening.mmd]": 0.0013194589409977198, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/section_diamond.mmd]": 0.0015254588797688484, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/self_crossing_bridge.mmd]": 0.0007009587716311216, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/shared_sink_parallel.mmd]": 0.0011012500617653131, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/stacked_left_exit_drop.mmd]": 0.00045100064016878605, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/stacked_lr_serpentine.mmd]": 0.002181208925321698, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_bottom_entry_flow_start.mmd]": 0.0015545429196208715, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0013150011654943228, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0018420000560581684, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_column_continuation_two_lines.mmd]": 0.0005708341486752033, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_internal_diagonal.mmd]": 0.000950374873355031, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_left_exit_step.mmd]": 0.0018431239295750856, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_lr_exit_left.mmd]": 0.005168291041627526, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_lr_exit_right.mmd]": 0.0044147486332803965, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_passthrough_trunk.mmd]": 0.0007182091940194368, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006198750343173742, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_right_entry_stack.mmd]": 0.0009129592217504978, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/tb_two_line_vert_seam.mmd]": 0.0007030419073998928, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/terminal_symmetric_fan.mmd]": 0.0006064162589609623, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/top_entry_header_clash.mmd]": 0.0004754168912768364, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/trunk_through_fan.mmd]": 0.0006562082562595606, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/twoline_fanout_up.mmd]": 0.0014690840616822243, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/u_turn_fold.mmd]": 0.0035774591378867626, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/upward_bypass.mmd]": 0.0011285408399999142, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/variant_calling.mmd]": 0.004098166944459081, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/wide_fan_in.mmd]": 0.0008626668713986874, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[topologies/wide_fan_out.mmd]": 0.0010221670381724834, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[trunk_align_matching_bundle.mmd]": 0.001395916799083352, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[variant_calling.mmd]": 0.0007934991735965014, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[variant_calling_tuned.mmd]": 0.0008802930824458599, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[variantbenchmarking.mmd]": 0.0021362078841775656, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[variantbenchmarking_auto.mmd]": 0.009038708172738552, + "tests/test_layout_invariants.py::test_fanout_junction_resolves_via_upstream[variantprioritization.mmd]": 0.0017899579834192991, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[cross_track_interchange.mmd]": 0.000738541828468442, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[da_pipeline.mmd]": 0.002239083871245384, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[diagonal_labels.mmd]": 0.00229533389210701, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[diagonal_single_trunk_off_track.mmd]": 0.0011163330636918545, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[differentialabundance.mmd]": 0.0019192909821867943, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[differentialabundance_default.mmd]": 0.001836123876273632, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[disconnected_components.mmd]": 0.0009276252239942551, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[epitopeprediction.mmd]": 0.0024564170744270086, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[file_icon_fanin.mmd]": 0.00145633309148252, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[file_icons.mmd]": 0.000593916978687048, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[genomeassembly.mmd]": 0.0012754597701132298, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[genomeassembly_organellar.mmd]": 0.002662248909473419, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[genomeassembly_staggered.mmd]": 0.0013009998947381973, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[genomic_pipeline.mmd]": 0.0027969179209321737, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[group_labels.mmd]": 0.0006184990052133799, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/02_sections.mmd]": 0.0006222480442374945, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/03_fan_out.mmd]": 0.0009148737881332636, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/03b_fan_in_merge.mmd]": 0.0008549587801098824, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/04_directions.mmd]": 0.0009238331113010645, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/05_file_icons.mmd]": 0.0006374169606715441, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/05b_multi_icons.mmd]": 0.0007797919679433107, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/05c_files_icon.mmd]": 0.0005787082482129335, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/05d_folder_icon.mmd]": 0.0006732090841978788, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/05f_banner_labels.mmd]": 0.0035049153957515955, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/06a_without_hidden.mmd]": 0.0008744581136852503, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[guide/06b_with_hidden.mmd]": 0.0007675411179661751, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[hlatyping.mmd]": 0.0008975830860435963, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[legend_logo_placement.mmd]": 0.0009199171327054501, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[longread_variant_calling.mmd]": 0.0017655419651418924, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[marker_styles.mmd]": 0.0006210419815033674, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[multiline_labels.mmd]": 0.0032550001051276922, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[rnaseq_auto.mmd]": 0.0016108748968690634, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[rnaseq_sections.mmd]": 0.002622667234390974, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[rnaseq_sections_manual.mmd]": 0.007979250978678465, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[tb_file_termini.mmd]": 0.002220416907221079, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[tb_right_exit_feeder_slots.mmd]": 0.0007794168777763844, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/aligner_row_pinned_continuation.mmd]": 0.005377208115532994, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/around_below_ep_col_gt0.mmd]": 0.0026236248668283224, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/around_section_below.mmd]": 0.0007329168729484081, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/asymmetric_tree.mmd]": 0.0010681261774152517, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0007855829317122698, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/branch_fold_forward.mmd]": 0.0011520010884851217, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/branch_fold_stability.mmd]": 0.0023243341129273176, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bt_exit_top_above.mmd]": 0.0011522909626364708, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bt_exit_top_above_2line.mmd]": 0.001315165078267455, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bt_perp_entry_below.mmd]": 0.001359707908704877, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bt_to_lr.mmd]": 0.0006275419145822525, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bt_to_tb.mmd]": 0.0005536242388188839, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_fan_in_outer_slot.mmd]": 0.001799291931092739, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_gap2_rightward_overflow.mmd]": 0.00084920902736485, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_label_rake.mmd]": 0.0007625001017004251, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_label_rake_left.mmd]": 0.0007477500475943089, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_label_rake_wide.mmd]": 0.0007213749922811985, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_leftward_far_side_entry.mmd]": 0.0006766240112483501, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_leftward_overflow.mmd]": 0.0006819169502705336, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/bypass_v_tight.mmd]": 0.0005958748515695333, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/clear_channel_target_aware_push.mmd]": 0.0006651671137660742, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/compact_gap_peer_conflict.mmd]": 0.0006789169274270535, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/compact_hidden_passthrough.mmd]": 0.005780124804005027, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/complex_multipath.mmd]": 0.01024254085496068, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/convergence_stacked_sink.mmd]": 0.0017287489026784897, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/convergent_offrow_exit_climb.mmd]": 0.0034798337146639824, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/corridor_narrow_gap_fallback.mmd]": 0.0007325001060962677, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/cross_col_top_entry.mmd]": 0.0004916680045425892, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/cross_column_perp_drop.mmd]": 0.0005100842099636793, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/cross_column_perp_drop_far_exit.mmd]": 0.00047795800492167473, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/cross_row_gap_wrap.mmd]": 0.0008914170321077108, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/deep_linear.mmd]": 0.0012776658404618502, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/disjoint_sameline_trunks.mmd]": 0.001174289733171463, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/divergent_fanout_split.mmd]": 0.006329040974378586, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/dogleg_exempt_distinct.mmd]": 0.002532792277634144, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/dogleg_exempt_sameline.mmd]": 0.000611957861110568, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/dogleg_twoline_fanout.mmd]": 0.0006124579813331366, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/exit_corner_offset_dogleg.mmd]": 0.0006800417322665453, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/fan_bypass_nesting.mmd]": 0.001204625004902482, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/fan_in_merge.mmd]": 0.0016547078266739845, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/fold_double.mmd]": 0.002091666916385293, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/fold_fan_across.mmd]": 0.0017269582021981478, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/fold_stacked_branch.mmd]": 0.0030783750116825104, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/funcprofiler_upstream.mmd]": 0.008800124982371926, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/header_nudge.mmd]": 0.007816082565113902, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/header_side_rotated.mmd]": 0.0007400840986520052, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/inter_row_wrap_clearance.mmd]": 0.0006845430471003056, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/junction_entry_align.mmd]": 0.0021341671235859394, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/junction_entry_collision.mmd]": 0.001423332840204239, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/junction_entry_reversed_fold.mmd]": 0.0007054999005049467, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/junction_fanout_convergence.mmd]": 0.0006057918071746826, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/left_entry_up_wrap.mmd]": 0.0017864997498691082, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/left_exit_sink_below.mmd]": 0.0008499159011989832, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006403750739991665, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0008784998208284378, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0007011250127106905, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0006221672520041466, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005844577681273222, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005853336770087481, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_to_tb_top_drop.mmd]": 0.0004825419746339321, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0004945839755237103, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004666680470108986, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005043328274041414, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_top_entry_cross_column.mmd]": 0.0021064591128379107, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0043527919333428144, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_around_below_leftmost.mmd]": 0.002619209000840783, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_bottom_row_bypass.mmd]": 0.0010652088094502687, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_leftmost_sink_branch.mmd]": 0.0009473748505115509, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_offrow_continuation.mmd]": 0.0008569587953388691, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_port_above_approach.mmd]": 0.0007474997546523809, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_pullaway.mmd]": 0.0008187070488929749, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_right_entry.mmd]": 0.0008195419795811176, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_trunk_out_of_range_section.mmd]": 0.0009084579069167376, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/merge_trunk_over_low_section.mmd]": 0.0009277502540498972, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/mismatched_tracks.mmd]": 0.000747875077649951, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/mixed_bundle_column.mmd]": 0.00189716718159616, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/mixed_port_sides.mmd]": 0.0006157488096505404, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/multi_input_convergence.mmd]": 0.0006532510742545128, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/multi_line_bundle.mmd]": 0.0008404988329857588, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0011210839729756117, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/near_vertical_junction_hook.mmd]": 0.0008120413403958082, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/off_track_convergence.mmd]": 0.0008754157461225986, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/off_track_convergence_multiline.mmd]": 0.0008133749943226576, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/off_track_input_above_consumer.mmd]": 0.0017982919234782457, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/parallel_independent.mmd]": 0.0006581670604646206, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/peeloff_extra_line_consumer.mmd]": 0.0008313320577144623, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/peeloff_riser_respace.mmd]": 0.0006831260398030281, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/reconverge_reversed_fold.mmd]": 0.005016625160351396, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/right_entry_from_above.mmd]": 0.0005739578045904636, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/right_entry_from_above_far.mmd]": 0.0004905008245259523, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005102911964058876, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/right_entry_wrap_no_fan.mmd]": 0.0004534160252660513, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/rl_entry_runway.mmd]": 0.0005398760549724102, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/rnaseq_lite.mmd]": 0.0014142508152872324, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/route_around_intervening.mmd]": 0.0006682910025119781, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/section_diamond.mmd]": 0.00079962401650846, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/self_crossing_bridge.mmd]": 0.0006428742781281471, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/shared_sink_parallel.mmd]": 0.002949291141703725, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/stacked_left_exit_drop.mmd]": 0.0005155012477189302, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/stacked_lr_serpentine.mmd]": 0.0007179172243922949, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_bottom_entry_flow_start.mmd]": 0.0004505838733166456, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.000578208127990365, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0038357088342309, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_column_continuation_two_lines.mmd]": 0.0009337901137769222, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_internal_diagonal.mmd]": 0.0006253328174352646, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_left_exit_step.mmd]": 0.0014752503484487534, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_lr_exit_left.mmd]": 0.0006463327445089817, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_lr_exit_right.mmd]": 0.0006024590693414211, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_passthrough_trunk.mmd]": 0.000565625261515379, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_perp_exit_side_neighbour.mmd]": 0.00043233507312834263, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_right_entry_stack.mmd]": 0.000604875385761261, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/tb_two_line_vert_seam.mmd]": 0.00047595915384590626, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/terminal_symmetric_fan.mmd]": 0.0004907071124762297, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/top_entry_header_clash.mmd]": 0.00046237604692578316, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/trunk_through_fan.mmd]": 0.0006415850948542356, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/twoline_fanout_up.mmd]": 0.000594249926507473, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/u_turn_fold.mmd]": 0.0018081660382449627, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/upward_bypass.mmd]": 0.0010220420081168413, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/variant_calling.mmd]": 0.0016829168889671564, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/wide_fan_in.mmd]": 0.0008653341792523861, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[topologies/wide_fan_out.mmd]": 0.000830208882689476, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[trunk_align_matching_bundle.mmd]": 0.0006181669887155294, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[variant_calling.mmd]": 0.0020842908415943384, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[variant_calling_tuned.mmd]": 0.002869791118428111, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[variantbenchmarking.mmd]": 0.002329207956790924, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[variantbenchmarking_auto.mmd]": 0.005498209036886692, + "tests/test_layout_invariants.py::test_fanout_junction_shares_exit_port_y[variantprioritization.mmd]": 0.001079833833500743, + "tests/test_layout_invariants.py::test_flat_frame_boundary_run_stays_level[topologies/convergent_offrow_exit_climb.mmd-annotation-reports-svvcf]": 0.0026835412718355656, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[bubble_forced_label_clears_diagonal.mmd]": 0.0006690842565149069, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[bubble_label_clears_diagonal.mmd]": 0.001333917025476694, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[bubble_output_above.mmd]": 0.0012244170065969229, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[captioned_sibling_outputs.mmd]": 0.0005314170848578215, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[centered_tracks.mmd]": 0.0005241259932518005, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[cross_track_interchange.mmd]": 0.0016607078723609447, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[da_pipeline.mmd]": 0.002019834006205201, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[diagonal_labels.mmd]": 0.0014449171721935272, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[diagonal_single_trunk_off_track.mmd]": 0.0013332501985132694, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[differentialabundance.mmd]": 0.0042145829647779465, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[differentialabundance_default.mmd]": 0.008015124825760722, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[directional_flow.mmd]": 0.0005154996179044247, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[disconnected_components.mmd]": 0.0007515829056501389, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[epitopeprediction.mmd]": 0.001091458136215806, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[file_icon_fanin.mmd]": 0.0009027502965182066, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[file_icons.mmd]": 0.0005462507251650095, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[font_scale.mmd]": 0.0007446249946951866, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[genomeassembly.mmd]": 0.0014566660393029451, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[genomeassembly_organellar.mmd]": 0.0040272497572004795, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[genomeassembly_staggered.mmd]": 0.0012621255591511726, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[genomic_pipeline.mmd]": 0.0024971668608486652, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[group_labels.mmd]": 0.0005597909912467003, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/01_minimal.mmd]": 0.0003749169409275055, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/02_sections.mmd]": 0.004277833271771669, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/03_fan_out.mmd]": 0.0024010001216083765, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/03b_fan_in_merge.mmd]": 0.002506999997422099, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/04_directions.mmd]": 0.0009924171026796103, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/05_file_icons.mmd]": 0.0005674590356647968, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/05b_multi_icons.mmd]": 0.000598415732383728, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/05c_files_icon.mmd]": 0.0012349158059805632, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/05d_folder_icon.mmd]": 0.0005723342765122652, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/05f_banner_labels.mmd]": 0.0005824570544064045, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/06a_without_hidden.mmd]": 0.0007646672893315554, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[guide/06b_with_hidden.mmd]": 0.0008186670020222664, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[hlatyping.mmd]": 0.0009042508900165558, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[icon_caption_wrap.mmd]": 0.0004423337522894144, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[leaf_file_icon_on_trunk.mmd]": 0.00040799914859235287, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[legend_combo.mmd]": 0.0013821248430758715, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[legend_logo_placement.mmd]": 0.0013338748831301928, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[longread_variant_calling.mmd]": 0.0018300432711839676, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[marker_styles.mmd]": 0.0006646669935435057, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[multiline_labels.mmd]": 0.0005316250026226044, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[off_track_output_branched.mmd]": 0.003789291949942708, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[off_track_outputs.mmd]": 0.000502666924148798, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[off_track_outputs_along_trunk.mmd]": 0.000504874624311924, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[rnaseq_auto.mmd]": 0.0016251238994300365, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[rnaseq_sections.mmd]": 0.0023087486624717712, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[rnaseq_sections_manual.mmd]": 0.002207917394116521, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[rnaseq_simple.mmd]": 0.0004358747974038124, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[simple_pipeline.mmd]": 0.00038237706758081913, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[tb_file_termini.mmd]": 0.000601915642619133, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[tb_right_exit_feeder_slots.mmd]": 0.0008579166606068611, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/aligner_row_pinned_continuation.mmd]": 0.0024498330894857645, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/around_below_ep_col_gt0.mmd]": 0.0010095001198351383, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/around_section_below.mmd]": 0.0006555416621267796, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/asymmetric_tree.mmd]": 0.0011183747556060553, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bottom_row_climb_clear_corridor.mmd]": 0.017205042066052556, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/branch_fold_forward.mmd]": 0.0011990009807050228, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/branch_fold_stability.mmd]": 0.0009326657745987177, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bt_chain.mmd]": 0.00036712479777634144, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bt_exit_top_above.mmd]": 0.0005559579003602266, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bt_exit_top_above_2line.mmd]": 0.0007406249642372131, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bt_fork.mmd]": 0.0013283737935125828, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bt_perp_entry_below.mmd]": 0.0006287498399615288, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bt_to_lr.mmd]": 0.0006732090841978788, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bt_to_tb.mmd]": 0.0006416668184101582, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bundle_terminator_continuation.mmd]": 0.0004307918716222048, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_fan_in_outer_slot.mmd]": 0.0015218749176710844, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0007859158795326948, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_label_rake.mmd]": 0.000746874837204814, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_label_rake_left.mmd]": 0.0007368330843746662, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_label_rake_wide.mmd]": 0.0007425409276038408, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_leftward_far_side_entry.mmd]": 0.0037526662927120924, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_leftward_overflow.mmd]": 0.000761374831199646, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/bypass_v_tight.mmd]": 0.0005968750920146704, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/clear_channel_target_aware_push.mmd]": 0.0006699592340737581, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/compact_gap_peer_conflict.mmd]": 0.0006840003188699484, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/compact_hidden_passthrough.mmd]": 0.0006337491795420647, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/complex_multipath.mmd]": 0.0012847918551415205, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/convergence_stacked_sink.mmd]": 0.0012672916054725647, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/convergent_offrow_exit_climb.mmd]": 0.002158375922590494, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/corridor_narrow_gap_fallback.mmd]": 0.0014412500895559788, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/cross_col_top_entry.mmd]": 0.0005662501789629459, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/cross_column_perp_drop.mmd]": 0.0004892076831310987, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/cross_column_perp_drop_far_exit.mmd]": 0.000469001242890954, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/cross_row_gap_wrap.mmd]": 0.0010869151446968317, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/deep_linear.mmd]": 0.0035634583327919245, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/disjoint_sameline_trunks.mmd]": 0.002925291657447815, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/divergent_fanout_split.mmd]": 0.0009591241832822561, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/dogleg_exempt_distinct.mmd]": 0.002224707743152976, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/dogleg_exempt_sameline.mmd]": 0.000617374898865819, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/dogleg_twoline_fanout.mmd]": 0.0007034179288893938, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/exit_corner_offset_dogleg.mmd]": 0.0007891668938100338, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/fan_bypass_nesting.mmd]": 0.0012177082244306803, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/fan_in_merge.mmd]": 0.0008416250348091125, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/fold_double.mmd]": 0.0022157502826303244, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/fold_fan_across.mmd]": 0.0017693748231977224, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/fold_stacked_branch.mmd]": 0.0033672910649329424, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/funcprofiler_upstream.mmd]": 0.012407292379066348, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/header_nudge.mmd]": 0.0014865421690046787, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/header_side_rotated.mmd]": 0.0017342488281428814, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/inrow_skip_breeze.mmd]": 0.0022194168996065855, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/inter_row_wrap_clearance.mmd]": 0.0015533750411123037, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/interchange_lane_reorder.mmd]": 0.0006288737058639526, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/junction_entry_align.mmd]": 0.0010190010070800781, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/junction_entry_collision.mmd]": 0.0007994170300662518, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/junction_entry_reversed_fold.mmd]": 0.0007258339319378138, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/junction_fanout_convergence.mmd]": 0.0006227921694517136, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/left_entry_up_wrap.mmd]": 0.0005524167791008949, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/left_exit_sink_below.mmd]": 0.000803167000412941, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006970418617129326, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0006164158694446087, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.001622708048671484, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0020177511032670736, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0017316658049821854, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_to_tb_top_cross_col.mmd]": 0.0028812920209020376, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_to_tb_top_drop.mmd]": 0.0005796658806502819, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0012654582969844341, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_to_tb_top_near_vertical.mmd]": 0.001413834048435092, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_to_tb_top_two_lines.mmd]": 0.0017269167583435774, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_top_entry_cross_column.mmd]": 0.0005409170407801867, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005309998523443937, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_around_below_leftmost.mmd]": 0.0008219170849770308, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_bottom_row_bypass.mmd]": 0.0007996659260243177, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_leftmost_sink_branch.mmd]": 0.0009425419848412275, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_offrow_continuation.mmd]": 0.005098499124869704, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_port_above_approach.mmd]": 0.0009647081606090069, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_pullaway.mmd]": 0.0008208327926695347, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_right_entry.mmd]": 0.0008460003882646561, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_trunk_out_of_range_section.mmd]": 0.0020135408267378807, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/merge_trunk_over_low_section.mmd]": 0.0027438329998403788, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/mismatched_tracks.mmd]": 0.0019275839440524578, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/mixed_bundle_column.mmd]": 0.001083542825654149, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/mixed_port_sides.mmd]": 0.0006087920628488064, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/multi_input_convergence.mmd]": 0.002697083866223693, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/multi_line_bundle.mmd]": 0.007124499883502722, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0010735420510172844, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/near_vertical_junction_hook.mmd]": 0.0006907919887453318, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/off_track_convergence.mmd]": 0.0006677929777652025, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/off_track_convergence_multiline.mmd]": 0.0007323750760406256, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/off_track_input_above_consumer.mmd]": 0.001723333029076457, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/parallel_independent.mmd]": 0.0006335827056318521, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/peeloff_extra_line_consumer.mmd]": 0.0006727920845150948, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/peeloff_riser_respace.mmd]": 0.0006554170977324247, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/post_convergence_trunk.mmd]": 0.00036458205431699753, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/reconverge_reversed_fold.mmd]": 0.001831417204812169, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/right_entry_from_above.mmd]": 0.0004831240512430668, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/right_entry_from_above_far.mmd]": 0.00046979240141808987, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005056669469922781, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/right_entry_wrap_no_fan.mmd]": 0.0004577923100441694, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/rl_entry_runway.mmd]": 0.0005404159892350435, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/rnaseq_lite.mmd]": 0.0015175000298768282, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/route_around_intervening.mmd]": 0.0006483329925686121, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/section_diamond.mmd]": 0.002365333028137684, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/self_crossing_bridge.mmd]": 0.0007877082098275423, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/shared_sink_parallel.mmd]": 0.0011177919805049896, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/single_section.mmd]": 0.0016450828406959772, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/stacked_left_exit_drop.mmd]": 0.0007454580627381802, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/stacked_lr_serpentine.mmd]": 0.0007393341511487961, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007131251040846109, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_bottom_entry_flow_start.mmd]": 0.0010729169007390738, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0006075419951230288, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007345422636717558, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_column_continuation_two_lines.mmd]": 0.0013046253006905317, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_convergence_straight_drop.mmd]": 0.00042758299969136715, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_internal_diagonal.mmd]": 0.0005565420724451542, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_left_exit_step.mmd]": 0.0014023338444530964, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_lr_exit_left.mmd]": 0.000687458086758852, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_lr_exit_right.mmd]": 0.0006258750800043344, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_passthrough_continuation.mmd]": 0.0008660419844090939, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_passthrough_trunk.mmd]": 0.0032925817649811506, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0004655832890421152, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_right_entry_stack.mmd]": 0.0006496249698102474, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_trunk_through_fan.mmd]": 0.004020750056952238, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/tb_two_line_vert_seam.mmd]": 0.0006992931012064219, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/terminal_symmetric_fan.mmd]": 0.0005509592592716217, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/terminus_join.mmd]": 0.00034270784817636013, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/top_entry_header_clash.mmd]": 0.000478335190564394, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/trunk_through_fan.mmd]": 0.0007084158714860678, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/twoline_fanout_up.mmd]": 0.006714167073369026, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/u_turn_fold.mmd]": 0.001546790823340416, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/uneven_diamond.mmd]": 0.000400124816223979, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/upward_bypass.mmd]": 0.0009916671551764011, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/variant_calling.mmd]": 0.0019202500116080046, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/wide_fan_in.mmd]": 0.0008322491776198149, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/wide_fan_out.mmd]": 0.0008177075069397688, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/wide_label_fan.mmd]": 0.00039520813152194023, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[topologies/wrapped_label_trunk.mmd]": 0.000456750625744462, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[trunk_align_matching_bundle.mmd]": 0.002780082868412137, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[uneven_diamond.mmd]": 0.0004404587671160698, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[variant_calling.mmd]": 0.0007903748191893101, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[variant_calling_tuned.mmd]": 0.0008926659356802702, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[variantbenchmarking.mmd]": 0.002175083151087165, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[variantbenchmarking_auto.mmd]": 0.0035344590432941914, + "tests/test_layout_invariants.py::test_flow_exit_port_anchors_to_carrying_station[variantprioritization.mmd]": 0.0011501249391585588, + "tests/test_layout_invariants.py::test_frame_member_reanchors_when_fed_through_risers[topologies/convergent_offrow_exit_climb.mmd-annotation-expected_slots0]": 0.002694249851629138, + "tests/test_layout_invariants.py::test_genomeassembly_auto_layout_is_single_row": 0.043918458046391606, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[bubble_forced_label_clears_diagonal.mmd]": 0.0013262508437037468, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[bubble_label_clears_diagonal.mmd]": 0.0018240001518279314, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[bubble_output_above.mmd]": 0.0013266662135720253, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[captioned_sibling_outputs.mmd]": 0.000683333957567811, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[centered_tracks.mmd]": 0.0006923337932676077, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[cross_track_interchange.mmd]": 0.00135170784778893, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[da_pipeline.mmd]": 0.003469959134235978, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[diagonal_labels.mmd]": 0.004666583146899939, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[diagonal_single_trunk_off_track.mmd]": 0.0016136248596012592, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[differentialabundance.mmd]": 0.005699332803487778, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[differentialabundance_default.mmd]": 0.0034240419045090675, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[directional_flow.mmd]": 0.000691374996677041, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[disconnected_components.mmd]": 0.0011999581474810839, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[epitopeprediction.mmd]": 0.004457957111299038, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[file_icon_fanin.mmd]": 0.0012894580140709877, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[file_icons.mmd]": 0.0008530430495738983, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[font_scale.mmd]": 0.0005515420343726873, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[genomeassembly.mmd]": 0.004436081741005182, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[genomeassembly_organellar.mmd]": 0.003726499853655696, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[genomeassembly_staggered.mmd]": 0.004959458019584417, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[genomic_pipeline.mmd]": 0.007374417036771774, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[group_labels.mmd]": 0.01327737607061863, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/01_minimal.mmd]": 0.0005940408445894718, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/02_sections.mmd]": 0.0010411669500172138, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/03_fan_out.mmd]": 0.0017620818689465523, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/03b_fan_in_merge.mmd]": 0.0014961250126361847, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/04_directions.mmd]": 0.0024371668696403503, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/05_file_icons.mmd]": 0.0027727081906050444, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/05b_multi_icons.mmd]": 0.0011974999215453863, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/05c_files_icon.mmd]": 0.001059667905792594, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/05d_folder_icon.mmd]": 0.000929124653339386, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/05f_banner_labels.mmd]": 0.0009957081638276577, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/06a_without_hidden.mmd]": 0.001977166859433055, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[guide/06b_with_hidden.mmd]": 0.0012551250401884317, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[hlatyping.mmd]": 0.0017590830102562904, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[icon_caption_wrap.mmd]": 0.003151250770315528, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[leaf_file_icon_on_trunk.mmd]": 0.0006792501080781221, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[legend_combo.mmd]": 0.0007008330430835485, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[legend_logo_placement.mmd]": 0.0016652911435812712, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[longread_variant_calling.mmd]": 0.0045690820552408695, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[marker_styles.mmd]": 0.0029853740707039833, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[multiline_labels.mmd]": 0.0008469161111861467, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[off_track_output_branched.mmd]": 0.002374541014432907, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[off_track_outputs.mmd]": 0.0013511660508811474, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[off_track_outputs_along_trunk.mmd]": 0.000761750154197216, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[rnaseq_auto.mmd]": 0.0032018341589719057, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[rnaseq_sections.mmd]": 0.004528166027739644, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[rnaseq_sections_manual.mmd]": 0.012378790648654103, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[rnaseq_simple.mmd]": 0.0004960841033607721, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[simple_pipeline.mmd]": 0.005071709165349603, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[tb_file_termini.mmd]": 0.0012340000830590725, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[tb_right_exit_feeder_slots.mmd]": 0.0020917088259011507, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/aligner_row_pinned_continuation.mmd]": 0.0016434171702712774, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/around_below_ep_col_gt0.mmd]": 0.0009628748521208763, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/around_section_below.mmd]": 0.0010499157942831516, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/asymmetric_tree.mmd]": 0.0019176248461008072, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0013285418972373009, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/branch_fold_forward.mmd]": 0.001602125121280551, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/branch_fold_stability.mmd]": 0.0012434988748282194, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bt_chain.mmd]": 0.0004785002674907446, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bt_exit_top_above.mmd]": 0.0006866669282317162, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bt_exit_top_above_2line.mmd]": 0.000755583168938756, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bt_fork.mmd]": 0.0005197499413043261, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bt_perp_entry_below.mmd]": 0.0011623331811279058, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bt_to_lr.mmd]": 0.0008274163119494915, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bt_to_tb.mmd]": 0.0010662081185728312, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bundle_terminator_continuation.mmd]": 0.0007342079188674688, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_fan_in_outer_slot.mmd]": 0.0026891250163316727, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0012884580064564943, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_label_rake.mmd]": 0.001210416667163372, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_label_rake_left.mmd]": 0.0012255003675818443, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_label_rake_wide.mmd]": 0.0011885000858455896, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_leftward_far_side_entry.mmd]": 0.0011124175507575274, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_leftward_overflow.mmd]": 0.004389792215079069, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/bypass_v_tight.mmd]": 0.0011042098049074411, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/clear_channel_target_aware_push.mmd]": 0.0015909180510789156, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/compact_gap_peer_conflict.mmd]": 0.003557957708835602, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/compact_hidden_passthrough.mmd]": 0.001066375058144331, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/complex_multipath.mmd]": 0.0022127910051494837, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/convergence_stacked_sink.mmd]": 0.001905915793031454, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/convergent_offrow_exit_climb.mmd]": 0.004046750953420997, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/corridor_narrow_gap_fallback.mmd]": 0.0010457509197294712, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/cross_col_top_entry.mmd]": 0.0007024160586297512, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/cross_column_perp_drop.mmd]": 0.0007320011500269175, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007506252732127905, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/cross_row_gap_wrap.mmd]": 0.006316125858575106, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/deep_linear.mmd]": 0.00876570912078023, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/disjoint_sameline_trunks.mmd]": 0.006175917107611895, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/divergent_fanout_split.mmd]": 0.0009269576985388994, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/dogleg_exempt_distinct.mmd]": 0.001190833980217576, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/dogleg_exempt_sameline.mmd]": 0.0009493748657405376, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/dogleg_twoline_fanout.mmd]": 0.0009640001226216555, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/exit_corner_offset_dogleg.mmd]": 0.0011303762439638376, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/fan_bypass_nesting.mmd]": 0.0021119590383023024, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/fan_in_merge.mmd]": 0.0014855838380753994, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/fold_double.mmd]": 0.003783624852076173, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/fold_fan_across.mmd]": 0.003940375987440348, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/fold_stacked_branch.mmd]": 0.0032676667906343937, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/funcprofiler_upstream.mmd]": 0.002196500077843666, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/header_nudge.mmd]": 0.006293124053627253, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/header_side_rotated.mmd]": 0.002590416232123971, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/inrow_skip_breeze.mmd]": 0.0007431670092046261, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/inter_row_wrap_clearance.mmd]": 0.0010326243937015533, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/interchange_lane_reorder.mmd]": 0.0007548753637820482, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/junction_entry_align.mmd]": 0.0021152091212570667, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/junction_entry_collision.mmd]": 0.001342165982350707, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/junction_entry_reversed_fold.mmd]": 0.0011887496802955866, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/junction_fanout_convergence.mmd]": 0.0009862089063972235, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/left_entry_up_wrap.mmd]": 0.0007529170252382755, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/left_exit_sink_below.mmd]": 0.004344166023656726, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011007077991962433, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.00093812495470047, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010584993287920952, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0024242920335382223, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0009491669479757547, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_to_tb_top_cross_col.mmd]": 0.0009170831181108952, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_to_tb_top_drop.mmd]": 0.0006947920192033052, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0017666250932961702, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0020565830636769533, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_to_tb_top_two_lines.mmd]": 0.00167758297175169, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_top_entry_cross_column.mmd]": 0.0007525829132646322, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007707092445343733, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_around_below_leftmost.mmd]": 0.0013599579688161612, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_bottom_row_bypass.mmd]": 0.008222584147006273, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_leftmost_sink_branch.mmd]": 0.0018003741279244423, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_offrow_continuation.mmd]": 0.0011416669003665447, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_port_above_approach.mmd]": 0.0011777079198509455, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_pullaway.mmd]": 0.0013690409250557423, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_right_entry.mmd]": 0.002017290098592639, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_trunk_out_of_range_section.mmd]": 0.0016195829957723618, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/merge_trunk_over_low_section.mmd]": 0.005621165968477726, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/mismatched_tracks.mmd]": 0.001699834130704403, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/mixed_bundle_column.mmd]": 0.001785957021638751, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/mixed_port_sides.mmd]": 0.0009369582403451204, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/multi_input_convergence.mmd]": 0.0010518338531255722, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/multi_line_bundle.mmd]": 0.0015090839006006718, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0012878759298473597, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/near_vertical_junction_hook.mmd]": 0.0010988342110067606, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/off_track_convergence.mmd]": 0.004482042044401169, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/off_track_convergence_multiline.mmd]": 0.0022832080721855164, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/off_track_input_above_consumer.mmd]": 0.003448916831985116, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/parallel_independent.mmd]": 0.0011361681390553713, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/peeloff_extra_line_consumer.mmd]": 0.0011393758468329906, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/peeloff_riser_respace.mmd]": 0.00107216602191329, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/post_convergence_trunk.mmd]": 0.0012276670895516872, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/reconverge_reversed_fold.mmd]": 0.003264833940193057, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/right_entry_from_above.mmd]": 0.0006972909905016422, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/right_entry_from_above_far.mmd]": 0.0006924159824848175, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/right_entry_gap_above_empty_row.mmd]": 0.0008032922632992268, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/right_entry_wrap_no_fan.mmd]": 0.0007135840132832527, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/rl_entry_runway.mmd]": 0.0008796660695225, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/rnaseq_lite.mmd]": 0.0022762080188840628, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/route_around_intervening.mmd]": 0.0013290410861372948, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/section_diamond.mmd]": 0.0026539163663983345, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/self_crossing_bridge.mmd]": 0.0022112487349659204, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/shared_sink_parallel.mmd]": 0.003439082996919751, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/single_section.mmd]": 0.0005960408598184586, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/stacked_left_exit_drop.mmd]": 0.0009679996874183416, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/stacked_lr_serpentine.mmd]": 0.0011832509189844131, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0011893331538885832, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_bottom_entry_flow_start.mmd]": 0.0007002907805144787, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0009215408936142921, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.004558082669973373, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_column_continuation_two_lines.mmd]": 0.0008583751041442156, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_convergence_straight_drop.mmd]": 0.0005703743081539869, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_internal_diagonal.mmd]": 0.0009186239913105965, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_left_exit_step.mmd]": 0.0013844170607626438, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_lr_exit_left.mmd]": 0.0009825839661061764, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_lr_exit_right.mmd]": 0.0011014991905540228, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_passthrough_continuation.mmd]": 0.0006079997401684523, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_passthrough_trunk.mmd]": 0.0017514987848699093, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0007932500448077917, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_right_entry_stack.mmd]": 0.0013770009391009808, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_trunk_through_fan.mmd]": 0.0006065000779926777, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/tb_two_line_vert_seam.mmd]": 0.0007867082022130489, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/terminal_symmetric_fan.mmd]": 0.0013955410104244947, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/terminus_join.mmd]": 0.0010097497142851353, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/top_entry_header_clash.mmd]": 0.0008559999987483025, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/trunk_through_fan.mmd]": 0.0012261669617146254, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/twoline_fanout_up.mmd]": 0.0009638331830501556, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/u_turn_fold.mmd]": 0.003315082984045148, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/uneven_diamond.mmd]": 0.0006931680254638195, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/upward_bypass.mmd]": 0.002056542318314314, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/variant_calling.mmd]": 0.004077834077179432, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/wide_fan_in.mmd]": 0.0029981257393956184, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/wide_fan_out.mmd]": 0.03049433301202953, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/wide_label_fan.mmd]": 0.0009117918089032173, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[topologies/wrapped_label_trunk.mmd]": 0.0007492078002542257, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[trunk_align_matching_bundle.mmd]": 0.0015899999998509884, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[uneven_diamond.mmd]": 0.000565417343750596, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[variant_calling.mmd]": 0.0069629589561372995, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[variant_calling_tuned.mmd]": 0.0018628332763910294, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[variantbenchmarking.mmd]": 0.00788183300755918, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[variantbenchmarking_auto.mmd]": 0.018531082896515727, + "tests/test_layout_invariants.py::test_grid_snap_does_not_mutate_x[variantprioritization.mmd]": 0.0036859167739748955, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[cross_track_interchange.mmd]": 0.06942729069851339, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[da_pipeline.mmd]": 0.40145191573537886, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[diagonal_labels.mmd]": 0.26718125003390014, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[diagonal_single_trunk_off_track.mmd]": 0.15957316593267024, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[differentialabundance.mmd]": 0.4137794158887118, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[differentialabundance_default.mmd]": 0.4211305412463844, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[disconnected_components.mmd]": 0.04478058312088251, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[epitopeprediction.mmd]": 0.10461683291941881, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[file_icon_fanin.mmd]": 0.07655462622642517, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[file_icons.mmd]": 0.03496683179400861, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[genomeassembly.mmd]": 0.16885941731743515, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[genomeassembly_organellar.mmd]": 0.21658041724003851, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[genomeassembly_staggered.mmd]": 0.15865295799449086, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[genomic_pipeline.mmd]": 0.807195583358407, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[group_labels.mmd]": 0.036495500011369586, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/02_sections.mmd]": 0.059434623923152685, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/03_fan_out.mmd]": 0.06997608416713774, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/03b_fan_in_merge.mmd]": 0.06533074914477766, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/04_directions.mmd]": 0.08819299913011491, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/05_file_icons.mmd]": 0.037185083841905, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/05b_multi_icons.mmd]": 0.06685291696339846, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/05c_files_icon.mmd]": 0.03664350020699203, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/05d_folder_icon.mmd]": 0.03864566679112613, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/05f_banner_labels.mmd]": 0.028233332559466362, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/06a_without_hidden.mmd]": 0.060144790913909674, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[guide/06b_with_hidden.mmd]": 0.07198441727086902, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[hlatyping.mmd]": 0.07780133304186165, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[legend_logo_placement.mmd]": 0.07404541620053351, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[longread_variant_calling.mmd]": 0.5491570841986686, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[marker_styles.mmd]": 0.04857620783150196, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[multiline_labels.mmd]": 0.04299824987538159, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[rnaseq_auto.mmd]": 0.2360358750447631, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[rnaseq_sections.mmd]": 0.16232987493276596, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[rnaseq_sections_manual.mmd]": 1.1148361670784652, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[tb_file_termini.mmd]": 0.11002258281223476, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[tb_right_exit_feeder_slots.mmd]": 0.07362616574391723, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/aligner_row_pinned_continuation.mmd]": 0.08743641688488424, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/around_below_ep_col_gt0.mmd]": 0.056771500036120415, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/around_section_below.mmd]": 0.05468770698644221, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/asymmetric_tree.mmd]": 0.07004954223521054, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bottom_row_climb_clear_corridor.mmd]": 0.030451750848442316, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/branch_fold_forward.mmd]": 0.07654124987311661, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/branch_fold_stability.mmd]": 0.04415429080836475, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bt_exit_top_above.mmd]": 0.02912629209458828, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bt_exit_top_above_2line.mmd]": 0.032657458214089274, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bt_perp_entry_below.mmd]": 0.03285516705363989, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bt_to_lr.mmd]": 0.023812459083274007, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bt_to_tb.mmd]": 0.022352373925969005, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_fan_in_outer_slot.mmd]": 0.15191812510602176, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_gap2_rightward_overflow.mmd]": 0.12379558337852359, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_label_rake.mmd]": 0.06380370818078518, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_label_rake_left.mmd]": 0.06168175023049116, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_label_rake_wide.mmd]": 0.10270791733637452, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_leftward_far_side_entry.mmd]": 0.09450950031168759, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_leftward_overflow.mmd]": 0.06255166698247194, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/bypass_v_tight.mmd]": 0.05634350120089948, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/clear_channel_target_aware_push.mmd]": 0.0364720830693841, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/compact_gap_peer_conflict.mmd]": 0.05614441679790616, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/compact_hidden_passthrough.mmd]": 0.03216595691628754, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/complex_multipath.mmd]": 0.13651054189540446, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/convergence_stacked_sink.mmd]": 0.07151729194447398, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/convergent_offrow_exit_climb.mmd]": 0.2878283739555627, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/corridor_narrow_gap_fallback.mmd]": 0.051853999961167574, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/cross_col_top_entry.mmd]": 0.02307120687328279, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/cross_column_perp_drop.mmd]": 0.024492583237588406, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/cross_column_perp_drop_far_exit.mmd]": 0.03296387521550059, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/cross_row_gap_wrap.mmd]": 0.07665950013324618, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/deep_linear.mmd]": 0.09768112585879862, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/disjoint_sameline_trunks.mmd]": 0.08510316605679691, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/divergent_fanout_split.mmd]": 0.023053792072460055, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/dogleg_exempt_distinct.mmd]": 0.065536790760234, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/dogleg_exempt_sameline.mmd]": 0.030366041930392385, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/dogleg_twoline_fanout.mmd]": 0.11240954208187759, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/exit_corner_offset_dogleg.mmd]": 0.05767629179172218, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/fan_bypass_nesting.mmd]": 0.12301287497393787, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/fan_in_merge.mmd]": 0.30704358289949596, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/fold_double.mmd]": 0.24856954207643867, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/fold_fan_across.mmd]": 0.2631949167698622, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/fold_stacked_branch.mmd]": 0.2604525829665363, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/funcprofiler_upstream.mmd]": 0.4426696670707315, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/header_nudge.mmd]": 0.01955933403223753, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/header_side_rotated.mmd]": 0.03441895800642669, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/inter_row_wrap_clearance.mmd]": 0.053642126033082604, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/junction_entry_align.mmd]": 0.09398654219694436, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/junction_entry_collision.mmd]": 0.07271229196339846, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/junction_entry_reversed_fold.mmd]": 0.06028850027360022, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/junction_fanout_convergence.mmd]": 0.05287695792503655, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/left_entry_up_wrap.mmd]": 0.019736291840672493, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/left_exit_sink_below.mmd]": 0.04159154207445681, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.03196475002914667, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.05144129088148475, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.05232699913904071, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.04437483265064657, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_perp_top_exit_side_entry.mmd]": 0.039622790878638625, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_to_tb_top_cross_col.mmd]": 0.04972120909951627, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_to_tb_top_drop.mmd]": 0.015472374856472015, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.033198666758835316, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_to_tb_top_near_vertical.mmd]": 0.024197042221203446, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_to_tb_top_two_lines.mmd]": 0.027596458792686462, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_top_entry_cross_column.mmd]": 0.017221583053469658, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.026174334110692143, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_around_below_leftmost.mmd]": 0.04486741591244936, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_bottom_row_bypass.mmd]": 0.07428720919415355, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_leftmost_sink_branch.mmd]": 0.09017483307980001, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_offrow_continuation.mmd]": 0.043435415951535106, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_port_above_approach.mmd]": 0.05818904098123312, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_pullaway.mmd]": 0.0815310429316014, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_right_entry.mmd]": 0.043196792248636484, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_trunk_out_of_range_section.mmd]": 0.10405720793642104, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/merge_trunk_over_low_section.mmd]": 0.09985795873217285, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/mismatched_tracks.mmd]": 0.5236185407266021, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/mixed_bundle_column.mmd]": 0.0927759159822017, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/mixed_port_sides.mmd]": 0.03813400096260011, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/multi_input_convergence.mmd]": 0.051533541176468134, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/multi_line_bundle.mmd]": 0.0637862088624388, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/multicarrier_offrow_exit_climb.mmd]": 0.10357200005091727, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/near_vertical_junction_hook.mmd]": 0.04460933292284608, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/off_track_convergence.mmd]": 0.04726174985989928, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/off_track_convergence_multiline.mmd]": 0.04476487496867776, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/off_track_input_above_consumer.mmd]": 0.19815350114367902, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/parallel_independent.mmd]": 0.04258095799013972, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/peeloff_extra_line_consumer.mmd]": 0.0868086670525372, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/peeloff_riser_respace.mmd]": 0.0864316679071635, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/reconverge_reversed_fold.mmd]": 0.24084095796570182, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/right_entry_from_above.mmd]": 0.01907554012723267, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/right_entry_from_above_far.mmd]": 0.022311915876343846, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/right_entry_gap_above_empty_row.mmd]": 0.04642266617156565, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/right_entry_wrap_no_fan.mmd]": 0.057338915998116136, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/rl_entry_runway.mmd]": 0.036055083153769374, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/rnaseq_lite.mmd]": 0.16770875011570752, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/route_around_intervening.mmd]": 0.04512799996882677, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/section_diamond.mmd]": 0.0492338752374053, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/self_crossing_bridge.mmd]": 0.03467166610062122, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/shared_sink_parallel.mmd]": 0.0902857081964612, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/stacked_left_exit_drop.mmd]": 0.04141599987633526, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/stacked_lr_serpentine.mmd]": 0.03495875117368996, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_bottom_entry_flow_start.mmd]": 0.01908737514168024, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.03984045796096325, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.039585917023941875, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_column_continuation_two_lines.mmd]": 0.02101949998177588, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_internal_diagonal.mmd]": 0.02939325082115829, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_left_exit_step.mmd]": 0.04276299988850951, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_lr_exit_left.mmd]": 0.03738508210517466, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_lr_exit_right.mmd]": 0.05639691697433591, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_passthrough_trunk.mmd]": 0.0454611680470407, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_perp_exit_side_neighbour.mmd]": 0.016537458868697286, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_right_entry_stack.mmd]": 0.07417895901016891, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/tb_two_line_vert_seam.mmd]": 0.03402991592884064, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/terminal_symmetric_fan.mmd]": 0.0392192502040416, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/top_entry_header_clash.mmd]": 0.028786999871954322, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/trunk_through_fan.mmd]": 0.07148183416575193, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/twoline_fanout_up.mmd]": 0.06355041614733636, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/u_turn_fold.mmd]": 0.17535329121164978, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/upward_bypass.mmd]": 0.16917941719293594, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/variant_calling.mmd]": 0.5711711661424488, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/wide_fan_in.mmd]": 0.060461750254034996, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[topologies/wide_fan_out.mmd]": 0.07739683310501277, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[trunk_align_matching_bundle.mmd]": 0.03500716597773135, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[variant_calling.mmd]": 0.06023349962197244, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[variant_calling_tuned.mmd]": 0.0870078329462558, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[variantbenchmarking.mmd]": 0.45260591711848974, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[variantbenchmarking_auto.mmd]": 0.5841220819856972, + "tests/test_layout_invariants.py::test_grid_snap_keeps_columns_distinct[variantprioritization.mmd]": 0.09737983299419284, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[cross_track_interchange.mmd]": 0.0010371680837124586, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[da_pipeline.mmd]": 0.011946165701374412, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[diagonal_labels.mmd]": 0.0022838751319795847, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[diagonal_single_trunk_off_track.mmd]": 0.007164707640185952, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[differentialabundance.mmd]": 0.005549500230699778, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[differentialabundance_default.mmd]": 0.01817670906893909, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[disconnected_components.mmd]": 0.002062001032754779, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[epitopeprediction.mmd]": 0.0033517491538077593, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[file_icon_fanin.mmd]": 0.0013842498883605003, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[file_icons.mmd]": 0.0007038749754428864, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[genomeassembly.mmd]": 0.007278833072632551, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[genomeassembly_organellar.mmd]": 0.003800000064074993, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[genomeassembly_staggered.mmd]": 0.004539458081126213, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[genomic_pipeline.mmd]": 0.019473751075565815, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[group_labels.mmd]": 0.0008599592838436365, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/02_sections.mmd]": 0.0037802502047270536, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/03_fan_out.mmd]": 0.004153708927333355, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/03b_fan_in_merge.mmd]": 0.0038344180211424828, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/04_directions.mmd]": 0.001600583316758275, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/05_file_icons.mmd]": 0.0007358337752521038, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/05b_multi_icons.mmd]": 0.0023205429315567017, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/05c_files_icon.mmd]": 0.0007519999053329229, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/05d_folder_icon.mmd]": 0.0006975829601287842, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/05f_banner_labels.mmd]": 0.0007656661327928305, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/06a_without_hidden.mmd]": 0.0010210820473730564, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[guide/06b_with_hidden.mmd]": 0.0009956662543118, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[hlatyping.mmd]": 0.0012489589862525463, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[legend_logo_placement.mmd]": 0.004509540973231196, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[longread_variant_calling.mmd]": 0.005280542885884643, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[marker_styles.mmd]": 0.0009030001237988472, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[multiline_labels.mmd]": 0.0007102498784661293, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[regressions/stacked_collector_fanin.mmd]": 0.005757166305556893, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[rnaseq_auto.mmd]": 0.0029936672654002905, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[rnaseq_sections.mmd]": 0.0063367499969899654, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[rnaseq_sections_manual.mmd]": 0.005866457941010594, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[tb_file_termini.mmd]": 0.0008615825790911913, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[tb_right_exit_feeder_slots.mmd]": 0.0013980832882225513, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/aligner_row_pinned_continuation.mmd]": 0.0013930408749729395, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/around_below_ep_col_gt0.mmd]": 0.0010389161761850119, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/around_section_below.mmd]": 0.0009824580047279596, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/asymmetric_tree.mmd]": 0.0017093750648200512, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bottom_row_climb_clear_corridor.mmd]": 0.001179457874968648, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/branch_fold_forward.mmd]": 0.0012655421160161495, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/branch_fold_stability.mmd]": 0.00693674897775054, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bt_exit_top_above.mmd]": 0.0006938762962818146, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bt_exit_top_above_2line.mmd]": 0.006006292067468166, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bt_perp_entry_below.mmd]": 0.0014708752278238535, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bt_to_lr.mmd]": 0.0007589568849653006, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bt_to_tb.mmd]": 0.0006950001697987318, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_fan_in_outer_slot.mmd]": 0.004122334299609065, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0019937092438340187, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_label_rake.mmd]": 0.0010339170694351196, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_label_rake_left.mmd]": 0.0017489171586930752, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_label_rake_wide.mmd]": 0.002151290886104107, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017096670344471931, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_leftward_overflow.mmd]": 0.0015760830137878656, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/bypass_v_tight.mmd]": 0.0007932079024612904, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/clear_channel_target_aware_push.mmd]": 0.001014875015243888, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/compact_gap_peer_conflict.mmd]": 0.0009975424036383629, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/compact_hidden_passthrough.mmd]": 0.0008627090137451887, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/complex_multipath.mmd]": 0.0025417080614715815, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/convergence_stacked_sink.mmd]": 0.001837457763031125, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/convergent_offrow_exit_climb.mmd]": 0.004214041866362095, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/corridor_narrow_gap_fallback.mmd]": 0.006406750297173858, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/cross_col_top_entry.mmd]": 0.0007833749987185001, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/cross_column_perp_drop.mmd]": 0.0007803745102137327, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0017344988882541656, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/cross_row_gap_wrap.mmd]": 0.0035034590400755405, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/deep_linear.mmd]": 0.002965542022138834, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/disjoint_sameline_trunks.mmd]": 0.0037547918036580086, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/divergent_fanout_split.mmd]": 0.0009476668201386929, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/dogleg_exempt_distinct.mmd]": 0.0020031658932566643, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/dogleg_exempt_sameline.mmd]": 0.0009687079582363367, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/dogleg_twoline_fanout.mmd]": 0.0009396679233759642, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/exit_corner_offset_dogleg.mmd]": 0.0011159160640090704, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/fan_bypass_nesting.mmd]": 0.007525417022407055, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/fan_in_merge.mmd]": 0.0025809581857174635, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/fold_double.mmd]": 0.007187958341091871, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/fold_fan_across.mmd]": 0.007674333872273564, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/fold_stacked_branch.mmd]": 0.00309095811098814, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/funcprofiler_upstream.mmd]": 0.008124124025925994, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/header_nudge.mmd]": 0.002053749281913042, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/header_side_rotated.mmd]": 0.0008615420665591955, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/inter_row_wrap_clearance.mmd]": 0.0019624170381575823, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/junction_entry_align.mmd]": 0.004629876231774688, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/junction_entry_collision.mmd]": 0.005246583139523864, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/junction_entry_reversed_fold.mmd]": 0.0028321670833975077, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/junction_fanout_convergence.mmd]": 0.0041082079987972975, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/left_entry_up_wrap.mmd]": 0.0009118751622736454, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/left_exit_sink_below.mmd]": 0.0021374172065407038, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0008779580239206553, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0009179566986858845, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0009276252239942551, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0010347908828407526, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0008970010094344616, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_to_tb_top_cross_col.mmd]": 0.0008159161079674959, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_to_tb_top_drop.mmd]": 0.0005785408429801464, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007148748263716698, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006571251433342695, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_to_tb_top_two_lines.mmd]": 0.0007814581040292978, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_top_entry_cross_column.mmd]": 0.0009122083429247141, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007368340156972408, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_around_below_leftmost.mmd]": 0.0013656658120453358, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_bottom_row_bypass.mmd]": 0.0036632900591939688, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_leftmost_sink_branch.mmd]": 0.0013366250786930323, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_offrow_continuation.mmd]": 0.0010348339565098286, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_port_above_approach.mmd]": 0.0015081667806953192, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_pullaway.mmd]": 0.0036572490353137255, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_right_entry.mmd]": 0.0014348342083394527, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_trunk_out_of_range_section.mmd]": 0.004469957668334246, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/merge_trunk_over_low_section.mmd]": 0.0023767498787492514, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/mismatched_tracks.mmd]": 0.0011736261658370495, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/mixed_bundle_column.mmd]": 0.001828707754611969, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/mixed_port_sides.mmd]": 0.0008342077489942312, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/multi_input_convergence.mmd]": 0.000953541835770011, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/multi_line_bundle.mmd]": 0.0013740849681198597, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0011687912046909332, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/near_vertical_junction_hook.mmd]": 0.0009623749647289515, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/off_track_convergence.mmd]": 0.0008036661893129349, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/off_track_convergence_multiline.mmd]": 0.0009874161332845688, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/off_track_input_above_consumer.mmd]": 0.004733666777610779, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/parallel_independent.mmd]": 0.0011754580773413181, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/peeloff_extra_line_consumer.mmd]": 0.002797583816573024, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/peeloff_riser_respace.mmd]": 0.0017957910895347595, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/reconverge_reversed_fold.mmd]": 0.003441165667027235, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/right_entry_from_above.mmd]": 0.0006315826904028654, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/right_entry_from_above_far.mmd]": 0.0006045829504728317, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006667920388281345, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/right_entry_wrap_no_fan.mmd]": 0.001115873921662569, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/rl_entry_runway.mmd]": 0.0008247918449342251, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/rnaseq_lite.mmd]": 0.0024596669245511293, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/route_around_intervening.mmd]": 0.009459917899221182, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/section_diamond.mmd]": 0.00397574994713068, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/self_crossing_bridge.mmd]": 0.0031552091240882874, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/shared_sink_parallel.mmd]": 0.008320043096318841, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/stacked_left_exit_drop.mmd]": 0.0015605839435011148, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/stacked_lr_serpentine.mmd]": 0.0013618750963360071, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_bottom_entry_flow_start.mmd]": 0.0021336241625249386, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.002569667063653469, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.004843875067308545, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_column_continuation_two_lines.mmd]": 0.0007824162021279335, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_internal_diagonal.mmd]": 0.002649999689310789, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_left_exit_step.mmd]": 0.0014971240889281034, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_lr_exit_left.mmd]": 0.0010020406916737556, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_lr_exit_right.mmd]": 0.0010632500052452087, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_passthrough_trunk.mmd]": 0.0008402499370276928, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006827919278293848, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_right_entry_stack.mmd]": 0.0010769159998744726, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/tb_two_line_vert_seam.mmd]": 0.0007956260815262794, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/terminal_symmetric_fan.mmd]": 0.0007565428968518972, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/top_entry_header_clash.mmd]": 0.0006059170700609684, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/trunk_through_fan.mmd]": 0.001264957943931222, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/twoline_fanout_up.mmd]": 0.0009662930388003588, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/u_turn_fold.mmd]": 0.002278751228004694, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/upward_bypass.mmd]": 0.0025978749617934227, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/variant_calling.mmd]": 0.0038693740498274565, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/wide_fan_in.mmd]": 0.001154125900939107, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[topologies/wide_fan_out.mmd]": 0.0032472910825163126, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[trunk_align_matching_bundle.mmd]": 0.0020499168895184994, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[variant_calling.mmd]": 0.0032734167762100697, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[variant_calling_tuned.mmd]": 0.0015575001016259193, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[variantbenchmarking.mmd]": 0.004315082915127277, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[variantbenchmarking_auto.mmd]": 0.004216792061924934, + "tests/test_layout_invariants.py::test_inter_row_run_clears_source_section[variantprioritization.mmd]": 0.001623040996491909, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[bubble_forced_label_clears_diagonal.mmd]": 0.0006149590481072664, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[bubble_label_clears_diagonal.mmd]": 0.0005951670464128256, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[bubble_output_above.mmd]": 0.0005484998691827059, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[captioned_sibling_outputs.mmd]": 0.0005472078919410706, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[centered_tracks.mmd]": 0.0009393752552568913, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[cross_track_interchange.mmd]": 0.0013934159651398659, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[da_pipeline.mmd]": 0.00885787489823997, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[diagonal_labels.mmd]": 0.001778499921783805, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[diagonal_single_trunk_off_track.mmd]": 0.0018322509713470936, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[differentialabundance.mmd]": 0.011115249944850802, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[differentialabundance_default.mmd]": 0.005649457918480039, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[directional_flow.mmd]": 0.000738582806661725, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[disconnected_components.mmd]": 0.0011229587253183126, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[epitopeprediction.mmd]": 0.0038156670052558184, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[file_icon_fanin.mmd]": 0.0030162499751895666, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[file_icons.mmd]": 0.004397749900817871, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[font_scale.mmd]": 0.0015386659651994705, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[genomeassembly.mmd]": 0.006506250007078052, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[genomeassembly_organellar.mmd]": 0.012147208210080862, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[genomeassembly_staggered.mmd]": 0.005319043295457959, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[genomic_pipeline.mmd]": 0.009564541978761554, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[group_labels.mmd]": 0.0008768751285970211, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/01_minimal.mmd]": 0.000529708806425333, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/02_sections.mmd]": 0.0010221661068499088, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/03_fan_out.mmd]": 0.0017974581569433212, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/03b_fan_in_merge.mmd]": 0.0019503338262438774, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/04_directions.mmd]": 0.0017611668445169926, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/05_file_icons.mmd]": 0.000843666959553957, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/05b_multi_icons.mmd]": 0.0008987910114228725, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/05c_files_icon.mmd]": 0.000791915925219655, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/05d_folder_icon.mmd]": 0.0007946251425892115, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/05f_banner_labels.mmd]": 0.0009184170048683882, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/06a_without_hidden.mmd]": 0.001272791065275669, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[guide/06b_with_hidden.mmd]": 0.002997791860252619, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[hlatyping.mmd]": 0.0015363332349807024, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[icon_caption_wrap.mmd]": 0.0017074570059776306, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[leaf_file_icon_on_trunk.mmd]": 0.00187437585555017, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[legend_combo.mmd]": 0.0006242920644581318, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[legend_logo_placement.mmd]": 0.0016198339872062206, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[longread_variant_calling.mmd]": 0.008079166989773512, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[marker_styles.mmd]": 0.0037824991159141064, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[multiline_labels.mmd]": 0.0009192498400807381, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[off_track_output_branched.mmd]": 0.0007938751950860023, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[off_track_outputs.mmd]": 0.0013377920258790255, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[off_track_outputs_along_trunk.mmd]": 0.0006609580013900995, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[rnaseq_auto.mmd]": 0.005087167024612427, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[rnaseq_sections.mmd]": 0.008168833795934916, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[rnaseq_sections_manual.mmd]": 0.01594658405520022, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[rnaseq_simple.mmd]": 0.0005359582137316465, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[simple_pipeline.mmd]": 0.0017228329088538885, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[tb_file_termini.mmd]": 0.007293625036254525, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[tb_right_exit_feeder_slots.mmd]": 0.004668541951104999, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/aligner_row_pinned_continuation.mmd]": 0.005071999970823526, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/around_below_ep_col_gt0.mmd]": 0.0029642919544130564, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/around_section_below.mmd]": 0.006720789708197117, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/asymmetric_tree.mmd]": 0.0049044587649405, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bottom_row_climb_clear_corridor.mmd]": 0.001525667030364275, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/branch_fold_forward.mmd]": 0.0016122499946504831, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/branch_fold_stability.mmd]": 0.0037235429044812918, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bt_chain.mmd]": 0.001749624963849783, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bt_exit_top_above.mmd]": 0.0019252069760113955, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bt_exit_top_above_2line.mmd]": 0.0013896250165998936, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bt_fork.mmd]": 0.0005940417759120464, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bt_perp_entry_below.mmd]": 0.0007723337039351463, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bt_to_lr.mmd]": 0.0008559590205550194, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bt_to_tb.mmd]": 0.006005291827023029, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bundle_terminator_continuation.mmd]": 0.0023105829022824764, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_fan_in_outer_slot.mmd]": 0.008547957986593246, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_gap2_rightward_overflow.mmd]": 0.006626624846830964, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_label_rake.mmd]": 0.0014874169137328863, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_label_rake_left.mmd]": 0.0019153761677443981, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_label_rake_wide.mmd]": 0.001364709110930562, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_leftward_far_side_entry.mmd]": 0.007213958073407412, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_leftward_overflow.mmd]": 0.002378416247665882, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/bypass_v_tight.mmd]": 0.002215208951383829, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/clear_channel_target_aware_push.mmd]": 0.0021639990154653788, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/compact_gap_peer_conflict.mmd]": 0.001303042285144329, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/compact_hidden_passthrough.mmd]": 0.001049292040988803, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/complex_multipath.mmd]": 0.0028563737869262695, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/convergence_stacked_sink.mmd]": 0.002053458010777831, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/convergent_offrow_exit_climb.mmd]": 0.012186165899038315, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/corridor_narrow_gap_fallback.mmd]": 0.006045082816854119, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/cross_col_top_entry.mmd]": 0.0012263332027941942, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/cross_column_perp_drop.mmd]": 0.0008353765588253736, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0009453326929360628, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/cross_row_gap_wrap.mmd]": 0.0028614162001758814, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/deep_linear.mmd]": 0.008430042071267962, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/disjoint_sameline_trunks.mmd]": 0.0035839579068124294, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/divergent_fanout_split.mmd]": 0.0032455408945679665, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/dogleg_exempt_distinct.mmd]": 0.00381741626188159, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/dogleg_exempt_sameline.mmd]": 0.0010798340663313866, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/dogleg_twoline_fanout.mmd]": 0.0011590421199798584, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/exit_corner_offset_dogleg.mmd]": 0.0015667499974370003, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/fan_bypass_nesting.mmd]": 0.0067012496292591095, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/fan_in_merge.mmd]": 0.002444709185510874, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/fold_double.mmd]": 0.004166043130680919, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/fold_fan_across.mmd]": 0.01161270891316235, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/fold_stacked_branch.mmd]": 0.0065152079332619905, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/funcprofiler_upstream.mmd]": 0.0045038750395178795, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/header_nudge.mmd]": 0.0009200838394463062, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/header_side_rotated.mmd]": 0.0022144163958728313, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/inrow_skip_breeze.mmd]": 0.001014250097796321, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/inter_row_wrap_clearance.mmd]": 0.0032945843413472176, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/interchange_lane_reorder.mmd]": 0.005348250037059188, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/junction_entry_align.mmd]": 0.004823458846658468, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/junction_entry_collision.mmd]": 0.0019204590935260057, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/junction_entry_reversed_fold.mmd]": 0.0014888332225382328, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/junction_fanout_convergence.mmd]": 0.0023775408044457436, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/left_entry_up_wrap.mmd]": 0.0019392080139368773, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/left_exit_sink_below.mmd]": 0.0013097496703267097, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011191661469638348, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0010397920850664377, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010533328168094158, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.012159126112237573, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_perp_top_exit_side_entry.mmd]": 0.002806376200169325, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_to_tb_top_cross_col.mmd]": 0.0015114580746740103, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_to_tb_top_drop.mmd]": 0.0007579997181892395, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008145838510245085, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_to_tb_top_near_vertical.mmd]": 0.000750750070437789, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_to_tb_top_two_lines.mmd]": 0.009981666691601276, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_top_entry_cross_column.mmd]": 0.0007967900019139051, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0020611670333892107, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_around_below_leftmost.mmd]": 0.0032737497240304947, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_bottom_row_bypass.mmd]": 0.0017321251798421144, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_leftmost_sink_branch.mmd]": 0.0017550839111208916, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_offrow_continuation.mmd]": 0.0012572486884891987, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_port_above_approach.mmd]": 0.0011936237569898367, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_pullaway.mmd]": 0.0014756680466234684, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_right_entry.mmd]": 0.0025795421097427607, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_trunk_out_of_range_section.mmd]": 0.0021297908388078213, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/merge_trunk_over_low_section.mmd]": 0.0019185829441994429, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/mismatched_tracks.mmd]": 0.0014245817437767982, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/mixed_bundle_column.mmd]": 0.002265081973746419, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/mixed_port_sides.mmd]": 0.0010432079434394836, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/multi_input_convergence.mmd]": 0.0028430409729480743, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/multi_line_bundle.mmd]": 0.004726125160232186, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/multicarrier_offrow_exit_climb.mmd]": 0.001693124184384942, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/near_vertical_junction_hook.mmd]": 0.0019624580163508654, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/off_track_convergence.mmd]": 0.0011677499860525131, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/off_track_convergence_multiline.mmd]": 0.001353957923129201, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/off_track_input_above_consumer.mmd]": 0.012733166106045246, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/parallel_independent.mmd]": 0.001085416879504919, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/peeloff_extra_line_consumer.mmd]": 0.0022015832364559174, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/peeloff_riser_respace.mmd]": 0.002066875109449029, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/post_convergence_trunk.mmd]": 0.0017801239155232906, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/reconverge_reversed_fold.mmd]": 0.012492666020989418, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/right_entry_from_above.mmd]": 0.001751042203977704, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/right_entry_from_above_far.mmd]": 0.0029499579686671495, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/right_entry_gap_above_empty_row.mmd]": 0.0017105818260461092, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/right_entry_wrap_no_fan.mmd]": 0.0007394992280751467, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/rl_entry_runway.mmd]": 0.0009102090261876583, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/rnaseq_lite.mmd]": 0.002511167200282216, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/route_around_intervening.mmd]": 0.0011864579282701015, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/section_diamond.mmd]": 0.004288041964173317, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/self_crossing_bridge.mmd]": 0.0028334991075098515, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/shared_sink_parallel.mmd]": 0.002884374000132084, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/single_section.mmd]": 0.000474708853289485, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/stacked_left_exit_drop.mmd]": 0.002491250867024064, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/stacked_lr_serpentine.mmd]": 0.002517542103305459, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0016682092100381851, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_bottom_entry_flow_start.mmd]": 0.002164541743695736, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.00363920908421278, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0037471659015864134, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_column_continuation_two_lines.mmd]": 0.002003706991672516, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_convergence_straight_drop.mmd]": 0.0009007500484585762, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_internal_diagonal.mmd]": 0.0020112497732043266, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_left_exit_step.mmd]": 0.002121750032529235, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_lr_exit_left.mmd]": 0.0011497503146529198, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_lr_exit_right.mmd]": 0.0012205829843878746, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_passthrough_continuation.mmd]": 0.000577166210860014, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_passthrough_trunk.mmd]": 0.0012265827972441912, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006863339804112911, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_right_entry_stack.mmd]": 0.0012206248939037323, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_trunk_through_fan.mmd]": 0.0005387077108025551, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/tb_two_line_vert_seam.mmd]": 0.000917206984013319, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/terminal_symmetric_fan.mmd]": 0.0008387488778680563, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/terminus_join.mmd]": 0.0004305001348257065, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/top_entry_header_clash.mmd]": 0.0006429580971598625, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/trunk_through_fan.mmd]": 0.001135166035965085, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/twoline_fanout_up.mmd]": 0.0013371261302381754, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/u_turn_fold.mmd]": 0.0025711667258292437, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/uneven_diamond.mmd]": 0.0005542922299355268, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/upward_bypass.mmd]": 0.00457549886777997, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/variant_calling.mmd]": 0.003547416999936104, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/wide_fan_in.mmd]": 0.007212999975308776, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/wide_fan_out.mmd]": 0.0018159591127187014, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/wide_label_fan.mmd]": 0.0005866659339517355, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[topologies/wrapped_label_trunk.mmd]": 0.0006507092621177435, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[trunk_align_matching_bundle.mmd]": 0.0010349161457270384, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[uneven_diamond.mmd]": 0.0005112909711897373, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[variant_calling.mmd]": 0.003938042093068361, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[variant_calling_tuned.mmd]": 0.002038792008534074, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[variantbenchmarking.mmd]": 0.006821791874244809, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[variantbenchmarking_auto.mmd]": 0.005830750102177262, + "tests/test_layout_invariants.py::test_inter_row_trunk_bands_crossing_optimal[variantprioritization.mmd]": 0.0031272920314222574, + "tests/test_layout_invariants.py::test_inter_row_trunks_bundle_tightly[longread_variant_calling.mmd]": 0.011452000122517347, + "tests/test_layout_invariants.py::test_inter_section_bundle_corners_anchored_at_floor[topologies/around_below_ep_col_gt0.mmd]": 0.001394334016367793, + "tests/test_layout_invariants.py::test_inter_section_bundle_corners_anchored_at_floor[topologies/around_section_below.mmd]": 0.0011594591196626425, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[cross_track_interchange.mmd]": 0.0010434170253574848, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[da_pipeline.mmd]": 0.01071241800673306, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[diagonal_labels.mmd]": 0.0014839170034974813, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[diagonal_single_trunk_off_track.mmd]": 0.0014366668183356524, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[differentialabundance.mmd]": 0.008694125106558204, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[differentialabundance_default.mmd]": 0.00899700028821826, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[disconnected_components.mmd]": 0.0014431658200919628, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[epitopeprediction.mmd]": 0.0017534580547362566, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[file_icon_fanin.mmd]": 0.0029164988081902266, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[file_icons.mmd]": 0.002297916915267706, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[genomeassembly.mmd]": 0.004446001257747412, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[genomeassembly_organellar.mmd]": 0.0035414998419582844, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[genomeassembly_staggered.mmd]": 0.003774957964196801, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[genomic_pipeline.mmd]": 0.008867416996508837, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[group_labels.mmd]": 0.0016317088156938553, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/02_sections.mmd]": 0.0010610842145979404, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/03_fan_out.mmd]": 0.003962914925068617, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/03b_fan_in_merge.mmd]": 0.003807291854172945, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/04_directions.mmd]": 0.0016688327305018902, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/05_file_icons.mmd]": 0.0007219160906970501, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/05b_multi_icons.mmd]": 0.0007802071049809456, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/05c_files_icon.mmd]": 0.005206709029152989, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/05d_folder_icon.mmd]": 0.0008535000961273909, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/05f_banner_labels.mmd]": 0.0008012908510863781, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/06a_without_hidden.mmd]": 0.002411708002910018, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[guide/06b_with_hidden.mmd]": 0.0011611671652644873, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[hlatyping.mmd]": 0.0014209160581231117, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[legend_logo_placement.mmd]": 0.0013441650662571192, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[longread_variant_calling.mmd]": 0.004302876302972436, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[marker_styles.mmd]": 0.0008175817783921957, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[multiline_labels.mmd]": 0.0006791669875383377, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[regressions/stacked_collector_fanin.mmd]": 0.005844749975949526, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[rnaseq_auto.mmd]": 0.003080626018345356, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[rnaseq_sections.mmd]": 0.0042046671733260155, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[rnaseq_sections_manual.mmd]": 0.006262791575863957, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[tb_file_termini.mmd]": 0.0012821240816265345, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[tb_right_exit_feeder_slots.mmd]": 0.001669707940891385, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/aligner_row_pinned_continuation.mmd]": 0.0014980838168412447, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/around_below_ep_col_gt0.mmd]": 0.0010665827430784702, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/around_section_below.mmd]": 0.0010085429530590773, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/asymmetric_tree.mmd]": 0.001717042876407504, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bottom_row_climb_clear_corridor.mmd]": 0.001187457935884595, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/branch_fold_forward.mmd]": 0.010381957981735468, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/branch_fold_stability.mmd]": 0.002466291654855013, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bt_exit_top_above.mmd]": 0.0007530406583100557, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bt_exit_top_above_2line.mmd]": 0.001576834823936224, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bt_perp_entry_below.mmd]": 0.001724165864288807, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bt_to_lr.mmd]": 0.0008881252724677324, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bt_to_tb.mmd]": 0.0008133330848067999, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_fan_in_outer_slot.mmd]": 0.0030654571019113064, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0019979579374194145, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_label_rake.mmd]": 0.002852541860193014, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_label_rake_left.mmd]": 0.002754292218014598, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_label_rake_wide.mmd]": 0.0011252930853515863, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_leftward_far_side_entry.mmd]": 0.006298999069258571, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_leftward_overflow.mmd]": 0.002500707982107997, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/bypass_v_tight.mmd]": 0.006111540831625462, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/clear_channel_target_aware_push.mmd]": 0.0020865830592811108, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/compact_gap_peer_conflict.mmd]": 0.0010594588238745928, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/compact_hidden_passthrough.mmd]": 0.0008540821727365255, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/complex_multipath.mmd]": 0.002683084225282073, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/convergence_stacked_sink.mmd]": 0.0018369590397924185, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/convergent_offrow_exit_climb.mmd]": 0.00936262495815754, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/corridor_narrow_gap_fallback.mmd]": 0.0009995419532060623, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/cross_col_top_entry.mmd]": 0.0006001668516546488, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/cross_column_perp_drop.mmd]": 0.0006190838757902384, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006140831392258406, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/cross_row_gap_wrap.mmd]": 0.0013565842527896166, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/deep_linear.mmd]": 0.0018417930696159601, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/disjoint_sameline_trunks.mmd]": 0.0019174590706825256, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/divergent_fanout_split.mmd]": 0.0008676252327859402, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/dogleg_exempt_distinct.mmd]": 0.001141291344538331, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/dogleg_exempt_sameline.mmd]": 0.000876750098541379, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/dogleg_twoline_fanout.mmd]": 0.0009164998773485422, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/exit_corner_offset_dogleg.mmd]": 0.001109084114432335, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/fan_bypass_nesting.mmd]": 0.0020259590819478035, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/fan_in_merge.mmd]": 0.0015947087667882442, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/fold_double.mmd]": 0.005004876060411334, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/fold_fan_across.mmd]": 0.005806792061775923, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/fold_stacked_branch.mmd]": 0.01205341680906713, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/funcprofiler_upstream.mmd]": 0.006658166879788041, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/header_nudge.mmd]": 0.0008852919563651085, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/header_side_rotated.mmd]": 0.0007934172172099352, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/inter_row_wrap_clearance.mmd]": 0.001003623940050602, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/junction_entry_align.mmd]": 0.0035888319835066795, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/junction_entry_collision.mmd]": 0.0014955832157284021, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/junction_entry_reversed_fold.mmd]": 0.0012317921500653028, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/junction_fanout_convergence.mmd]": 0.005995458923280239, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/left_entry_up_wrap.mmd]": 0.004495208850130439, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/left_exit_sink_below.mmd]": 0.0038271669764071703, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.007464082911610603, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0016746670007705688, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0009537101723253727, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0008821669034659863, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_perp_top_exit_side_entry.mmd]": 0.000943250022828579, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_to_tb_top_cross_col.mmd]": 0.000952000031247735, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_to_tb_top_drop.mmd]": 0.0006677911151200533, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007372510153800249, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006034162361174822, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_to_tb_top_two_lines.mmd]": 0.00339374877512455, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_top_entry_cross_column.mmd]": 0.0007195412181317806, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007585827261209488, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_around_below_leftmost.mmd]": 0.0025345010217279196, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_bottom_row_bypass.mmd]": 0.0035494575276970863, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_leftmost_sink_branch.mmd]": 0.0016498749610036612, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_offrow_continuation.mmd]": 0.0009880419820547104, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_port_above_approach.mmd]": 0.00515183387324214, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_pullaway.mmd]": 0.001865956699475646, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_right_entry.mmd]": 0.0013952497392892838, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_trunk_out_of_range_section.mmd]": 0.0023561681155115366, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/merge_trunk_over_low_section.mmd]": 0.005859832977876067, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/mismatched_tracks.mmd]": 0.0014234171248972416, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/mixed_bundle_column.mmd]": 0.006134959403425455, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/mixed_port_sides.mmd]": 0.0009449587669223547, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/multi_input_convergence.mmd]": 0.0011832090094685555, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/multi_line_bundle.mmd]": 0.001747125294059515, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/multicarrier_offrow_exit_climb.mmd]": 0.002302790991961956, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/near_vertical_junction_hook.mmd]": 0.0013444989454001188, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/off_track_convergence.mmd]": 0.0012709570582956076, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/off_track_convergence_multiline.mmd]": 0.00113783311098814, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/off_track_input_above_consumer.mmd]": 0.005028292071074247, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/parallel_independent.mmd]": 0.0008748339023441076, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/peeloff_extra_line_consumer.mmd]": 0.003305833088234067, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/peeloff_riser_respace.mmd]": 0.0017479590605944395, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/reconverge_reversed_fold.mmd]": 0.006245291093364358, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/right_entry_from_above.mmd]": 0.0006724577397108078, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/right_entry_from_above_far.mmd]": 0.0007409171666949987, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/right_entry_gap_above_empty_row.mmd]": 0.0007724168244749308, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/right_entry_wrap_no_fan.mmd]": 0.0006934588309377432, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/rl_entry_runway.mmd]": 0.0007732503581792116, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/rnaseq_lite.mmd]": 0.002039375016465783, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/route_around_intervening.mmd]": 0.0010254601947963238, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/section_diamond.mmd]": 0.001203875057399273, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/self_crossing_bridge.mmd]": 0.0008377498015761375, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/shared_sink_parallel.mmd]": 0.0023930000606924295, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/stacked_left_exit_drop.mmd]": 0.0005819988436996937, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/stacked_lr_serpentine.mmd]": 0.012529542902484536, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006891670636832714, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0010957925114780664, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.001097249798476696, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_column_continuation_two_lines.mmd]": 0.0007309578359127045, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_internal_diagonal.mmd]": 0.0008521671406924725, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_left_exit_step.mmd]": 0.0016160409431904554, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_lr_exit_left.mmd]": 0.0009868331253528595, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_lr_exit_right.mmd]": 0.0010357080027461052, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_passthrough_trunk.mmd]": 0.0008329169359058142, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005609581712633371, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_right_entry_stack.mmd]": 0.001032498897984624, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/tb_two_line_vert_seam.mmd]": 0.0008436660282313824, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/terminal_symmetric_fan.mmd]": 0.0006967922672629356, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/top_entry_header_clash.mmd]": 0.0005648760125041008, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/trunk_through_fan.mmd]": 0.0009060832671821117, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/twoline_fanout_up.mmd]": 0.000939458142966032, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/u_turn_fold.mmd]": 0.0022691660560667515, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/upward_bypass.mmd]": 0.002541957888752222, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/variant_calling.mmd]": 0.0025684169959276915, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/wide_fan_in.mmd]": 0.0011215831618756056, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[topologies/wide_fan_out.mmd]": 0.0013725839089602232, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[trunk_align_matching_bundle.mmd]": 0.0008480830583721399, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[variant_calling.mmd]": 0.0013377489522099495, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[variant_calling_tuned.mmd]": 0.005775541067123413, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[variantbenchmarking.mmd]": 0.0045723330695182085, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[variantbenchmarking_auto.mmd]": 0.011691957945004106, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg[variantprioritization.mmd]": 0.0018675001338124275, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[cross_track_interchange.mmd]": 0.0011459589004516602, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[da_pipeline.mmd]": 0.00801600026898086, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[diagonal_labels.mmd]": 0.005982292117550969, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[diagonal_single_trunk_off_track.mmd]": 0.0015314160846173763, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[differentialabundance.mmd]": 0.008082708809524775, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[differentialabundance_default.mmd]": 0.015123457880690694, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[disconnected_components.mmd]": 0.0009702092502266169, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[epitopeprediction.mmd]": 0.0016875851433724165, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[file_icon_fanin.mmd]": 0.0012302089016884565, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[file_icons.mmd]": 0.0006593328434973955, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[genomeassembly.mmd]": 0.0072801243513822556, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[genomeassembly_organellar.mmd]": 0.0032725417986512184, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[genomeassembly_staggered.mmd]": 0.0028542487416416407, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[genomic_pipeline.mmd]": 0.0057858319487422705, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[group_labels.mmd]": 0.004287749994546175, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/02_sections.mmd]": 0.0010113317985087633, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/03_fan_out.mmd]": 0.001647207885980606, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/03b_fan_in_merge.mmd]": 0.0017634578980505466, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/04_directions.mmd]": 0.0026135838124901056, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/05_file_icons.mmd]": 0.0017747499514371157, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/05b_multi_icons.mmd]": 0.0011203342583030462, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/05c_files_icon.mmd]": 0.0007273328956216574, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/05d_folder_icon.mmd]": 0.0006815001834183931, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/05f_banner_labels.mmd]": 0.0007519149221479893, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/06a_without_hidden.mmd]": 0.0010074158199131489, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[guide/06b_with_hidden.mmd]": 0.0012836249079555273, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[hlatyping.mmd]": 0.0013688751496374607, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[legend_logo_placement.mmd]": 0.0012910410296171904, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[longread_variant_calling.mmd]": 0.004275707993656397, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[marker_styles.mmd]": 0.0008185009937733412, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[multiline_labels.mmd]": 0.0006723750848323107, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[regressions/stacked_collector_fanin.mmd]": 0.46127875125966966, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[rnaseq_auto.mmd]": 0.0032082509715110064, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[rnaseq_sections.mmd]": 0.0042785839177668095, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[rnaseq_sections_manual.mmd]": 0.004186249803751707, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[tb_file_termini.mmd]": 0.00118591682985425, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[tb_right_exit_feeder_slots.mmd]": 0.0014525412116199732, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/aligner_row_pinned_continuation.mmd]": 0.0014347913675010204, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/around_below_ep_col_gt0.mmd]": 0.0010729581117630005, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/around_section_below.mmd]": 0.0010157921351492405, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/asymmetric_tree.mmd]": 0.001808249857276678, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0023457910865545273, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/branch_fold_forward.mmd]": 0.00609195907600224, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/branch_fold_stability.mmd]": 0.00196545897051692, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bt_exit_top_above.mmd]": 0.000649249879643321, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bt_exit_top_above_2line.mmd]": 0.000693541718646884, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bt_perp_entry_below.mmd]": 0.005297874100506306, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bt_to_lr.mmd]": 0.0007907499093562365, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bt_to_tb.mmd]": 0.0007089159917086363, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_fan_in_outer_slot.mmd]": 0.004689124180004001, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0021052078809589148, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_label_rake.mmd]": 0.0010824580676853657, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_label_rake_left.mmd]": 0.0010731241200119257, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_label_rake_wide.mmd]": 0.0011037911754101515, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_leftward_far_side_entry.mmd]": 0.005565291969105601, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_leftward_overflow.mmd]": 0.0017260836903005838, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/bypass_v_tight.mmd]": 0.000879666768014431, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/clear_channel_target_aware_push.mmd]": 0.001048956997692585, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/compact_gap_peer_conflict.mmd]": 0.0010196249932050705, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/compact_hidden_passthrough.mmd]": 0.0008239173330366611, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/complex_multipath.mmd]": 0.008161542005836964, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/convergence_stacked_sink.mmd]": 0.0018990430980920792, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/convergent_offrow_exit_climb.mmd]": 0.00416662497445941, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/corridor_narrow_gap_fallback.mmd]": 0.005499375052750111, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/cross_col_top_entry.mmd]": 0.0019592917524278164, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/cross_column_perp_drop.mmd]": 0.001925583928823471, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007947511039674282, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/cross_row_gap_wrap.mmd]": 0.0014642090536653996, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/deep_linear.mmd]": 0.0018481656443327665, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/disjoint_sameline_trunks.mmd]": 0.0053079582285135984, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/divergent_fanout_split.mmd]": 0.002778500085696578, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/dogleg_exempt_distinct.mmd]": 0.00170299899764359, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/dogleg_exempt_sameline.mmd]": 0.00265662488527596, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/dogleg_twoline_fanout.mmd]": 0.0012413770891726017, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/exit_corner_offset_dogleg.mmd]": 0.0014873738400638103, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/fan_bypass_nesting.mmd]": 0.0022421670146286488, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/fan_in_merge.mmd]": 0.00819795811548829, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/fold_double.mmd]": 0.003343542106449604, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/fold_fan_across.mmd]": 0.00419545779004693, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/fold_stacked_branch.mmd]": 0.0076892508659511805, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/funcprofiler_upstream.mmd]": 0.004720291122794151, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/header_nudge.mmd]": 0.000822167145088315, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/header_side_rotated.mmd]": 0.0007429588586091995, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/inter_row_wrap_clearance.mmd]": 0.0009187911637127399, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/junction_entry_align.mmd]": 0.0016296242829412222, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/junction_entry_collision.mmd]": 0.0013972071465104818, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/junction_entry_reversed_fold.mmd]": 0.001201624283567071, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/junction_fanout_convergence.mmd]": 0.0009890419896692038, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/left_entry_up_wrap.mmd]": 0.0007031250279396772, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/left_exit_sink_below.mmd]": 0.001026000129058957, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0008675011340528727, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0015319581143558025, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.001475416123867035, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0009655002504587173, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_perp_top_exit_side_entry.mmd]": 0.001132042147219181, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_to_tb_top_cross_col.mmd]": 0.0008883320260792971, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_to_tb_top_drop.mmd]": 0.0006039997097104788, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.001298041082918644, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006417499389499426, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_to_tb_top_two_lines.mmd]": 0.0010551668237894773, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_top_entry_cross_column.mmd]": 0.0006889160722494125, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007260837592184544, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_around_below_leftmost.mmd]": 0.0013182898983359337, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_bottom_row_bypass.mmd]": 0.0013022921048104763, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_leftmost_sink_branch.mmd]": 0.0012711668387055397, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_offrow_continuation.mmd]": 0.0032457078341394663, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_port_above_approach.mmd]": 0.002224584110081196, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_pullaway.mmd]": 0.004354791017249227, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_right_entry.mmd]": 0.005291708745062351, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_trunk_out_of_range_section.mmd]": 0.005719831911846995, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/merge_trunk_over_low_section.mmd]": 0.0056634999345988035, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/mismatched_tracks.mmd]": 0.0011279999744147062, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/mixed_bundle_column.mmd]": 0.0017790829297155142, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/mixed_port_sides.mmd]": 0.0008405421394854784, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/multi_input_convergence.mmd]": 0.0009348751045763493, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/multi_line_bundle.mmd]": 0.0027100411243736744, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0013158340007066727, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/near_vertical_junction_hook.mmd]": 0.0010117078199982643, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/off_track_convergence.mmd]": 0.0008306247182190418, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/off_track_convergence_multiline.mmd]": 0.00100379204377532, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/off_track_input_above_consumer.mmd]": 0.0033217081800103188, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/parallel_independent.mmd]": 0.000823416979983449, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/peeloff_extra_line_consumer.mmd]": 0.004122833022847772, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/peeloff_riser_respace.mmd]": 0.004562292015179992, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/reconverge_reversed_fold.mmd]": 0.005140583263710141, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/right_entry_from_above.mmd]": 0.0006246680859476328, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/right_entry_from_above_far.mmd]": 0.0005780409555882215, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006712081376463175, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/right_entry_wrap_no_fan.mmd]": 0.0016740427818149328, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/rl_entry_runway.mmd]": 0.0023719589225947857, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/rnaseq_lite.mmd]": 0.0020693750120699406, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/route_around_intervening.mmd]": 0.001412917161360383, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/section_diamond.mmd]": 0.0011974170338362455, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/self_crossing_bridge.mmd]": 0.0011168341152369976, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/shared_sink_parallel.mmd]": 0.0033148343209177256, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/stacked_left_exit_drop.mmd]": 0.0005787920672446489, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/stacked_lr_serpentine.mmd]": 0.0009651680011302233, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_bottom_entry_flow_start.mmd]": 0.0005846661515533924, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.002399750053882599, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0011038749944418669, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_column_continuation_two_lines.mmd]": 0.001962333917617798, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_internal_diagonal.mmd]": 0.000916041899472475, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_left_exit_step.mmd]": 0.0015241249930113554, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_lr_exit_left.mmd]": 0.0009655423928052187, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_lr_exit_right.mmd]": 0.001071249833330512, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_passthrough_trunk.mmd]": 0.0008861671667546034, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0008859997615218163, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_right_entry_stack.mmd]": 0.0011756247840821743, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/tb_two_line_vert_seam.mmd]": 0.0009247078560292721, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/terminal_symmetric_fan.mmd]": 0.0029514171183109283, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/top_entry_header_clash.mmd]": 0.0017210422083735466, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/trunk_through_fan.mmd]": 0.0018337508663535118, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/twoline_fanout_up.mmd]": 0.0010862911585718393, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/u_turn_fold.mmd]": 0.0022289580665528774, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/upward_bypass.mmd]": 0.01119658281095326, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/variant_calling.mmd]": 0.004607583163306117, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/wide_fan_in.mmd]": 0.0020515830256044865, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[topologies/wide_fan_out.mmd]": 0.0013802920002490282, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[trunk_align_matching_bundle.mmd]": 0.0008080422412604094, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[variant_calling.mmd]": 0.0012715000193566084, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[variant_calling_tuned.mmd]": 0.0014434170443564653, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[variantbenchmarking.mmd]": 0.007532583083957434, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[variantbenchmarking_auto.mmd]": 0.016324498923495412, + "tests/test_layout_invariants.py::test_inter_section_route_no_full_width_dogleg_clean[variantprioritization.mmd]": 0.0017589577473700047, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[cross_track_interchange.mmd]": 0.002001458080485463, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[da_pipeline.mmd]": 0.25143033429048955, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[diagonal_labels.mmd]": 0.0027268340345472097, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[diagonal_single_trunk_off_track.mmd]": 0.001655501313507557, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[differentialabundance.mmd]": 0.024437749991193414, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[differentialabundance_default.mmd]": 0.011619582772254944, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[disconnected_components.mmd]": 0.0011429169680923223, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[epitopeprediction.mmd]": 0.0019194590859115124, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[file_icon_fanin.mmd]": 0.0013743338640779257, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[file_icons.mmd]": 0.0007407921366393566, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[genomeassembly.mmd]": 0.007024998078122735, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[genomeassembly_organellar.mmd]": 0.0047580827958881855, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[genomeassembly_staggered.mmd]": 0.004128749016672373, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[genomic_pipeline.mmd]": 0.019574041943997145, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[group_labels.mmd]": 0.000851290998980403, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/02_sections.mmd]": 0.000914291013032198, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/03_fan_out.mmd]": 0.001581875141710043, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/03b_fan_in_merge.mmd]": 0.0016405419446527958, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/04_directions.mmd]": 0.0037286251317709684, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/05_file_icons.mmd]": 0.0007731649093329906, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/05b_multi_icons.mmd]": 0.0007753348909318447, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/05c_files_icon.mmd]": 0.0006747089792042971, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/05d_folder_icon.mmd]": 0.0006773339118808508, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/05f_banner_labels.mmd]": 0.0012085407506674528, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/06a_without_hidden.mmd]": 0.0020707910880446434, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[guide/06b_with_hidden.mmd]": 0.0034840418957173824, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[hlatyping.mmd]": 0.001993707148358226, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[legend_logo_placement.mmd]": 0.004172499990090728, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[longread_variant_calling.mmd]": 0.014557166257873178, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[marker_styles.mmd]": 0.000929584726691246, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[multiline_labels.mmd]": 0.0007557088974863291, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[rnaseq_auto.mmd]": 0.003130582859739661, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[rnaseq_sections.mmd]": 0.004265668103471398, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[rnaseq_sections_manual.mmd]": 0.005451456876471639, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[tb_file_termini.mmd]": 0.0008894568309187889, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[tb_right_exit_feeder_slots.mmd]": 0.004755791975185275, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/aligner_row_pinned_continuation.mmd]": 0.0014121669810265303, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/around_below_ep_col_gt0.mmd]": 0.0034182907547801733, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/around_section_below.mmd]": 0.001180793158710003, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/asymmetric_tree.mmd]": 0.001977916108444333, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0014819181524217129, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/branch_fold_forward.mmd]": 0.0014242078177630901, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/branch_fold_stability.mmd]": 0.0011960419360548258, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bt_exit_top_above.mmd]": 0.0006304162088781595, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bt_exit_top_above_2line.mmd]": 0.005848458036780357, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bt_perp_entry_below.mmd]": 0.0008429582230746746, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bt_to_lr.mmd]": 0.000733083114027977, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bt_to_tb.mmd]": 0.0006907088682055473, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_fan_in_outer_slot.mmd]": 0.007215958088636398, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002998208161443472, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_label_rake.mmd]": 0.0030912088695913553, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_label_rake_left.mmd]": 0.0014895850326865911, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_label_rake_wide.mmd]": 0.0026092086918652058, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_leftward_far_side_entry.mmd]": 0.0037594579625874758, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_leftward_overflow.mmd]": 0.0018182499334216118, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/bypass_v_tight.mmd]": 0.0008960410486906767, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/clear_channel_target_aware_push.mmd]": 0.0012387088499963284, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/compact_gap_peer_conflict.mmd]": 0.0011587499175220728, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/compact_hidden_passthrough.mmd]": 0.004516417160630226, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/complex_multipath.mmd]": 0.12842683284543455, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/convergence_stacked_sink.mmd]": 0.01171987527050078, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/convergent_offrow_exit_climb.mmd]": 0.00803762604482472, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/corridor_narrow_gap_fallback.mmd]": 0.001068666111677885, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/cross_col_top_entry.mmd]": 0.0006429159548133612, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/cross_column_perp_drop.mmd]": 0.001509541878476739, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/cross_column_perp_drop_far_exit.mmd]": 0.001820458797737956, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/cross_row_gap_wrap.mmd]": 0.0015252078883349895, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/deep_linear.mmd]": 0.001855457667261362, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/disjoint_sameline_trunks.mmd]": 0.0019891250412911177, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/divergent_fanout_split.mmd]": 0.0021838739048689604, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/dogleg_exempt_distinct.mmd]": 0.0014342500362545252, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/dogleg_exempt_sameline.mmd]": 0.001021123956888914, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/dogleg_twoline_fanout.mmd]": 0.0014168329071253538, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/exit_corner_offset_dogleg.mmd]": 0.0019566251430660486, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/fan_bypass_nesting.mmd]": 0.0022960430942475796, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/fan_in_merge.mmd]": 0.0022646670695394278, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/fold_double.mmd]": 0.008463667007163167, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/fold_fan_across.mmd]": 0.037187083857133985, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/fold_stacked_branch.mmd]": 0.0033568330109119415, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/funcprofiler_upstream.mmd]": 0.0037585000973194838, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/header_nudge.mmd]": 0.0007574581541121006, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/header_side_rotated.mmd]": 0.0007272509392350912, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/inter_row_wrap_clearance.mmd]": 0.0009406679309904575, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/junction_entry_align.mmd]": 0.0016483748331665993, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/junction_entry_collision.mmd]": 0.0017449171282351017, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/junction_entry_reversed_fold.mmd]": 0.0016617928631603718, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/junction_fanout_convergence.mmd]": 0.00435870885848999, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/left_entry_up_wrap.mmd]": 0.0008267487864941359, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/left_exit_sink_below.mmd]": 0.001197333913296461, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0009343752171844244, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.003188957693055272, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0009342078119516373, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.002231582999229431, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_perp_top_exit_side_entry.mmd]": 0.003603875171393156, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_to_tb_top_cross_col.mmd]": 0.0008747910615056753, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_to_tb_top_drop.mmd]": 0.0006402512080967426, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007500832434743643, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006116670556366444, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_to_tb_top_two_lines.mmd]": 0.0007409169338643551, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_top_entry_cross_column.mmd]": 0.00722324987873435, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0009937090799212456, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_around_below_leftmost.mmd]": 0.00289537594653666, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_bottom_row_bypass.mmd]": 0.004971375688910484, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_leftmost_sink_branch.mmd]": 0.002413001377135515, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_offrow_continuation.mmd]": 0.0010389171075075865, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_port_above_approach.mmd]": 0.0009703338146209717, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_pullaway.mmd]": 0.002647875342518091, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_right_entry.mmd]": 0.0013462931383401155, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_trunk_out_of_range_section.mmd]": 0.001617959700524807, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/merge_trunk_over_low_section.mmd]": 0.004008290823549032, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/mismatched_tracks.mmd]": 0.0011136659886687994, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/mixed_bundle_column.mmd]": 0.0018054589163511992, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/mixed_port_sides.mmd]": 0.0008596247062087059, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/multi_input_convergence.mmd]": 0.000965542159974575, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/multi_line_bundle.mmd]": 0.0014071252662688494, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0011981248389929533, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/near_vertical_junction_hook.mmd]": 0.0009798337705433369, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/off_track_convergence.mmd]": 0.0008329169359058142, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/off_track_convergence_multiline.mmd]": 0.0010088339913636446, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/off_track_input_above_consumer.mmd]": 0.012595165986567736, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/parallel_independent.mmd]": 0.00087779201567173, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/peeloff_extra_line_consumer.mmd]": 0.0017353752627968788, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/peeloff_riser_respace.mmd]": 0.001674167113378644, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/reconverge_reversed_fold.mmd]": 0.008500500116497278, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/right_entry_from_above.mmd]": 0.0022117500193417072, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/right_entry_from_above_far.mmd]": 0.0006958341691643, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/right_entry_gap_above_empty_row.mmd]": 0.000998541247099638, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/right_entry_wrap_no_fan.mmd]": 0.0006262499373406172, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/rl_entry_runway.mmd]": 0.000749457161873579, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/rnaseq_lite.mmd]": 0.0019988329149782658, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/route_around_intervening.mmd]": 0.0009777077939361334, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/section_diamond.mmd]": 0.0011649990919977427, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/self_crossing_bridge.mmd]": 0.0008845829870551825, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/shared_sink_parallel.mmd]": 0.0022926258388906717, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/stacked_left_exit_drop.mmd]": 0.0006073748227208853, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/stacked_lr_serpentine.mmd]": 0.0009865420870482922, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_bottom_entry_flow_start.mmd]": 0.0005990418139845133, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0010538750793784857, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0010694160591810942, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_column_continuation_two_lines.mmd]": 0.0006967501249164343, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_internal_diagonal.mmd]": 0.0007824171334505081, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_left_exit_step.mmd]": 0.0013898753095418215, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_lr_exit_left.mmd]": 0.0024082092568278313, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_lr_exit_right.mmd]": 0.001178167061880231, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_passthrough_trunk.mmd]": 0.0008991241920739412, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005910408217459917, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_right_entry_stack.mmd]": 0.002394000068306923, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/tb_two_line_vert_seam.mmd]": 0.000827917130663991, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/terminal_symmetric_fan.mmd]": 0.0006937922444194555, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/top_entry_header_clash.mmd]": 0.0014343748334795237, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/trunk_through_fan.mmd]": 0.003990167053416371, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/twoline_fanout_up.mmd]": 0.0022800418082624674, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/u_turn_fold.mmd]": 0.004285750212147832, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/upward_bypass.mmd]": 0.003087167162448168, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/variant_calling.mmd]": 0.014057332882657647, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/wide_fan_in.mmd]": 0.0012509997468441725, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[topologies/wide_fan_out.mmd]": 0.0014071657788008451, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[trunk_align_matching_bundle.mmd]": 0.0032915431074798107, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[variant_calling.mmd]": 0.001307375030592084, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[variant_calling_tuned.mmd]": 0.0014290830586105585, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[variantbenchmarking.mmd]": 0.006198916817083955, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[variantbenchmarking_auto.mmd]": 0.004131417255848646, + "tests/test_layout_invariants.py::test_inter_section_route_no_x_backtrack[variantprioritization.mmd]": 0.0016308329068124294, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[bubble_forced_label_clears_diagonal.mmd]": 0.0006219996139407158, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[bubble_label_clears_diagonal.mmd]": 0.0005764581728726625, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[bubble_output_above.mmd]": 0.0005312508437782526, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[captioned_sibling_outputs.mmd]": 0.0005182088352739811, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[centered_tracks.mmd]": 0.006529875798150897, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[cross_track_interchange.mmd]": 0.0017553342040628195, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[da_pipeline.mmd]": 0.009066290687769651, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[diagonal_labels.mmd]": 0.002094666939228773, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[diagonal_single_trunk_off_track.mmd]": 0.0017247081268578768, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[differentialabundance.mmd]": 0.009018249111250043, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[differentialabundance_default.mmd]": 0.012118083192035556, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[directional_flow.mmd]": 0.0008115831296890974, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[disconnected_components.mmd]": 0.0010900420602411032, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[epitopeprediction.mmd]": 0.003099791007116437, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[file_icon_fanin.mmd]": 0.0014385010581463575, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[file_icons.mmd]": 0.0008419158402830362, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[font_scale.mmd]": 0.0005198738072067499, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[genomeassembly.mmd]": 0.0029916258063167334, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[genomeassembly_organellar.mmd]": 0.009037416195496917, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[genomeassembly_staggered.mmd]": 0.002635292010381818, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[genomic_pipeline.mmd]": 0.010694833938032389, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[group_labels.mmd]": 0.0009558738674968481, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/01_minimal.mmd]": 0.0010844569187611341, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/02_sections.mmd]": 0.002772333798930049, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/03_fan_out.mmd]": 0.002275416161864996, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/03b_fan_in_merge.mmd]": 0.001872834051027894, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/04_directions.mmd]": 0.0029250422958284616, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/05_file_icons.mmd]": 0.0009464570321142673, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/05b_multi_icons.mmd]": 0.0009611260611563921, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/05c_files_icon.mmd]": 0.0008221659809350967, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/05d_folder_icon.mmd]": 0.0007902919314801693, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/05f_banner_labels.mmd]": 0.0009837092366069555, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/06a_without_hidden.mmd]": 0.0013803329784423113, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[guide/06b_with_hidden.mmd]": 0.001400583889335394, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[hlatyping.mmd]": 0.001604708144441247, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[icon_caption_wrap.mmd]": 0.0012743331026285887, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[leaf_file_icon_on_trunk.mmd]": 0.001108124852180481, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[legend_combo.mmd]": 0.0007186660077422857, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[legend_logo_placement.mmd]": 0.0037951671984046698, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[longread_variant_calling.mmd]": 0.01665362506173551, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[marker_styles.mmd]": 0.0010723329614847898, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[multiline_labels.mmd]": 0.002434332622215152, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[off_track_output_branched.mmd]": 0.0012212919536978006, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[off_track_outputs.mmd]": 0.0007280828431248665, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[off_track_outputs_along_trunk.mmd]": 0.0006151250563561916, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[rnaseq_auto.mmd]": 0.0038349160458892584, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[rnaseq_sections.mmd]": 0.008654625387862325, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[rnaseq_sections_manual.mmd]": 0.009287290973588824, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[rnaseq_simple.mmd]": 0.0005212931428104639, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[simple_pipeline.mmd]": 0.0005871658213436604, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[tb_file_termini.mmd]": 0.00250391592271626, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[tb_right_exit_feeder_slots.mmd]": 0.0016395819839090109, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/aligner_row_pinned_continuation.mmd]": 0.0020300429314374924, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/around_below_ep_col_gt0.mmd]": 0.0043633331079036, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/around_section_below.mmd]": 0.0015385407023131847, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/asymmetric_tree.mmd]": 0.008942249929532409, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bottom_row_climb_clear_corridor.mmd]": 0.004369168076664209, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/branch_fold_forward.mmd]": 0.0018107921350747347, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/branch_fold_stability.mmd]": 0.0012863753363490105, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bt_chain.mmd]": 0.00047666579484939575, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bt_exit_top_above.mmd]": 0.0006332921329885721, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bt_exit_top_above_2line.mmd]": 0.0030208327807486057, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bt_fork.mmd]": 0.0012164581567049026, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bt_perp_entry_below.mmd]": 0.0014267510268837214, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bt_to_lr.mmd]": 0.0029668330680578947, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bt_to_tb.mmd]": 0.0034539990592747927, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bundle_terminator_continuation.mmd]": 0.0010569582227617502, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_fan_in_outer_slot.mmd]": 0.004203416872769594, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0026018740609288216, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_label_rake.mmd]": 0.0014837910421192646, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_label_rake_left.mmd]": 0.003931166836991906, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_label_rake_wide.mmd]": 0.0013037077151238918, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_leftward_far_side_entry.mmd]": 0.0018520420417189598, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_leftward_overflow.mmd]": 0.002801584079861641, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/bypass_v_tight.mmd]": 0.0027329581789672375, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/clear_channel_target_aware_push.mmd]": 0.0012040419969707727, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/compact_gap_peer_conflict.mmd]": 0.0012763750273734331, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/compact_hidden_passthrough.mmd]": 0.0016694578807801008, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/complex_multipath.mmd]": 0.003627958009019494, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/convergence_stacked_sink.mmd]": 0.009621541248634458, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/convergent_offrow_exit_climb.mmd]": 0.01188533310778439, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/corridor_narrow_gap_fallback.mmd]": 0.0011839589569717646, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/cross_col_top_entry.mmd]": 0.0006782091222703457, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/cross_column_perp_drop.mmd]": 0.000693917041644454, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0014127898029983044, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/cross_row_gap_wrap.mmd]": 0.0017244990449398756, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/deep_linear.mmd]": 0.002131541259586811, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/disjoint_sameline_trunks.mmd]": 0.0021480012219399214, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/divergent_fanout_split.mmd]": 0.0009687910787761211, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/dogleg_exempt_distinct.mmd]": 0.002268207957968116, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/dogleg_exempt_sameline.mmd]": 0.001023584045469761, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/dogleg_twoline_fanout.mmd]": 0.0010546662379056215, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/exit_corner_offset_dogleg.mmd]": 0.0012336659710854292, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/fan_bypass_nesting.mmd]": 0.002293958095833659, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/fan_in_merge.mmd]": 0.0017649161163717508, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/fold_double.mmd]": 0.007633375935256481, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/fold_fan_across.mmd]": 0.004159290809184313, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/fold_stacked_branch.mmd]": 0.012363082962110639, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/funcprofiler_upstream.mmd]": 0.00402941694483161, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/header_nudge.mmd]": 0.0008194160182029009, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/header_side_rotated.mmd]": 0.000885500106960535, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/inrow_skip_breeze.mmd]": 0.000594249926507473, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/inter_row_wrap_clearance.mmd]": 0.0013343750033527613, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/interchange_lane_reorder.mmd]": 0.0011561659630388021, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/junction_entry_align.mmd]": 0.005333040840923786, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/junction_entry_collision.mmd]": 0.003289958229288459, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/junction_entry_reversed_fold.mmd]": 0.0015011660289019346, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/junction_fanout_convergence.mmd]": 0.0035246661864221096, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/left_entry_up_wrap.mmd]": 0.001567708095535636, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/left_exit_sink_below.mmd]": 0.003184707835316658, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0012061670422554016, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0026634999085217714, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010555409826338291, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.00101079186424613, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0028123760130256414, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_to_tb_top_cross_col.mmd]": 0.0024117918219417334, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_to_tb_top_drop.mmd]": 0.0006538329180330038, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.00076270941644907, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006513749249279499, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_to_tb_top_two_lines.mmd]": 0.0007829158566892147, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_top_entry_cross_column.mmd]": 0.0018830420449376106, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0034856239799410105, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_around_below_leftmost.mmd]": 0.009159917011857033, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_bottom_row_bypass.mmd]": 0.003011290682479739, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_leftmost_sink_branch.mmd]": 0.0049283746629953384, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_offrow_continuation.mmd]": 0.0048249580431729555, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_port_above_approach.mmd]": 0.0011856239289045334, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_pullaway.mmd]": 0.0014030837919563055, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_right_entry.mmd]": 0.002332958159968257, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_trunk_out_of_range_section.mmd]": 0.0018263759557157755, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/merge_trunk_over_low_section.mmd]": 0.0018743330147117376, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/mismatched_tracks.mmd]": 0.0012262067757546902, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/mixed_bundle_column.mmd]": 0.0020130001939833164, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/mixed_port_sides.mmd]": 0.0009437911212444305, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/multi_input_convergence.mmd]": 0.0034261669497936964, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/multi_line_bundle.mmd]": 0.006897376151755452, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0033192068804055452, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/near_vertical_junction_hook.mmd]": 0.002249249955639243, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/off_track_convergence.mmd]": 0.0011008756700903177, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/off_track_convergence_multiline.mmd]": 0.0060323746874928474, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/off_track_input_above_consumer.mmd]": 0.005430875113233924, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/parallel_independent.mmd]": 0.0010403331834822893, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/peeloff_extra_line_consumer.mmd]": 0.00437712506391108, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/peeloff_riser_respace.mmd]": 0.0018797079101204872, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/post_convergence_trunk.mmd]": 0.0005287081003189087, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/reconverge_reversed_fold.mmd]": 0.005426081828773022, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/right_entry_from_above.mmd]": 0.0018696251790970564, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/right_entry_from_above_far.mmd]": 0.001156124984845519, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/right_entry_gap_above_empty_row.mmd]": 0.0014805831015110016, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/right_entry_wrap_no_fan.mmd]": 0.0009055840782821178, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/rl_entry_runway.mmd]": 0.004083916312083602, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/rnaseq_lite.mmd]": 0.005156457889825106, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/route_around_intervening.mmd]": 0.0011875429190695286, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/section_diamond.mmd]": 0.0013611249160021544, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/self_crossing_bridge.mmd]": 0.0009709158912301064, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/shared_sink_parallel.mmd]": 0.005134833976626396, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/single_section.mmd]": 0.0010009158868342638, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/stacked_left_exit_drop.mmd]": 0.0008014591876417398, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/stacked_lr_serpentine.mmd]": 0.0015269170980900526, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0051308320835232735, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_bottom_entry_flow_start.mmd]": 0.0027431659400463104, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0018983341287821531, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.003455124096944928, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_column_continuation_two_lines.mmd]": 0.0022858327720314264, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_convergence_straight_drop.mmd]": 0.0006332078482955694, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_internal_diagonal.mmd]": 0.0009086660575121641, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_left_exit_step.mmd]": 0.0026674990076571703, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_lr_exit_left.mmd]": 0.0011668747756630182, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_lr_exit_right.mmd]": 0.0029838760383427143, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_passthrough_continuation.mmd]": 0.0006566252559423447, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_passthrough_trunk.mmd]": 0.0010285412427037954, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006597088649868965, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_right_entry_stack.mmd]": 0.0011497910600155592, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_trunk_through_fan.mmd]": 0.0005230410024523735, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/tb_two_line_vert_seam.mmd]": 0.015081750229001045, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/terminal_symmetric_fan.mmd]": 0.005201999796554446, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/terminus_join.mmd]": 0.0006977911107242107, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/top_entry_header_clash.mmd]": 0.0007949168793857098, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/trunk_through_fan.mmd]": 0.00138179212808609, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/twoline_fanout_up.mmd]": 0.0010229996405541897, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/u_turn_fold.mmd]": 0.008637000108137727, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/uneven_diamond.mmd]": 0.0006198331248015165, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/upward_bypass.mmd]": 0.0029995418153703213, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/variant_calling.mmd]": 0.0031327069737017155, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/wide_fan_in.mmd]": 0.0013130006846040487, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/wide_fan_out.mmd]": 0.0017774568405002356, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/wide_label_fan.mmd]": 0.0011068324092775583, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[topologies/wrapped_label_trunk.mmd]": 0.0006862080190330744, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[trunk_align_matching_bundle.mmd]": 0.0009157501626759768, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[uneven_diamond.mmd]": 0.0005232489202171564, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[variant_calling.mmd]": 0.004543206887319684, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[variant_calling_tuned.mmd]": 0.0058289989829063416, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[variantbenchmarking.mmd]": 0.011284250067546964, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[variantbenchmarking_auto.mmd]": 0.008369917050004005, + "tests/test_layout_invariants.py::test_inter_section_route_y_stays_within_row_band[variantprioritization.mmd]": 0.0020069999154657125, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[bubble_forced_label_clears_diagonal.mmd]": 0.000796500826254487, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[bubble_label_clears_diagonal.mmd]": 0.0007112908642739058, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[bubble_output_above.mmd]": 0.0005629179067909718, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[captioned_sibling_outputs.mmd]": 0.0005516251549124718, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[centered_tracks.mmd]": 0.0006379168480634689, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[cross_track_interchange.mmd]": 0.0013071249704807997, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[da_pipeline.mmd]": 0.008489917032420635, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[diagonal_labels.mmd]": 0.0019818758592009544, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[diagonal_single_trunk_off_track.mmd]": 0.014370499178767204, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[differentialabundance.mmd]": 0.00508487387560308, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[differentialabundance_default.mmd]": 0.009807207621634007, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[directional_flow.mmd]": 0.0007655841764062643, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[disconnected_components.mmd]": 0.00157091673463583, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[epitopeprediction.mmd]": 0.0031764996238052845, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[file_icon_fanin.mmd]": 0.0017753341235220432, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[file_icons.mmd]": 0.0008054580539464951, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[font_scale.mmd]": 0.0006428749766200781, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[genomeassembly.mmd]": 0.004343000007793307, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[genomeassembly_organellar.mmd]": 0.0044951667077839375, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[genomeassembly_staggered.mmd]": 0.004378998884931207, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[genomic_pipeline.mmd]": 0.0070618316531181335, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[group_labels.mmd]": 0.0008305408991873264, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/01_minimal.mmd]": 0.0006259588990360498, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/02_sections.mmd]": 0.001053541200235486, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/03_fan_out.mmd]": 0.001765374792739749, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/03b_fan_in_merge.mmd]": 0.0018703762907534838, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/04_directions.mmd]": 0.006399875041097403, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/05_file_icons.mmd]": 0.0008526670280843973, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/05b_multi_icons.mmd]": 0.0048150422517210245, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/05c_files_icon.mmd]": 0.0008301669731736183, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/05d_folder_icon.mmd]": 0.0018356670625507832, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/05f_banner_labels.mmd]": 0.003335834015160799, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/06a_without_hidden.mmd]": 0.0026615408714860678, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[guide/06b_with_hidden.mmd]": 0.002735248999670148, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[hlatyping.mmd]": 0.003561750054359436, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[icon_caption_wrap.mmd]": 0.0005079151596873999, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[leaf_file_icon_on_trunk.mmd]": 0.0005422499962151051, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[legend_combo.mmd]": 0.000768209109082818, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[legend_logo_placement.mmd]": 0.0018681660294532776, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[longread_variant_calling.mmd]": 0.007620957912877202, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[marker_styles.mmd]": 0.0009625002276152372, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[multiline_labels.mmd]": 0.0007810830138623714, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[off_track_output_branched.mmd]": 0.000704167177900672, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[off_track_outputs.mmd]": 0.0006837090477347374, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[off_track_outputs_along_trunk.mmd]": 0.0006158340256661177, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[rnaseq_auto.mmd]": 0.0037072906270623207, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[rnaseq_sections.mmd]": 0.021844458067789674, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[rnaseq_sections_manual.mmd]": 0.006566416006535292, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[rnaseq_simple.mmd]": 0.001124626025557518, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[simple_pipeline.mmd]": 0.0005644999910145998, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[tb_file_termini.mmd]": 0.0012922491878271103, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[tb_right_exit_feeder_slots.mmd]": 0.0017707510851323605, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/aligner_row_pinned_continuation.mmd]": 0.0025242080446332693, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/around_below_ep_col_gt0.mmd]": 0.0012774171773344278, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/around_section_below.mmd]": 0.0011852080933749676, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/asymmetric_tree.mmd]": 0.002141042146831751, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0013718751724809408, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/branch_fold_forward.mmd]": 0.0014972907956689596, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/branch_fold_stability.mmd]": 0.0012565830256789923, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bt_chain.mmd]": 0.0004514167085289955, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bt_exit_top_above.mmd]": 0.0007757919374853373, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bt_exit_top_above_2line.mmd]": 0.0009106667712330818, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bt_fork.mmd]": 0.0006185830570757389, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bt_perp_entry_below.mmd]": 0.0018195409793406725, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bt_to_lr.mmd]": 0.0017489991150796413, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bt_to_tb.mmd]": 0.003083291929215193, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bundle_terminator_continuation.mmd]": 0.002363958628848195, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_fan_in_outer_slot.mmd]": 0.0045620419550687075, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0029724997002631426, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_label_rake.mmd]": 0.002699874807149172, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_label_rake_left.mmd]": 0.004269208991900086, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_label_rake_wide.mmd]": 0.0045257918536663055, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_leftward_far_side_entry.mmd]": 0.0039944578893482685, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_leftward_overflow.mmd]": 0.005001790821552277, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/bypass_v_tight.mmd]": 0.0012994578573852777, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/clear_channel_target_aware_push.mmd]": 0.001231790753081441, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/compact_gap_peer_conflict.mmd]": 0.0012007919140160084, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/compact_hidden_passthrough.mmd]": 0.0013759997673332691, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/complex_multipath.mmd]": 0.003779666731134057, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/convergence_stacked_sink.mmd]": 0.00442925002425909, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/convergent_offrow_exit_climb.mmd]": 0.006953417090699077, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/corridor_narrow_gap_fallback.mmd]": 0.0033272921573370695, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/cross_col_top_entry.mmd]": 0.0020633747335523367, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/cross_column_perp_drop.mmd]": 0.0011560828424990177, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007557091303169727, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/cross_row_gap_wrap.mmd]": 0.001690457807853818, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/deep_linear.mmd]": 0.006142584141343832, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/disjoint_sameline_trunks.mmd]": 0.0024499588180333376, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/divergent_fanout_split.mmd]": 0.0010157919023185968, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/dogleg_exempt_distinct.mmd]": 0.0012868742924183607, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/dogleg_exempt_sameline.mmd]": 0.006164958234876394, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/dogleg_twoline_fanout.mmd]": 0.0029004167299717665, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/exit_corner_offset_dogleg.mmd]": 0.0015313741751015186, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/fan_bypass_nesting.mmd]": 0.002481415867805481, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/fan_in_merge.mmd]": 0.0019329579081386328, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/fold_double.mmd]": 0.005123084178194404, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/fold_fan_across.mmd]": 0.011924916878342628, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/fold_stacked_branch.mmd]": 0.003819376230239868, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/funcprofiler_upstream.mmd]": 0.004647708032280207, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/header_nudge.mmd]": 0.002684290986508131, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/header_side_rotated.mmd]": 0.0025117499753832817, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/inrow_skip_breeze.mmd]": 0.0015430429484695196, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/inter_row_wrap_clearance.mmd]": 0.00283808377571404, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/interchange_lane_reorder.mmd]": 0.000788042088970542, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/junction_entry_align.mmd]": 0.0019209578167647123, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/junction_entry_collision.mmd]": 0.0016141240485012531, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/junction_entry_reversed_fold.mmd]": 0.0071039991453289986, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/junction_fanout_convergence.mmd]": 0.0019901248160749674, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/left_entry_up_wrap.mmd]": 0.002834375947713852, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/left_exit_sink_below.mmd]": 0.0034754998050630093, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.00137945800088346, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0010328330099582672, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010293752420693636, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.014006915967911482, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0014629173092544079, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_to_tb_top_cross_col.mmd]": 0.0018792077898979187, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_to_tb_top_drop.mmd]": 0.0007020831108093262, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008416648488491774, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006857493426650763, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_to_tb_top_two_lines.mmd]": 0.0029388749971985817, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_top_entry_cross_column.mmd]": 0.0007996251806616783, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.001326083205640316, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_around_below_leftmost.mmd]": 0.0015113737899810076, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_bottom_row_bypass.mmd]": 0.002516958862543106, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_leftmost_sink_branch.mmd]": 0.00341012398712337, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_offrow_continuation.mmd]": 0.0046857919078320265, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_port_above_approach.mmd]": 0.0026211251970380545, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_pullaway.mmd]": 0.0016286249738186598, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_right_entry.mmd]": 0.0015751258470118046, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_trunk_out_of_range_section.mmd]": 0.002822167007252574, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/merge_trunk_over_low_section.mmd]": 0.0018214997835457325, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/mismatched_tracks.mmd]": 0.0014598758425563574, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/mixed_bundle_column.mmd]": 0.0023109172470867634, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/mixed_port_sides.mmd]": 0.0010078330524265766, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/multi_input_convergence.mmd]": 0.0010469169355928898, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/multi_line_bundle.mmd]": 0.0016807932406663895, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/multicarrier_offrow_exit_climb.mmd]": 0.005538415862247348, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/near_vertical_junction_hook.mmd]": 0.0018411660566926003, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/off_track_convergence.mmd]": 0.0032103341072797775, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/off_track_convergence_multiline.mmd]": 0.0042837089858949184, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/off_track_input_above_consumer.mmd]": 0.004316041944548488, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/parallel_independent.mmd]": 0.0009900410659611225, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/peeloff_extra_line_consumer.mmd]": 0.0018467919435352087, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/peeloff_riser_respace.mmd]": 0.002958458149805665, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/post_convergence_trunk.mmd]": 0.0015507927164435387, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/reconverge_reversed_fold.mmd]": 0.004939625971019268, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/right_entry_from_above.mmd]": 0.0010341680608689785, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/right_entry_from_above_far.mmd]": 0.0010355000849813223, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/right_entry_gap_above_empty_row.mmd]": 0.0023929576855152845, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/right_entry_wrap_no_fan.mmd]": 0.0007261650171130896, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/rl_entry_runway.mmd]": 0.002345000160858035, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/rnaseq_lite.mmd]": 0.003822624683380127, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/route_around_intervening.mmd]": 0.009646249935030937, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/section_diamond.mmd]": 0.0022288740146905184, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/self_crossing_bridge.mmd]": 0.001183333108201623, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/shared_sink_parallel.mmd]": 0.010252915788441896, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/single_section.mmd]": 0.0027427070308476686, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/stacked_left_exit_drop.mmd]": 0.0008152502123266459, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/stacked_lr_serpentine.mmd]": 0.0024415417574346066, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.001452083932235837, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_bottom_entry_flow_start.mmd]": 0.0008085002191364765, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0012932501267641783, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0013159580994397402, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_column_continuation_two_lines.mmd]": 0.0007816262077540159, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_convergence_straight_drop.mmd]": 0.0005368748679757118, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_internal_diagonal.mmd]": 0.0016151252202689648, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_left_exit_step.mmd]": 0.0018369168974459171, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_lr_exit_left.mmd]": 0.001323582837358117, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_lr_exit_right.mmd]": 0.0012151261325925589, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_passthrough_continuation.mmd]": 0.0006131669506430626, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_passthrough_trunk.mmd]": 0.0013177497312426567, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_perp_exit_side_neighbour.mmd]": 0.002229916164651513, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_right_entry_stack.mmd]": 0.0014819158241152763, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_trunk_through_fan.mmd]": 0.0006850408390164375, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/tb_two_line_vert_seam.mmd]": 0.0063223750330507755, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/terminal_symmetric_fan.mmd]": 0.0008888752199709415, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/terminus_join.mmd]": 0.0025256252847611904, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/top_entry_header_clash.mmd]": 0.0009240410290658474, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/trunk_through_fan.mmd]": 0.0030284172389656305, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/twoline_fanout_up.mmd]": 0.0010493332520127296, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/u_turn_fold.mmd]": 0.002741792006418109, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/uneven_diamond.mmd]": 0.0006011668592691422, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/upward_bypass.mmd]": 0.002990582026541233, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/variant_calling.mmd]": 0.0031870007514953613, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/wide_fan_in.mmd]": 0.001319749979302287, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/wide_fan_out.mmd]": 0.015259458916261792, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/wide_label_fan.mmd]": 0.002591625088825822, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[topologies/wrapped_label_trunk.mmd]": 0.0014561249408870935, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[trunk_align_matching_bundle.mmd]": 0.0009518340229988098, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[uneven_diamond.mmd]": 0.0005037072114646435, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[variant_calling.mmd]": 0.0034935837611556053, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[variant_calling_tuned.mmd]": 0.00451791612431407, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[variantbenchmarking.mmd]": 0.010502416174858809, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[variantbenchmarking_auto.mmd]": 0.00702083483338356, + "tests/test_layout_invariants.py::test_inter_section_routes_dont_reenter_source_section[variantprioritization.mmd]": 0.004240835085511208, + "tests/test_layout_invariants.py::test_intra_section_collinear_check_detects_overlay": 0.0002209581434726715, + "tests/test_layout_invariants.py::test_junction_fanout_convergence_turns_concentric": 0.0011453339830040932, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[cross_track_interchange.mmd]": 0.0030444590374827385, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[da_pipeline.mmd]": 0.009645957965403795, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[diagonal_labels.mmd]": 0.0028058739844709635, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[diagonal_single_trunk_off_track.mmd]": 0.0039709568955004215, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[differentialabundance.mmd]": 0.006513209082186222, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[differentialabundance_default.mmd]": 0.0053504579700529575, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[disconnected_components.mmd]": 0.0011366680264472961, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[epitopeprediction.mmd]": 0.009585625026375055, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[file_icon_fanin.mmd]": 0.016824665945023298, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[file_icons.mmd]": 0.0009829581249505281, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[genomeassembly.mmd]": 0.003794332966208458, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[genomeassembly_organellar.mmd]": 0.004569208016619086, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[genomeassembly_staggered.mmd]": 0.002850000048056245, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[genomic_pipeline.mmd]": 0.007147792028263211, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[group_labels.mmd]": 0.0008420001249760389, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/02_sections.mmd]": 0.0010875426232814789, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/03_fan_out.mmd]": 0.005486707901582122, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/03b_fan_in_merge.mmd]": 0.0034839999862015247, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/04_directions.mmd]": 0.003616665955632925, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/05_file_icons.mmd]": 0.004876334220170975, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/05b_multi_icons.mmd]": 0.0011673739645630121, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/05c_files_icon.mmd]": 0.0008809599094092846, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/05d_folder_icon.mmd]": 0.0008013737387955189, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/05f_banner_labels.mmd]": 0.0009176249150186777, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/06a_without_hidden.mmd]": 0.002954958938062191, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[guide/06b_with_hidden.mmd]": 0.0031345426104962826, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[hlatyping.mmd]": 0.001712125027552247, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[legend_logo_placement.mmd]": 0.0027165410574525595, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[longread_variant_calling.mmd]": 0.005277874646708369, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[marker_styles.mmd]": 0.001117499079555273, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[multiline_labels.mmd]": 0.0008276673033833504, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[rnaseq_auto.mmd]": 0.013415250927209854, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[rnaseq_sections.mmd]": 0.018261041957885027, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[rnaseq_sections_manual.mmd]": 0.010599874891340733, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[tb_file_termini.mmd]": 0.001292583765462041, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[tb_right_exit_feeder_slots.mmd]": 0.002805540803819895, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/aligner_row_pinned_continuation.mmd]": 0.0018731236923485994, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/around_below_ep_col_gt0.mmd]": 0.0012650832068175077, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/around_section_below.mmd]": 0.0011918330565094948, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/asymmetric_tree.mmd]": 0.005286917323246598, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0022298740223050117, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/branch_fold_forward.mmd]": 0.003971040947362781, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/branch_fold_stability.mmd]": 0.002229750156402588, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bt_exit_top_above.mmd]": 0.0007140429224818945, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bt_exit_top_above_2line.mmd]": 0.0010142908431589603, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bt_perp_entry_below.mmd]": 0.0008396252524107695, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bt_to_lr.mmd]": 0.0011466250289231539, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bt_to_tb.mmd]": 0.0008179580327123404, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_fan_in_outer_slot.mmd]": 0.0034478751476854086, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_gap2_rightward_overflow.mmd]": 0.003588167019188404, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_label_rake.mmd]": 0.004351876210421324, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_label_rake_left.mmd]": 0.002406666288152337, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_label_rake_wide.mmd]": 0.0013211648911237717, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017760409973561764, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_leftward_overflow.mmd]": 0.001978333108127117, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/bypass_v_tight.mmd]": 0.0010267088655382395, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/clear_channel_target_aware_push.mmd]": 0.0012119582388550043, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/compact_gap_peer_conflict.mmd]": 0.005251334048807621, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/compact_hidden_passthrough.mmd]": 0.003507208079099655, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/complex_multipath.mmd]": 0.0041452080477029085, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/convergence_stacked_sink.mmd]": 0.00477008312009275, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/convergent_offrow_exit_climb.mmd]": 0.013627458363771439, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/corridor_narrow_gap_fallback.mmd]": 0.0033106659539043903, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/cross_col_top_entry.mmd]": 0.0008059591054916382, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/cross_column_perp_drop.mmd]": 0.0007783751934766769, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007143749389797449, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/cross_row_gap_wrap.mmd]": 0.001704459311440587, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/deep_linear.mmd]": 0.003922666655853391, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/disjoint_sameline_trunks.mmd]": 0.0023829590063542128, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/divergent_fanout_split.mmd]": 0.0010039168410003185, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/dogleg_exempt_distinct.mmd]": 0.001341457711532712, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/dogleg_exempt_sameline.mmd]": 0.0033292092848569155, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/dogleg_twoline_fanout.mmd]": 0.0012645421084016562, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/exit_corner_offset_dogleg.mmd]": 0.0013642089907079935, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/fan_bypass_nesting.mmd]": 0.0031860407907515764, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/fan_in_merge.mmd]": 0.0020226240158081055, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/fold_double.mmd]": 0.007167707895860076, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/fold_fan_across.mmd]": 0.0070004998706281185, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/fold_stacked_branch.mmd]": 0.0037754587829113007, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/funcprofiler_upstream.mmd]": 0.007361584110185504, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/header_nudge.mmd]": 0.0009856659453362226, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/header_side_rotated.mmd]": 0.0008296240121126175, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/inter_row_wrap_clearance.mmd]": 0.0012687500566244125, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/junction_entry_align.mmd]": 0.006026373943313956, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/junction_entry_collision.mmd]": 0.0022259990219026804, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/junction_entry_reversed_fold.mmd]": 0.001748833805322647, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/junction_fanout_convergence.mmd]": 0.001243750099092722, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/left_entry_up_wrap.mmd]": 0.0009062502067536116, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/left_exit_sink_below.mmd]": 0.0016806668136268854, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.001055208034813404, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0010104170069098473, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010487909894436598, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.001156291225925088, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_perp_top_exit_side_entry.mmd]": 0.001256957184523344, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_to_tb_top_cross_col.mmd]": 0.0009912082459777594, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_to_tb_top_drop.mmd]": 0.000680374912917614, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.000821832800284028, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006903321482241154, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_to_tb_top_two_lines.mmd]": 0.0008247499354183674, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_top_entry_cross_column.mmd]": 0.0006776673253625631, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007866669911891222, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_around_below_leftmost.mmd]": 0.0015427079051733017, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_bottom_row_bypass.mmd]": 0.0015303748659789562, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_leftmost_sink_branch.mmd]": 0.0015234590973705053, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_offrow_continuation.mmd]": 0.0015743330586701632, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_port_above_approach.mmd]": 0.005348833044990897, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_pullaway.mmd]": 0.004135998897254467, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_right_entry.mmd]": 0.003648999845609069, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_trunk_out_of_range_section.mmd]": 0.0048950002528727055, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/merge_trunk_over_low_section.mmd]": 0.0019002917688339949, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/mismatched_tracks.mmd]": 0.005625957855954766, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/mixed_bundle_column.mmd]": 0.0022392089013010263, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/mixed_port_sides.mmd]": 0.0018041660077869892, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/multi_input_convergence.mmd]": 0.00613370887003839, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/multi_line_bundle.mmd]": 0.0019481240306049585, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0015577906742691994, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/near_vertical_junction_hook.mmd]": 0.0012478327844291925, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/off_track_convergence.mmd]": 0.013215126236900687, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/off_track_convergence_multiline.mmd]": 0.0024018329568207264, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/off_track_input_above_consumer.mmd]": 0.007244084263220429, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/parallel_independent.mmd]": 0.0030148327350616455, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/peeloff_extra_line_consumer.mmd]": 0.0020282077603042126, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/peeloff_riser_respace.mmd]": 0.0018837079405784607, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/reconverge_reversed_fold.mmd]": 0.003959581954404712, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/right_entry_from_above.mmd]": 0.0007531668525189161, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/right_entry_from_above_far.mmd]": 0.0007072500884532928, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/right_entry_gap_above_empty_row.mmd]": 0.0008162080775946379, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/right_entry_wrap_no_fan.mmd]": 0.0007020430639386177, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/rl_entry_runway.mmd]": 0.0009018343407660723, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/rnaseq_lite.mmd]": 0.0023947490844875574, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/route_around_intervening.mmd]": 0.0011670002713799477, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/section_diamond.mmd]": 0.01352299889549613, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/self_crossing_bridge.mmd]": 0.0016029581893235445, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/shared_sink_parallel.mmd]": 0.003133166115731001, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/stacked_left_exit_drop.mmd]": 0.002003207802772522, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/stacked_lr_serpentine.mmd]": 0.0018427493050694466, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_bottom_entry_flow_start.mmd]": 0.0016849180683493614, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0025699990801513195, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.00248233275488019, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_column_continuation_two_lines.mmd]": 0.0008473750203847885, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_internal_diagonal.mmd]": 0.0009230419527739286, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_left_exit_step.mmd]": 0.014963916968554258, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_lr_exit_left.mmd]": 0.004231082741171122, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_lr_exit_right.mmd]": 0.002215624786913395, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_passthrough_trunk.mmd]": 0.0010632502380758524, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_perp_exit_side_neighbour.mmd]": 0.00131612503901124, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_right_entry_stack.mmd]": 0.006129292072728276, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/tb_two_line_vert_seam.mmd]": 0.0022302502766251564, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/terminal_symmetric_fan.mmd]": 0.00519995903596282, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/top_entry_header_clash.mmd]": 0.0035290000960230827, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/trunk_through_fan.mmd]": 0.0012980829924345016, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/twoline_fanout_up.mmd]": 0.003395291743800044, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/u_turn_fold.mmd]": 0.008455333998426795, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/upward_bypass.mmd]": 0.0031163340900093317, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/variant_calling.mmd]": 0.007026915205642581, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/wide_fan_in.mmd]": 0.0014056661166250706, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[topologies/wide_fan_out.mmd]": 0.001830665860325098, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[trunk_align_matching_bundle.mmd]": 0.002812541089951992, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[variant_calling.mmd]": 0.0015977907460182905, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[variant_calling_tuned.mmd]": 0.0017463332042098045, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[variantbenchmarking.mmd]": 0.011027707951143384, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[variantbenchmarking_auto.mmd]": 0.008668667171150446, + "tests/test_layout_invariants.py::test_junction_same_line_fans_coincide_or_separate[variantprioritization.mmd]": 0.003554166993126273, + "tests/test_layout_invariants.py::test_label_strike_guard_catches_a_strike": 0.030392416985705495, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[bubble_forced_label_clears_diagonal.mmd]": 0.0008248751983046532, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[bubble_label_clears_diagonal.mmd]": 0.0007414990104734898, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[bubble_output_above.mmd]": 0.0007485407404601574, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[captioned_sibling_outputs.mmd]": 0.0006572089623659849, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[centered_tracks.mmd]": 0.0009259597864001989, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[cross_track_interchange.mmd]": 0.0016051239799708128, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[da_pipeline.mmd]": 0.00856925011612475, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[diagonal_labels.mmd]": 0.0021369168534874916, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[diagonal_single_trunk_off_track.mmd]": 0.00488529191352427, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[differentialabundance.mmd]": 0.008700250182300806, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[differentialabundance_default.mmd]": 0.006542833987623453, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[directional_flow.mmd]": 0.001191417220979929, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[disconnected_components.mmd]": 0.0017460829112678766, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[epitopeprediction.mmd]": 0.002753250068053603, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[file_icon_fanin.mmd]": 0.003693958045914769, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[file_icons.mmd]": 0.0071609169244766235, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[font_scale.mmd]": 0.0026011248119175434, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[genomeassembly.mmd]": 0.006449542008340359, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[genomeassembly_organellar.mmd]": 0.014368249103426933, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[genomeassembly_staggered.mmd]": 0.008513124892488122, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[genomic_pipeline.mmd]": 0.01820070925168693, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[group_labels.mmd]": 0.0016587497666478157, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/01_minimal.mmd]": 0.005990375066176057, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/02_sections.mmd]": 0.0016980408690869808, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/03_fan_out.mmd]": 0.0021862098947167397, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/03b_fan_in_merge.mmd]": 0.0021119590383023024, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/04_directions.mmd]": 0.0024230002891272306, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/05_file_icons.mmd]": 0.0009830829221755266, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/05b_multi_icons.mmd]": 0.00903299916535616, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/05c_files_icon.mmd]": 0.002625582739710808, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/05d_folder_icon.mmd]": 0.002266041934490204, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/05f_banner_labels.mmd]": 0.0012227080296725035, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/06a_without_hidden.mmd]": 0.0024913339875638485, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[guide/06b_with_hidden.mmd]": 0.008027541916817427, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[hlatyping.mmd]": 0.005830917041748762, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[icon_caption_wrap.mmd]": 0.0005655419081449509, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[leaf_file_icon_on_trunk.mmd]": 0.0006921680178493261, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[legend_combo.mmd]": 0.005383001174777746, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[legend_logo_placement.mmd]": 0.011804832611232996, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[longread_variant_calling.mmd]": 0.00941662397235632, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[marker_styles.mmd]": 0.002197334310039878, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[multiline_labels.mmd]": 0.0023621239233762026, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[off_track_output_branched.mmd]": 0.0008727917447686195, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[off_track_outputs.mmd]": 0.0010572089813649654, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[off_track_outputs_along_trunk.mmd]": 0.0007242488209158182, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[rnaseq_auto.mmd]": 0.005523499799892306, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[rnaseq_sections.mmd]": 0.01916029187850654, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[rnaseq_sections_manual.mmd]": 0.013985458062961698, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[rnaseq_simple.mmd]": 0.0012414588127285242, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[simple_pipeline.mmd]": 0.0007607089355587959, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[tb_file_termini.mmd]": 0.0011977909598499537, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[tb_right_exit_feeder_slots.mmd]": 0.003663415787741542, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/aligner_row_pinned_continuation.mmd]": 0.004371917108073831, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/around_below_ep_col_gt0.mmd]": 0.0016550428699702024, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/around_section_below.mmd]": 0.0014455830678343773, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/asymmetric_tree.mmd]": 0.003011043183505535, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bottom_row_climb_clear_corridor.mmd]": 0.005402041133493185, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/branch_fold_forward.mmd]": 0.002013250021263957, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/branch_fold_stability.mmd]": 0.0016971249133348465, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bt_chain.mmd]": 0.0005894997157156467, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bt_exit_top_above.mmd]": 0.0007962500676512718, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bt_exit_top_above_2line.mmd]": 0.0009679989889264107, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bt_fork.mmd]": 0.0006110419053584337, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bt_perp_entry_below.mmd]": 0.0008064580615609884, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bt_to_lr.mmd]": 0.014995167264714837, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bt_to_tb.mmd]": 0.012130082817748189, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bundle_terminator_continuation.mmd]": 0.0028316250536590815, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_fan_in_outer_slot.mmd]": 0.006699292222037911, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002677708864212036, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_label_rake.mmd]": 0.0015524588525295258, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_label_rake_left.mmd]": 0.0015258737839758396, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_label_rake_wide.mmd]": 0.001519000856205821, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_leftward_far_side_entry.mmd]": 0.0019564989488571882, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_leftward_overflow.mmd]": 0.006168666994199157, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/bypass_v_tight.mmd]": 0.005595540860667825, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/clear_channel_target_aware_push.mmd]": 0.004498375114053488, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/compact_gap_peer_conflict.mmd]": 0.00206279125995934, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/compact_hidden_passthrough.mmd]": 0.0011686247307807207, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/complex_multipath.mmd]": 0.010387251153588295, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/convergence_stacked_sink.mmd]": 0.004201584029942751, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/convergent_offrow_exit_climb.mmd]": 0.01286854175850749, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/corridor_narrow_gap_fallback.mmd]": 0.00719466689042747, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/cross_col_top_entry.mmd]": 0.002619583159685135, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/cross_column_perp_drop.mmd]": 0.002601457992568612, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/cross_column_perp_drop_far_exit.mmd]": 0.002534625120460987, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/cross_row_gap_wrap.mmd]": 0.0040217500645667315, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/deep_linear.mmd]": 0.002943041967228055, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/disjoint_sameline_trunks.mmd]": 0.002611208241432905, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/divergent_fanout_split.mmd]": 0.001142333261668682, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/dogleg_exempt_distinct.mmd]": 0.0037368328776210546, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/dogleg_exempt_sameline.mmd]": 0.0018008749466389418, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/dogleg_twoline_fanout.mmd]": 0.0012802919372916222, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/exit_corner_offset_dogleg.mmd]": 0.001405500341206789, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/fan_bypass_nesting.mmd]": 0.002900918247178197, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/fan_in_merge.mmd]": 0.013093291083350778, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/fold_double.mmd]": 0.01281583309173584, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/fold_fan_across.mmd]": 0.009179665939882398, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/fold_stacked_branch.mmd]": 0.006258209003135562, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/funcprofiler_upstream.mmd]": 0.004799666814506054, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/header_nudge.mmd]": 0.0008932079654186964, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/header_side_rotated.mmd]": 0.0008530421182513237, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/inrow_skip_breeze.mmd]": 0.0006385417655110359, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/inter_row_wrap_clearance.mmd]": 0.001224959036335349, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/interchange_lane_reorder.mmd]": 0.0007035417947918177, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/junction_entry_align.mmd]": 0.0022712491918355227, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/junction_entry_collision.mmd]": 0.006003625225275755, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/junction_entry_reversed_fold.mmd]": 0.002119125099852681, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/junction_fanout_convergence.mmd]": 0.0013544168323278427, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/left_entry_up_wrap.mmd]": 0.0009463750757277012, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/left_exit_sink_below.mmd]": 0.0029662922024726868, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011964989826083183, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.001193417003378272, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0011463328264653683, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0011526669841259718, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0011863328982144594, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_to_tb_top_cross_col.mmd]": 0.001062082825228572, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_to_tb_top_drop.mmd]": 0.0007442492060363293, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008693342097103596, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0007695001550018787, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_to_tb_top_two_lines.mmd]": 0.0009077508002519608, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_top_entry_cross_column.mmd]": 0.0007646260783076286, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0023510828614234924, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_around_below_leftmost.mmd]": 0.001902041956782341, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_bottom_row_bypass.mmd]": 0.0018528741784393787, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_leftmost_sink_branch.mmd]": 0.0021082512103021145, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_offrow_continuation.mmd]": 0.0013807909563183784, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_port_above_approach.mmd]": 0.0013062497600913048, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_pullaway.mmd]": 0.0017174999229609966, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_right_entry.mmd]": 0.009060501120984554, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_trunk_out_of_range_section.mmd]": 0.0036828750744462013, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/merge_trunk_over_low_section.mmd]": 0.002545001218095422, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/mismatched_tracks.mmd]": 0.002850583055987954, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/mixed_bundle_column.mmd]": 0.004918957827612758, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/mixed_port_sides.mmd]": 0.0016725428868085146, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/multi_input_convergence.mmd]": 0.0012780837714672089, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/multi_line_bundle.mmd]": 0.0019807093776762486, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0017581672873347998, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/near_vertical_junction_hook.mmd]": 0.0032064171973615885, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/off_track_convergence.mmd]": 0.004319834290072322, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/off_track_convergence_multiline.mmd]": 0.0016099161002784967, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/off_track_input_above_consumer.mmd]": 0.022983708884567022, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/parallel_independent.mmd]": 0.007096207933500409, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/peeloff_extra_line_consumer.mmd]": 0.0022922090720385313, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/peeloff_riser_respace.mmd]": 0.0024649580009281635, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/post_convergence_trunk.mmd]": 0.000763291958719492, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/reconverge_reversed_fold.mmd]": 0.0057319155894219875, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/right_entry_from_above.mmd]": 0.0008253329433500767, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/right_entry_from_above_far.mmd]": 0.0007812909316271544, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/right_entry_gap_above_empty_row.mmd]": 0.0009464160539209843, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/right_entry_wrap_no_fan.mmd]": 0.0007892088033258915, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/rl_entry_runway.mmd]": 0.0026991248596459627, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/rnaseq_lite.mmd]": 0.005153541686013341, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/route_around_intervening.mmd]": 0.0014067920856177807, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/section_diamond.mmd]": 0.0016742078587412834, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/self_crossing_bridge.mmd]": 0.0015746238641440868, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/shared_sink_parallel.mmd]": 0.005553791997954249, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/single_section.mmd]": 0.0017096665687859058, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/stacked_left_exit_drop.mmd]": 0.004652790958061814, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/stacked_lr_serpentine.mmd]": 0.0036549989599734545, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.004591749748215079, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_bottom_entry_flow_start.mmd]": 0.001274583162739873, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.00701679103076458, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0015790408942848444, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_column_continuation_two_lines.mmd]": 0.0008507086895406246, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_convergence_straight_drop.mmd]": 0.0025969166308641434, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_internal_diagonal.mmd]": 0.007663000142201781, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_left_exit_step.mmd]": 0.005188958020880818, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_lr_exit_left.mmd]": 0.001362374983727932, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_lr_exit_right.mmd]": 0.0013284171000123024, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_passthrough_continuation.mmd]": 0.0006667918059974909, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_passthrough_trunk.mmd]": 0.0011129160411655903, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006902092136442661, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_right_entry_stack.mmd]": 0.0012752090115100145, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_trunk_through_fan.mmd]": 0.0009277092758566141, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/tb_two_line_vert_seam.mmd]": 0.00407879170961678, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/terminal_symmetric_fan.mmd]": 0.0011033760383725166, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/terminus_join.mmd]": 0.0005028331652283669, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/top_entry_header_clash.mmd]": 0.0007536658085882664, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/trunk_through_fan.mmd]": 0.0013275421224534512, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/twoline_fanout_up.mmd]": 0.001441500149667263, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/u_turn_fold.mmd]": 0.011311125243082643, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/uneven_diamond.mmd]": 0.0007284588646143675, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/upward_bypass.mmd]": 0.0034289578907191753, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/variant_calling.mmd]": 0.004327958915382624, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/wide_fan_in.mmd]": 0.004329041810706258, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/wide_fan_out.mmd]": 0.0058539570309221745, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/wide_label_fan.mmd]": 0.0016208342276513577, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[topologies/wrapped_label_trunk.mmd]": 0.000975082628428936, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[trunk_align_matching_bundle.mmd]": 0.0013318751007318497, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[uneven_diamond.mmd]": 0.0006805011071264744, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[variant_calling.mmd]": 0.004977625096216798, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[variant_calling_tuned.mmd]": 0.0030172497499734163, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[variantbenchmarking.mmd]": 0.017084999941289425, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[variantbenchmarking_auto.mmd]": 0.008808083599433303, + "tests/test_layout_invariants.py::test_label_x_anchored_to_station_marker_on_horizontal_runs[variantprioritization.mmd]": 0.004762082127854228, + "tests/test_layout_invariants.py::test_leaf_file_icon_crossing_fixture_crosses_without_auto_lift": 0.010111040901392698, + "tests/test_layout_invariants.py::test_linear_spine_fitting_one_row_is_single_row[genomeassembly_shape]": 0.031036583008244634, + "tests/test_layout_invariants.py::test_linear_spine_fitting_one_row_is_single_row[single_skip]": 0.020775916054844856, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[bubble_forced_label_clears_diagonal.mmd]": 0.0006455001421272755, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[bubble_label_clears_diagonal.mmd]": 0.0006202920340001583, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[bubble_output_above.mmd]": 0.0005644590128213167, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[captioned_sibling_outputs.mmd]": 0.0005361670628190041, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[centered_tracks.mmd]": 0.0009630408603698015, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[cross_track_interchange.mmd]": 0.0014547917526215315, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[da_pipeline.mmd]": 0.0069596669636666775, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[diagonal_labels.mmd]": 0.0018385828007012606, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[diagonal_single_trunk_off_track.mmd]": 0.0018955001141875982, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[differentialabundance.mmd]": 0.006897374987602234, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[differentialabundance_default.mmd]": 0.013083667028695345, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[directional_flow.mmd]": 0.0017541248816996813, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[disconnected_components.mmd]": 0.0016176658682525158, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[epitopeprediction.mmd]": 0.0025309568736702204, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[file_icon_fanin.mmd]": 0.007892542285844684, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[file_icons.mmd]": 0.0008055830840021372, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[font_scale.mmd]": 0.0006438330747187138, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[genomeassembly.mmd]": 0.022674875101074576, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[genomeassembly_organellar.mmd]": 0.0038882088847458363, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[genomeassembly_staggered.mmd]": 0.0048094578087329865, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[genomic_pipeline.mmd]": 0.01762416772544384, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[group_labels.mmd]": 0.002314541954547167, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/01_minimal.mmd]": 0.002747416729107499, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/02_sections.mmd]": 0.003264665836468339, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/03_fan_out.mmd]": 0.002125623868778348, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/03b_fan_in_merge.mmd]": 0.003387541277334094, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/04_directions.mmd]": 0.0018705411348491907, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/05_file_icons.mmd]": 0.005105626070871949, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/05b_multi_icons.mmd]": 0.004180334275588393, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/05c_files_icon.mmd]": 0.0009320001117885113, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/05d_folder_icon.mmd]": 0.0009962508920580149, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/05f_banner_labels.mmd]": 0.000996832037344575, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/06a_without_hidden.mmd]": 0.0013065829407423735, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[guide/06b_with_hidden.mmd]": 0.0012640429195016623, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[hlatyping.mmd]": 0.002403292106464505, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[icon_caption_wrap.mmd]": 0.0004672498907893896, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[leaf_file_icon_on_trunk.mmd]": 0.0008810418657958508, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[legend_combo.mmd]": 0.0007287503685802221, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[legend_logo_placement.mmd]": 0.0017132931388914585, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[longread_variant_calling.mmd]": 0.009975874796509743, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[marker_styles.mmd]": 0.0011569170746952295, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[multiline_labels.mmd]": 0.0010922921355813742, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[off_track_output_branched.mmd]": 0.0006972500123083591, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[off_track_outputs.mmd]": 0.0007231247145682573, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[off_track_outputs_along_trunk.mmd]": 0.0006330837495625019, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[rnaseq_auto.mmd]": 0.004775249864906073, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[rnaseq_sections.mmd]": 0.011485249735414982, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[rnaseq_sections_manual.mmd]": 0.015312624862417579, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[rnaseq_simple.mmd]": 0.0005813748575747013, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[simple_pipeline.mmd]": 0.0006134160794317722, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[tb_file_termini.mmd]": 0.0010198329109698534, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[tb_right_exit_feeder_slots.mmd]": 0.0021534159313887358, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/aligner_row_pinned_continuation.mmd]": 0.002520417096093297, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/around_below_ep_col_gt0.mmd]": 0.0012923332396894693, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/around_section_below.mmd]": 0.0028021240141242743, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/asymmetric_tree.mmd]": 0.0022890421096235514, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bottom_row_climb_clear_corridor.mmd]": 0.001425748923793435, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/branch_fold_forward.mmd]": 0.0015962510369718075, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/branch_fold_stability.mmd]": 0.0015887499321252108, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bt_chain.mmd]": 0.016871290979906917, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bt_exit_top_above.mmd]": 0.0010705420281738043, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bt_exit_top_above_2line.mmd]": 0.0008012086618691683, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bt_fork.mmd]": 0.0005781250074505806, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bt_perp_entry_below.mmd]": 0.0007662090938538313, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bt_to_lr.mmd]": 0.0009022071026265621, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bt_to_tb.mmd]": 0.0011050831526517868, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bundle_terminator_continuation.mmd]": 0.0005452930927276611, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_fan_in_outer_slot.mmd]": 0.003859540680423379, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0027595001738518476, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_label_rake.mmd]": 0.0014139993581920862, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_label_rake_left.mmd]": 0.0013460409827530384, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_label_rake_wide.mmd]": 0.0013282911386340857, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_leftward_far_side_entry.mmd]": 0.018167417030781507, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_leftward_overflow.mmd]": 0.013363624922931194, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/bypass_v_tight.mmd]": 0.0011430832091718912, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/clear_channel_target_aware_push.mmd]": 0.0032623319420963526, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/compact_gap_peer_conflict.mmd]": 0.0070390000473707914, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/compact_hidden_passthrough.mmd]": 0.0010950828436762094, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/complex_multipath.mmd]": 0.005292373709380627, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/convergence_stacked_sink.mmd]": 0.0036081259604543447, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/convergent_offrow_exit_climb.mmd]": 0.03168470808304846, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/corridor_narrow_gap_fallback.mmd]": 0.002555625047534704, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/cross_col_top_entry.mmd]": 0.0011269159149378538, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/cross_column_perp_drop.mmd]": 0.001120000146329403, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0008937087841331959, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/cross_row_gap_wrap.mmd]": 0.001950667006894946, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/deep_linear.mmd]": 0.0022551249712705612, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/disjoint_sameline_trunks.mmd]": 0.002198500093072653, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/divergent_fanout_split.mmd]": 0.0009750840254127979, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/dogleg_exempt_distinct.mmd]": 0.0013572501484304667, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/dogleg_exempt_sameline.mmd]": 0.0010186252184212208, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/dogleg_twoline_fanout.mmd]": 0.0010883340146392584, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/exit_corner_offset_dogleg.mmd]": 0.0012572924606502056, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/fan_bypass_nesting.mmd]": 0.002520665992051363, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/fan_in_merge.mmd]": 0.010542333358898759, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/fold_double.mmd]": 0.004882833920419216, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/fold_fan_across.mmd]": 0.007590374909341335, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/fold_stacked_branch.mmd]": 0.006470666732639074, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/funcprofiler_upstream.mmd]": 0.028066792292520404, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/header_nudge.mmd]": 0.001929042162373662, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/header_side_rotated.mmd]": 0.0016700001433491707, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/inrow_skip_breeze.mmd]": 0.0020061249379068613, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/inter_row_wrap_clearance.mmd]": 0.0020537092350423336, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/interchange_lane_reorder.mmd]": 0.0026999569963663816, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/junction_entry_align.mmd]": 0.002154666930437088, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/junction_entry_collision.mmd]": 0.001789456931874156, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/junction_entry_reversed_fold.mmd]": 0.003543041180819273, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/junction_fanout_convergence.mmd]": 0.0015103747136890888, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/left_entry_up_wrap.mmd]": 0.0009548747912049294, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/left_exit_sink_below.mmd]": 0.001476790988817811, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.00428191595710814, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.001062250230461359, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010289577767252922, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0014711252879351377, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0012770828325301409, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_to_tb_top_cross_col.mmd]": 0.000963457627221942, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_to_tb_top_drop.mmd]": 0.0007181258406490088, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008789170533418655, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0017748742830008268, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_to_tb_top_two_lines.mmd]": 0.00115024927072227, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_top_entry_cross_column.mmd]": 0.005322583252564073, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0038033761084079742, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_around_below_leftmost.mmd]": 0.003855625167489052, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_bottom_row_bypass.mmd]": 0.0033717509359121323, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_leftmost_sink_branch.mmd]": 0.005582916783168912, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_offrow_continuation.mmd]": 0.0012414590455591679, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_port_above_approach.mmd]": 0.0011518329847604036, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_pullaway.mmd]": 0.005939956987276673, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_right_entry.mmd]": 0.0034731668420135975, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_trunk_out_of_range_section.mmd]": 0.0032097911462187767, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/merge_trunk_over_low_section.mmd]": 0.0025091255083680153, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/mismatched_tracks.mmd]": 0.001562250079587102, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/mixed_bundle_column.mmd]": 0.011585291242226958, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/mixed_port_sides.mmd]": 0.0025931671261787415, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/multi_input_convergence.mmd]": 0.001151207834482193, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/multi_line_bundle.mmd]": 0.007262958213686943, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0018205838277935982, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/near_vertical_junction_hook.mmd]": 0.0012225431855767965, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/off_track_convergence.mmd]": 0.000990833854302764, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/off_track_convergence_multiline.mmd]": 0.0012745419517159462, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/off_track_input_above_consumer.mmd]": 0.011481208028271794, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/parallel_independent.mmd]": 0.0010742498561739922, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/peeloff_extra_line_consumer.mmd]": 0.0035699158906936646, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/peeloff_riser_respace.mmd]": 0.001998957945033908, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/post_convergence_trunk.mmd]": 0.0027500430587679148, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/reconverge_reversed_fold.mmd]": 0.008702207822352648, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/right_entry_from_above.mmd]": 0.0007766238413751125, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/right_entry_from_above_far.mmd]": 0.008714291965588927, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/right_entry_gap_above_empty_row.mmd]": 0.004081916995346546, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/right_entry_wrap_no_fan.mmd]": 0.002045332919806242, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/rl_entry_runway.mmd]": 0.0024507080670446157, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/rnaseq_lite.mmd]": 0.004143333761021495, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/route_around_intervening.mmd]": 0.001251374138519168, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/section_diamond.mmd]": 0.0014317091554403305, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/self_crossing_bridge.mmd]": 0.0009867909830063581, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/shared_sink_parallel.mmd]": 0.0026981672272086143, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/single_section.mmd]": 0.0006464589387178421, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/stacked_left_exit_drop.mmd]": 0.001143291825428605, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/stacked_lr_serpentine.mmd]": 0.003395542036741972, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.003458708990365267, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_bottom_entry_flow_start.mmd]": 0.001715291989967227, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0014495821669697762, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.004595250124111772, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_column_continuation_two_lines.mmd]": 0.0011156240943819284, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_convergence_straight_drop.mmd]": 0.000648164888843894, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_internal_diagonal.mmd]": 0.000963584054261446, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_left_exit_step.mmd]": 0.001802041893824935, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_lr_exit_left.mmd]": 0.0013322080485522747, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_lr_exit_right.mmd]": 0.0029371671844273806, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_passthrough_continuation.mmd]": 0.0010242927819490433, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_passthrough_trunk.mmd]": 0.0015034161042422056, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0007388319354504347, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_right_entry_stack.mmd]": 0.0011877480428665876, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_trunk_through_fan.mmd]": 0.0005253341514617205, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/tb_two_line_vert_seam.mmd]": 0.0009103750344365835, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/terminal_symmetric_fan.mmd]": 0.0008160830475389957, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/terminus_join.mmd]": 0.0004155421629548073, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/top_entry_header_clash.mmd]": 0.0006327498704195023, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/trunk_through_fan.mmd]": 0.0010909589473158121, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/twoline_fanout_up.mmd]": 0.0011277920566499233, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/u_turn_fold.mmd]": 0.0026712079998105764, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/uneven_diamond.mmd]": 0.0009422500152140856, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/upward_bypass.mmd]": 0.0038082492537796497, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/variant_calling.mmd]": 0.0037499158643186092, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/wide_fan_in.mmd]": 0.0014651252422481775, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/wide_fan_out.mmd]": 0.0015967909712344408, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/wide_label_fan.mmd]": 0.0005404604598879814, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[topologies/wrapped_label_trunk.mmd]": 0.0006621249485760927, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[trunk_align_matching_bundle.mmd]": 0.0032269989605993032, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[uneven_diamond.mmd]": 0.0005888761952519417, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[variant_calling.mmd]": 0.001804916886612773, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[variant_calling_tuned.mmd]": 0.0020388748962432146, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[variantbenchmarking.mmd]": 0.008743291953578591, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[variantbenchmarking_auto.mmd]": 0.038421250181272626, + "tests/test_layout_invariants.py::test_lines_dont_cross_non_consumer_markers[variantprioritization.mmd]": 0.01025095907971263, + "tests/test_layout_invariants.py::test_loop_column_stations_share_x[da_pipeline.mmd]": 0.003415876068174839, + "tests/test_layout_invariants.py::test_loop_recenter_only_for_pure_side_branches[topologies/mismatched_tracks.mmd]": 0.0024034171365201473, + "tests/test_layout_invariants.py::test_loop_recenter_only_for_pure_side_branches[topologies/variant_calling.mmd]": 0.005039833951741457, + "tests/test_layout_invariants.py::test_lr_perp_multiline_exit_routes_cleanly[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.027569583151489496, + "tests/test_layout_invariants.py::test_lr_perp_multiline_exit_routes_cleanly[topologies/lr_perp_top_exit_side_entry.mmd]": 0.03601083322428167, + "tests/test_layout_invariants.py::test_lr_section_all_perpendicular_ports_rejected": 0.05342199979349971, + "tests/test_layout_invariants.py::test_lr_to_tb_bottom_drop_clears_last_station[lr_to_tb_top_drop.mmd]": 0.000581459142267704, + "tests/test_layout_invariants.py::test_lr_to_tb_bottom_drop_clears_last_station[lr_to_tb_top_drop_two_lines.mmd]": 0.000538000138476491, + "tests/test_layout_invariants.py::test_lr_to_tb_bottom_drop_no_boundary_crossover[lr_to_tb_top_drop.mmd]": 0.0021834999788552523, + "tests/test_layout_invariants.py::test_lr_to_tb_bottom_drop_no_boundary_crossover[lr_to_tb_top_drop_two_lines.mmd]": 0.001561000244691968, + "tests/test_layout_invariants.py::test_lr_to_tb_bottom_drop_routes_straight[lr_to_tb_top_drop.mmd]": 0.0024606657680124044, + "tests/test_layout_invariants.py::test_lr_to_tb_bottom_drop_routes_straight[lr_to_tb_top_drop_two_lines.mmd]": 0.00307412538677454, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[cross_track_interchange.mmd]": 0.007810208247974515, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[da_pipeline.mmd]": 0.015691541833803058, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[diagonal_labels.mmd]": 0.0020406257826834917, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[diagonal_single_trunk_off_track.mmd]": 0.0017309172544628382, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[differentialabundance.mmd]": 0.006689416011795402, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[differentialabundance_default.mmd]": 0.00606829090975225, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[disconnected_components.mmd]": 0.0011718750465661287, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[epitopeprediction.mmd]": 0.0021706263069063425, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[file_icon_fanin.mmd]": 0.007817249977961183, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[file_icons.mmd]": 0.0023137920070439577, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[genomeassembly.mmd]": 0.009979999857023358, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[genomeassembly_organellar.mmd]": 0.0034320419654250145, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[genomeassembly_staggered.mmd]": 0.016400207998231053, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[genomic_pipeline.mmd]": 0.01491970825009048, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[group_labels.mmd]": 0.0018422079738229513, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/02_sections.mmd]": 0.0034257080405950546, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/03_fan_out.mmd]": 0.007822916842997074, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/03b_fan_in_merge.mmd]": 0.004776415880769491, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/04_directions.mmd]": 0.001854207832366228, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/05_file_icons.mmd]": 0.0009090411476790905, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/05b_multi_icons.mmd]": 0.0010620842222124338, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/05c_files_icon.mmd]": 0.0009026671759784222, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/05d_folder_icon.mmd]": 0.000818959204480052, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/05f_banner_labels.mmd]": 0.0009170400444418192, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/06a_without_hidden.mmd]": 0.0012307919096201658, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[guide/06b_with_hidden.mmd]": 0.0012108338996767998, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[hlatyping.mmd]": 0.0015718331560492516, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[legend_logo_placement.mmd]": 0.0015052501112222672, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[longread_variant_calling.mmd]": 0.015365167520940304, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[marker_styles.mmd]": 0.00103554199449718, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[multiline_labels.mmd]": 0.002259667031466961, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[rnaseq_auto.mmd]": 0.007904874859377742, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[rnaseq_sections.mmd]": 0.011273166164755821, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[rnaseq_sections_manual.mmd]": 0.015085667371749878, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[tb_file_termini.mmd]": 0.0010600420646369457, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[tb_right_exit_feeder_slots.mmd]": 0.003224876942113042, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/aligner_row_pinned_continuation.mmd]": 0.0021804580464959145, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/around_below_ep_col_gt0.mmd]": 0.002185499994084239, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/around_section_below.mmd]": 0.0016502500511705875, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/asymmetric_tree.mmd]": 0.0021243758965283632, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0013899991754442453, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/branch_fold_forward.mmd]": 0.005433749873191118, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/branch_fold_stability.mmd]": 0.0018187081441283226, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bt_exit_top_above.mmd]": 0.001464833039790392, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bt_exit_top_above_2line.mmd]": 0.0011991667561233044, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bt_perp_entry_below.mmd]": 0.0011577499099075794, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bt_to_lr.mmd]": 0.0020901660900563, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bt_to_tb.mmd]": 0.0008644158951938152, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_fan_in_outer_slot.mmd]": 0.01316704205237329, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_gap2_rightward_overflow.mmd]": 0.003939541755244136, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_label_rake.mmd]": 0.001554290996864438, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_label_rake_left.mmd]": 0.001245291205123067, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_label_rake_wide.mmd]": 0.0012190830893814564, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_leftward_far_side_entry.mmd]": 0.003588625229895115, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_leftward_overflow.mmd]": 0.0018374579958617687, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/bypass_v_tight.mmd]": 0.0009607500396668911, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/clear_channel_target_aware_push.mmd]": 0.0011468762531876564, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/compact_gap_peer_conflict.mmd]": 0.0052150830160826445, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/compact_hidden_passthrough.mmd]": 0.0024824582505971193, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/complex_multipath.mmd]": 0.004938873695209622, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/convergence_stacked_sink.mmd]": 0.005577499745413661, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/convergent_offrow_exit_climb.mmd]": 0.005892165005207062, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/corridor_narrow_gap_fallback.mmd]": 0.001204957952722907, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/cross_col_top_entry.mmd]": 0.0007037920877337456, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/cross_column_perp_drop.mmd]": 0.0007192909251898527, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006934578996151686, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/cross_row_gap_wrap.mmd]": 0.007929208222776651, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/deep_linear.mmd]": 0.0051791672594845295, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/disjoint_sameline_trunks.mmd]": 0.007001582765951753, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/divergent_fanout_split.mmd]": 0.0011624996550381184, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/dogleg_exempt_distinct.mmd]": 0.0031934999860823154, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/dogleg_exempt_sameline.mmd]": 0.0010162508115172386, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/dogleg_twoline_fanout.mmd]": 0.0010791658423841, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/exit_corner_offset_dogleg.mmd]": 0.0016802488826215267, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/fan_bypass_nesting.mmd]": 0.010315791936591268, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/fan_in_merge.mmd]": 0.00194274983368814, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/fold_double.mmd]": 0.003911458188667893, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/fold_fan_across.mmd]": 0.01171970833092928, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/fold_stacked_branch.mmd]": 0.005867042113095522, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/funcprofiler_upstream.mmd]": 0.008957999059930444, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/header_nudge.mmd]": 0.002367166103795171, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/header_side_rotated.mmd]": 0.0020907088182866573, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/inter_row_wrap_clearance.mmd]": 0.001320666866376996, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/junction_entry_align.mmd]": 0.0031365829054266214, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/junction_entry_collision.mmd]": 0.0016005418729037046, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/junction_entry_reversed_fold.mmd]": 0.0013535828329622746, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/junction_fanout_convergence.mmd]": 0.001119416207075119, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/left_entry_up_wrap.mmd]": 0.0008333749137818813, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/left_exit_sink_below.mmd]": 0.0011513747740536928, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.004016832914203405, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0011552500072866678, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0011713742278516293, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0010062919463962317, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0009465408511459827, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_to_tb_top_cross_col.mmd]": 0.0008417919743806124, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_to_tb_top_drop.mmd]": 0.0006031659431755543, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007515831384807825, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006534578278660774, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_to_tb_top_two_lines.mmd]": 0.0007706249598413706, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_top_entry_cross_column.mmd]": 0.0006524580530822277, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007592069450765848, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_around_below_leftmost.mmd]": 0.0014239998999983072, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_bottom_row_bypass.mmd]": 0.0031037081498652697, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_leftmost_sink_branch.mmd]": 0.0014801258221268654, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_offrow_continuation.mmd]": 0.0014897489454597235, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_port_above_approach.mmd]": 0.001221542013809085, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_pullaway.mmd]": 0.0014040821697562933, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_right_entry.mmd]": 0.003644583048298955, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_trunk_out_of_range_section.mmd]": 0.0018228329718112946, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/merge_trunk_over_low_section.mmd]": 0.002261166926473379, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/mismatched_tracks.mmd]": 0.0026058340445160866, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/mixed_bundle_column.mmd]": 0.0043445422779768705, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/mixed_port_sides.mmd]": 0.001008249120786786, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/multi_input_convergence.mmd]": 0.0010632909834384918, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/multi_line_bundle.mmd]": 0.0016658748500049114, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0027945421170443296, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/near_vertical_junction_hook.mmd]": 0.0015809580218046904, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/off_track_convergence.mmd]": 0.001053874846547842, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/off_track_convergence_multiline.mmd]": 0.0013195418287068605, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/off_track_input_above_consumer.mmd]": 0.0035855842288583517, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/parallel_independent.mmd]": 0.000918291974812746, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/peeloff_extra_line_consumer.mmd]": 0.00191950099542737, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/peeloff_riser_respace.mmd]": 0.011202375870198011, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/reconverge_reversed_fold.mmd]": 0.0035957081709057093, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/right_entry_from_above.mmd]": 0.0007121670059859753, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/right_entry_from_above_far.mmd]": 0.0006802072748541832, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/right_entry_gap_above_empty_row.mmd]": 0.008370875846594572, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/right_entry_wrap_no_fan.mmd]": 0.0036993748508393764, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/rl_entry_runway.mmd]": 0.003159833839163184, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/rnaseq_lite.mmd]": 0.0036772917956113815, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/route_around_intervening.mmd]": 0.002006916096433997, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/section_diamond.mmd]": 0.0016620000824332237, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/self_crossing_bridge.mmd]": 0.0010951668955385685, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/shared_sink_parallel.mmd]": 0.0026272921822965145, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/stacked_left_exit_drop.mmd]": 0.0010098761413246393, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/stacked_lr_serpentine.mmd]": 0.0032803339418023825, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_bottom_entry_flow_start.mmd]": 0.0010796240530908108, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0012792900670319796, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.002910373732447624, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_column_continuation_two_lines.mmd]": 0.0007383760530501604, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_internal_diagonal.mmd]": 0.0008515829686075449, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_left_exit_step.mmd]": 0.0034816660918295383, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_lr_exit_left.mmd]": 0.0015872912481427193, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_lr_exit_right.mmd]": 0.0014037920627743006, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_passthrough_trunk.mmd]": 0.0009891670197248459, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0009598750621080399, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_right_entry_stack.mmd]": 0.0037937501911073923, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/tb_two_line_vert_seam.mmd]": 0.0037709581665694714, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/terminal_symmetric_fan.mmd]": 0.0008617907296866179, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/top_entry_header_clash.mmd]": 0.0006377499084919691, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/trunk_through_fan.mmd]": 0.0012418341357260942, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/twoline_fanout_up.mmd]": 0.0013539986684918404, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/u_turn_fold.mmd]": 0.0026285010389983654, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/upward_bypass.mmd]": 0.0030759999062865973, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/variant_calling.mmd]": 0.013359792064875364, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/wide_fan_in.mmd]": 0.0024612911511212587, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[topologies/wide_fan_out.mmd]": 0.0015799161046743393, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[trunk_align_matching_bundle.mmd]": 0.0009357091039419174, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[variant_calling.mmd]": 0.0014394179452210665, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[variant_calling_tuned.mmd]": 0.0017548738978803158, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[variantbenchmarking.mmd]": 0.006071707000955939, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[variantbenchmarking_auto.mmd]": 0.0045903329737484455, + "tests/test_layout_invariants.py::test_merge_feeder_does_not_loop_below_target[variantprioritization.mmd]": 0.001911459257826209, + "tests/test_layout_invariants.py::test_merge_port_line_keeps_side_on_outgoing_run[topologies/merge_port_above_approach.mmd-bypass-270.0]": 0.0022542919032275677, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[guide/03_fan_out.mmd]": 0.0011422920506447554, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[guide/04_directions.mmd]": 0.0011362922377884388, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0010732919909060001, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/bypass_fan_in_outer_slot.mmd]": 0.0020576249808073044, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/complex_multipath.mmd]": 0.0015406250022351742, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/dogleg_exempt_distinct.mmd]": 0.0008087917231023312, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/exit_corner_offset_dogleg.mmd]": 0.0008096660021692514, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/fold_fan_across.mmd]": 0.002119832905009389, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/fold_stacked_branch.mmd]": 0.007217375095933676, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/merge_offrow_continuation.mmd]": 0.003254000097513199, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/merge_port_above_approach.mmd]": 0.0009711659513413906, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/mixed_bundle_column.mmd]": 0.0014222911559045315, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/off_track_input_above_consumer.mmd]": 0.005904791876673698, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/reconverge_reversed_fold.mmd]": 0.002486000070348382, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/section_diamond.mmd]": 0.001290209125727415, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/variant_calling.mmd]": 0.002079665893688798, + "tests/test_layout_invariants.py::test_merge_port_rejoining_line_takes_approach_slot[topologies/wide_fan_in.mmd]": 0.0009647910483181477, + "tests/test_layout_invariants.py::test_near_vertical_junction_hook_renders_cleanly": 0.0022263338323682547, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[cross_track_interchange.mmd]": 0.0011226253118366003, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[da_pipeline.mmd]": 0.007105666911229491, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[diagonal_labels.mmd]": 0.00367462495341897, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[diagonal_single_trunk_off_track.mmd]": 0.004032250260934234, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[differentialabundance.mmd]": 0.004486417165026069, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[differentialabundance_default.mmd]": 0.009537459118291736, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[disconnected_components.mmd]": 0.0009577497839927673, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[epitopeprediction.mmd]": 0.0016662082634866238, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[file_icon_fanin.mmd]": 0.001366166863590479, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[file_icons.mmd]": 0.000674957875162363, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[genomeassembly.mmd]": 0.005134207895025611, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[genomeassembly_organellar.mmd]": 0.004350708099082112, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[genomeassembly_staggered.mmd]": 0.011505208909511566, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[genomic_pipeline.mmd]": 0.006341793108731508, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[group_labels.mmd]": 0.0007319990545511246, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/02_sections.mmd]": 0.0009026660118252039, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/03_fan_out.mmd]": 0.0014436678029596806, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/03b_fan_in_merge.mmd]": 0.007444749353453517, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/04_directions.mmd]": 0.0017336669843643904, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/05_file_icons.mmd]": 0.0010107080452144146, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/05b_multi_icons.mmd]": 0.0025470838882029057, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/05c_files_icon.mmd]": 0.0011844579130411148, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/05d_folder_icon.mmd]": 0.002024166053161025, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/05f_banner_labels.mmd]": 0.0020943740382790565, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/06a_without_hidden.mmd]": 0.0034857490099966526, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[guide/06b_with_hidden.mmd]": 0.0029144170694053173, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[hlatyping.mmd]": 0.001724708592519164, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[legend_logo_placement.mmd]": 0.0047429988626390696, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[longread_variant_calling.mmd]": 0.00665379106067121, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[marker_styles.mmd]": 0.0011168750934302807, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[multiline_labels.mmd]": 0.001078873872756958, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[regressions/stacked_collector_fanin.mmd]": 0.006511332001537085, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[rnaseq_auto.mmd]": 0.006460707867518067, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[rnaseq_sections.mmd]": 0.005187375005334616, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[rnaseq_sections_manual.mmd]": 0.012344500049948692, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[tb_file_termini.mmd]": 0.0009237499907612801, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[tb_right_exit_feeder_slots.mmd]": 0.0014398752246052027, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/aligner_row_pinned_continuation.mmd]": 0.00759875075891614, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/around_below_ep_col_gt0.mmd]": 0.0011644589249044657, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/around_section_below.mmd]": 0.001033665845170617, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/asymmetric_tree.mmd]": 0.0017401673831045628, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bottom_row_climb_clear_corridor.mmd]": 0.003378666937351227, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/branch_fold_forward.mmd]": 0.0016231259796768427, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/branch_fold_stability.mmd]": 0.0011414166074246168, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bt_exit_top_above.mmd]": 0.0006382903084158897, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bt_exit_top_above_2line.mmd]": 0.0009681237861514091, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bt_perp_entry_below.mmd]": 0.0007667921017855406, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bt_to_lr.mmd]": 0.0007267487235367298, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bt_to_tb.mmd]": 0.0007195828948169947, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_fan_in_outer_slot.mmd]": 0.0028303321450948715, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0022356247063726187, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_label_rake.mmd]": 0.0011217908468097448, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_label_rake_left.mmd]": 0.0010375827550888062, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_label_rake_wide.mmd]": 0.006086250068619847, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017619999125599861, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_leftward_overflow.mmd]": 0.0016297909896820784, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/bypass_v_tight.mmd]": 0.000969666289165616, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/clear_channel_target_aware_push.mmd]": 0.001045790733769536, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/compact_gap_peer_conflict.mmd]": 0.00569029082544148, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/compact_hidden_passthrough.mmd]": 0.0014243752229958773, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/complex_multipath.mmd]": 0.002590665128082037, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/convergence_stacked_sink.mmd]": 0.003564292099326849, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/convergent_offrow_exit_climb.mmd]": 0.0102545409463346, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/corridor_narrow_gap_fallback.mmd]": 0.002553666243329644, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/cross_col_top_entry.mmd]": 0.001698166597634554, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/cross_column_perp_drop.mmd]": 0.0017077499069273472, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006926681380718946, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/cross_row_gap_wrap.mmd]": 0.0014062500558793545, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/deep_linear.mmd]": 0.002950208028778434, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/disjoint_sameline_trunks.mmd]": 0.003525207983329892, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/divergent_fanout_split.mmd]": 0.001023374730721116, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/dogleg_exempt_distinct.mmd]": 0.001651459839195013, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/dogleg_exempt_sameline.mmd]": 0.0009638741612434387, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/dogleg_twoline_fanout.mmd]": 0.0011694992426782846, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/exit_corner_offset_dogleg.mmd]": 0.0011491249315440655, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/fan_bypass_nesting.mmd]": 0.0020971237681806087, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/fan_in_merge.mmd]": 0.007635543122887611, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/fold_double.mmd]": 0.006844083312898874, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/fold_fan_across.mmd]": 0.00304408255033195, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/fold_stacked_branch.mmd]": 0.0030312510207295418, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/funcprofiler_upstream.mmd]": 0.011322290636599064, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/header_nudge.mmd]": 0.001331541920080781, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/header_side_rotated.mmd]": 0.0009062502067536116, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/inter_row_wrap_clearance.mmd]": 0.0009393738582730293, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/junction_entry_align.mmd]": 0.008443125756457448, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/junction_entry_collision.mmd]": 0.0017569581978023052, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/junction_entry_reversed_fold.mmd]": 0.0013599579688161612, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/junction_fanout_convergence.mmd]": 0.0010372078977525234, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/left_entry_up_wrap.mmd]": 0.0009356236550956964, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/left_exit_sink_below.mmd]": 0.002254167338833213, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0009578752797096968, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0008447496220469475, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0008570828940719366, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0034052920527756214, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_perp_top_exit_side_entry.mmd]": 0.002966334344819188, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_to_tb_top_cross_col.mmd]": 0.0009097920265048742, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_to_tb_top_drop.mmd]": 0.0006141250487416983, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007656658999621868, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006126661319285631, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_to_tb_top_two_lines.mmd]": 0.0007332919631153345, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_top_entry_cross_column.mmd]": 0.0005907488521188498, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0006872492376714945, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_around_below_leftmost.mmd]": 0.003638584166765213, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_bottom_row_bypass.mmd]": 0.001335417153313756, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_leftmost_sink_branch.mmd]": 0.001276666997000575, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_offrow_continuation.mmd]": 0.0012207902036607265, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_port_above_approach.mmd]": 0.0010646248701959848, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_pullaway.mmd]": 0.0012784581631422043, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_right_entry.mmd]": 0.0012529580853879452, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_trunk_out_of_range_section.mmd]": 0.008798167109489441, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/merge_trunk_over_low_section.mmd]": 0.005475708050653338, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/mismatched_tracks.mmd]": 0.001096207881346345, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/mixed_bundle_column.mmd]": 0.004819206893444061, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/mixed_port_sides.mmd]": 0.0008768332190811634, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/multi_input_convergence.mmd]": 0.0009649577550590038, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/multi_line_bundle.mmd]": 0.0014740400947630405, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/multicarrier_offrow_exit_climb.mmd]": 0.00120816589333117, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/near_vertical_junction_hook.mmd]": 0.0010620830580592155, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/off_track_convergence.mmd]": 0.0025445418432354927, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/off_track_convergence_multiline.mmd]": 0.0010634998325258493, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/off_track_input_above_consumer.mmd]": 0.0033735421020537615, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/parallel_independent.mmd]": 0.0008720408659428358, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/peeloff_extra_line_consumer.mmd]": 0.0016598333604633808, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/peeloff_riser_respace.mmd]": 0.0015877906698733568, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/reconverge_reversed_fold.mmd]": 0.0030448760371655226, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/right_entry_from_above.mmd]": 0.0005942089483141899, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/right_entry_from_above_far.mmd]": 0.0005706658121198416, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006860001012682915, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/right_entry_wrap_no_fan.mmd]": 0.0005813748575747013, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/rl_entry_runway.mmd]": 0.0007119167130440474, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/rnaseq_lite.mmd]": 0.0018865002784878016, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/route_around_intervening.mmd]": 0.000940707977861166, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/section_diamond.mmd]": 0.0011071660555899143, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/self_crossing_bridge.mmd]": 0.0008131670765578747, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/shared_sink_parallel.mmd]": 0.0022567082196474075, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/stacked_left_exit_drop.mmd]": 0.0005728749092668295, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/stacked_lr_serpentine.mmd]": 0.0033645827788859606, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_bottom_entry_flow_start.mmd]": 0.0030607501976191998, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0035025421530008316, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.001762125175446272, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_column_continuation_two_lines.mmd]": 0.0021732912864536047, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_internal_diagonal.mmd]": 0.0008024582639336586, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_left_exit_step.mmd]": 0.0019266249146312475, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_lr_exit_left.mmd]": 0.0010527910199016333, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_lr_exit_right.mmd]": 0.0011744147632271051, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_passthrough_trunk.mmd]": 0.0008866649586707354, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005760421045124531, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_right_entry_stack.mmd]": 0.0010580418165773153, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/tb_two_line_vert_seam.mmd]": 0.0008612486999481916, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/terminal_symmetric_fan.mmd]": 0.0008754171431064606, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/top_entry_header_clash.mmd]": 0.0006472489330917597, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/trunk_through_fan.mmd]": 0.0009438761044293642, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/twoline_fanout_up.mmd]": 0.000979625154286623, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/u_turn_fold.mmd]": 0.002245998941361904, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/upward_bypass.mmd]": 0.0025482489727437496, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/variant_calling.mmd]": 0.0025980831123888493, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/wide_fan_in.mmd]": 0.0011222928296774626, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[topologies/wide_fan_out.mmd]": 0.009952917695045471, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[trunk_align_matching_bundle.mmd]": 0.0011242919135838747, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[variant_calling.mmd]": 0.0013502489309757948, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[variant_calling_tuned.mmd]": 0.0014567088801413774, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[variantbenchmarking.mmd]": 0.00415437389165163, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[variantbenchmarking_auto.mmd]": 0.004147790605202317, + "tests/test_layout_invariants.py::test_no_artefactual_counter_flow[variantprioritization.mmd]": 0.0016098751220852137, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[bubble_forced_label_clears_diagonal.mmd]": 0.0006342490669339895, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[bubble_label_clears_diagonal.mmd]": 0.0005946250166743994, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[bubble_output_above.mmd]": 0.0005536261014640331, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[captioned_sibling_outputs.mmd]": 0.0009254582691937685, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[centered_tracks.mmd]": 0.0006939580198377371, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[cross_track_interchange.mmd]": 0.001220458885654807, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[da_pipeline.mmd]": 0.015941750025376678, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[diagonal_labels.mmd]": 0.0017352502327412367, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[diagonal_single_trunk_off_track.mmd]": 0.0018314991611987352, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[differentialabundance.mmd]": 0.006832208251580596, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[differentialabundance_default.mmd]": 0.013356749899685383, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[directional_flow.mmd]": 0.0007533328607678413, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[disconnected_components.mmd]": 0.0017484170384705067, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[epitopeprediction.mmd]": 0.002400084165856242, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[file_icon_fanin.mmd]": 0.0017111250199377537, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[file_icons.mmd]": 0.00453570787794888, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[font_scale.mmd]": 0.0013113333843648434, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[genomeassembly.mmd]": 0.007752458099275827, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[genomeassembly_organellar.mmd]": 0.003474875120446086, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[genomeassembly_staggered.mmd]": 0.006952167022973299, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[genomic_pipeline.mmd]": 0.016682500019669533, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[group_labels.mmd]": 0.0029346661176532507, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/01_minimal.mmd]": 0.0005316664464771748, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/02_sections.mmd]": 0.0009951656684279442, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/03_fan_out.mmd]": 0.0017205423209816217, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/03b_fan_in_merge.mmd]": 0.0018125418573617935, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/04_directions.mmd]": 0.007039707852527499, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/05_file_icons.mmd]": 0.0016670008189976215, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/05b_multi_icons.mmd]": 0.0009778749663382769, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/05c_files_icon.mmd]": 0.0008119163103401661, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/05d_folder_icon.mmd]": 0.0007887929677963257, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/05f_banner_labels.mmd]": 0.0009277919307351112, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/06a_without_hidden.mmd]": 0.0012547089718282223, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[guide/06b_with_hidden.mmd]": 0.001244126120582223, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[hlatyping.mmd]": 0.0031367079354822636, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[icon_caption_wrap.mmd]": 0.000458291033282876, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[leaf_file_icon_on_trunk.mmd]": 0.005630542058497667, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[legend_combo.mmd]": 0.0006857088301330805, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[legend_logo_placement.mmd]": 0.004251624224707484, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[longread_variant_calling.mmd]": 0.006740666925907135, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[marker_styles.mmd]": 0.0017116251401603222, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[multiline_labels.mmd]": 0.0020733329001814127, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[off_track_output_branched.mmd]": 0.005073083797469735, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[off_track_outputs.mmd]": 0.0007429579272866249, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[off_track_outputs_along_trunk.mmd]": 0.0017211262602359056, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[rnaseq_auto.mmd]": 0.003773875767365098, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[rnaseq_sections.mmd]": 0.019041333347558975, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[rnaseq_sections_manual.mmd]": 0.007637251168489456, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[rnaseq_simple.mmd]": 0.0005390830338001251, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[simple_pipeline.mmd]": 0.001968331867828965, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[tb_file_termini.mmd]": 0.0013466249220073223, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[tb_right_exit_feeder_slots.mmd]": 0.0016897921450436115, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/aligner_row_pinned_continuation.mmd]": 0.004030334064736962, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/around_below_ep_col_gt0.mmd]": 0.0012919579166918993, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/around_section_below.mmd]": 0.0011709160171449184, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/asymmetric_tree.mmd]": 0.002195291919633746, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0013709166087210178, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/branch_fold_forward.mmd]": 0.0020357498433440924, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/branch_fold_stability.mmd]": 0.0021586669608950615, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bt_chain.mmd]": 0.0005150407087057829, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bt_exit_top_above.mmd]": 0.000658250181004405, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bt_exit_top_above_2line.mmd]": 0.003627792000770569, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bt_fork.mmd]": 0.0011073341593146324, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bt_perp_entry_below.mmd]": 0.0007785407360643148, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bt_to_lr.mmd]": 0.0007885000668466091, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bt_to_tb.mmd]": 0.0008913339115679264, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bundle_terminator_continuation.mmd]": 0.0005237916484475136, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_fan_in_outer_slot.mmd]": 0.003378333058208227, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_gap2_rightward_overflow.mmd]": 0.006058793049305677, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_label_rake.mmd]": 0.005958750145509839, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_label_rake_left.mmd]": 0.009338292060419917, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_label_rake_wide.mmd]": 0.0013641251716762781, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_leftward_far_side_entry.mmd]": 0.002990249078720808, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_leftward_overflow.mmd]": 0.0027805406134575605, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/bypass_v_tight.mmd]": 0.004377083154395223, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/clear_channel_target_aware_push.mmd]": 0.0013505818787962198, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/compact_gap_peer_conflict.mmd]": 0.0014078759122639894, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/compact_hidden_passthrough.mmd]": 0.0010358337312936783, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/complex_multipath.mmd]": 0.002718790899962187, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/convergence_stacked_sink.mmd]": 0.0034693328198045492, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/convergent_offrow_exit_climb.mmd]": 0.006277875043451786, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/corridor_narrow_gap_fallback.mmd]": 0.0037532090209424496, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/cross_col_top_entry.mmd]": 0.00111941690556705, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/cross_column_perp_drop.mmd]": 0.0010023335926234722, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007924581877887249, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/cross_row_gap_wrap.mmd]": 0.0016230419278144836, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/deep_linear.mmd]": 0.0021355003118515015, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/disjoint_sameline_trunks.mmd]": 0.00859125005081296, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/divergent_fanout_split.mmd]": 0.0014081669505685568, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/dogleg_exempt_distinct.mmd]": 0.0023968329187482595, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/dogleg_exempt_sameline.mmd]": 0.0010930004063993692, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/dogleg_twoline_fanout.mmd]": 0.0011063748970627785, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/exit_corner_offset_dogleg.mmd]": 0.0012580009642988443, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/fan_bypass_nesting.mmd]": 0.002341416897252202, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/fan_in_merge.mmd]": 0.0018895408138632774, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/fold_double.mmd]": 0.004012166988104582, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/fold_fan_across.mmd]": 0.00596700026653707, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/fold_stacked_branch.mmd]": 0.004138956777751446, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/funcprofiler_upstream.mmd]": 0.009230539668351412, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/header_nudge.mmd]": 0.0009497508872300386, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/header_side_rotated.mmd]": 0.005673583829775453, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/inrow_skip_breeze.mmd]": 0.0006803330034017563, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/inter_row_wrap_clearance.mmd]": 0.0029742931947112083, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/interchange_lane_reorder.mmd]": 0.0010526671539992094, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/junction_entry_align.mmd]": 0.0030903739389032125, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/junction_entry_collision.mmd]": 0.001790249953046441, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/junction_entry_reversed_fold.mmd]": 0.0033673339057713747, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/junction_fanout_convergence.mmd]": 0.0032669580541551113, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/left_entry_up_wrap.mmd]": 0.0008892512414604425, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/left_exit_sink_below.mmd]": 0.0020913330372422934, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011049581225961447, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0032564173452556133, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.008188124978914857, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0011615827679634094, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0028819171711802483, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_to_tb_top_cross_col.mmd]": 0.0009136670269072056, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_to_tb_top_drop.mmd]": 0.0006325009744614363, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007608328014612198, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006694172043353319, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_to_tb_top_two_lines.mmd]": 0.007577582960948348, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_top_entry_cross_column.mmd]": 0.0028670828323811293, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0008842910174280405, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_around_below_leftmost.mmd]": 0.001465124310925603, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_bottom_row_bypass.mmd]": 0.001440791878849268, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_leftmost_sink_branch.mmd]": 0.002431000117212534, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_offrow_continuation.mmd]": 0.0034099160693585873, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_port_above_approach.mmd]": 0.004123332677409053, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_pullaway.mmd]": 0.0016914592124521732, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_right_entry.mmd]": 0.006165875820443034, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_trunk_out_of_range_section.mmd]": 0.0033123327884823084, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/merge_trunk_over_low_section.mmd]": 0.001892999280244112, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/mismatched_tracks.mmd]": 0.001284498954191804, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/mixed_bundle_column.mmd]": 0.002047418151050806, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/mixed_port_sides.mmd]": 0.0045111661311239, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/multi_input_convergence.mmd]": 0.001183166867122054, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/multi_line_bundle.mmd]": 0.005682667950168252, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/multicarrier_offrow_exit_climb.mmd]": 0.00150779215618968, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/near_vertical_junction_hook.mmd]": 0.0012105419300496578, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/off_track_convergence.mmd]": 0.0009844161104410887, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/off_track_convergence_multiline.mmd]": 0.003322124946862459, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/off_track_input_above_consumer.mmd]": 0.003851542016491294, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/parallel_independent.mmd]": 0.0010736659169197083, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/peeloff_extra_line_consumer.mmd]": 0.005566541105508804, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/peeloff_riser_respace.mmd]": 0.0018760829698294401, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/post_convergence_trunk.mmd]": 0.0005370411090552807, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/reconverge_reversed_fold.mmd]": 0.0035573330242186785, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/right_entry_from_above.mmd]": 0.0007062908262014389, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/right_entry_from_above_far.mmd]": 0.0006664600223302841, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/right_entry_gap_above_empty_row.mmd]": 0.0007837910670787096, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/right_entry_wrap_no_fan.mmd]": 0.00067108403891325, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/rl_entry_runway.mmd]": 0.0008701670449227095, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/rnaseq_lite.mmd]": 0.0023451230954378843, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/route_around_intervening.mmd]": 0.0019179589580744505, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/section_diamond.mmd]": 0.001812125090509653, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/self_crossing_bridge.mmd]": 0.0011897499207407236, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/shared_sink_parallel.mmd]": 0.0062066251412034035, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/single_section.mmd]": 0.0005118739791214466, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/stacked_left_exit_drop.mmd]": 0.0006885009352117777, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/stacked_lr_serpentine.mmd]": 0.0011569170746952295, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.004704874940216541, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_bottom_entry_flow_start.mmd]": 0.0023895001504570246, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0017075410578399897, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0011976240202784538, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_column_continuation_two_lines.mmd]": 0.000849792966619134, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_convergence_straight_drop.mmd]": 0.0023605399765074253, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_internal_diagonal.mmd]": 0.0041423330549150705, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_left_exit_step.mmd]": 0.0018124987836927176, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_lr_exit_left.mmd]": 0.0010731241200119257, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_lr_exit_right.mmd]": 0.0011546250898391008, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_passthrough_continuation.mmd]": 0.0005945407319813967, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_passthrough_trunk.mmd]": 0.00533429067581892, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0023012920282781124, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_right_entry_stack.mmd]": 0.003649958409368992, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_trunk_through_fan.mmd]": 0.0005900000687688589, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/tb_two_line_vert_seam.mmd]": 0.0028881249018013477, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/terminal_symmetric_fan.mmd]": 0.0008805820252746344, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/terminus_join.mmd]": 0.0004302910529077053, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/top_entry_header_clash.mmd]": 0.0006331249605864286, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/trunk_through_fan.mmd]": 0.0011379590723663568, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/twoline_fanout_up.mmd]": 0.0010744987521320581, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/u_turn_fold.mmd]": 0.0024878750555217266, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/uneven_diamond.mmd]": 0.0005529578775167465, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/upward_bypass.mmd]": 0.008652916178107262, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/variant_calling.mmd]": 0.003296458860859275, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/wide_fan_in.mmd]": 0.0013182091061025858, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/wide_fan_out.mmd]": 0.001469458220526576, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/wide_label_fan.mmd]": 0.0005560838617384434, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[topologies/wrapped_label_trunk.mmd]": 0.0006389180198311806, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[trunk_align_matching_bundle.mmd]": 0.0009756251238286495, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[uneven_diamond.mmd]": 0.0005240838509052992, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[variant_calling.mmd]": 0.0015732920728623867, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[variant_calling_tuned.mmd]": 0.004883375018835068, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[variantbenchmarking.mmd]": 0.013115540845319629, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[variantbenchmarking_auto.mmd]": 0.005682667251676321, + "tests/test_layout_invariants.py::test_no_collinear_distinct_diagonals[variantprioritization.mmd]": 0.004832915961742401, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[cross_track_interchange.mmd]": 0.0019802080933004618, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[da_pipeline.mmd]": 0.007561751175671816, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[diagonal_labels.mmd]": 0.0024172510020434856, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[diagonal_single_trunk_off_track.mmd]": 0.0018520411103963852, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[differentialabundance.mmd]": 0.009525666711851954, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[differentialabundance_default.mmd]": 0.033465001033619046, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[disconnected_components.mmd]": 0.0017092078924179077, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[epitopeprediction.mmd]": 0.002941541839390993, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[file_icon_fanin.mmd]": 0.002573707839474082, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[file_icons.mmd]": 0.0010421248152852058, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[genomeassembly.mmd]": 0.003287001047283411, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[genomeassembly_organellar.mmd]": 0.003974292194470763, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[genomeassembly_staggered.mmd]": 0.006964290980249643, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[genomic_pipeline.mmd]": 0.012575083877891302, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[group_labels.mmd]": 0.00214962475001812, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/02_sections.mmd]": 0.0010080421343445778, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/03_fan_out.mmd]": 0.0018109569791704416, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/03b_fan_in_merge.mmd]": 0.0018491661176085472, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/04_directions.mmd]": 0.0017598331905901432, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/05_file_icons.mmd]": 0.011102000251412392, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/05b_multi_icons.mmd]": 0.005101834191009402, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/05c_files_icon.mmd]": 0.0035369591787457466, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/05d_folder_icon.mmd]": 0.0012144171632826328, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/05f_banner_labels.mmd]": 0.0009795001242309809, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/06a_without_hidden.mmd]": 0.0012890419457107782, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[guide/06b_with_hidden.mmd]": 0.0014128342736512423, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[hlatyping.mmd]": 0.0019527499098330736, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[legend_logo_placement.mmd]": 0.0016077500768005848, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[longread_variant_calling.mmd]": 0.005115291103720665, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[marker_styles.mmd]": 0.0009737920481711626, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[multiline_labels.mmd]": 0.000828208401799202, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[rnaseq_auto.mmd]": 0.007202541921287775, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[rnaseq_sections.mmd]": 0.007746207760646939, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[rnaseq_sections_manual.mmd]": 0.011527166934683919, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[tb_file_termini.mmd]": 0.001502498984336853, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[tb_right_exit_feeder_slots.mmd]": 0.0017353747971355915, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/aligner_row_pinned_continuation.mmd]": 0.002691791858524084, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/around_below_ep_col_gt0.mmd]": 0.003558458061888814, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/around_section_below.mmd]": 0.0015517498832195997, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/asymmetric_tree.mmd]": 0.0022059569600969553, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bottom_row_climb_clear_corridor.mmd]": 0.003934291889891028, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/branch_fold_forward.mmd]": 0.0016895001754164696, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/branch_fold_stability.mmd]": 0.0015475829131901264, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bt_exit_top_above.mmd]": 0.0007370838429778814, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bt_exit_top_above_2line.mmd]": 0.001130125019699335, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bt_perp_entry_below.mmd]": 0.0009174994193017483, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bt_to_lr.mmd]": 0.002263457980006933, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bt_to_tb.mmd]": 0.0008193331304937601, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_fan_in_outer_slot.mmd]": 0.007180666783824563, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_gap2_rightward_overflow.mmd]": 0.009797625010833144, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_label_rake.mmd]": 0.004632916068658233, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_label_rake_left.mmd]": 0.0019302910659462214, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_label_rake_wide.mmd]": 0.002614749828353524, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_leftward_far_side_entry.mmd]": 0.005448208190500736, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_leftward_overflow.mmd]": 0.0037545410450547934, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/bypass_v_tight.mmd]": 0.002658916637301445, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/clear_channel_target_aware_push.mmd]": 0.007203624816611409, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/compact_gap_peer_conflict.mmd]": 0.028591918293386698, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/compact_hidden_passthrough.mmd]": 0.0030539592262357473, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/complex_multipath.mmd]": 0.004892042139545083, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/convergence_stacked_sink.mmd]": 0.002381291938945651, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/convergent_offrow_exit_climb.mmd]": 0.008475417038425803, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/corridor_narrow_gap_fallback.mmd]": 0.0011821659281849861, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/cross_col_top_entry.mmd]": 0.0007529580034315586, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/cross_column_perp_drop.mmd]": 0.0008307930547744036, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007846651133149862, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/cross_row_gap_wrap.mmd]": 0.008461874909698963, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/deep_linear.mmd]": 0.01128841727040708, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/disjoint_sameline_trunks.mmd]": 0.0068172907922416925, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/divergent_fanout_split.mmd]": 0.0013334581162780523, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/dogleg_exempt_distinct.mmd]": 0.001614126143977046, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/dogleg_exempt_sameline.mmd]": 0.0010792501270771027, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/dogleg_twoline_fanout.mmd]": 0.0011030000168830156, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/exit_corner_offset_dogleg.mmd]": 0.00525195780210197, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/fan_bypass_nesting.mmd]": 0.0046263327822089195, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/fan_in_merge.mmd]": 0.00197770819067955, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/fold_double.mmd]": 0.005895749665796757, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/fold_fan_across.mmd]": 0.003937956877052784, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/fold_stacked_branch.mmd]": 0.003845915198326111, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/funcprofiler_upstream.mmd]": 0.008679542224854231, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/header_nudge.mmd]": 0.0025837498251348734, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/header_side_rotated.mmd]": 0.0008657907601445913, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/inter_row_wrap_clearance.mmd]": 0.0032612497452646494, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/junction_entry_align.mmd]": 0.004038082901388407, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/junction_entry_collision.mmd]": 0.0019126238767057657, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/junction_entry_reversed_fold.mmd]": 0.001670875120908022, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/junction_fanout_convergence.mmd]": 0.00255987630225718, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/left_entry_up_wrap.mmd]": 0.0009795010555535555, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/left_exit_sink_below.mmd]": 0.0027508761268109083, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011561238206923008, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.002363914856687188, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0020878759678453207, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0010894590523093939, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0011877079959958792, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_to_tb_top_cross_col.mmd]": 0.0011922509875148535, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_to_tb_top_drop.mmd]": 0.0013242082204669714, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0014155004173517227, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0010295407846570015, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_to_tb_top_two_lines.mmd]": 0.0010750829242169857, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_top_entry_cross_column.mmd]": 0.0007863759528845549, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0010497092735022306, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_around_below_leftmost.mmd]": 0.0017947079613804817, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_bottom_row_bypass.mmd]": 0.003412460209801793, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_leftmost_sink_branch.mmd]": 0.002264500129967928, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_offrow_continuation.mmd]": 0.0032779579050838947, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_port_above_approach.mmd]": 0.002384583931416273, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_pullaway.mmd]": 0.044703958090394735, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_right_entry.mmd]": 0.0016988341230899096, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_trunk_out_of_range_section.mmd]": 0.06374062597751617, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/merge_trunk_over_low_section.mmd]": 0.0096886670216918, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/mismatched_tracks.mmd]": 0.007036291062831879, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/mixed_bundle_column.mmd]": 0.011406874982640147, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/mixed_port_sides.mmd]": 0.0011656242422759533, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/multi_input_convergence.mmd]": 0.001365917269140482, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/multi_line_bundle.mmd]": 0.00405350117944181, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/multicarrier_offrow_exit_climb.mmd]": 0.001542665995657444, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/near_vertical_junction_hook.mmd]": 0.0025912499986588955, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/off_track_convergence.mmd]": 0.0010413748677819967, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/off_track_convergence_multiline.mmd]": 0.006787250051274896, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/off_track_input_above_consumer.mmd]": 0.005875375820323825, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/parallel_independent.mmd]": 0.0009593339636921883, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/peeloff_extra_line_consumer.mmd]": 0.002420542063191533, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/peeloff_riser_respace.mmd]": 0.006179958116263151, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/reconverge_reversed_fold.mmd]": 0.0038932065945118666, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/right_entry_from_above.mmd]": 0.0007399581372737885, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/right_entry_from_above_far.mmd]": 0.0006850839126855135, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/right_entry_gap_above_empty_row.mmd]": 0.002942125080153346, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/right_entry_wrap_no_fan.mmd]": 0.004556000232696533, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/rl_entry_runway.mmd]": 0.004757625749334693, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/rnaseq_lite.mmd]": 0.006063041975721717, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/route_around_intervening.mmd]": 0.0012355817016214132, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/section_diamond.mmd]": 0.001364249037578702, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/self_crossing_bridge.mmd]": 0.0009951249230653048, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/shared_sink_parallel.mmd]": 0.004026918206363916, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/stacked_left_exit_drop.mmd]": 0.0007841249462217093, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/stacked_lr_serpentine.mmd]": 0.0011751248966902494, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006731245666742325, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001178958686068654, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.002726833103224635, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_column_continuation_two_lines.mmd]": 0.0010307510383427143, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_internal_diagonal.mmd]": 0.001027498859912157, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_left_exit_step.mmd]": 0.0027544156182557344, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_lr_exit_left.mmd]": 0.0011940400581806898, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_lr_exit_right.mmd]": 0.0012077081482857466, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_passthrough_trunk.mmd]": 0.0009990839753299952, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006789159961044788, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_right_entry_stack.mmd]": 0.0011641669552773237, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/tb_two_line_vert_seam.mmd]": 0.0008842081297188997, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/terminal_symmetric_fan.mmd]": 0.000911707291379571, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/top_entry_header_clash.mmd]": 0.000656249700114131, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/trunk_through_fan.mmd]": 0.0011200420558452606, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/twoline_fanout_up.mmd]": 0.004177958006039262, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/u_turn_fold.mmd]": 0.0025562490336596966, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/upward_bypass.mmd]": 0.006157209165394306, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/variant_calling.mmd]": 0.008334791054949164, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/wide_fan_in.mmd]": 0.0014037080109119415, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[topologies/wide_fan_out.mmd]": 0.001505793072283268, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[trunk_align_matching_bundle.mmd]": 0.0009484582114964724, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[variant_calling.mmd]": 0.004471540916711092, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[variant_calling_tuned.mmd]": 0.006682999897748232, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[variantbenchmarking.mmd]": 0.010138750076293945, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[variantbenchmarking_auto.mmd]": 0.012592417187988758, + "tests/test_layout_invariants.py::test_no_collinear_distinct_lines[variantprioritization.mmd]": 0.00969854206778109, + "tests/test_layout_invariants.py::test_no_diagonal_strikes_label[rnaseq_sections.mmd-None]": 0.08036479074507952, + "tests/test_layout_invariants.py::test_no_diagonal_strikes_label[topologies/funcprofiler_upstream.mmd-45]": 0.2920309591572732, + "tests/test_layout_invariants.py::test_no_diagonal_strikes_label[topologies/funcprofiler_upstream.mmd-50]": 0.2778040417470038, + "tests/test_layout_invariants.py::test_no_diagonal_strikes_label[topologies/funcprofiler_upstream.mmd-None]": 0.024204166140407324, + "tests/test_layout_invariants.py::test_no_diagonal_strikes_label[topologies/variant_calling.mmd-45]": 0.2752440420445055, + "tests/test_layout_invariants.py::test_no_diagonal_strikes_label[topologies/variant_calling.mmd-None]": 0.04778487514704466, + "tests/test_layout_invariants.py::test_no_diagonal_strikes_label[topologies/wide_label_fan.mmd-45]": 0.0204353341832757, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[bubble_forced_label_clears_diagonal.mmd]": 0.0006643740925937891, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[bubble_label_clears_diagonal.mmd]": 0.0006166240200400352, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[bubble_output_above.mmd]": 0.0005469161551445723, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[captioned_sibling_outputs.mmd]": 0.0005447929725050926, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[centered_tracks.mmd]": 0.0006662511732429266, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[cross_track_interchange.mmd]": 0.0017994169611483812, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[da_pipeline.mmd]": 0.014452124945819378, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[diagonal_labels.mmd]": 0.004673125920817256, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[diagonal_single_trunk_off_track.mmd]": 0.0019259590189903975, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[differentialabundance.mmd]": 0.022168833762407303, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[differentialabundance_default.mmd]": 0.00782358436845243, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[directional_flow.mmd]": 0.0018347071018069983, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[disconnected_components.mmd]": 0.001293916953727603, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[epitopeprediction.mmd]": 0.0029884991236031055, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[file_icon_fanin.mmd]": 0.0015376252122223377, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[file_icons.mmd]": 0.0009066241327673197, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[font_scale.mmd]": 0.0005284997168928385, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[genomeassembly.mmd]": 0.006985499057918787, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[genomeassembly_organellar.mmd]": 0.007716124877333641, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[genomeassembly_staggered.mmd]": 0.002850668039172888, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[genomic_pipeline.mmd]": 0.019885248970240355, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[group_labels.mmd]": 0.001964458031579852, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/01_minimal.mmd]": 0.0005207511130720377, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/02_sections.mmd]": 0.0010428742971271276, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/03_fan_out.mmd]": 0.00428708316758275, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/03b_fan_in_merge.mmd]": 0.003187833819538355, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/04_directions.mmd]": 0.004587375093251467, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/05_file_icons.mmd]": 0.0019162928219884634, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/05b_multi_icons.mmd]": 0.0010962910018861294, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/05c_files_icon.mmd]": 0.001874291803687811, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/05d_folder_icon.mmd]": 0.001428290968760848, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/05f_banner_labels.mmd]": 0.0010889580007642508, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/06a_without_hidden.mmd]": 0.0012997922021895647, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[guide/06b_with_hidden.mmd]": 0.0012429566122591496, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[hlatyping.mmd]": 0.0017767499666661024, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[icon_caption_wrap.mmd]": 0.0005800011567771435, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[leaf_file_icon_on_trunk.mmd]": 0.0005832498427480459, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[legend_combo.mmd]": 0.000695542898029089, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[legend_logo_placement.mmd]": 0.001685751136392355, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[longread_variant_calling.mmd]": 0.018734956858679652, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[marker_styles.mmd]": 0.0010613750200718641, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[multiline_labels.mmd]": 0.0008894582279026508, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[off_track_output_branched.mmd]": 0.00066941580735147, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[off_track_outputs.mmd]": 0.0007820841856300831, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[off_track_outputs_along_trunk.mmd]": 0.0006311668548732996, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[rnaseq_auto.mmd]": 0.008511292049661279, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[rnaseq_sections.mmd]": 0.005580957746133208, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[rnaseq_sections_manual.mmd]": 0.01465166686102748, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[rnaseq_simple.mmd]": 0.00046579213812947273, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[simple_pipeline.mmd]": 0.0008192087989300489, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[tb_file_termini.mmd]": 0.0011388759594410658, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[tb_right_exit_feeder_slots.mmd]": 0.0016668757889419794, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/aligner_row_pinned_continuation.mmd]": 0.0030411670450121164, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/around_below_ep_col_gt0.mmd]": 0.0016547089908272028, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/around_section_below.mmd]": 0.001295333495363593, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/asymmetric_tree.mmd]": 0.0021104987245053053, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0018360831309109926, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/branch_fold_forward.mmd]": 0.004408874781802297, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/branch_fold_stability.mmd]": 0.0027675428427755833, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bt_chain.mmd]": 0.0004895420279353857, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bt_exit_top_above.mmd]": 0.0006539588794112206, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bt_exit_top_above_2line.mmd]": 0.0020421247463673353, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bt_fork.mmd]": 0.00288874888792634, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bt_perp_entry_below.mmd]": 0.004985500127077103, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bt_to_lr.mmd]": 0.002620584098622203, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bt_to_tb.mmd]": 0.0012780837714672089, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bundle_terminator_continuation.mmd]": 0.0005725831724703312, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_fan_in_outer_slot.mmd]": 0.007919376250356436, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_gap2_rightward_overflow.mmd]": 0.00697179208509624, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_label_rake.mmd]": 0.001310042105615139, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_label_rake_left.mmd]": 0.002664332976564765, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_label_rake_wide.mmd]": 0.002416082890704274, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_leftward_far_side_entry.mmd]": 0.002324541099369526, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_leftward_overflow.mmd]": 0.002321041189134121, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/bypass_v_tight.mmd]": 0.001593167893588543, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/clear_channel_target_aware_push.mmd]": 0.0012288319412618876, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/compact_gap_peer_conflict.mmd]": 0.0011684589553624392, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/compact_hidden_passthrough.mmd]": 0.00289758387953043, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/complex_multipath.mmd]": 0.00729045900516212, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/convergence_stacked_sink.mmd]": 0.003272291971370578, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/convergent_offrow_exit_climb.mmd]": 0.015583498869091272, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/corridor_narrow_gap_fallback.mmd]": 0.0014075420331209898, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/cross_col_top_entry.mmd]": 0.0012125407811254263, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/cross_column_perp_drop.mmd]": 0.0007637930102646351, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007310409564524889, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/cross_row_gap_wrap.mmd]": 0.001666791969910264, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/deep_linear.mmd]": 0.0021609989926218987, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/disjoint_sameline_trunks.mmd]": 0.0021765839774161577, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/divergent_fanout_split.mmd]": 0.000973207876086235, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/dogleg_exempt_distinct.mmd]": 0.006370750721544027, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/dogleg_exempt_sameline.mmd]": 0.0014677091967314482, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/dogleg_twoline_fanout.mmd]": 0.001302334712818265, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/exit_corner_offset_dogleg.mmd]": 0.0013133750762790442, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/fan_bypass_nesting.mmd]": 0.002536039799451828, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/fan_in_merge.mmd]": 0.0018700840882956982, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/fold_double.mmd]": 0.01152804191224277, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/fold_fan_across.mmd]": 0.0049699158407747746, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/fold_stacked_branch.mmd]": 0.003962250892072916, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/funcprofiler_upstream.mmd]": 0.022831626003608108, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/header_nudge.mmd]": 0.0008805419784039259, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/header_side_rotated.mmd]": 0.0011562102008610964, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/inrow_skip_breeze.mmd]": 0.0005951670464128256, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/inter_row_wrap_clearance.mmd]": 0.0012415838427841663, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/interchange_lane_reorder.mmd]": 0.0008184157777577639, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/junction_entry_align.mmd]": 0.001893540844321251, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/junction_entry_collision.mmd]": 0.0017109168693423271, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/junction_entry_reversed_fold.mmd]": 0.0019194576889276505, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/junction_fanout_convergence.mmd]": 0.001297917915508151, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/left_entry_up_wrap.mmd]": 0.00114287412725389, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/left_exit_sink_below.mmd]": 0.0013030418194830418, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0010678747203201056, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0009835409000515938, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0013088751584291458, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.005659332033246756, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_perp_top_exit_side_entry.mmd]": 0.004392334260046482, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_to_tb_top_cross_col.mmd]": 0.001879582880064845, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_to_tb_top_drop.mmd]": 0.004340708022937179, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.002863542176783085, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0009693759493529797, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_to_tb_top_two_lines.mmd]": 0.0008746238891035318, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_top_entry_cross_column.mmd]": 0.0006804999429732561, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007795004639774561, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_around_below_leftmost.mmd]": 0.0015043339226394892, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_bottom_row_bypass.mmd]": 0.0014569996856153011, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_leftmost_sink_branch.mmd]": 0.009584541898220778, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_offrow_continuation.mmd]": 0.0031267490703612566, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_port_above_approach.mmd]": 0.0020276661962270737, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_pullaway.mmd]": 0.001643831841647625, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_right_entry.mmd]": 0.0014640409499406815, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_trunk_out_of_range_section.mmd]": 0.001768917078152299, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/merge_trunk_over_low_section.mmd]": 0.015182791743427515, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/mismatched_tracks.mmd]": 0.0025042491033673286, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/mixed_bundle_column.mmd]": 0.0023444159887731075, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/mixed_port_sides.mmd]": 0.0009998739697039127, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/multi_input_convergence.mmd]": 0.00104975001886487, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/multi_line_bundle.mmd]": 0.0016572510357946157, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0013815420679748058, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/near_vertical_junction_hook.mmd]": 0.0011463738046586514, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/off_track_convergence.mmd]": 0.0010002909693866968, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/off_track_convergence_multiline.mmd]": 0.0012169580440968275, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/off_track_input_above_consumer.mmd]": 0.009142875205725431, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/parallel_independent.mmd]": 0.0018452077638357878, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/peeloff_extra_line_consumer.mmd]": 0.003426541108638048, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/peeloff_riser_respace.mmd]": 0.007990249898284674, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/post_convergence_trunk.mmd]": 0.000665582250803709, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/reconverge_reversed_fold.mmd]": 0.0038520011585205793, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/right_entry_from_above.mmd]": 0.0007945417892187834, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/right_entry_from_above_far.mmd]": 0.0007663748692721128, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/right_entry_gap_above_empty_row.mmd]": 0.0008047081064432859, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/right_entry_wrap_no_fan.mmd]": 0.0006751669570803642, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/rl_entry_runway.mmd]": 0.0009232910815626383, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/rnaseq_lite.mmd]": 0.012836667243391275, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/route_around_intervening.mmd]": 0.0037533759605139494, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/section_diamond.mmd]": 0.002717541065067053, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/self_crossing_bridge.mmd]": 0.004349417053163052, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/shared_sink_parallel.mmd]": 0.004357750061899424, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/single_section.mmd]": 0.0005232912953943014, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/stacked_left_exit_drop.mmd]": 0.0009527909569442272, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/stacked_lr_serpentine.mmd]": 0.001159875188022852, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0013877898454666138, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006787078455090523, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0011706657242029905, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0011626239866018295, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_column_continuation_two_lines.mmd]": 0.0028266250155866146, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_convergence_straight_drop.mmd]": 0.0005468740127980709, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_internal_diagonal.mmd]": 0.0008672489784657955, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_left_exit_step.mmd]": 0.001663584029302001, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_lr_exit_left.mmd]": 0.001040126197040081, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_lr_exit_right.mmd]": 0.0011512490455061197, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_passthrough_continuation.mmd]": 0.000542209018021822, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_passthrough_trunk.mmd]": 0.0009642909280955791, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006082521285861731, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_right_entry_stack.mmd]": 0.0011022510007023811, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_trunk_through_fan.mmd]": 0.0009949160739779472, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/tb_two_line_vert_seam.mmd]": 0.002457000082358718, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/terminal_symmetric_fan.mmd]": 0.0012552919797599316, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/terminus_join.mmd]": 0.0008579159621149302, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/top_entry_header_clash.mmd]": 0.0018162906635552645, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/trunk_through_fan.mmd]": 0.004247416742146015, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/twoline_fanout_up.mmd]": 0.0011503328569233418, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/u_turn_fold.mmd]": 0.00840016733855009, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/uneven_diamond.mmd]": 0.001875709043815732, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/upward_bypass.mmd]": 0.003986249212175608, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/variant_calling.mmd]": 0.0031682071276009083, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/wide_fan_in.mmd]": 0.0012773750349879265, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/wide_fan_out.mmd]": 0.005222582956776023, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/wide_label_fan.mmd]": 0.0006298341322690248, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[topologies/wrapped_label_trunk.mmd]": 0.0006458321586251259, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[trunk_align_matching_bundle.mmd]": 0.0009282487444579601, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[uneven_diamond.mmd]": 0.0007422091439366341, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[variant_calling.mmd]": 0.003511875867843628, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[variant_calling_tuned.mmd]": 0.0045774157624691725, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[variantbenchmarking.mmd]": 0.009846208384260535, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[variantbenchmarking_auto.mmd]": 0.011923291953280568, + "tests/test_layout_invariants.py::test_no_icon_overlaps_line_path[variantprioritization.mmd]": 0.0028401671443134546, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[bubble_forced_label_clears_diagonal.mmd]": 0.0006311656907200813, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[bubble_label_clears_diagonal.mmd]": 0.0006285412237048149, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[bubble_output_above.mmd]": 0.0006024581380188465, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[captioned_sibling_outputs.mmd]": 0.0005568326450884342, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[centered_tracks.mmd]": 0.0007372910622507334, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[cross_track_interchange.mmd]": 0.00135945831425488, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[da_pipeline.mmd]": 0.02107316581532359, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[diagonal_labels.mmd]": 0.0018969590310007334, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[diagonal_single_trunk_off_track.mmd]": 0.0020679584704339504, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[differentialabundance.mmd]": 0.0071599159855395555, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[differentialabundance_default.mmd]": 0.006161750061437488, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[directional_flow.mmd]": 0.003969291923567653, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[disconnected_components.mmd]": 0.0011314998846501112, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[epitopeprediction.mmd]": 0.00399408396333456, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[file_icon_fanin.mmd]": 0.0015519170556217432, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[file_icons.mmd]": 0.0009129170794039965, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[font_scale.mmd]": 0.0005683335475623608, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[genomeassembly.mmd]": 0.003076208056882024, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[genomeassembly_organellar.mmd]": 0.015432249987497926, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[genomeassembly_staggered.mmd]": 0.005417624954134226, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[genomic_pipeline.mmd]": 0.026826914865523577, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[group_labels.mmd]": 0.002130164997652173, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/01_minimal.mmd]": 0.0005583339370787144, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/02_sections.mmd]": 0.0010699171107262373, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/03_fan_out.mmd]": 0.002769624814391136, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/03b_fan_in_merge.mmd]": 0.0022310828790068626, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/04_directions.mmd]": 0.0018227919936180115, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/05_file_icons.mmd]": 0.0008345830719918013, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/05b_multi_icons.mmd]": 0.0009287488646805286, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/05c_files_icon.mmd]": 0.0007887498941272497, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/05d_folder_icon.mmd]": 0.0007796669378876686, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/05f_banner_labels.mmd]": 0.032235290855169296, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/06a_without_hidden.mmd]": 0.009257833007723093, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[guide/06b_with_hidden.mmd]": 0.002250748686492443, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[hlatyping.mmd]": 0.0020023328252136707, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[icon_caption_wrap.mmd]": 0.000513958279043436, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[leaf_file_icon_on_trunk.mmd]": 0.0005922501441091299, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[legend_combo.mmd]": 0.0006648751441389322, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[legend_logo_placement.mmd]": 0.0015920840669423342, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[longread_variant_calling.mmd]": 0.014842415926977992, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[marker_styles.mmd]": 0.001183000160381198, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[multiline_labels.mmd]": 0.0022915408480912447, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[off_track_output_branched.mmd]": 0.0006732090841978788, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[off_track_outputs.mmd]": 0.0007114589679986238, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[off_track_outputs_along_trunk.mmd]": 0.0007105011027306318, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[rnaseq_auto.mmd]": 0.014761792961508036, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[rnaseq_sections.mmd]": 0.007560542086139321, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[rnaseq_sections_manual.mmd]": 0.011234333040192723, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[rnaseq_simple.mmd]": 0.0006084591150283813, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[simple_pipeline.mmd]": 0.0007008339744061232, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[tb_file_termini.mmd]": 0.0013088739942759275, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[tb_right_exit_feeder_slots.mmd]": 0.0018613759893923998, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/aligner_row_pinned_continuation.mmd]": 0.001832874957472086, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/around_below_ep_col_gt0.mmd]": 0.011034542229026556, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/around_section_below.mmd]": 0.0036193763371556997, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/asymmetric_tree.mmd]": 0.0024611239787191153, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0014481667894870043, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/branch_fold_forward.mmd]": 0.0015627082902938128, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/branch_fold_stability.mmd]": 0.001283249817788601, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bt_chain.mmd]": 0.0004917921032756567, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bt_exit_top_above.mmd]": 0.001073415856808424, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bt_exit_top_above_2line.mmd]": 0.001540791941806674, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bt_fork.mmd]": 0.0006504999473690987, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bt_perp_entry_below.mmd]": 0.0008262498304247856, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bt_to_lr.mmd]": 0.0008242090698331594, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bt_to_tb.mmd]": 0.0010369583033025265, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bundle_terminator_continuation.mmd]": 0.0010129581205546856, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_fan_in_outer_slot.mmd]": 0.004441791912540793, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_gap2_rightward_overflow.mmd]": 0.018269874854013324, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_label_rake.mmd]": 0.0017832498997449875, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_label_rake_left.mmd]": 0.0013785839546471834, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_label_rake_wide.mmd]": 0.006562459282577038, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_leftward_far_side_entry.mmd]": 0.0037877499125897884, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_leftward_overflow.mmd]": 0.0019767910707741976, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/bypass_v_tight.mmd]": 0.001198499696329236, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/clear_channel_target_aware_push.mmd]": 0.001231833128258586, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/compact_gap_peer_conflict.mmd]": 0.0012207911349833012, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/compact_hidden_passthrough.mmd]": 0.0009707910940051079, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/complex_multipath.mmd]": 0.013737708097323775, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/convergence_stacked_sink.mmd]": 0.0020734581630676985, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/convergent_offrow_exit_climb.mmd]": 0.015323499916121364, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/corridor_narrow_gap_fallback.mmd]": 0.0012726658023893833, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/cross_col_top_entry.mmd]": 0.0007230408955365419, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/cross_column_perp_drop.mmd]": 0.0006974998395889997, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0008279578760266304, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/cross_row_gap_wrap.mmd]": 0.001658875960856676, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/deep_linear.mmd]": 0.016245875041931868, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/disjoint_sameline_trunks.mmd]": 0.007203292101621628, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/divergent_fanout_split.mmd]": 0.001143916044384241, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/dogleg_exempt_distinct.mmd]": 0.0014229998923838139, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/dogleg_exempt_sameline.mmd]": 0.0010776249691843987, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/dogleg_twoline_fanout.mmd]": 0.0013260019477456808, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/exit_corner_offset_dogleg.mmd]": 0.0014289170503616333, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/fan_bypass_nesting.mmd]": 0.0025139166973531246, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/fan_in_merge.mmd]": 0.001917456742376089, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/fold_double.mmd]": 0.00408808165229857, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/fold_fan_across.mmd]": 0.003727666102349758, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/fold_stacked_branch.mmd]": 0.0037452499382197857, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/funcprofiler_upstream.mmd]": 0.014862165786325932, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/header_nudge.mmd]": 0.000900584040209651, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/header_side_rotated.mmd]": 0.0008060417603701353, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/inrow_skip_breeze.mmd]": 0.0005570412613451481, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/inter_row_wrap_clearance.mmd]": 0.0036081671714782715, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/interchange_lane_reorder.mmd]": 0.0007505840621888638, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/junction_entry_align.mmd]": 0.0019480420742183924, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/junction_entry_collision.mmd]": 0.001931915758177638, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/junction_entry_reversed_fold.mmd]": 0.007306498941034079, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/junction_fanout_convergence.mmd]": 0.004204249009490013, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/left_entry_up_wrap.mmd]": 0.005736167076975107, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/left_exit_sink_below.mmd]": 0.0015389590989798307, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011338749900460243, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0012665828689932823, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0018099579028785229, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0022595420014113188, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_perp_top_exit_side_entry.mmd]": 0.01646441617049277, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_to_tb_top_cross_col.mmd]": 0.0009675407782196999, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_to_tb_top_drop.mmd]": 0.0006830841302871704, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007828339003026485, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006665419787168503, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_to_tb_top_two_lines.mmd]": 0.0008106650784611702, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_top_entry_cross_column.mmd]": 0.0006704179104417562, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007843738421797752, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_around_below_leftmost.mmd]": 0.0027354173362255096, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_bottom_row_bypass.mmd]": 0.005689498968422413, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_leftmost_sink_branch.mmd]": 0.0016460842452943325, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_offrow_continuation.mmd]": 0.0013267910107970238, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_port_above_approach.mmd]": 0.0011298763565719128, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_pullaway.mmd]": 0.0014241239987313747, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_right_entry.mmd]": 0.0014416249468922615, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_trunk_out_of_range_section.mmd]": 0.0017454170156270266, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/merge_trunk_over_low_section.mmd]": 0.0018478762358427048, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/mismatched_tracks.mmd]": 0.001305958954617381, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/mixed_bundle_column.mmd]": 0.0021066239569336176, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/mixed_port_sides.mmd]": 0.02235162607394159, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/multi_input_convergence.mmd]": 0.0011325411032885313, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/multi_line_bundle.mmd]": 0.004865293158218265, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/multicarrier_offrow_exit_climb.mmd]": 0.00833754101768136, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/near_vertical_junction_hook.mmd]": 0.002159500028938055, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/off_track_convergence.mmd]": 0.000990124884992838, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/off_track_convergence_multiline.mmd]": 0.0018507926724851131, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/off_track_input_above_consumer.mmd]": 0.004791707964614034, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/parallel_independent.mmd]": 0.0015106659848242998, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/peeloff_extra_line_consumer.mmd]": 0.001973083009943366, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/peeloff_riser_respace.mmd]": 0.002561168046668172, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/post_convergence_trunk.mmd]": 0.0005779159255325794, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/reconverge_reversed_fold.mmd]": 0.01547779212705791, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/right_entry_from_above.mmd]": 0.0008205019403249025, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/right_entry_from_above_far.mmd]": 0.0006992921698838472, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/right_entry_gap_above_empty_row.mmd]": 0.0007916667964309454, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/right_entry_wrap_no_fan.mmd]": 0.0006687082350254059, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/rl_entry_runway.mmd]": 0.000891583040356636, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/rnaseq_lite.mmd]": 0.0025431658141314983, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/route_around_intervening.mmd]": 0.001135209109634161, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/section_diamond.mmd]": 0.01389970793388784, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/self_crossing_bridge.mmd]": 0.0011324582155793905, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/shared_sink_parallel.mmd]": 0.006179041229188442, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/single_section.mmd]": 0.0005374578759074211, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/stacked_left_exit_drop.mmd]": 0.000747583108022809, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/stacked_lr_serpentine.mmd]": 0.0011564171873033047, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0018539158627390862, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006799581460654736, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0012054990511387587, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.010611334117129445, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_column_continuation_two_lines.mmd]": 0.0008783747907727957, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_convergence_straight_drop.mmd]": 0.0005453329067677259, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_internal_diagonal.mmd]": 0.0009300000965595245, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_left_exit_step.mmd]": 0.0018205007072538137, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_lr_exit_left.mmd]": 0.001202041981741786, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_lr_exit_right.mmd]": 0.0012154162395745516, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_passthrough_continuation.mmd]": 0.0005832088645547628, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_passthrough_trunk.mmd]": 0.0010050840210169554, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006392078939825296, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_right_entry_stack.mmd]": 0.002177292015403509, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_trunk_through_fan.mmd]": 0.0009700409136712551, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/tb_two_line_vert_seam.mmd]": 0.0012259578797966242, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/terminal_symmetric_fan.mmd]": 0.0008623749017715454, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/terminus_join.mmd]": 0.0007986258715391159, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/top_entry_header_clash.mmd]": 0.0008227091748267412, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/trunk_through_fan.mmd]": 0.0011851247400045395, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/twoline_fanout_up.mmd]": 0.002579291118308902, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/u_turn_fold.mmd]": 0.0027169580571353436, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/uneven_diamond.mmd]": 0.0005737917963415384, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/upward_bypass.mmd]": 0.003235124982893467, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/variant_calling.mmd]": 0.005023498786613345, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/wide_fan_in.mmd]": 0.0013852091506123543, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/wide_fan_out.mmd]": 0.0014916660729795694, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/wide_label_fan.mmd]": 0.0006820419803261757, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[topologies/wrapped_label_trunk.mmd]": 0.0007860430050641298, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[trunk_align_matching_bundle.mmd]": 0.0010372509714215994, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[uneven_diamond.mmd]": 0.001990498974919319, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[variant_calling.mmd]": 0.002061625011265278, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[variant_calling_tuned.mmd]": 0.002956833690404892, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[variantbenchmarking.mmd]": 0.005202124826610088, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[variantbenchmarking_auto.mmd]": 0.012765957741066813, + "tests/test_layout_invariants.py::test_no_intra_section_collinear_distinct_lines[variantprioritization.mmd]": 0.0020293339621275663, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[cross_track_interchange.mmd]": 0.002392126014456153, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[da_pipeline.mmd]": 0.008024957263842225, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[diagonal_labels.mmd]": 0.001450082752853632, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[diagonal_single_trunk_off_track.mmd]": 0.00410612509585917, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[differentialabundance.mmd]": 0.002242875052616, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[differentialabundance_default.mmd]": 0.002601540880277753, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[disconnected_components.mmd]": 0.0009101247414946556, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[epitopeprediction.mmd]": 0.0013467918615788221, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[file_icon_fanin.mmd]": 0.0012658329214900732, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[file_icons.mmd]": 0.0006214168388396502, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[genomeassembly.mmd]": 0.0014805409591645002, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[genomeassembly_organellar.mmd]": 0.00291929068043828, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[genomeassembly_staggered.mmd]": 0.001989708049222827, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[genomic_pipeline.mmd]": 0.006036542123183608, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[group_labels.mmd]": 0.0027884168084710836, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/02_sections.mmd]": 0.0007365429773926735, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/03_fan_out.mmd]": 0.0036039170809090137, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/03b_fan_in_merge.mmd]": 0.00103908427990973, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/04_directions.mmd]": 0.0011430410668253899, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/05_file_icons.mmd]": 0.0006412910297513008, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/05b_multi_icons.mmd]": 0.0006863342132419348, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/05c_files_icon.mmd]": 0.0006318758241832256, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/05d_folder_icon.mmd]": 0.0006203749217092991, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/05f_banner_labels.mmd]": 0.0006743329577147961, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/06a_without_hidden.mmd]": 0.0008927907329052687, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[guide/06b_with_hidden.mmd]": 0.0008818758651614189, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[hlatyping.mmd]": 0.0049849157221615314, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[legend_logo_placement.mmd]": 0.0035635416861623526, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[longread_variant_calling.mmd]": 0.0028595831245183945, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[marker_styles.mmd]": 0.002317290985956788, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[multiline_labels.mmd]": 0.002211707876995206, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[rnaseq_auto.mmd]": 0.006946250330656767, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[rnaseq_sections.mmd]": 0.01254745782352984, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[rnaseq_sections_manual.mmd]": 0.0031522500794380903, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[tb_file_termini.mmd]": 0.0008224158082157373, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[tb_right_exit_feeder_slots.mmd]": 0.0010207912418991327, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/aligner_row_pinned_continuation.mmd]": 0.0011961658019572496, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/around_below_ep_col_gt0.mmd]": 0.002360415877774358, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/around_section_below.mmd]": 0.0013607090804725885, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/asymmetric_tree.mmd]": 0.0014632511883974075, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0009975009597837925, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/branch_fold_forward.mmd]": 0.0018607501406222582, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/branch_fold_stability.mmd]": 0.0010701250284910202, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bt_exit_top_above.mmd]": 0.02696891687810421, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bt_exit_top_above_2line.mmd]": 0.0006454163230955601, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bt_perp_entry_below.mmd]": 0.0007782930042594671, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bt_to_lr.mmd]": 0.0006678749341517687, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bt_to_tb.mmd]": 0.0036433329805731773, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_fan_in_outer_slot.mmd]": 0.0026527498848736286, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_gap2_rightward_overflow.mmd]": 0.003375125117599964, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_label_rake.mmd]": 0.0020825830288231373, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_label_rake_left.mmd]": 0.0024932068772614002, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_label_rake_wide.mmd]": 0.0013444172218441963, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_leftward_far_side_entry.mmd]": 0.0011888749431818724, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_leftward_overflow.mmd]": 0.0009817080572247505, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/bypass_v_tight.mmd]": 0.0007518320344388485, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/clear_channel_target_aware_push.mmd]": 0.0008320831693708897, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/compact_gap_peer_conflict.mmd]": 0.0008840828668326139, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/compact_hidden_passthrough.mmd]": 0.0007451672572642565, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/complex_multipath.mmd]": 0.0016189999878406525, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/convergence_stacked_sink.mmd]": 0.005257501034066081, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/convergent_offrow_exit_climb.mmd]": 0.0026861666701734066, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/corridor_narrow_gap_fallback.mmd]": 0.0008555417880415916, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/cross_col_top_entry.mmd]": 0.0005350832361727953, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/cross_column_perp_drop.mmd]": 0.000538751482963562, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0005385000258684158, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/cross_row_gap_wrap.mmd]": 0.0010644588619470596, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/deep_linear.mmd]": 0.0016479582991451025, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/disjoint_sameline_trunks.mmd]": 0.0046598759945482016, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/divergent_fanout_split.mmd]": 0.000892207957804203, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/dogleg_exempt_distinct.mmd]": 0.0009016660042107105, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/dogleg_exempt_sameline.mmd]": 0.000714791938662529, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/dogleg_twoline_fanout.mmd]": 0.0007794580888003111, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/exit_corner_offset_dogleg.mmd]": 0.00086237583309412, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/fan_bypass_nesting.mmd]": 0.0015489580109715462, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/fan_in_merge.mmd]": 0.0010922509245574474, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/fold_double.mmd]": 0.0031937919557094574, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/fold_fan_across.mmd]": 0.00219541578553617, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/fold_stacked_branch.mmd]": 0.0036032511852681637, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/funcprofiler_upstream.mmd]": 0.00695441709831357, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/header_nudge.mmd]": 0.0010525842662900686, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/header_side_rotated.mmd]": 0.000655751209706068, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/inter_row_wrap_clearance.mmd]": 0.000998917268589139, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/junction_entry_align.mmd]": 0.0012217082548886538, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/junction_entry_collision.mmd]": 0.0014114170335233212, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/junction_entry_reversed_fold.mmd]": 0.001136834267526865, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/junction_fanout_convergence.mmd]": 0.0008082089480012655, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/left_entry_up_wrap.mmd]": 0.0005992921069264412, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/left_exit_sink_below.mmd]": 0.001613875851035118, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0009172491263598204, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0007707497570663691, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0017177504487335682, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.002034457866102457, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0020398751366883516, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_to_tb_top_cross_col.mmd]": 0.0017600837163627148, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_to_tb_top_drop.mmd]": 0.0015097919385880232, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0006877908017486334, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0005477929953485727, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005644999910145998, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_top_entry_cross_column.mmd]": 0.0005180421285331249, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005584999453276396, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_around_below_leftmost.mmd]": 0.000828542048111558, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_bottom_row_bypass.mmd]": 0.0009654585737735033, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_leftmost_sink_branch.mmd]": 0.0010283328592777252, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_offrow_continuation.mmd]": 0.0008004999253898859, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_port_above_approach.mmd]": 0.0011200420558452606, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_pullaway.mmd]": 0.0010055000893771648, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_right_entry.mmd]": 0.00499779311940074, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_trunk_out_of_range_section.mmd]": 0.001708668190985918, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/merge_trunk_over_low_section.mmd]": 0.0011780411005020142, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/mismatched_tracks.mmd]": 0.0009110409300774336, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/mixed_bundle_column.mmd]": 0.00128633389249444, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/mixed_port_sides.mmd]": 0.0007122501265257597, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/multi_input_convergence.mmd]": 0.005661665927618742, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/multi_line_bundle.mmd]": 0.006225165911018848, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0010610418394207954, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/near_vertical_junction_hook.mmd]": 0.0008850849699229002, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/off_track_convergence.mmd]": 0.0008462080731987953, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/off_track_convergence_multiline.mmd]": 0.0009575840085744858, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/off_track_input_above_consumer.mmd]": 0.0025679580867290497, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/parallel_independent.mmd]": 0.0007793337572365999, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/peeloff_extra_line_consumer.mmd]": 0.009408083045855165, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/peeloff_riser_respace.mmd]": 0.0009065419435501099, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/reconverge_reversed_fold.mmd]": 0.0023792916908860207, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/right_entry_from_above.mmd]": 0.00056666717864573, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/right_entry_from_above_far.mmd]": 0.0005449999589473009, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006019170396029949, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/right_entry_wrap_no_fan.mmd]": 0.0005443328991532326, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/rl_entry_runway.mmd]": 0.000668790889903903, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/rnaseq_lite.mmd]": 0.0028852499090135098, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/route_around_intervening.mmd]": 0.005738666979596019, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/section_diamond.mmd]": 0.0010997089557349682, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/self_crossing_bridge.mmd]": 0.0018349168822169304, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/shared_sink_parallel.mmd]": 0.0023898750077933073, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/stacked_left_exit_drop.mmd]": 0.0014978749677538872, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/stacked_lr_serpentine.mmd]": 0.0021248329430818558, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_bottom_entry_flow_start.mmd]": 0.0005860000383108854, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.000907959183678031, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0029173740185797215, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_column_continuation_two_lines.mmd]": 0.0006479164585471153, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_internal_diagonal.mmd]": 0.0021881673019379377, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_left_exit_step.mmd]": 0.00228283298201859, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_lr_exit_left.mmd]": 0.001908541889861226, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_lr_exit_right.mmd]": 0.0007827489171177149, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_passthrough_trunk.mmd]": 0.0007345008198171854, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005443750414997339, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_right_entry_stack.mmd]": 0.0008687910158187151, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/tb_two_line_vert_seam.mmd]": 0.0006107091903686523, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/terminal_symmetric_fan.mmd]": 0.0006527500227093697, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/top_entry_header_clash.mmd]": 0.0005587502382695675, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/trunk_through_fan.mmd]": 0.0008446669671684504, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/twoline_fanout_up.mmd]": 0.002044915920123458, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/u_turn_fold.mmd]": 0.001934416126459837, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/upward_bypass.mmd]": 0.0012883332092314959, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/variant_calling.mmd]": 0.0020135839004069567, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/wide_fan_in.mmd]": 0.0009502919856458902, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[topologies/wide_fan_out.mmd]": 0.0009601248893886805, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[trunk_align_matching_bundle.mmd]": 0.002384958090260625, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[variant_calling.mmd]": 0.0024065840989351273, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[variant_calling_tuned.mmd]": 0.0028869998641312122, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[variantbenchmarking.mmd]": 0.0037682089023292065, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[variantbenchmarking_auto.mmd]": 0.006847625132650137, + "tests/test_layout_invariants.py::test_no_kink_at_section_boundary[variantprioritization.mmd]": 0.00181329227052629, + "tests/test_layout_invariants.py::test_no_label_overlap[bubble_forced_label_clears_diagonal.mmd]": 0.001489291898906231, + "tests/test_layout_invariants.py::test_no_label_overlap[bubble_label_clears_diagonal.mmd]": 0.0009487511124461889, + "tests/test_layout_invariants.py::test_no_label_overlap[bubble_output_above.mmd]": 0.0008472090121358633, + "tests/test_layout_invariants.py::test_no_label_overlap[captioned_sibling_outputs.mmd]": 0.000751124694943428, + "tests/test_layout_invariants.py::test_no_label_overlap[centered_tracks.mmd]": 0.00113808480091393, + "tests/test_layout_invariants.py::test_no_label_overlap[cross_track_interchange.mmd]": 0.0019690007902681828, + "tests/test_layout_invariants.py::test_no_label_overlap[da_pipeline.mmd]": 0.02146166586317122, + "tests/test_layout_invariants.py::test_no_label_overlap[diagonal_labels.mmd]": 0.0031127501279115677, + "tests/test_layout_invariants.py::test_no_label_overlap[diagonal_single_trunk_off_track.mmd]": 0.0029554148204624653, + "tests/test_layout_invariants.py::test_no_label_overlap[differentialabundance.mmd]": 0.013244085013866425, + "tests/test_layout_invariants.py::test_no_label_overlap[differentialabundance_default.mmd]": 0.012461249949410558, + "tests/test_layout_invariants.py::test_no_label_overlap[directional_flow.mmd]": 0.001657166052609682, + "tests/test_layout_invariants.py::test_no_label_overlap[disconnected_components.mmd]": 0.0026788339018821716, + "tests/test_layout_invariants.py::test_no_label_overlap[epitopeprediction.mmd]": 0.006508624879643321, + "tests/test_layout_invariants.py::test_no_label_overlap[file_icon_fanin.mmd]": 0.002105749910697341, + "tests/test_layout_invariants.py::test_no_label_overlap[file_icons.mmd]": 0.0013576250057667494, + "tests/test_layout_invariants.py::test_no_label_overlap[font_scale.mmd]": 0.0007015420123934746, + "tests/test_layout_invariants.py::test_no_label_overlap[genomeassembly.mmd]": 0.007317583076655865, + "tests/test_layout_invariants.py::test_no_label_overlap[genomeassembly_organellar.mmd]": 0.009970666840672493, + "tests/test_layout_invariants.py::test_no_label_overlap[genomeassembly_staggered.mmd]": 0.012705083005130291, + "tests/test_layout_invariants.py::test_no_label_overlap[genomic_pipeline.mmd]": 0.049138707807287574, + "tests/test_layout_invariants.py::test_no_label_overlap[group_labels.mmd]": 0.007059541996568441, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/01_minimal.mmd]": 0.0008171659428626299, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/02_sections.mmd]": 0.0013949170242995024, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/03_fan_out.mmd]": 0.003681291826069355, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/03b_fan_in_merge.mmd]": 0.013783790869638324, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/04_directions.mmd]": 0.007384251104667783, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/05_file_icons.mmd]": 0.0011274160351604223, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/05b_multi_icons.mmd]": 0.002120666904374957, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/05c_files_icon.mmd]": 0.002291833981871605, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/05d_folder_icon.mmd]": 0.0011110410559922457, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/05f_banner_labels.mmd]": 0.0012117500882595778, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/06a_without_hidden.mmd]": 0.0017675431445240974, + "tests/test_layout_invariants.py::test_no_label_overlap[guide/06b_with_hidden.mmd]": 0.0017192910891026258, + "tests/test_layout_invariants.py::test_no_label_overlap[hlatyping.mmd]": 0.004919332917779684, + "tests/test_layout_invariants.py::test_no_label_overlap[icon_caption_wrap.mmd]": 0.0005587500054389238, + "tests/test_layout_invariants.py::test_no_label_overlap[leaf_file_icon_on_trunk.mmd]": 0.0007842488121241331, + "tests/test_layout_invariants.py::test_no_label_overlap[legend_combo.mmd]": 0.0010672907810658216, + "tests/test_layout_invariants.py::test_no_label_overlap[legend_logo_placement.mmd]": 0.03858933341689408, + "tests/test_layout_invariants.py::test_no_label_overlap[longread_variant_calling.mmd]": 0.01551141613163054, + "tests/test_layout_invariants.py::test_no_label_overlap[marker_styles.mmd]": 0.004088082583621144, + "tests/test_layout_invariants.py::test_no_label_overlap[multiline_labels.mmd]": 0.001232042210176587, + "tests/test_layout_invariants.py::test_no_label_overlap[off_track_output_branched.mmd]": 0.003991542151197791, + "tests/test_layout_invariants.py::test_no_label_overlap[off_track_outputs.mmd]": 0.003066584002226591, + "tests/test_layout_invariants.py::test_no_label_overlap[off_track_outputs_along_trunk.mmd]": 0.0010604581329971552, + "tests/test_layout_invariants.py::test_no_label_overlap[rnaseq_auto.mmd]": 0.007798749953508377, + "tests/test_layout_invariants.py::test_no_label_overlap[rnaseq_sections.mmd]": 0.020524289924651384, + "tests/test_layout_invariants.py::test_no_label_overlap[rnaseq_sections_manual.mmd]": 0.028021999169141054, + "tests/test_layout_invariants.py::test_no_label_overlap[rnaseq_simple.mmd]": 0.0007557501085102558, + "tests/test_layout_invariants.py::test_no_label_overlap[simple_pipeline.mmd]": 0.0008962082210928202, + "tests/test_layout_invariants.py::test_no_label_overlap[tb_file_termini.mmd]": 0.0013351656962186098, + "tests/test_layout_invariants.py::test_no_label_overlap[tb_right_exit_feeder_slots.mmd]": 0.003263584105297923, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/aligner_row_pinned_continuation.mmd]": 0.0028289996553212404, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/around_below_ep_col_gt0.mmd]": 0.007998918183147907, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/around_section_below.mmd]": 0.003961540991440415, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/asymmetric_tree.mmd]": 0.00581641704775393, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0017976672388613224, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/branch_fold_forward.mmd]": 0.004096332937479019, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/branch_fold_stability.mmd]": 0.0026626670733094215, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bt_chain.mmd]": 0.0006025009788572788, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bt_exit_top_above.mmd]": 0.0008412911556661129, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bt_exit_top_above_2line.mmd]": 0.0009599160403013229, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bt_fork.mmd]": 0.00746087497100234, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bt_perp_entry_below.mmd]": 0.0009966662619262934, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bt_to_lr.mmd]": 0.0066571657080203295, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bt_to_tb.mmd]": 0.0010856669396162033, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bundle_terminator_continuation.mmd]": 0.002081583021208644, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_fan_in_outer_slot.mmd]": 0.005066165700554848, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_gap2_rightward_overflow.mmd]": 0.012264249846339226, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_label_rake.mmd]": 0.007634999696165323, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_label_rake_left.mmd]": 0.0020812510047107935, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_label_rake_wide.mmd]": 0.004064581822603941, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_leftward_far_side_entry.mmd]": 0.0030056252144277096, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_leftward_overflow.mmd]": 0.0033045001327991486, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/bypass_v_tight.mmd]": 0.0029357511084526777, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/clear_channel_target_aware_push.mmd]": 0.0020479168742895126, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/compact_gap_peer_conflict.mmd]": 0.001781583996489644, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/compact_hidden_passthrough.mmd]": 0.001346292207017541, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/complex_multipath.mmd]": 0.004063331987708807, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/convergence_stacked_sink.mmd]": 0.002892042277380824, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/convergent_offrow_exit_climb.mmd]": 0.018230667104944587, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/corridor_narrow_gap_fallback.mmd]": 0.004077790770679712, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/cross_col_top_entry.mmd]": 0.0013432081323117018, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/cross_column_perp_drop.mmd]": 0.00095904222689569, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0009422921575605869, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/cross_row_gap_wrap.mmd]": 0.0024349999148398638, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/deep_linear.mmd]": 0.00415187468752265, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/disjoint_sameline_trunks.mmd]": 0.0032137499656528234, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/divergent_fanout_split.mmd]": 0.008367374772205949, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/dogleg_exempt_distinct.mmd]": 0.002110125729814172, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/dogleg_exempt_sameline.mmd]": 0.004689999157562852, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/dogleg_twoline_fanout.mmd]": 0.0026354589499533176, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/exit_corner_offset_dogleg.mmd]": 0.0017169590573757887, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/fan_bypass_nesting.mmd]": 0.00653062597848475, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/fan_in_merge.mmd]": 0.002524001058191061, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/fold_double.mmd]": 0.015596916899085045, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/fold_fan_across.mmd]": 0.007610626285895705, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/fold_stacked_branch.mmd]": 0.02054733270779252, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/funcprofiler_upstream.mmd]": 0.018333959160372615, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/header_nudge.mmd]": 0.0010622511617839336, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/header_side_rotated.mmd]": 0.0009378341492265463, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/inrow_skip_breeze.mmd]": 0.0007349161896854639, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/inter_row_wrap_clearance.mmd]": 0.0014992079231888056, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/interchange_lane_reorder.mmd]": 0.0007719590794295073, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/junction_entry_align.mmd]": 0.002644876018166542, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/junction_entry_collision.mmd]": 0.0021488319616764784, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/junction_entry_reversed_fold.mmd]": 0.0043071662075817585, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/junction_fanout_convergence.mmd]": 0.002831334015354514, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/left_entry_up_wrap.mmd]": 0.0012415421660989523, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/left_exit_sink_below.mmd]": 0.0017717089504003525, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0013346669729799032, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0013766251504421234, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0038580410182476044, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0037895417772233486, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0018036230467259884, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_to_tb_top_cross_col.mmd]": 0.0012085409834980965, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_to_tb_top_drop.mmd]": 0.0008167079649865627, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0009637919720262289, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0013972511515021324, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_to_tb_top_two_lines.mmd]": 0.00117891700938344, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_top_entry_cross_column.mmd]": 0.0008578759152442217, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0032753341365605593, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_around_below_leftmost.mmd]": 0.0020199588034301996, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_bottom_row_bypass.mmd]": 0.0021488757338374853, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_leftmost_sink_branch.mmd]": 0.0020551260095089674, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_offrow_continuation.mmd]": 0.001750750234350562, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_port_above_approach.mmd]": 0.001680833986029029, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_pullaway.mmd]": 0.0020242498721927404, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_right_entry.mmd]": 0.0018253747839480639, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_trunk_out_of_range_section.mmd]": 0.015482208924368024, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/merge_trunk_over_low_section.mmd]": 0.0063205009792000055, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/mismatched_tracks.mmd]": 0.0021500829607248306, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/mixed_bundle_column.mmd]": 0.0027419589459896088, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/mixed_port_sides.mmd]": 0.001266708131879568, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/multi_input_convergence.mmd]": 0.0013378339353948832, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/multi_line_bundle.mmd]": 0.012489417102187872, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/multicarrier_offrow_exit_climb.mmd]": 0.007523376028984785, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/near_vertical_junction_hook.mmd]": 0.001787666929885745, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/off_track_convergence.mmd]": 0.0012966669164597988, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/off_track_convergence_multiline.mmd]": 0.0017172899097204208, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/off_track_input_above_consumer.mmd]": 0.006146625149995089, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/parallel_independent.mmd]": 0.0030851662158966064, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/peeloff_extra_line_consumer.mmd]": 0.0024501250591129065, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/peeloff_riser_respace.mmd]": 0.002241792157292366, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/post_convergence_trunk.mmd]": 0.0006936660502105951, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/reconverge_reversed_fold.mmd]": 0.018603374948725104, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/right_entry_from_above.mmd]": 0.0010970842558890581, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/right_entry_from_above_far.mmd]": 0.0009354169014841318, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/right_entry_gap_above_empty_row.mmd]": 0.0026026670821011066, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/right_entry_wrap_no_fan.mmd]": 0.0030032917857170105, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/rl_entry_runway.mmd]": 0.0014259989839047194, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/rnaseq_lite.mmd]": 0.015207709046080709, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/route_around_intervening.mmd]": 0.005815251264721155, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/section_diamond.mmd]": 0.0021716670598834753, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/self_crossing_bridge.mmd]": 0.0025595431216061115, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/shared_sink_parallel.mmd]": 0.003633500076830387, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/single_section.mmd]": 0.0006047082133591175, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/stacked_left_exit_drop.mmd]": 0.0008710841648280621, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/stacked_lr_serpentine.mmd]": 0.0015483750030398369, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.002486415905877948, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_bottom_entry_flow_start.mmd]": 0.0008208341896533966, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.00952416704967618, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.006142999976873398, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_column_continuation_two_lines.mmd]": 0.0031071247067302465, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_convergence_straight_drop.mmd]": 0.000683541176840663, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_internal_diagonal.mmd]": 0.0012636249884963036, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_left_exit_step.mmd]": 0.006110917078331113, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_lr_exit_left.mmd]": 0.00146145885810256, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_lr_exit_right.mmd]": 0.0019600000232458115, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_passthrough_continuation.mmd]": 0.001964832656085491, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_passthrough_trunk.mmd]": 0.0015665828250348568, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0008476250804960728, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_right_entry_stack.mmd]": 0.001474791206419468, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_trunk_through_fan.mmd]": 0.0015262088272720575, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/tb_two_line_vert_seam.mmd]": 0.0030277089681476355, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/terminal_symmetric_fan.mmd]": 0.002247041091322899, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/terminus_join.mmd]": 0.0007354582194238901, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/top_entry_header_clash.mmd]": 0.0017788340337574482, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/trunk_through_fan.mmd]": 0.0028627910651266575, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/twoline_fanout_up.mmd]": 0.0014095839578658342, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/u_turn_fold.mmd]": 0.005334458779543638, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/uneven_diamond.mmd]": 0.0008714578580111265, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/upward_bypass.mmd]": 0.00739120808430016, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/variant_calling.mmd]": 0.015033584088087082, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/wide_fan_in.mmd]": 0.004131210036575794, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/wide_fan_out.mmd]": 0.002293582772836089, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/wide_label_fan.mmd]": 0.0029738328885287046, + "tests/test_layout_invariants.py::test_no_label_overlap[topologies/wrapped_label_trunk.mmd]": 0.0012651670258492231, + "tests/test_layout_invariants.py::test_no_label_overlap[trunk_align_matching_bundle.mmd]": 0.001576792448759079, + "tests/test_layout_invariants.py::test_no_label_overlap[uneven_diamond.mmd]": 0.0007480422500520945, + "tests/test_layout_invariants.py::test_no_label_overlap[variant_calling.mmd]": 0.0021884168963879347, + "tests/test_layout_invariants.py::test_no_label_overlap[variant_calling_tuned.mmd]": 0.005266167921945453, + "tests/test_layout_invariants.py::test_no_label_overlap[variantbenchmarking.mmd]": 0.01459837588481605, + "tests/test_layout_invariants.py::test_no_label_overlap[variantbenchmarking_auto.mmd]": 0.030681959120556712, + "tests/test_layout_invariants.py::test_no_label_overlap[variantprioritization.mmd]": 0.003015457186847925, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[bubble_forced_label_clears_diagonal.mmd]": 0.0006357510574162006, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[bubble_label_clears_diagonal.mmd]": 0.0006250012665987015, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[bubble_output_above.mmd]": 0.001483249943703413, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[captioned_sibling_outputs.mmd]": 0.0006095001008361578, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[centered_tracks.mmd]": 0.004241874907165766, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[cross_track_interchange.mmd]": 0.0012941258028149605, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[da_pipeline.mmd]": 0.006357291946187615, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[diagonal_labels.mmd]": 0.0016986671835184097, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[diagonal_single_trunk_off_track.mmd]": 0.0017884171102195978, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[differentialabundance.mmd]": 0.00627245893701911, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[differentialabundance_default.mmd]": 0.005924291908740997, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[directional_flow.mmd]": 0.0006509153172373772, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[disconnected_components.mmd]": 0.0010089180432260036, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[epitopeprediction.mmd]": 0.0022122079972177744, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[file_icon_fanin.mmd]": 0.0015812087804079056, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[file_icons.mmd]": 0.0007834578864276409, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[font_scale.mmd]": 0.0005523751024156809, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[genomeassembly.mmd]": 0.00295058311894536, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[genomeassembly_organellar.mmd]": 0.005421750945970416, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[genomeassembly_staggered.mmd]": 0.0027324589900672436, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[genomic_pipeline.mmd]": 0.007195459213107824, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[group_labels.mmd]": 0.0007732091471552849, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/01_minimal.mmd]": 0.0005422071553766727, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/02_sections.mmd]": 0.001000208081677556, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/03_fan_out.mmd]": 0.0017352912109345198, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/03b_fan_in_merge.mmd]": 0.0018176250159740448, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/04_directions.mmd]": 0.0017052916809916496, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/05_file_icons.mmd]": 0.0008098329417407513, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/05b_multi_icons.mmd]": 0.0009148751851171255, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/05c_files_icon.mmd]": 0.0008209582883864641, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/05d_folder_icon.mmd]": 0.0008083747234195471, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/05f_banner_labels.mmd]": 0.0009312920738011599, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/06a_without_hidden.mmd]": 0.002824875060468912, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[guide/06b_with_hidden.mmd]": 0.001753584248945117, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[hlatyping.mmd]": 0.0015213738661259413, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[icon_caption_wrap.mmd]": 0.0005038750823587179, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[leaf_file_icon_on_trunk.mmd]": 0.0005680408794432878, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[legend_combo.mmd]": 0.0005944594740867615, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[legend_logo_placement.mmd]": 0.0015094177797436714, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[longread_variant_calling.mmd]": 0.0049634159076958895, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[marker_styles.mmd]": 0.0009104160126298666, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[multiline_labels.mmd]": 0.0008311658166348934, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[off_track_output_branched.mmd]": 0.0006124989595264196, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[off_track_outputs.mmd]": 0.0006883747410029173, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[off_track_outputs_along_trunk.mmd]": 0.0006169578991830349, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[rnaseq_auto.mmd]": 0.03228512406349182, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[rnaseq_sections.mmd]": 0.0060487480368465185, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[rnaseq_sections_manual.mmd]": 0.01110154204070568, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[rnaseq_simple.mmd]": 0.0004890826530754566, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[simple_pipeline.mmd]": 0.001818543067201972, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[tb_file_termini.mmd]": 0.003025708021596074, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[tb_right_exit_feeder_slots.mmd]": 0.005083750002086163, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/aligner_row_pinned_continuation.mmd]": 0.007636042311787605, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/around_below_ep_col_gt0.mmd]": 0.0019849580712616444, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/around_section_below.mmd]": 0.0011561671271920204, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/asymmetric_tree.mmd]": 0.007103541167452931, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0020762081257998943, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/branch_fold_forward.mmd]": 0.002510499907657504, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/branch_fold_stability.mmd]": 0.002910708077251911, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bt_chain.mmd]": 0.0005183760076761246, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bt_exit_top_above.mmd]": 0.0006535421125590801, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bt_exit_top_above_2line.mmd]": 0.0008052908815443516, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bt_fork.mmd]": 0.0005393330939114094, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bt_perp_entry_below.mmd]": 0.0007265002932399511, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bt_to_lr.mmd]": 0.0007909999694675207, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bt_to_tb.mmd]": 0.0007713751401752234, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bundle_terminator_continuation.mmd]": 0.0004659169353544712, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_fan_in_outer_slot.mmd]": 0.003301500342786312, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0021875398233532906, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_label_rake.mmd]": 0.0037507908418774605, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_label_rake_left.mmd]": 0.003870082786306739, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_label_rake_wide.mmd]": 0.005368748912587762, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_leftward_far_side_entry.mmd]": 0.0018740000668913126, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_leftward_overflow.mmd]": 0.006916625192388892, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/bypass_v_tight.mmd]": 0.0028589589055627584, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/clear_channel_target_aware_push.mmd]": 0.001196540892124176, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/compact_gap_peer_conflict.mmd]": 0.002898834180086851, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/compact_hidden_passthrough.mmd]": 0.0014484156854450703, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/complex_multipath.mmd]": 0.00292850099503994, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/convergence_stacked_sink.mmd]": 0.0020727079827338457, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/convergent_offrow_exit_climb.mmd]": 0.008528750156983733, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/corridor_narrow_gap_fallback.mmd]": 0.004866456845775247, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/cross_col_top_entry.mmd]": 0.001302790828049183, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/cross_column_perp_drop.mmd]": 0.0031036250293254852, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0008069172035902739, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/cross_row_gap_wrap.mmd]": 0.0023049579467624426, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/deep_linear.mmd]": 0.002199083101004362, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/disjoint_sameline_trunks.mmd]": 0.0021853328216820955, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/divergent_fanout_split.mmd]": 0.0009960830211639404, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/dogleg_exempt_distinct.mmd]": 0.0012976252473890781, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/dogleg_exempt_sameline.mmd]": 0.0009872089140117168, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/dogleg_twoline_fanout.mmd]": 0.0010545828845351934, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/exit_corner_offset_dogleg.mmd]": 0.0012627909891307354, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/fan_bypass_nesting.mmd]": 0.002328209113329649, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/fan_in_merge.mmd]": 0.0020747901871800423, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/fold_double.mmd]": 0.003948710160329938, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/fold_fan_across.mmd]": 0.005114291794598103, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/fold_stacked_branch.mmd]": 0.004067708738148212, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/funcprofiler_upstream.mmd]": 0.007328957784920931, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/header_nudge.mmd]": 0.003889043116942048, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/header_side_rotated.mmd]": 0.002584791975095868, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/inrow_skip_breeze.mmd]": 0.0015734173357486725, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/inter_row_wrap_clearance.mmd]": 0.004829874960705638, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/interchange_lane_reorder.mmd]": 0.0007837500888854265, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/junction_entry_align.mmd]": 0.0021951671224087477, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/junction_entry_collision.mmd]": 0.0018768331501632929, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/junction_entry_reversed_fold.mmd]": 0.001683125039562583, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/junction_fanout_convergence.mmd]": 0.001248583197593689, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/left_entry_up_wrap.mmd]": 0.0008505841251462698, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/left_exit_sink_below.mmd]": 0.0011982510332018137, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.00101246009580791, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0009811248164623976, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0009858752600848675, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.005312125897035003, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0011731248814612627, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_to_tb_top_cross_col.mmd]": 0.0009077077265828848, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_to_tb_top_drop.mmd]": 0.0006590422708541155, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008692499250173569, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0009266261477023363, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_to_tb_top_two_lines.mmd]": 0.0008654589764773846, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_top_entry_cross_column.mmd]": 0.0006795409135520458, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007602497935295105, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_around_below_leftmost.mmd]": 0.001512917224317789, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_bottom_row_bypass.mmd]": 0.0015677083283662796, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_leftmost_sink_branch.mmd]": 0.0015343339182436466, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_offrow_continuation.mmd]": 0.001080540008842945, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_port_above_approach.mmd]": 0.0010874161962419748, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_pullaway.mmd]": 0.0013737089466303587, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_right_entry.mmd]": 0.0013908338733017445, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_trunk_out_of_range_section.mmd]": 0.01668083295226097, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/merge_trunk_over_low_section.mmd]": 0.00392370717599988, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/mismatched_tracks.mmd]": 0.0015950417146086693, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/mixed_bundle_column.mmd]": 0.0021204999648034573, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/mixed_port_sides.mmd]": 0.000981166260316968, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/multi_input_convergence.mmd]": 0.0010454163420945406, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/multi_line_bundle.mmd]": 0.0017623747698962688, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/multicarrier_offrow_exit_climb.mmd]": 0.003551000962033868, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/near_vertical_junction_hook.mmd]": 0.0011824171524494886, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/off_track_convergence.mmd]": 0.0010048740077763796, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/off_track_convergence_multiline.mmd]": 0.0012916249688714743, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/off_track_input_above_consumer.mmd]": 0.014174249954521656, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/parallel_independent.mmd]": 0.0022972077131271362, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/peeloff_extra_line_consumer.mmd]": 0.002158957999199629, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/peeloff_riser_respace.mmd]": 0.003694667015224695, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/post_convergence_trunk.mmd]": 0.000571209006011486, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/reconverge_reversed_fold.mmd]": 0.004426749888807535, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/right_entry_from_above.mmd]": 0.0007661660201847553, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/right_entry_from_above_far.mmd]": 0.0006906252820044756, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/right_entry_gap_above_empty_row.mmd]": 0.0011436252389103174, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/right_entry_wrap_no_fan.mmd]": 0.001352500170469284, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/rl_entry_runway.mmd]": 0.001913833199068904, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/rnaseq_lite.mmd]": 0.002570291981101036, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/route_around_intervening.mmd]": 0.001667124917730689, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/section_diamond.mmd]": 0.0031575828325003386, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/self_crossing_bridge.mmd]": 0.004687792155891657, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/shared_sink_parallel.mmd]": 0.0033808338921517134, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/single_section.mmd]": 0.0005687498487532139, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/stacked_left_exit_drop.mmd]": 0.000716750044375658, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/stacked_lr_serpentine.mmd]": 0.0012044585309922695, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0015806658193469048, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_bottom_entry_flow_start.mmd]": 0.000805750023573637, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0012030836660414934, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0011762089561671019, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_column_continuation_two_lines.mmd]": 0.0007208762690424919, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_convergence_straight_drop.mmd]": 0.0014109995681792498, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_internal_diagonal.mmd]": 0.005574335111305118, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_left_exit_step.mmd]": 0.005616082577034831, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_lr_exit_left.mmd]": 0.001230207970365882, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_lr_exit_right.mmd]": 0.0012098753359168768, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_passthrough_continuation.mmd]": 0.0005783331580460072, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_passthrough_trunk.mmd]": 0.0010642502456903458, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0007734168320894241, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_right_entry_stack.mmd]": 0.0013423769269138575, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_trunk_through_fan.mmd]": 0.0005924999713897705, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/tb_two_line_vert_seam.mmd]": 0.0009274997282773256, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/terminal_symmetric_fan.mmd]": 0.0008517089299857616, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/terminus_join.mmd]": 0.00045745912939310074, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/top_entry_header_clash.mmd]": 0.0006477918941527605, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/trunk_through_fan.mmd]": 0.001108416123315692, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/twoline_fanout_up.mmd]": 0.00105487578548491, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/u_turn_fold.mmd]": 0.007003834005445242, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/uneven_diamond.mmd]": 0.0016856249421834946, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/upward_bypass.mmd]": 0.0034995833411812782, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/variant_calling.mmd]": 0.006564917042851448, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/wide_fan_in.mmd]": 0.001451251097023487, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/wide_fan_out.mmd]": 0.0015442091971635818, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/wide_label_fan.mmd]": 0.0005703319329768419, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[topologies/wrapped_label_trunk.mmd]": 0.0006380011327564716, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[trunk_align_matching_bundle.mmd]": 0.0010431238915771246, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[uneven_diamond.mmd]": 0.000516167376190424, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[variant_calling.mmd]": 0.0015719172079116106, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[variant_calling_tuned.mmd]": 0.0019911248236894608, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[variantbenchmarking.mmd]": 0.010439540958032012, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[variantbenchmarking_auto.mmd]": 0.006062499945983291, + "tests/test_layout_invariants.py::test_no_line_crosses_file_icon[variantprioritization.mmd]": 0.0023917080834507942, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[bubble_forced_label_clears_diagonal.mmd]": 0.0007022512145340443, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[bubble_label_clears_diagonal.mmd]": 0.0006100842729210854, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[bubble_output_above.mmd]": 0.0005456660874187946, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[captioned_sibling_outputs.mmd]": 0.0005213338881731033, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[centered_tracks.mmd]": 0.002109125955030322, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[cross_track_interchange.mmd]": 0.004471331601962447, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[da_pipeline.mmd]": 0.009821666870266199, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[diagonal_labels.mmd]": 0.0034928759559988976, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[diagonal_single_trunk_off_track.mmd]": 0.0018855002708733082, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[differentialabundance.mmd]": 0.006523167248815298, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[differentialabundance_default.mmd]": 0.012797957751899958, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[directional_flow.mmd]": 0.002250750083476305, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[disconnected_components.mmd]": 0.0011898342054337263, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[epitopeprediction.mmd]": 0.0023752080742269754, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[file_icon_fanin.mmd]": 0.014914916828274727, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[file_icons.mmd]": 0.0009662080556154251, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[font_scale.mmd]": 0.0026935827918350697, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[genomeassembly.mmd]": 0.0034206658601760864, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[genomeassembly_organellar.mmd]": 0.00749329081736505, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[genomeassembly_staggered.mmd]": 0.0033234579022973776, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[genomic_pipeline.mmd]": 0.02122199907898903, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[group_labels.mmd]": 0.0019844588823616505, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/01_minimal.mmd]": 0.0006012499798089266, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/02_sections.mmd]": 0.0011289168614894152, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/03_fan_out.mmd]": 0.0018180010374635458, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/03b_fan_in_merge.mmd]": 0.001896000001579523, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/04_directions.mmd]": 0.0017383748199790716, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/05_file_icons.mmd]": 0.000833999365568161, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/05b_multi_icons.mmd]": 0.0009311658795922995, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/05c_files_icon.mmd]": 0.004640626022592187, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/05d_folder_icon.mmd]": 0.0019109579734504223, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/05f_banner_labels.mmd]": 0.0009255004115402699, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/06a_without_hidden.mmd]": 0.0012785831931978464, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[guide/06b_with_hidden.mmd]": 0.00359474983997643, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[hlatyping.mmd]": 0.0015847091563045979, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[icon_caption_wrap.mmd]": 0.0004774180706590414, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[leaf_file_icon_on_trunk.mmd]": 0.000575582729652524, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[legend_combo.mmd]": 0.0018450829666107893, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[legend_logo_placement.mmd]": 0.002693707821890712, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[longread_variant_calling.mmd]": 0.021362958010286093, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[marker_styles.mmd]": 0.004656750941649079, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[multiline_labels.mmd]": 0.0014628758653998375, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[off_track_output_branched.mmd]": 0.0006671247538179159, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[off_track_outputs.mmd]": 0.002102334052324295, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[off_track_outputs_along_trunk.mmd]": 0.0006608739495277405, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[rnaseq_auto.mmd]": 0.011027374770492315, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[rnaseq_sections.mmd]": 0.011805832851678133, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[rnaseq_sections_manual.mmd]": 0.020493125077337027, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[rnaseq_simple.mmd]": 0.000527125084772706, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[simple_pipeline.mmd]": 0.012904874980449677, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[tb_file_termini.mmd]": 0.0014036661013960838, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[tb_right_exit_feeder_slots.mmd]": 0.004126791842281818, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/aligner_row_pinned_continuation.mmd]": 0.004248457960784435, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/around_below_ep_col_gt0.mmd]": 0.0014303328935056925, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/around_section_below.mmd]": 0.006683499086648226, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/asymmetric_tree.mmd]": 0.0022152920719236135, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0015773761551827192, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/branch_fold_forward.mmd]": 0.002975624753162265, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/branch_fold_stability.mmd]": 0.003174250014126301, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bt_chain.mmd]": 0.0005278759635984898, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bt_exit_top_above.mmd]": 0.0007033748552203178, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bt_exit_top_above_2line.mmd]": 0.0008858738001435995, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bt_fork.mmd]": 0.0005417088977992535, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bt_perp_entry_below.mmd]": 0.0007904157973825932, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bt_to_lr.mmd]": 0.0008333739824593067, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bt_to_tb.mmd]": 0.0008148751221597195, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bundle_terminator_continuation.mmd]": 0.00048341602087020874, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_fan_in_outer_slot.mmd]": 0.009030915098264813, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002619874896481633, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_label_rake.mmd]": 0.0014388326089829206, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_label_rake_left.mmd]": 0.00131229218095541, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_label_rake_wide.mmd]": 0.006734873866662383, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_leftward_far_side_entry.mmd]": 0.004984833300113678, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_leftward_overflow.mmd]": 0.002178416820243001, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/bypass_v_tight.mmd]": 0.0031863749027252197, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/clear_channel_target_aware_push.mmd]": 0.0020353340078145266, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/compact_gap_peer_conflict.mmd]": 0.0047278329730033875, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/compact_hidden_passthrough.mmd]": 0.0020692080724984407, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/complex_multipath.mmd]": 0.005016000010073185, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/convergence_stacked_sink.mmd]": 0.00941766588948667, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/convergent_offrow_exit_climb.mmd]": 0.008955542929470539, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/corridor_narrow_gap_fallback.mmd]": 0.002984166843816638, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/cross_col_top_entry.mmd]": 0.002069291891530156, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/cross_column_perp_drop.mmd]": 0.0012299998197704554, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/cross_column_perp_drop_far_exit.mmd]": 0.000819833017885685, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/cross_row_gap_wrap.mmd]": 0.0018204159568995237, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/deep_linear.mmd]": 0.002413333160802722, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/disjoint_sameline_trunks.mmd]": 0.002439249772578478, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/divergent_fanout_split.mmd]": 0.0010300001595169306, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/dogleg_exempt_distinct.mmd]": 0.0013169161975383759, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/dogleg_exempt_sameline.mmd]": 0.0009989580139517784, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/dogleg_twoline_fanout.mmd]": 0.0010752507951110601, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/exit_corner_offset_dogleg.mmd]": 0.0013066250830888748, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/fan_bypass_nesting.mmd]": 0.0026402510702610016, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/fan_in_merge.mmd]": 0.0022124999668449163, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/fold_double.mmd]": 0.004333000164479017, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/fold_fan_across.mmd]": 0.007864583050832152, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/fold_stacked_branch.mmd]": 0.004225374897941947, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/funcprofiler_upstream.mmd]": 0.0043787911999970675, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/header_nudge.mmd]": 0.0008833750616759062, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/header_side_rotated.mmd]": 0.011620000470429659, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/inrow_skip_breeze.mmd]": 0.0019380419980734587, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/inter_row_wrap_clearance.mmd]": 0.004361417144536972, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/interchange_lane_reorder.mmd]": 0.004079541889950633, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/junction_entry_align.mmd]": 0.0022852488327771425, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/junction_entry_collision.mmd]": 0.0017892911564558744, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/junction_entry_reversed_fold.mmd]": 0.0026110829785466194, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/junction_fanout_convergence.mmd]": 0.0017964160069823265, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/left_entry_up_wrap.mmd]": 0.0009513339027762413, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/left_exit_sink_below.mmd]": 0.0012880417052656412, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0010815011337399483, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0010101248044520617, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010314581450074911, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0010379578452557325, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0009798761457204819, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_to_tb_top_cross_col.mmd]": 0.0008791659492999315, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_to_tb_top_drop.mmd]": 0.000628249254077673, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007839594036340714, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006651666481047869, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_to_tb_top_two_lines.mmd]": 0.0008207499049603939, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_top_entry_cross_column.mmd]": 0.0006586669478565454, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.005157415987923741, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_around_below_leftmost.mmd]": 0.002089334186166525, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_bottom_row_bypass.mmd]": 0.0036950840149074793, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_leftmost_sink_branch.mmd]": 0.004025541944429278, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_offrow_continuation.mmd]": 0.0012958331499248743, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_port_above_approach.mmd]": 0.0012312910985201597, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_pullaway.mmd]": 0.0016155836638063192, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_right_entry.mmd]": 0.0032097077928483486, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_trunk_out_of_range_section.mmd]": 0.0029902069363743067, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/merge_trunk_over_low_section.mmd]": 0.0029273738618940115, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/mismatched_tracks.mmd]": 0.0025140000507235527, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/mixed_bundle_column.mmd]": 0.015399833908304572, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/mixed_port_sides.mmd]": 0.003575292183086276, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/multi_input_convergence.mmd]": 0.001255124807357788, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/multi_line_bundle.mmd]": 0.001917458837851882, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/multicarrier_offrow_exit_climb.mmd]": 0.001585999969393015, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/near_vertical_junction_hook.mmd]": 0.0012516661081463099, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/off_track_convergence.mmd]": 0.0010166666470468044, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/off_track_convergence_multiline.mmd]": 0.0013147087302058935, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/off_track_input_above_consumer.mmd]": 0.00375970802269876, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/parallel_independent.mmd]": 0.0009502929169684649, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/peeloff_extra_line_consumer.mmd]": 0.007211457705125213, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/peeloff_riser_respace.mmd]": 0.004256291780620813, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/post_convergence_trunk.mmd]": 0.0005732509307563305, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/reconverge_reversed_fold.mmd]": 0.003871791996061802, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/right_entry_from_above.mmd]": 0.0007145833224058151, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/right_entry_from_above_far.mmd]": 0.0006564988289028406, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/right_entry_gap_above_empty_row.mmd]": 0.0007689159829169512, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/right_entry_wrap_no_fan.mmd]": 0.0006496659480035305, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/rl_entry_runway.mmd]": 0.0008567501790821552, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/rnaseq_lite.mmd]": 0.0024184579961001873, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/route_around_intervening.mmd]": 0.0011231680400669575, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/section_diamond.mmd]": 0.0030847080051898956, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/self_crossing_bridge.mmd]": 0.0033859992399811745, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/shared_sink_parallel.mmd]": 0.007349500199779868, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/single_section.mmd]": 0.0005500009283423424, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/stacked_left_exit_drop.mmd]": 0.0006772920023649931, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/stacked_lr_serpentine.mmd]": 0.001146333059296012, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0014513342175632715, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006720831152051687, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0012197918258607388, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0011911678593605757, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_column_continuation_two_lines.mmd]": 0.0008078338578343391, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_convergence_straight_drop.mmd]": 0.0004720841534435749, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_internal_diagonal.mmd]": 0.0049882922321558, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_left_exit_step.mmd]": 0.0017302511259913445, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_lr_exit_left.mmd]": 0.0011088738683611155, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_lr_exit_right.mmd]": 0.0018036679830402136, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_passthrough_continuation.mmd]": 0.0008857501670718193, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_passthrough_trunk.mmd]": 0.0011120839044451714, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006467492785304785, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_right_entry_stack.mmd]": 0.0012470411602407694, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_trunk_through_fan.mmd]": 0.0018275417387485504, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/tb_two_line_vert_seam.mmd]": 0.0010029161348938942, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/terminal_symmetric_fan.mmd]": 0.0015659581404179335, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/terminus_join.mmd]": 0.0014541668351739645, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/top_entry_header_clash.mmd]": 0.0027922079898416996, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/trunk_through_fan.mmd]": 0.004503248725086451, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/twoline_fanout_up.mmd]": 0.0011690410319715738, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/u_turn_fold.mmd]": 0.0069412910379469395, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/uneven_diamond.mmd]": 0.0006601661443710327, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/upward_bypass.mmd]": 0.006084500113502145, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/variant_calling.mmd]": 0.0063268328085541725, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/wide_fan_in.mmd]": 0.002503999974578619, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/wide_fan_out.mmd]": 0.0015437921974807978, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/wide_label_fan.mmd]": 0.0005387931596487761, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[topologies/wrapped_label_trunk.mmd]": 0.0022318761330097914, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[trunk_align_matching_bundle.mmd]": 0.0030484991148114204, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[uneven_diamond.mmd]": 0.0014420000370591879, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[variant_calling.mmd]": 0.0018086661584675312, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[variant_calling_tuned.mmd]": 0.0020314601715654135, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[variantbenchmarking.mmd]": 0.008124749176204205, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[variantbenchmarking_auto.mmd]": 0.005155874881893396, + "tests/test_layout_invariants.py::test_no_line_folds_back_over_its_track[variantprioritization.mmd]": 0.004841750953346491, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[bubble_forced_label_clears_diagonal.mmd]": 0.0008646261412650347, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[bubble_label_clears_diagonal.mmd]": 0.0007859591860324144, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[bubble_output_above.mmd]": 0.0007776250131428242, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[captioned_sibling_outputs.mmd]": 0.0007102906238287687, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[centered_tracks.mmd]": 0.001606042729690671, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[cross_track_interchange.mmd]": 0.0022655408829450607, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[da_pipeline.mmd]": 0.0320261656306684, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[diagonal_labels.mmd]": 0.006291041849181056, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[diagonal_single_trunk_off_track.mmd]": 0.010027250042185187, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[differentialabundance.mmd]": 0.031599540961906314, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[differentialabundance_default.mmd]": 0.11949137388728559, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[directional_flow.mmd]": 0.0012842509895563126, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[disconnected_components.mmd]": 0.0018644998781383038, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[epitopeprediction.mmd]": 0.022159582702443004, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[file_icon_fanin.mmd]": 0.0032930411398410797, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[file_icons.mmd]": 0.0048262078780680895, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[font_scale.mmd]": 0.0008192502427846193, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[genomeassembly.mmd]": 0.006067999871447682, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[genomeassembly_organellar.mmd]": 0.01828420883975923, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[genomeassembly_staggered.mmd]": 0.012882959097623825, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[genomic_pipeline.mmd]": 0.04764283308759332, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[group_labels.mmd]": 0.001231666887179017, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/01_minimal.mmd]": 0.002426957944408059, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/02_sections.mmd]": 0.004718875978142023, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/03_fan_out.mmd]": 0.008059917017817497, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/03b_fan_in_merge.mmd]": 0.006958666956052184, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/04_directions.mmd]": 0.0025950828567147255, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/05_file_icons.mmd]": 0.0011288751848042011, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/05b_multi_icons.mmd]": 0.0012819997500628233, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/05c_files_icon.mmd]": 0.0031844160985201597, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/05d_folder_icon.mmd]": 0.0035205830354243517, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/05f_banner_labels.mmd]": 0.0023956659715622663, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/06a_without_hidden.mmd]": 0.0049108341336250305, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[guide/06b_with_hidden.mmd]": 0.005998542299494147, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[hlatyping.mmd]": 0.0025172901805490255, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[icon_caption_wrap.mmd]": 0.004790541948750615, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[leaf_file_icon_on_trunk.mmd]": 0.0009587099775671959, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[legend_combo.mmd]": 0.001049458747729659, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[legend_logo_placement.mmd]": 0.002264124806970358, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[longread_variant_calling.mmd]": 0.013610540889203548, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[marker_styles.mmd]": 0.0015539999585598707, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[multiline_labels.mmd]": 0.0012774590868502855, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[off_track_output_branched.mmd]": 0.0010614991188049316, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[off_track_outputs.mmd]": 0.001069291029125452, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[off_track_outputs_along_trunk.mmd]": 0.001205333974212408, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[rnaseq_auto.mmd]": 0.022021417040377855, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[rnaseq_sections.mmd]": 0.039948416873812675, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[rnaseq_sections_manual.mmd]": 0.05085116601549089, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[rnaseq_simple.mmd]": 0.003939290996640921, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[simple_pipeline.mmd]": 0.0009266238193958998, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[tb_file_termini.mmd]": 0.001326792174950242, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[tb_right_exit_feeder_slots.mmd]": 0.002511541824787855, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/aligner_row_pinned_continuation.mmd]": 0.006613041739910841, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/around_below_ep_col_gt0.mmd]": 0.0016743338201195002, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/around_section_below.mmd]": 0.003223417093977332, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/asymmetric_tree.mmd]": 0.006092998664826155, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0019955821335315704, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/branch_fold_forward.mmd]": 0.002389791887253523, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/branch_fold_stability.mmd]": 0.0029289990197867155, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bt_chain.mmd]": 0.0006377510726451874, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bt_exit_top_above.mmd]": 0.005486707901582122, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bt_exit_top_above_2line.mmd]": 0.004526040982455015, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bt_fork.mmd]": 0.000647915992885828, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bt_perp_entry_below.mmd]": 0.0035890827421098948, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bt_to_lr.mmd]": 0.0014180827420204878, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bt_to_tb.mmd]": 0.0009579169563949108, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bundle_terminator_continuation.mmd]": 0.0005944590084254742, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_fan_in_outer_slot.mmd]": 0.013182417023926973, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0031593339517712593, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_label_rake.mmd]": 0.002019542036578059, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_label_rake_left.mmd]": 0.0019101249054074287, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_label_rake_wide.mmd]": 0.004469334147870541, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_leftward_far_side_entry.mmd]": 0.0027455000672489405, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_leftward_overflow.mmd]": 0.002808084012940526, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/bypass_v_tight.mmd]": 0.0012485827319324017, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/clear_channel_target_aware_push.mmd]": 0.0018307489808648825, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/compact_gap_peer_conflict.mmd]": 0.0016917497850954533, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/compact_hidden_passthrough.mmd]": 0.001292291795834899, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/complex_multipath.mmd]": 0.013500957982614636, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/convergence_stacked_sink.mmd]": 0.006359457969665527, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/convergent_offrow_exit_climb.mmd]": 0.03672641725279391, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/corridor_narrow_gap_fallback.mmd]": 0.0018052079249173403, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/cross_col_top_entry.mmd]": 0.0008880840614438057, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/cross_column_perp_drop.mmd]": 0.0009814572986215353, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0008995418902486563, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/cross_row_gap_wrap.mmd]": 0.008915500016883016, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/deep_linear.mmd]": 0.01472399989143014, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/disjoint_sameline_trunks.mmd]": 0.0075269590597599745, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/divergent_fanout_split.mmd]": 0.0023017090279608965, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/dogleg_exempt_distinct.mmd]": 0.002182417083531618, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/dogleg_exempt_sameline.mmd]": 0.0013809578958898783, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/dogleg_twoline_fanout.mmd]": 0.0017495830543339252, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/exit_corner_offset_dogleg.mmd]": 0.0021875828970223665, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/fan_bypass_nesting.mmd]": 0.003969000885263085, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/fan_in_merge.mmd]": 0.005229792091995478, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/fold_double.mmd]": 0.007431168109178543, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/fold_fan_across.mmd]": 0.017068458255380392, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/fold_stacked_branch.mmd]": 0.022315999725833535, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/funcprofiler_upstream.mmd]": 0.013376957969740033, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/header_nudge.mmd]": 0.0010065841488540173, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/header_side_rotated.mmd]": 0.0008790420833975077, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/inrow_skip_breeze.mmd]": 0.0006975829601287842, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/inter_row_wrap_clearance.mmd]": 0.0014264159835875034, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/interchange_lane_reorder.mmd]": 0.00113679189234972, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/junction_entry_align.mmd]": 0.0032740000169724226, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/junction_entry_collision.mmd]": 0.0025940830819308758, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/junction_entry_reversed_fold.mmd]": 0.0019287499599158764, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/junction_fanout_convergence.mmd]": 0.016828540712594986, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/left_entry_up_wrap.mmd]": 0.0012172497808933258, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/left_exit_sink_below.mmd]": 0.0016514579765498638, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.001301000127568841, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.002752083819359541, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0017322089988738298, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.003926208941265941, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0012778749223798513, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_to_tb_top_cross_col.mmd]": 0.0011373749002814293, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_to_tb_top_drop.mmd]": 0.0007687911856919527, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0009145417716354132, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0008115412201732397, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_to_tb_top_two_lines.mmd]": 0.001120750093832612, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_top_entry_cross_column.mmd]": 0.0010672491043806076, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.004403459839522839, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_around_below_leftmost.mmd]": 0.005410999758169055, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_bottom_row_bypass.mmd]": 0.004400040954351425, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_leftmost_sink_branch.mmd]": 0.0021675010211765766, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_offrow_continuation.mmd]": 0.001942874165251851, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_port_above_approach.mmd]": 0.001604708144441247, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_pullaway.mmd]": 0.0018904581665992737, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_right_entry.mmd]": 0.0017501667607575655, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_trunk_out_of_range_section.mmd]": 0.0020279590971767902, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/merge_trunk_over_low_section.mmd]": 0.00578216603025794, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/mismatched_tracks.mmd]": 0.004509791964665055, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/mixed_bundle_column.mmd]": 0.00479825004003942, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/mixed_port_sides.mmd]": 0.0014000420924276114, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/multi_input_convergence.mmd]": 0.0092615419998765, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/multi_line_bundle.mmd]": 0.0024415007792413235, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0030613322742283344, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/near_vertical_junction_hook.mmd]": 0.0028420421294867992, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/off_track_convergence.mmd]": 0.0013818750157952309, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/off_track_convergence_multiline.mmd]": 0.00925437523983419, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/off_track_input_above_consumer.mmd]": 0.009058373747393489, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/parallel_independent.mmd]": 0.0021435010712593794, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/peeloff_extra_line_consumer.mmd]": 0.0029022078961133957, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/peeloff_riser_respace.mmd]": 0.0025186247657984495, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/post_convergence_trunk.mmd]": 0.000716501148417592, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/reconverge_reversed_fold.mmd]": 0.010866456665098667, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/right_entry_from_above.mmd]": 0.0009714991319924593, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/right_entry_from_above_far.mmd]": 0.0008814989123493433, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/right_entry_gap_above_empty_row.mmd]": 0.001028458122164011, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/right_entry_wrap_no_fan.mmd]": 0.0008439170196652412, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/rl_entry_runway.mmd]": 0.004271042067557573, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/rnaseq_lite.mmd]": 0.008870624704286456, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/route_around_intervening.mmd]": 0.0016995829064399004, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/section_diamond.mmd]": 0.0031444579362869263, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/self_crossing_bridge.mmd]": 0.0031472500413656235, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/shared_sink_parallel.mmd]": 0.003798041958361864, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/single_section.mmd]": 0.0010126237757503986, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/stacked_left_exit_drop.mmd]": 0.0009036248084157705, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/stacked_lr_serpentine.mmd]": 0.00158250005915761, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0026726671494543552, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_bottom_entry_flow_start.mmd]": 0.00139262480661273, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0015282100066542625, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.003616581903770566, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_column_continuation_two_lines.mmd]": 0.001107499934732914, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_convergence_straight_drop.mmd]": 0.005189459305256605, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_internal_diagonal.mmd]": 0.0031019998714327812, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_left_exit_step.mmd]": 0.002569040982052684, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_lr_exit_left.mmd]": 0.0035680842120200396, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_lr_exit_right.mmd]": 0.0015155838336795568, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_passthrough_continuation.mmd]": 0.0010899577755481005, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_passthrough_trunk.mmd]": 0.0014607931952923536, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0008090012706816196, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_right_entry_stack.mmd]": 0.0014801251236349344, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_trunk_through_fan.mmd]": 0.0006115422584116459, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/tb_two_line_vert_seam.mmd]": 0.0010062498040497303, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/terminal_symmetric_fan.mmd]": 0.0010843349155038595, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/terminus_join.mmd]": 0.0005277921445667744, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/top_entry_header_clash.mmd]": 0.008884457871317863, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/trunk_through_fan.mmd]": 0.0017786240205168724, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/twoline_fanout_up.mmd]": 0.009211583295837045, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/u_turn_fold.mmd]": 0.006569667020812631, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/uneven_diamond.mmd]": 0.002492290921509266, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/upward_bypass.mmd]": 0.01080354186706245, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/variant_calling.mmd]": 0.01004483294673264, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/wide_fan_in.mmd]": 0.010815748944878578, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/wide_fan_out.mmd]": 0.006061166990548372, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/wide_label_fan.mmd]": 0.001109082018956542, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[topologies/wrapped_label_trunk.mmd]": 0.0012373747304081917, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[trunk_align_matching_bundle.mmd]": 0.0014829158317297697, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[uneven_diamond.mmd]": 0.002009417163208127, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[variant_calling.mmd]": 0.002401291858404875, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[variant_calling_tuned.mmd]": 0.0029653338715434074, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[variantbenchmarking.mmd]": 0.04538437514565885, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[variantbenchmarking_auto.mmd]": 0.03693395829759538, + "tests/test_layout_invariants.py::test_no_line_strikes_through_label[variantprioritization.mmd]": 0.0061777092050760984, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[cross_track_interchange.mmd]": 0.0013412907719612122, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[da_pipeline.mmd]": 0.01354145910590887, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[diagonal_labels.mmd]": 0.0017555831000208855, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[diagonal_single_trunk_off_track.mmd]": 0.004175875103101134, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[differentialabundance.mmd]": 0.011725541902706027, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[differentialabundance_default.mmd]": 0.01333762495778501, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[disconnected_components.mmd]": 0.002949749818071723, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[epitopeprediction.mmd]": 0.005550624802708626, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[file_icon_fanin.mmd]": 0.0015771249309182167, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[file_icons.mmd]": 0.0008363339584320784, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[genomeassembly.mmd]": 0.0030855839140713215, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[genomeassembly_organellar.mmd]": 0.007550291251391172, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[genomeassembly_staggered.mmd]": 0.003015583148226142, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[genomic_pipeline.mmd]": 0.011570957023650408, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[group_labels.mmd]": 0.0008724159561097622, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/02_sections.mmd]": 0.0010342502500861883, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/03_fan_out.mmd]": 0.0018294998444616795, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/03b_fan_in_merge.mmd]": 0.005138457985594869, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/04_directions.mmd]": 0.0042517080437392, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/05_file_icons.mmd]": 0.0010280839633196592, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/05b_multi_icons.mmd]": 0.0011738338507711887, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/05c_files_icon.mmd]": 0.003446124726906419, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/05d_folder_icon.mmd]": 0.0026912500616163015, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/05f_banner_labels.mmd]": 0.0024122917093336582, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/06a_without_hidden.mmd]": 0.002780499868094921, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[guide/06b_with_hidden.mmd]": 0.001365085132420063, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[hlatyping.mmd]": 0.004130541114136577, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[legend_logo_placement.mmd]": 0.008765667909756303, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[longread_variant_calling.mmd]": 0.009699416812509298, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[marker_styles.mmd]": 0.002204541116952896, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[multiline_labels.mmd]": 0.0008788749109953642, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[regressions/stacked_collector_fanin.mmd]": 0.012431124923750758, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[rnaseq_auto.mmd]": 0.01122754206880927, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[rnaseq_sections.mmd]": 0.016040666960179806, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[rnaseq_sections_manual.mmd]": 0.01648916699923575, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[tb_file_termini.mmd]": 0.0010843342170119286, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[tb_right_exit_feeder_slots.mmd]": 0.005034624831750989, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/aligner_row_pinned_continuation.mmd]": 0.0019710420165210962, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/around_below_ep_col_gt0.mmd]": 0.0012436248362064362, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/around_section_below.mmd]": 0.0012935837730765343, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/asymmetric_tree.mmd]": 0.0022469169925898314, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bottom_row_climb_clear_corridor.mmd]": 0.001472958829253912, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/branch_fold_forward.mmd]": 0.01091295899823308, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/branch_fold_stability.mmd]": 0.0014901671092957258, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bt_exit_top_above.mmd]": 0.002087540924549103, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bt_exit_top_above_2line.mmd]": 0.0026579168625175953, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bt_perp_entry_below.mmd]": 0.0008389169815927744, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bt_to_lr.mmd]": 0.0008647509384900331, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bt_to_tb.mmd]": 0.0011994997039437294, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_fan_in_outer_slot.mmd]": 0.009610291803255677, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_gap2_rightward_overflow.mmd]": 0.003526916028931737, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_label_rake.mmd]": 0.0057479990646243095, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_label_rake_left.mmd]": 0.0016088751144707203, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_label_rake_wide.mmd]": 0.001285626320168376, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017942499835044146, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_leftward_overflow.mmd]": 0.004322083899751306, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/bypass_v_tight.mmd]": 0.001284583006054163, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/clear_channel_target_aware_push.mmd]": 0.0012311667669564486, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/compact_gap_peer_conflict.mmd]": 0.0012010831851512194, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/compact_hidden_passthrough.mmd]": 0.001000500051304698, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/complex_multipath.mmd]": 0.0028869169764220715, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/convergence_stacked_sink.mmd]": 0.0020182509906589985, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/convergent_offrow_exit_climb.mmd]": 0.0071422087494283915, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/corridor_narrow_gap_fallback.mmd]": 0.0024643326178193092, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/cross_col_top_entry.mmd]": 0.0007760832086205482, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/cross_column_perp_drop.mmd]": 0.0007472499273717403, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007028328254818916, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/cross_row_gap_wrap.mmd]": 0.0016913330182433128, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/deep_linear.mmd]": 0.0023334592115134, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/disjoint_sameline_trunks.mmd]": 0.002342415973544121, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/divergent_fanout_split.mmd]": 0.0010084169916808605, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/dogleg_exempt_distinct.mmd]": 0.0013410411775112152, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/dogleg_exempt_sameline.mmd]": 0.0019958328921347857, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/dogleg_twoline_fanout.mmd]": 0.0013855828437954187, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/exit_corner_offset_dogleg.mmd]": 0.0013796249404549599, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/fan_bypass_nesting.mmd]": 0.0025817081332206726, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/fan_in_merge.mmd]": 0.0019278742838650942, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/fold_double.mmd]": 0.004275499144569039, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/fold_fan_across.mmd]": 0.0038162092678248882, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/fold_stacked_branch.mmd]": 0.0038918338250368834, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/funcprofiler_upstream.mmd]": 0.01114079193212092, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/header_nudge.mmd]": 0.00809966609813273, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/header_side_rotated.mmd]": 0.002734083216637373, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/inter_row_wrap_clearance.mmd]": 0.0012914577964693308, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/junction_entry_align.mmd]": 0.0020116667728871107, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/junction_entry_collision.mmd]": 0.005155749851837754, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/junction_entry_reversed_fold.mmd]": 0.004813374951481819, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/junction_fanout_convergence.mmd]": 0.001437583938241005, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/left_entry_up_wrap.mmd]": 0.0009163352660834789, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/left_exit_sink_below.mmd]": 0.0013428337406367064, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0010498752817511559, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0010204999707639217, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.001029707957059145, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.001046209130436182, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_perp_top_exit_side_entry.mmd]": 0.001003542449325323, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_to_tb_top_cross_col.mmd]": 0.0009195837192237377, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_to_tb_top_drop.mmd]": 0.000650458037853241, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.004282790934666991, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0007794166449457407, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_to_tb_top_two_lines.mmd]": 0.0008585418108850718, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_top_entry_cross_column.mmd]": 0.002946041291579604, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0022208320442587137, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_around_below_leftmost.mmd]": 0.0034366659820079803, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_bottom_row_bypass.mmd]": 0.0017628329806029797, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_leftmost_sink_branch.mmd]": 0.0017228326760232449, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_offrow_continuation.mmd]": 0.0014834990724921227, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_port_above_approach.mmd]": 0.0012545830104500055, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_pullaway.mmd]": 0.0014897477813065052, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_right_entry.mmd]": 0.0014449579175561666, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_trunk_out_of_range_section.mmd]": 0.0024598329328000546, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/merge_trunk_over_low_section.mmd]": 0.005150041077286005, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/mismatched_tracks.mmd]": 0.001345291966572404, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/mixed_bundle_column.mmd]": 0.0026485840789973736, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/mixed_port_sides.mmd]": 0.0010614171624183655, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/multi_input_convergence.mmd]": 0.001099499873816967, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/multi_line_bundle.mmd]": 0.00692666694521904, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0018935829866677523, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/near_vertical_junction_hook.mmd]": 0.0012555827852338552, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/off_track_convergence.mmd]": 0.001302666962146759, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/off_track_convergence_multiline.mmd]": 0.0028722079005092382, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/off_track_input_above_consumer.mmd]": 0.005479625193402171, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/parallel_independent.mmd]": 0.002236790955066681, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/peeloff_extra_line_consumer.mmd]": 0.0031204991973936558, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/peeloff_riser_respace.mmd]": 0.0037094159051775932, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/reconverge_reversed_fold.mmd]": 0.02626433433033526, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/right_entry_from_above.mmd]": 0.0035811259876936674, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/right_entry_from_above_far.mmd]": 0.002637332770973444, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/right_entry_gap_above_empty_row.mmd]": 0.0017257079016417265, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/right_entry_wrap_no_fan.mmd]": 0.003194000106304884, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/rl_entry_runway.mmd]": 0.0013603328261524439, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/rnaseq_lite.mmd]": 0.00862462492659688, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/route_around_intervening.mmd]": 0.001372707774862647, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/section_diamond.mmd]": 0.0014924579299986362, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/self_crossing_bridge.mmd]": 0.0010413341224193573, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/shared_sink_parallel.mmd]": 0.005475749960169196, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/stacked_left_exit_drop.mmd]": 0.000773624749854207, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/stacked_lr_serpentine.mmd]": 0.0012194989249110222, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_bottom_entry_flow_start.mmd]": 0.0007067490369081497, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0011888768058270216, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0022995849139988422, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_column_continuation_two_lines.mmd]": 0.0008353330194950104, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_internal_diagonal.mmd]": 0.0009292073082178831, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_left_exit_step.mmd]": 0.00770041486248374, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_lr_exit_left.mmd]": 0.0020653328392654657, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_lr_exit_right.mmd]": 0.0012788320891559124, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_passthrough_trunk.mmd]": 0.0010366672649979591, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006924581248313189, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_right_entry_stack.mmd]": 0.0012041251175105572, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/tb_two_line_vert_seam.mmd]": 0.0008993328083306551, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/terminal_symmetric_fan.mmd]": 0.002482958836480975, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/top_entry_header_clash.mmd]": 0.000778665766119957, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/trunk_through_fan.mmd]": 0.0016158740036189556, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/twoline_fanout_up.mmd]": 0.0012269159778952599, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/u_turn_fold.mmd]": 0.002931375987827778, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/upward_bypass.mmd]": 0.0031382902525365353, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/variant_calling.mmd]": 0.008672333089634776, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/wide_fan_in.mmd]": 0.003589916741475463, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[topologies/wide_fan_out.mmd]": 0.0030064580496400595, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[trunk_align_matching_bundle.mmd]": 0.0011069171596318483, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[variant_calling.mmd]": 0.004839790984988213, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[variant_calling_tuned.mmd]": 0.004585666116327047, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[variantbenchmarking.mmd]": 0.015673000132665038, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[variantbenchmarking_auto.mmd]": 0.010417707962915301, + "tests/test_layout_invariants.py::test_no_route_passes_through_unrelated_section[variantprioritization.mmd]": 0.002255416940897703, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[bubble_forced_label_clears_diagonal.mmd]": 0.004692249931395054, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[bubble_label_clears_diagonal.mmd]": 0.005184291861951351, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[bubble_output_above.mmd]": 0.0010189579334110022, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[captioned_sibling_outputs.mmd]": 0.00630991579964757, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[centered_tracks.mmd]": 0.0015257499180734158, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[cross_track_interchange.mmd]": 0.0013809162192046642, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[da_pipeline.mmd]": 0.008330206852406263, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[diagonal_labels.mmd]": 0.012572291074320674, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[diagonal_single_trunk_off_track.mmd]": 0.0019523752853274345, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[differentialabundance.mmd]": 0.0052759170066565275, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[differentialabundance_default.mmd]": 0.00887404102832079, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[directional_flow.mmd]": 0.0013569570146501064, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[disconnected_components.mmd]": 0.0010935419704765081, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[epitopeprediction.mmd]": 0.0023088762536644936, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[file_icon_fanin.mmd]": 0.0015640419442206621, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[file_icons.mmd]": 0.001161125022917986, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[font_scale.mmd]": 0.0005980001296848059, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[genomeassembly.mmd]": 0.003456957871094346, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[genomeassembly_organellar.mmd]": 0.0033631247933954, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[genomeassembly_staggered.mmd]": 0.0047430412378162146, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[genomic_pipeline.mmd]": 0.010826582787558436, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[group_labels.mmd]": 0.003251125104725361, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/01_minimal.mmd]": 0.0005347090773284435, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/02_sections.mmd]": 0.0020048771984875202, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/03_fan_out.mmd]": 0.002062251092866063, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/03b_fan_in_merge.mmd]": 0.0019934980664402246, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/04_directions.mmd]": 0.0017808338161557913, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/05_file_icons.mmd]": 0.0032098330557346344, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/05b_multi_icons.mmd]": 0.0020882089156657457, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/05c_files_icon.mmd]": 0.0010379161685705185, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/05d_folder_icon.mmd]": 0.0023958340752869844, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/05f_banner_labels.mmd]": 0.0027789161540567875, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/06a_without_hidden.mmd]": 0.0013722078874707222, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[guide/06b_with_hidden.mmd]": 0.0012824167497456074, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[hlatyping.mmd]": 0.0026867499109357595, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[icon_caption_wrap.mmd]": 0.0004758741706609726, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[leaf_file_icon_on_trunk.mmd]": 0.0005719589535146952, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[legend_combo.mmd]": 0.0006149171385914087, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[legend_logo_placement.mmd]": 0.003942916868254542, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[longread_variant_calling.mmd]": 0.0073720840737223625, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[marker_styles.mmd]": 0.0014213339891284704, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[multiline_labels.mmd]": 0.0007755011320114136, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[off_track_output_branched.mmd]": 0.0006075832061469555, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[off_track_outputs.mmd]": 0.006654042052105069, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[off_track_outputs_along_trunk.mmd]": 0.000580082880333066, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[rnaseq_auto.mmd]": 0.016276707872748375, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[rnaseq_sections.mmd]": 0.01809170818887651, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[rnaseq_sections_manual.mmd]": 0.008294916013255715, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[rnaseq_simple.mmd]": 0.0005774158053100109, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[simple_pipeline.mmd]": 0.0018820010591298342, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[tb_file_termini.mmd]": 0.0015791668556630611, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[tb_right_exit_feeder_slots.mmd]": 0.0017974590882658958, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/aligner_row_pinned_continuation.mmd]": 0.005361958872526884, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/around_below_ep_col_gt0.mmd]": 0.0012860838323831558, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/around_section_below.mmd]": 0.001144876005128026, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/asymmetric_tree.mmd]": 0.0019725847523659468, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0013770842924714088, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/branch_fold_forward.mmd]": 0.004390417132526636, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/branch_fold_stability.mmd]": 0.001482957974076271, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bt_chain.mmd]": 0.0005038331728428602, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bt_exit_top_above.mmd]": 0.0013521250803023577, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bt_exit_top_above_2line.mmd]": 0.0008470839820802212, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bt_fork.mmd]": 0.0005565832834690809, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bt_perp_entry_below.mmd]": 0.0007109579164534807, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bt_to_lr.mmd]": 0.0007612910121679306, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bt_to_tb.mmd]": 0.0007527510169893503, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bundle_terminator_continuation.mmd]": 0.0004664161242544651, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_fan_in_outer_slot.mmd]": 0.0067543750628829, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002506498945876956, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_label_rake.mmd]": 0.004031582968309522, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_label_rake_left.mmd]": 0.003835459239780903, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_label_rake_wide.mmd]": 0.002960626035928726, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_leftward_far_side_entry.mmd]": 0.0024690828286111355, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_leftward_overflow.mmd]": 0.005503166001290083, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/bypass_v_tight.mmd]": 0.0010208329185843468, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/clear_channel_target_aware_push.mmd]": 0.0011636673007160425, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/compact_gap_peer_conflict.mmd]": 0.0029835416935384274, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/compact_hidden_passthrough.mmd]": 0.0010351240634918213, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/complex_multipath.mmd]": 0.002711291890591383, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/convergence_stacked_sink.mmd]": 0.0029328330419957638, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/convergent_offrow_exit_climb.mmd]": 0.004709250060841441, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/corridor_narrow_gap_fallback.mmd]": 0.0011803328525274992, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/cross_col_top_entry.mmd]": 0.0006677072960883379, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/cross_column_perp_drop.mmd]": 0.0006802091374993324, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0015827077440917492, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/cross_row_gap_wrap.mmd]": 0.0020771250128746033, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/deep_linear.mmd]": 0.0024757911451160908, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/disjoint_sameline_trunks.mmd]": 0.0072572079952806234, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/divergent_fanout_split.mmd]": 0.004736624658107758, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/dogleg_exempt_distinct.mmd]": 0.0031693747732788324, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/dogleg_exempt_sameline.mmd]": 0.0021426239982247353, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/dogleg_twoline_fanout.mmd]": 0.006055790930986404, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/exit_corner_offset_dogleg.mmd]": 0.004023166140541434, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/fan_bypass_nesting.mmd]": 0.002980458317324519, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/fan_in_merge.mmd]": 0.004143584053963423, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/fold_double.mmd]": 0.009671458043158054, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/fold_fan_across.mmd]": 0.007827708031982183, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/fold_stacked_branch.mmd]": 0.0036155832931399345, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/funcprofiler_upstream.mmd]": 0.004007792100310326, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/header_nudge.mmd]": 0.0008118338882923126, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/header_side_rotated.mmd]": 0.00438174931332469, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/inrow_skip_breeze.mmd]": 0.0006362502463161945, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/inter_row_wrap_clearance.mmd]": 0.0014228338841348886, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/interchange_lane_reorder.mmd]": 0.0007249168120324612, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/junction_entry_align.mmd]": 0.001937959110364318, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/junction_entry_collision.mmd]": 0.0016419999301433563, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/junction_entry_reversed_fold.mmd]": 0.0014167509507387877, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/junction_fanout_convergence.mmd]": 0.0011717502493411303, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/left_entry_up_wrap.mmd]": 0.0008424159605056047, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/left_exit_sink_below.mmd]": 0.005420207977294922, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.003607792081311345, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.001404833048582077, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0035662506707012653, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0019229170866310596, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0027983752079308033, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_to_tb_top_cross_col.mmd]": 0.0032834159210324287, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_to_tb_top_drop.mmd]": 0.0008642089087516069, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.004142542136833072, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0009560841135680676, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_to_tb_top_two_lines.mmd]": 0.0056768748909235, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_top_entry_cross_column.mmd]": 0.0007437493186444044, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007895829621702433, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_around_below_leftmost.mmd]": 0.001482333056628704, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_bottom_row_bypass.mmd]": 0.001467833062633872, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_leftmost_sink_branch.mmd]": 0.001424458809196949, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_offrow_continuation.mmd]": 0.0010835840366780758, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_port_above_approach.mmd]": 0.0010855000000447035, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_pullaway.mmd]": 0.0023432078305631876, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_right_entry.mmd]": 0.00443533412180841, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_trunk_out_of_range_section.mmd]": 0.00802641618065536, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/merge_trunk_over_low_section.mmd]": 0.003059541806578636, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/mismatched_tracks.mmd]": 0.0012594161089509726, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/mixed_bundle_column.mmd]": 0.0020067929290235043, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/mixed_port_sides.mmd]": 0.001163167180493474, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/multi_input_convergence.mmd]": 0.0016405419446527958, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/multi_line_bundle.mmd]": 0.0024913751985877752, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0014107497408986092, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/near_vertical_junction_hook.mmd]": 0.001363375224173069, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/off_track_convergence.mmd]": 0.001137792132794857, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/off_track_convergence_multiline.mmd]": 0.0012255001347512007, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/off_track_input_above_consumer.mmd]": 0.003809917951002717, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/parallel_independent.mmd]": 0.005738458829000592, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/peeloff_extra_line_consumer.mmd]": 0.005738916806876659, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/peeloff_riser_respace.mmd]": 0.001874708104878664, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/post_convergence_trunk.mmd]": 0.0005931239575147629, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/reconverge_reversed_fold.mmd]": 0.007047499995678663, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/right_entry_from_above.mmd]": 0.00129370903596282, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/right_entry_from_above_far.mmd]": 0.0011978752445429564, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/right_entry_gap_above_empty_row.mmd]": 0.0020931242033839226, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/right_entry_wrap_no_fan.mmd]": 0.0011341660283505917, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/rl_entry_runway.mmd]": 0.0009094590786844492, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/rnaseq_lite.mmd]": 0.002326082903891802, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/route_around_intervening.mmd]": 0.0011234171688556671, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/section_diamond.mmd]": 0.013518207240849733, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/self_crossing_bridge.mmd]": 0.005887666950002313, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/shared_sink_parallel.mmd]": 0.0054252492263913155, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/single_section.mmd]": 0.0004993327893316746, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/stacked_left_exit_drop.mmd]": 0.0006655419711023569, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/stacked_lr_serpentine.mmd]": 0.0010890420526266098, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0013451660051941872, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_bottom_entry_flow_start.mmd]": 0.000648916931822896, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001167207257822156, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.001158958999440074, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_column_continuation_two_lines.mmd]": 0.0007171237375587225, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_convergence_straight_drop.mmd]": 0.0006755839567631483, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_internal_diagonal.mmd]": 0.0012796251103281975, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_left_exit_step.mmd]": 0.004026292823255062, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_lr_exit_left.mmd]": 0.0011294998694211245, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_lr_exit_right.mmd]": 0.0013196240179240704, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_passthrough_continuation.mmd]": 0.000633167801424861, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_passthrough_trunk.mmd]": 0.0010316669940948486, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_perp_exit_side_neighbour.mmd]": 0.000716168200597167, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_right_entry_stack.mmd]": 0.00267791748046875, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_trunk_through_fan.mmd]": 0.0005569581408053637, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/tb_two_line_vert_seam.mmd]": 0.0009653749875724316, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/terminal_symmetric_fan.mmd]": 0.0008302500937134027, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/terminus_join.mmd]": 0.0004259580746293068, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/top_entry_header_clash.mmd]": 0.000734373927116394, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/trunk_through_fan.mmd]": 0.0011429169680923223, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/twoline_fanout_up.mmd]": 0.002007707953453064, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/u_turn_fold.mmd]": 0.002584165893495083, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/uneven_diamond.mmd]": 0.0005874999333173037, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/upward_bypass.mmd]": 0.010971166891977191, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/variant_calling.mmd]": 0.003420917084440589, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/wide_fan_in.mmd]": 0.0013232494238764048, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/wide_fan_out.mmd]": 0.0030969588551670313, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/wide_label_fan.mmd]": 0.0012109170202165842, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[topologies/wrapped_label_trunk.mmd]": 0.0006923747714608908, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[trunk_align_matching_bundle.mmd]": 0.0022300840355455875, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[uneven_diamond.mmd]": 0.0015672910958528519, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[variant_calling.mmd]": 0.0015480422880500555, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[variant_calling_tuned.mmd]": 0.0032164999283850193, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[variantbenchmarking.mmd]": 0.0063891669269651175, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[variantbenchmarking_auto.mmd]": 0.007108917227014899, + "tests/test_layout_invariants.py::test_no_stacked_elbow_graze[variantprioritization.mmd]": 0.0044476662296801805, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[bubble_forced_label_clears_diagonal.mmd]": 0.0005620410665869713, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[bubble_label_clears_diagonal.mmd]": 0.0052639576606452465, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[bubble_output_above.mmd]": 0.0005378741770982742, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[captioned_sibling_outputs.mmd]": 0.0004702918231487274, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[centered_tracks.mmd]": 0.0009755818173289299, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[cross_track_interchange.mmd]": 0.0012545010540634394, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[da_pipeline.mmd]": 0.01086541567929089, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[diagonal_labels.mmd]": 0.0017038332298398018, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[diagonal_single_trunk_off_track.mmd]": 0.001202290877699852, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[differentialabundance.mmd]": 0.004834500141441822, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[differentialabundance_default.mmd]": 0.0023152499925345182, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[directional_flow.mmd]": 0.000800624955445528, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[disconnected_components.mmd]": 0.0012512910179793835, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[epitopeprediction.mmd]": 0.0014287512749433517, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[file_icon_fanin.mmd]": 0.0009590417612344027, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[file_icons.mmd]": 0.0006382081191986799, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[font_scale.mmd]": 0.0004672908689826727, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[genomeassembly.mmd]": 0.003991584060713649, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[genomeassembly_organellar.mmd]": 0.001627625897526741, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[genomeassembly_staggered.mmd]": 0.00254424917511642, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[genomic_pipeline.mmd]": 0.007317041978240013, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[group_labels.mmd]": 0.000717958202585578, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/01_minimal.mmd]": 0.0013182489201426506, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/02_sections.mmd]": 0.0014105841983109713, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/03_fan_out.mmd]": 0.0011613331735134125, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/03b_fan_in_merge.mmd]": 0.0010487500112503767, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/04_directions.mmd]": 0.001487499801442027, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/05_file_icons.mmd]": 0.0008016659412533045, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/05b_multi_icons.mmd]": 0.0007291669026017189, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/05c_files_icon.mmd]": 0.0032567912712693214, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/05d_folder_icon.mmd]": 0.0007272090297192335, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/05f_banner_labels.mmd]": 0.0007259158883243799, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/06a_without_hidden.mmd]": 0.0008949991315603256, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[guide/06b_with_hidden.mmd]": 0.0008824171964079142, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[hlatyping.mmd]": 0.0011481670662760735, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[icon_caption_wrap.mmd]": 0.00037229200825095177, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[leaf_file_icon_on_trunk.mmd]": 0.0005970001220703125, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[legend_combo.mmd]": 0.003700542263686657, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[legend_logo_placement.mmd]": 0.001244792016223073, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[longread_variant_calling.mmd]": 0.0022623748518526554, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[marker_styles.mmd]": 0.000753084197640419, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[multiline_labels.mmd]": 0.000722167082130909, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[off_track_output_branched.mmd]": 0.0005177909042686224, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[off_track_outputs.mmd]": 0.0005591658409684896, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[off_track_outputs_along_trunk.mmd]": 0.0004922091029584408, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[rnaseq_auto.mmd]": 0.0021383760031312704, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[rnaseq_sections.mmd]": 0.0029992081690579653, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[rnaseq_sections_manual.mmd]": 0.0029728750232607126, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[rnaseq_simple.mmd]": 0.00036949990317225456, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[simple_pipeline.mmd]": 0.0004269590135663748, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[tb_file_termini.mmd]": 0.0007004169747233391, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[tb_right_exit_feeder_slots.mmd]": 0.008782333927229047, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/aligner_row_pinned_continuation.mmd]": 0.0014067080337554216, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/around_below_ep_col_gt0.mmd]": 0.0008170839864760637, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/around_section_below.mmd]": 0.0008401661179959774, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/asymmetric_tree.mmd]": 0.0015174169093370438, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0010828741360455751, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/branch_fold_forward.mmd]": 0.0011208748910576105, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/branch_fold_stability.mmd]": 0.0009148339740931988, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bt_chain.mmd]": 0.00038233306258916855, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bt_exit_top_above.mmd]": 0.00051837507635355, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bt_exit_top_above_2line.mmd]": 0.0005573329981416464, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bt_fork.mmd]": 0.001976083032786846, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bt_perp_entry_below.mmd]": 0.0006497928407043219, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bt_to_lr.mmd]": 0.0006090837996453047, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bt_to_tb.mmd]": 0.001806834014132619, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bundle_terminator_continuation.mmd]": 0.0004620018880814314, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_fan_in_outer_slot.mmd]": 0.0023591239005327225, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0011369590647518635, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_label_rake.mmd]": 0.0009995000436902046, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_label_rake_left.mmd]": 0.0009310832247138023, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_label_rake_wide.mmd]": 0.0010003331117331982, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_leftward_far_side_entry.mmd]": 0.0009557507000863552, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_leftward_overflow.mmd]": 0.0009023339953273535, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/bypass_v_tight.mmd]": 0.0013700013514608145, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/clear_channel_target_aware_push.mmd]": 0.0009621668141335249, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/compact_gap_peer_conflict.mmd]": 0.0011339171323925257, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/compact_hidden_passthrough.mmd]": 0.0007857899181544781, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/complex_multipath.mmd]": 0.0016638748347759247, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/convergence_stacked_sink.mmd]": 0.0012536668218672276, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/convergent_offrow_exit_climb.mmd]": 0.0022929992992430925, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/corridor_narrow_gap_fallback.mmd]": 0.0007397911977022886, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/cross_col_top_entry.mmd]": 0.0005220002494752407, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/cross_column_perp_drop.mmd]": 0.0005512500647455454, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0005243332125246525, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/cross_row_gap_wrap.mmd]": 0.0010891668498516083, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/deep_linear.mmd]": 0.02361170807853341, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/disjoint_sameline_trunks.mmd]": 0.0011936246883124113, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/divergent_fanout_split.mmd]": 0.0007777491118758917, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/dogleg_exempt_distinct.mmd]": 0.0008834160398691893, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/dogleg_exempt_sameline.mmd]": 0.0007760003209114075, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/dogleg_twoline_fanout.mmd]": 0.000783249968662858, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/exit_corner_offset_dogleg.mmd]": 0.0008492497727274895, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/fan_bypass_nesting.mmd]": 0.0026422920636832714, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/fan_in_merge.mmd]": 0.0014639587607234716, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/fold_double.mmd]": 0.0032475001644343138, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/fold_fan_across.mmd]": 0.0023121677804738283, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/fold_stacked_branch.mmd]": 0.00230458308942616, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/funcprofiler_upstream.mmd]": 0.0033556248527020216, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/header_nudge.mmd]": 0.002230917103588581, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/header_side_rotated.mmd]": 0.0007527912966907024, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/inrow_skip_breeze.mmd]": 0.0004755840636789799, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/inter_row_wrap_clearance.mmd]": 0.0023319160100072622, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/interchange_lane_reorder.mmd]": 0.0006142901256680489, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/junction_entry_align.mmd]": 0.0012498339638113976, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/junction_entry_collision.mmd]": 0.0010019990149885416, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/junction_entry_reversed_fold.mmd]": 0.0008738331962376833, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/junction_fanout_convergence.mmd]": 0.0007407502271234989, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/left_entry_up_wrap.mmd]": 0.008883958216756582, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/left_exit_sink_below.mmd]": 0.0010955410543829203, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.000957125099375844, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0010022488422691822, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0008054159115999937, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0007799172308295965, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0007460834458470345, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_to_tb_top_cross_col.mmd]": 0.0006664171814918518, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_to_tb_top_drop.mmd]": 0.0009377507958561182, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0012840828858315945, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0005387919954955578, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005736250896006823, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_top_entry_cross_column.mmd]": 0.0005973749794065952, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007143740076571703, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_around_below_leftmost.mmd]": 0.000958458986133337, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_bottom_row_bypass.mmd]": 0.0021350421011447906, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_leftmost_sink_branch.mmd]": 0.012445874977856874, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_offrow_continuation.mmd]": 0.0017896259669214487, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_port_above_approach.mmd]": 0.0008957916870713234, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_pullaway.mmd]": 0.0009439999703317881, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_right_entry.mmd]": 0.0009207497350871563, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_trunk_out_of_range_section.mmd]": 0.001010415842756629, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/merge_trunk_over_low_section.mmd]": 0.0010936253238469362, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/mismatched_tracks.mmd]": 0.0008589590433984995, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/mixed_bundle_column.mmd]": 0.0015379588585346937, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/mixed_port_sides.mmd]": 0.002476333873346448, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/multi_input_convergence.mmd]": 0.0013677089009433985, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/multi_line_bundle.mmd]": 0.0029076249338686466, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/multicarrier_offrow_exit_climb.mmd]": 0.001833916874602437, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/near_vertical_junction_hook.mmd]": 0.0011419150978326797, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/off_track_convergence.mmd]": 0.0008025839924812317, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/off_track_convergence_multiline.mmd]": 0.0009127494413405657, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/off_track_input_above_consumer.mmd]": 0.002490915823727846, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/parallel_independent.mmd]": 0.002035581972450018, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/peeloff_extra_line_consumer.mmd]": 0.0009639589115977287, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/peeloff_riser_respace.mmd]": 0.0008632498793303967, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/post_convergence_trunk.mmd]": 0.0004643350839614868, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/reconverge_reversed_fold.mmd]": 0.00550395785830915, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/right_entry_from_above.mmd]": 0.000981791177764535, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/right_entry_from_above_far.mmd]": 0.0006345000583678484, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006686670240014791, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/right_entry_wrap_no_fan.mmd]": 0.0005699582397937775, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/rl_entry_runway.mmd]": 0.0007322102319449186, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/rnaseq_lite.mmd]": 0.0019382080063223839, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/route_around_intervening.mmd]": 0.0009008347988128662, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/section_diamond.mmd]": 0.0010178328957408667, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/self_crossing_bridge.mmd]": 0.0007675830274820328, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/shared_sink_parallel.mmd]": 0.0014034169726073742, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/single_section.mmd]": 0.00041987630538642406, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/stacked_left_exit_drop.mmd]": 0.0005504158325493336, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/stacked_lr_serpentine.mmd]": 0.0036769590806216, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0015235841274261475, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_bottom_entry_flow_start.mmd]": 0.0010204568970948458, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.002439541043713689, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0008672920521348715, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_column_continuation_two_lines.mmd]": 0.000580082880333066, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_convergence_straight_drop.mmd]": 0.0004040419589728117, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_internal_diagonal.mmd]": 0.0006089168600738049, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_left_exit_step.mmd]": 0.0009492919780313969, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_lr_exit_left.mmd]": 0.0007424589712172747, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_lr_exit_right.mmd]": 0.0007226238958537579, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_passthrough_continuation.mmd]": 0.0037143349181860685, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_passthrough_trunk.mmd]": 0.0008507079910486937, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006447490304708481, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_right_entry_stack.mmd]": 0.0008047088049352169, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_trunk_through_fan.mmd]": 0.0004291236400604248, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/tb_two_line_vert_seam.mmd]": 0.0005802488885819912, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/terminal_symmetric_fan.mmd]": 0.0008410830050706863, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/terminus_join.mmd]": 0.000757541973143816, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/top_entry_header_clash.mmd]": 0.0009528330992907286, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/trunk_through_fan.mmd]": 0.0017344588413834572, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/twoline_fanout_up.mmd]": 0.0007685008458793163, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/u_turn_fold.mmd]": 0.002057415898889303, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/uneven_diamond.mmd]": 0.00045345816761255264, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/upward_bypass.mmd]": 0.0012895420659333467, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/variant_calling.mmd]": 0.005189333809539676, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/wide_fan_in.mmd]": 0.003056582761928439, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/wide_fan_out.mmd]": 0.0011614582035690546, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/wide_label_fan.mmd]": 0.0008585830219089985, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[topologies/wrapped_label_trunk.mmd]": 0.0005518330726772547, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[trunk_align_matching_bundle.mmd]": 0.0008682080078870058, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[uneven_diamond.mmd]": 0.00046741683036088943, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[variant_calling.mmd]": 0.0009426658507436514, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[variant_calling_tuned.mmd]": 0.0039029999170452356, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[variantbenchmarking.mmd]": 0.016669583972543478, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[variantbenchmarking_auto.mmd]": 0.0027949160430580378, + "tests/test_layout_invariants.py::test_no_station_or_icon_overlap[variantprioritization.mmd]": 0.03274770802818239, + "tests/test_layout_invariants.py::test_non_consumed_lines_route_via_virtual_station[da_pipeline.mmd]": 0.00521937501616776, + "tests/test_layout_invariants.py::test_off_track_consumer_on_section_trunk[topologies/off_track_convergence.mmd]": 0.0006993338465690613, + "tests/test_layout_invariants.py::test_off_track_consumer_on_section_trunk[topologies/off_track_convergence_multiline.mmd]": 0.0007309990469366312, + "tests/test_layout_invariants.py::test_off_track_consumer_on_section_trunk[topologies/off_track_input_above_consumer.mmd]": 0.003294625086709857, + "tests/test_layout_invariants.py::test_off_track_fit_top_clamps_to_content_above_band": 0.0021814177744090557, + "tests/test_layout_invariants.py::test_off_track_fit_top_clamps_to_non_top_port": 0.004549791105091572, + "tests/test_layout_invariants.py::test_off_track_icons_ordered_by_consumer_y[differentialabundance.mmd]": 0.0018010011408478022, + "tests/test_layout_invariants.py::test_off_track_icons_ordered_by_consumer_y[differentialabundance_default.mmd]": 0.0018842490389943123, + "tests/test_layout_invariants.py::test_off_track_input_column_stack_guard_catches_over_lift": 0.0026010002475231886, + "tests/test_layout_invariants.py::test_off_track_input_lift_matches_column_stack_depth[da_pipeline.mmd]": 0.004140749806538224, + "tests/test_layout_invariants.py::test_off_track_input_lift_matches_column_stack_depth[differentialabundance.mmd]": 0.005536332726478577, + "tests/test_layout_invariants.py::test_off_track_input_lift_matches_column_stack_depth[differentialabundance_default.mmd]": 0.004155500326305628, + "tests/test_layout_invariants.py::test_off_track_input_lift_matches_column_stack_depth[topologies/off_track_convergence.mmd]": 0.0007904998492449522, + "tests/test_layout_invariants.py::test_off_track_input_lift_matches_column_stack_depth[topologies/off_track_convergence_multiline.mmd]": 0.0007805419154465199, + "tests/test_layout_invariants.py::test_off_track_input_lift_matches_column_stack_depth[topologies/off_track_input_above_consumer.mmd]": 0.0022097909823060036, + "tests/test_layout_invariants.py::test_off_track_inputs_above_consumer[da_pipeline.mmd]": 0.004392500966787338, + "tests/test_layout_invariants.py::test_off_track_inputs_above_consumer[differentialabundance.mmd]": 0.0019458737224340439, + "tests/test_layout_invariants.py::test_off_track_inputs_above_consumer[differentialabundance_default.mmd]": 0.013337000040337443, + "tests/test_layout_invariants.py::test_off_track_inputs_above_consumer[topologies/off_track_convergence.mmd]": 0.003824082901701331, + "tests/test_layout_invariants.py::test_off_track_inputs_above_consumer[topologies/off_track_convergence_multiline.mmd]": 0.0008589162025600672, + "tests/test_layout_invariants.py::test_off_track_inputs_above_consumer[topologies/off_track_input_above_consumer.mmd]": 0.0018264157697558403, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[bubble_forced_label_clears_diagonal.mmd]": 0.0026478751096874475, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[bubble_label_clears_diagonal.mmd]": 0.002229708945378661, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[bubble_output_above.mmd]": 0.0008935411460697651, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[captioned_sibling_outputs.mmd]": 0.0007382910698652267, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[da_pipeline.mmd]": 0.002201208844780922, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[diagonal_single_trunk_off_track.mmd]": 0.0034669998567551374, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[differentialabundance.mmd]": 0.00604858179576695, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[differentialabundance_default.mmd]": 0.005973665742203593, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[off_track_output_branched.mmd]": 0.0010819588787853718, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[off_track_outputs.mmd]": 0.006025749957188964, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[off_track_outputs_along_trunk.mmd]": 0.001264417078346014, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[topologies/off_track_convergence.mmd]": 0.0010809989180415869, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[topologies/off_track_convergence_multiline.mmd]": 0.0016907500103116035, + "tests/test_layout_invariants.py::test_off_track_output_clears_station_labels[topologies/off_track_input_above_consumer.mmd]": 0.006817250978201628, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[bubble_forced_label_clears_diagonal.mmd]": 0.004289708798751235, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[bubble_label_clears_diagonal.mmd]": 0.0008383740205317736, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[bubble_output_above.mmd]": 0.0004202499985694885, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[captioned_sibling_outputs.mmd]": 0.0005530407652258873, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[diagonal_single_trunk_off_track.mmd]": 0.0010092081502079964, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[off_track_output_branched.mmd]": 0.0004602898843586445, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[off_track_outputs.mmd]": 0.0009772502817213535, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[off_track_outputs_along_trunk.mmd]": 0.0006830429192632437, + "tests/test_layout_invariants.py::test_off_track_output_icon_clears_on_track_markers[topologies/off_track_input_above_consumer.mmd]": 0.005775165744125843, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[bubble_forced_label_clears_diagonal.mmd]": 0.0005188332870602608, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[bubble_label_clears_diagonal.mmd]": 0.00046783406287431717, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[bubble_output_above.mmd]": 0.0005281670019030571, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[captioned_sibling_outputs.mmd]": 0.001081584021449089, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[da_pipeline.mmd]": 0.003311208914965391, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[diagonal_single_trunk_off_track.mmd]": 0.001036540837958455, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[differentialabundance.mmd]": 0.006533252075314522, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[differentialabundance_default.mmd]": 0.008843291085213423, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[off_track_output_branched.mmd]": 0.0011800408829003572, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[off_track_outputs.mmd]": 0.006080834195017815, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[off_track_outputs_along_trunk.mmd]": 0.0006148337852209806, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[topologies/off_track_convergence.mmd]": 0.010341750225052238, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[topologies/off_track_convergence_multiline.mmd]": 0.0011176259722560644, + "tests/test_layout_invariants.py::test_off_track_output_icons_do_not_overlap[topologies/off_track_input_above_consumer.mmd]": 0.012717498932033777, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[bubble_forced_label_clears_diagonal.mmd]": 0.011880374746397138, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[bubble_label_clears_diagonal.mmd]": 0.0011510418262332678, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[bubble_output_above.mmd]": 0.0030826241709291935, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[captioned_sibling_outputs.mmd]": 0.0012316671200096607, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[diagonal_single_trunk_off_track.mmd]": 0.0038089181762188673, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[off_track_output_branched.mmd]": 0.0019324999302625656, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[off_track_outputs.mmd]": 0.0007740000728517771, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[off_track_outputs_along_trunk.mmd]": 0.0015965001657605171, + "tests/test_layout_invariants.py::test_off_track_output_route_clears_non_producer_markers[topologies/off_track_input_above_consumer.mmd]": 0.016951582860201597, + "tests/test_layout_invariants.py::test_off_track_output_route_guard_catches_a_crossing": 0.003038667840883136, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[bubble_forced_label_clears_diagonal.mmd]": 0.0006249998696148396, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[bubble_label_clears_diagonal.mmd]": 0.0005962508730590343, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[bubble_output_above.mmd]": 0.000554374884814024, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[captioned_sibling_outputs.mmd]": 0.0005514565855264664, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[diagonal_single_trunk_off_track.mmd]": 0.0017318329773843288, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[off_track_output_branched.mmd]": 0.0006289992015808821, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[off_track_outputs.mmd]": 0.0022363760508596897, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[off_track_outputs_along_trunk.mmd]": 0.001355332089588046, + "tests/test_layout_invariants.py::test_off_track_output_routes_share_flat_tail[topologies/off_track_input_above_consumer.mmd]": 0.0038749577943235636, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[bubble_forced_label_clears_diagonal.mmd]": 0.0012189161498099566, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[bubble_label_clears_diagonal.mmd]": 0.0014132079668343067, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[bubble_output_above.mmd]": 0.000757250003516674, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[captioned_sibling_outputs.mmd]": 0.0005979989655315876, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[diagonal_single_trunk_off_track.mmd]": 0.0026794574223458767, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[off_track_outputs.mmd]": 0.0005438737571239471, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[off_track_outputs_along_trunk.mmd]": 0.000633415998890996, + "tests/test_layout_invariants.py::test_off_track_outputs_above_and_adjacent_to_producer[topologies/off_track_input_above_consumer.mmd]": 0.0026254162658005953, + "tests/test_layout_invariants.py::test_off_track_outputs_below_downward_branch_producer[off_track_output_branched.mmd]": 0.000592667143791914, + "tests/test_layout_invariants.py::test_off_track_outputs_below_downward_branch_producer[off_track_outputs.mmd]": 0.0005160833243280649, + "tests/test_layout_invariants.py::test_off_track_placeholder_does_not_displace_on_track_rows": 0.0019260419066995382, + "tests/test_layout_invariants.py::test_opposite_direction_trunks_on_separate_bands[longread_variant_calling.mmd]": 0.00523808435536921, + "tests/test_layout_invariants.py::test_opposite_direction_trunks_on_separate_bands[topologies/convergence_stacked_sink.mmd]": 0.0021800410468131304, + "tests/test_layout_invariants.py::test_pack_band_tracks_no_reserved_gaps[spans0-expected0]": 0.0010510829742997885, + "tests/test_layout_invariants.py::test_pack_band_tracks_no_reserved_gaps[spans1-expected1]": 0.0008163340389728546, + "tests/test_layout_invariants.py::test_pack_band_tracks_no_reserved_gaps[spans2-expected2]": 0.00025270809419453144, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[da_pipeline.mmd]": 0.009704041294753551, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[differentialabundance.mmd]": 0.0034387907944619656, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[differentialabundance_default.mmd]": 0.00759679195471108, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[genomeassembly.mmd]": 0.001627124845981598, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[genomeassembly_organellar.mmd]": 0.0030731249134987593, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[genomeassembly_staggered.mmd]": 0.0015176248271018267, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[genomic_pipeline.mmd]": 0.0031080422922968864, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[topologies/compact_hidden_passthrough.mmd]": 0.0019566668197512627, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[topologies/funcprofiler_upstream.mmd]": 0.0016870421823114157, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[variantbenchmarking.mmd]": 0.007022041827440262, + "tests/test_layout_invariants.py::test_partial_fan_branch_has_no_offset_gap[variantbenchmarking_auto.mmd]": 0.004891334101557732, + "tests/test_layout_invariants.py::test_peeloff_concentric_runtime_guard[topologies/peeloff_extra_line_consumer.mmd]": 0.004075833363458514, + "tests/test_layout_invariants.py::test_peeloff_concentric_runtime_guard[topologies/peeloff_riser_respace.mmd]": 0.009051375091075897, + "tests/test_layout_invariants.py::test_peeloff_riser_crossing_free_extra_line_consumer": 0.002144584199413657, + "tests/test_layout_invariants.py::test_peeloff_riser_keeps_bundle_order": 0.0037213752511888742, + "tests/test_layout_invariants.py::test_perp_entry_boundary_check_detects_cusp": 0.00020941486582159996, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[cross_track_interchange.mmd]": 0.0024335419293493032, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[da_pipeline.mmd]": 0.008772458881139755, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[diagonal_labels.mmd]": 0.0036879999097436666, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[diagonal_single_trunk_off_track.mmd]": 0.0038855408784002066, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[differentialabundance.mmd]": 0.005365123739466071, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[differentialabundance_default.mmd]": 0.007137208245694637, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[disconnected_components.mmd]": 0.0010966660920530558, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[epitopeprediction.mmd]": 0.0020203329622745514, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[file_icon_fanin.mmd]": 0.002565333852544427, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[file_icons.mmd]": 0.0007822080515325069, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[genomeassembly.mmd]": 0.0034639579243957996, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[genomeassembly_organellar.mmd]": 0.006623958935961127, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[genomeassembly_staggered.mmd]": 0.0026490839663892984, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[genomic_pipeline.mmd]": 0.018281042808666825, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[group_labels.mmd]": 0.0032877919729799032, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/02_sections.mmd]": 0.0011627499479800463, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/03_fan_out.mmd]": 0.0018076247069984674, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/03b_fan_in_merge.mmd]": 0.013160625007003546, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/04_directions.mmd]": 0.006494834087789059, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/05_file_icons.mmd]": 0.0014838329516351223, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/05b_multi_icons.mmd]": 0.002114625182002783, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/05c_files_icon.mmd]": 0.0008750820998102427, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/05d_folder_icon.mmd]": 0.0013458752073347569, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/05f_banner_labels.mmd]": 0.007121416972950101, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/06a_without_hidden.mmd]": 0.0015413740184158087, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[guide/06b_with_hidden.mmd]": 0.0012526661157608032, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[hlatyping.mmd]": 0.0029800410848110914, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[legend_logo_placement.mmd]": 0.002171874977648258, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[longread_variant_calling.mmd]": 0.016992375953122973, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[marker_styles.mmd]": 0.003917542053386569, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[multiline_labels.mmd]": 0.0008644997142255306, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[rnaseq_auto.mmd]": 0.007129333447664976, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[rnaseq_sections.mmd]": 0.00820374977774918, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[rnaseq_sections_manual.mmd]": 0.005603374447673559, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[tb_file_termini.mmd]": 0.0019815408159047365, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[tb_right_exit_feeder_slots.mmd]": 0.0016645409632474184, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/aligner_row_pinned_continuation.mmd]": 0.0050219998229295015, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/around_below_ep_col_gt0.mmd]": 0.0030125838238745928, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/around_section_below.mmd]": 0.0012513331603258848, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/asymmetric_tree.mmd]": 0.0027517909184098244, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0015160832554101944, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/branch_fold_forward.mmd]": 0.0015191258862614632, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/branch_fold_stability.mmd]": 0.03419325011782348, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bt_exit_top_above.mmd]": 0.0009457918349653482, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bt_exit_top_above_2line.mmd]": 0.02533249999396503, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bt_perp_entry_below.mmd]": 0.0020380408968776464, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bt_to_lr.mmd]": 0.0008279990870505571, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bt_to_tb.mmd]": 0.0008038750384002924, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_fan_in_outer_slot.mmd]": 0.0034965830855071545, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0027305842377245426, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_label_rake.mmd]": 0.001316166017204523, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_label_rake_left.mmd]": 0.0012352089397609234, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_label_rake_wide.mmd]": 0.001244499348104, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017393340822309256, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_leftward_overflow.mmd]": 0.013643791200593114, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/bypass_v_tight.mmd]": 0.004695541923865676, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/clear_channel_target_aware_push.mmd]": 0.005606957711279392, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/compact_gap_peer_conflict.mmd]": 0.004541374277323484, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/compact_hidden_passthrough.mmd]": 0.0010972919408231974, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/complex_multipath.mmd]": 0.0027468742337077856, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/convergence_stacked_sink.mmd]": 0.0019244160503149033, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/convergent_offrow_exit_climb.mmd]": 0.00461029214784503, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/corridor_narrow_gap_fallback.mmd]": 0.0012019171845167875, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/cross_col_top_entry.mmd]": 0.0006937501020729542, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/cross_column_perp_drop.mmd]": 0.0023960417602211237, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007876669988036156, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/cross_row_gap_wrap.mmd]": 0.0016383340116590261, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/deep_linear.mmd]": 0.0021825830917805433, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/disjoint_sameline_trunks.mmd]": 0.002119084121659398, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/divergent_fanout_split.mmd]": 0.0009562501218169928, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/dogleg_exempt_distinct.mmd]": 0.0012796251103281975, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/dogleg_exempt_sameline.mmd]": 0.00522799976170063, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/dogleg_twoline_fanout.mmd]": 0.0020173334050923586, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/exit_corner_offset_dogleg.mmd]": 0.0021038337145000696, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/fan_bypass_nesting.mmd]": 0.003448458155617118, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/fan_in_merge.mmd]": 0.0028503339271992445, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/fold_double.mmd]": 0.004816125147044659, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/fold_fan_across.mmd]": 0.0034883329644799232, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/fold_stacked_branch.mmd]": 0.00349333300255239, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/funcprofiler_upstream.mmd]": 0.004941873950883746, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/header_nudge.mmd]": 0.0012107077054679394, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/header_side_rotated.mmd]": 0.000768749974668026, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/inter_row_wrap_clearance.mmd]": 0.002783584175631404, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/junction_entry_align.mmd]": 0.009926459053531289, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/junction_entry_collision.mmd]": 0.008724123938009143, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/junction_entry_reversed_fold.mmd]": 0.0029674156103283167, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/junction_fanout_convergence.mmd]": 0.001356584019958973, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/left_entry_up_wrap.mmd]": 0.0008821252267807722, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/left_exit_sink_below.mmd]": 0.0012365002185106277, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0010407501831650734, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0009928331710398197, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0023525841534137726, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0028426239732652903, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0014376670587807894, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_to_tb_top_cross_col.mmd]": 0.0011008339934051037, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_to_tb_top_drop.mmd]": 0.0007049997802823782, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008022086694836617, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_to_tb_top_near_vertical.mmd]": 0.006504708901047707, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_to_tb_top_two_lines.mmd]": 0.0020676248241215944, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_top_entry_cross_column.mmd]": 0.0007322921883314848, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007859168108552694, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_around_below_leftmost.mmd]": 0.0014642078895121813, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_bottom_row_bypass.mmd]": 0.0031822090968489647, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_leftmost_sink_branch.mmd]": 0.010704917134717107, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_offrow_continuation.mmd]": 0.0011586258187890053, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_port_above_approach.mmd]": 0.001113874139264226, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_pullaway.mmd]": 0.0013792498502880335, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_right_entry.mmd]": 0.002597459126263857, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_trunk_out_of_range_section.mmd]": 0.001907584024593234, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/merge_trunk_over_low_section.mmd]": 0.0018535007257014513, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/mismatched_tracks.mmd]": 0.013097541173920035, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/mixed_bundle_column.mmd]": 0.002419418189674616, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/mixed_port_sides.mmd]": 0.0011958752293139696, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/multi_input_convergence.mmd]": 0.001273083034902811, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/multi_line_bundle.mmd]": 0.002024041023105383, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0014220429584383965, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/near_vertical_junction_hook.mmd]": 0.08219795697368681, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/off_track_convergence.mmd]": 0.004529125755652785, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/off_track_convergence_multiline.mmd]": 0.0014318348839879036, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/off_track_input_above_consumer.mmd]": 0.038748416816815734, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/parallel_independent.mmd]": 0.0010735427495092154, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/peeloff_extra_line_consumer.mmd]": 0.0032762920018285513, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/peeloff_riser_respace.mmd]": 0.009959623916074634, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/reconverge_reversed_fold.mmd]": 0.004440708085894585, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/right_entry_from_above.mmd]": 0.0007546672131866217, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/right_entry_from_above_far.mmd]": 0.0006814161315560341, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/right_entry_gap_above_empty_row.mmd]": 0.0007758319843560457, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/right_entry_wrap_no_fan.mmd]": 0.0006659568753093481, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/rl_entry_runway.mmd]": 0.0038180011324584484, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/rnaseq_lite.mmd]": 0.005230708280578256, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/route_around_intervening.mmd]": 0.0019275001250207424, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/section_diamond.mmd]": 0.0013740828726440668, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/self_crossing_bridge.mmd]": 0.0009878322016447783, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/shared_sink_parallel.mmd]": 0.002657499862834811, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/stacked_left_exit_drop.mmd]": 0.0007152920588850975, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/stacked_lr_serpentine.mmd]": 0.0011277080047875643, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006607489194720984, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001164581859484315, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0011712508276104927, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_column_continuation_two_lines.mmd]": 0.0007512511219829321, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_internal_diagonal.mmd]": 0.0008709991816431284, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_left_exit_step.mmd]": 0.001775749959051609, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_lr_exit_left.mmd]": 0.001049668062478304, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_lr_exit_right.mmd]": 0.00115024927072227, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_passthrough_trunk.mmd]": 0.009447583695873618, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0016269581392407417, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_right_entry_stack.mmd]": 0.004059373866766691, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/tb_two_line_vert_seam.mmd]": 0.0012039169669151306, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/terminal_symmetric_fan.mmd]": 0.0010515430476516485, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/top_entry_header_clash.mmd]": 0.0008457920048385859, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/trunk_through_fan.mmd]": 0.0011818339116871357, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/twoline_fanout_up.mmd]": 0.0010380002204328775, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/u_turn_fold.mmd]": 0.002636874094605446, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/upward_bypass.mmd]": 0.0033567913342267275, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/variant_calling.mmd]": 0.005903249839320779, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/wide_fan_in.mmd]": 0.001937876921147108, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[topologies/wide_fan_out.mmd]": 0.007911375258117914, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[trunk_align_matching_bundle.mmd]": 0.000946874963119626, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[variant_calling.mmd]": 0.0048978328704833984, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[variant_calling_tuned.mmd]": 0.002830041106790304, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[variantbenchmarking.mmd]": 0.009381874930113554, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[variantbenchmarking_auto.mmd]": 0.014540875563398004, + "tests/test_layout_invariants.py::test_perp_entry_boundary_no_lateral_reversal[variantprioritization.mmd]": 0.0062198759987950325, + "tests/test_layout_invariants.py::test_perp_entry_bundle_not_overspread[fold_fan_across.mmd]": 0.004468875005841255, + "tests/test_layout_invariants.py::test_perp_entry_bundle_not_overspread[rnaseq_auto.mmd]": 0.010537499794736505, + "tests/test_layout_invariants.py::test_perp_entry_feed_collinear_guard_detects": 0.0005593330133706331, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[cross_track_interchange.mmd]": 0.0008202078752219677, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[da_pipeline.mmd]": 0.004570165881887078, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[diagonal_labels.mmd]": 0.0009852077346295118, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[diagonal_single_trunk_off_track.mmd]": 0.0009191238787025213, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[differentialabundance.mmd]": 0.0019367500208318233, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[differentialabundance_default.mmd]": 0.001927376026287675, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[disconnected_components.mmd]": 0.0007858339231461287, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[epitopeprediction.mmd]": 0.0011309580877423286, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[file_icon_fanin.mmd]": 0.0007580418605357409, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[file_icons.mmd]": 0.0005776258185505867, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[genomeassembly.mmd]": 0.0013214170467108488, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[genomeassembly_organellar.mmd]": 0.0014084579888731241, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[genomeassembly_staggered.mmd]": 0.0013287500478327274, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[genomic_pipeline.mmd]": 0.0028977920301258564, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[group_labels.mmd]": 0.0006058760918676853, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/02_sections.mmd]": 0.0006368320900946856, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/03_fan_out.mmd]": 0.0009611246641725302, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/03b_fan_in_merge.mmd]": 0.000903833657503128, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/04_directions.mmd]": 0.0010212897323071957, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/05_file_icons.mmd]": 0.0005716669838875532, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/05b_multi_icons.mmd]": 0.0005953325890004635, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/05c_files_icon.mmd]": 0.0005485841538757086, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/05d_folder_icon.mmd]": 0.0005339165218174458, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/05f_banner_labels.mmd]": 0.0005844591651111841, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/06a_without_hidden.mmd]": 0.0007088740821927786, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[guide/06b_with_hidden.mmd]": 0.00785641628317535, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[hlatyping.mmd]": 0.0009091661777347326, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[legend_logo_placement.mmd]": 0.0009235409088432789, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[longread_variant_calling.mmd]": 0.003622958902269602, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[marker_styles.mmd]": 0.002237999811768532, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[multiline_labels.mmd]": 0.0005254170391708612, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[rnaseq_auto.mmd]": 0.001701457891613245, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[rnaseq_sections.mmd]": 0.00392362498678267, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[rnaseq_sections_manual.mmd]": 0.0021993329282850027, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[tb_file_termini.mmd]": 0.0006041261367499828, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[tb_right_exit_feeder_slots.mmd]": 0.002703957725316286, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/aligner_row_pinned_continuation.mmd]": 0.0009962068870663643, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/around_below_ep_col_gt0.mmd]": 0.0040337080135941505, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/around_section_below.mmd]": 0.0007837503217160702, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/asymmetric_tree.mmd]": 0.0018311671447008848, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bottom_row_climb_clear_corridor.mmd]": 0.002020416781306267, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/branch_fold_forward.mmd]": 0.002850916003808379, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/branch_fold_stability.mmd]": 0.0008030002936720848, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bt_exit_top_above.mmd]": 0.0004977497737854719, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bt_exit_top_above_2line.mmd]": 0.0004956251941621304, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bt_perp_entry_below.mmd]": 0.0005699987523257732, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bt_to_lr.mmd]": 0.000514250947162509, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bt_to_tb.mmd]": 0.001183791784569621, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_fan_in_outer_slot.mmd]": 0.0024330001324415207, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0011462499387562275, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_label_rake.mmd]": 0.0007287079934030771, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_label_rake_left.mmd]": 0.0007212501950562, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_label_rake_wide.mmd]": 0.0007115420885384083, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_leftward_far_side_entry.mmd]": 0.000745292054489255, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_leftward_overflow.mmd]": 0.0006585000082850456, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/bypass_v_tight.mmd]": 0.0005821250379085541, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/clear_channel_target_aware_push.mmd]": 0.0006499181035906076, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/compact_gap_peer_conflict.mmd]": 0.0006651671137660742, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/compact_hidden_passthrough.mmd]": 0.0005957488901913166, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/complex_multipath.mmd]": 0.0023872898891568184, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/convergence_stacked_sink.mmd]": 0.002293667057529092, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/convergent_offrow_exit_climb.mmd]": 0.004390916787087917, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/corridor_narrow_gap_fallback.mmd]": 0.0013305838219821453, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/cross_col_top_entry.mmd]": 0.0005578761920332909, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/cross_column_perp_drop.mmd]": 0.0005030001047998667, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/cross_column_perp_drop_far_exit.mmd]": 0.00048133404925465584, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/cross_row_gap_wrap.mmd]": 0.000887333182618022, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/deep_linear.mmd]": 0.0012973339762538671, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/disjoint_sameline_trunks.mmd]": 0.0007886670064181089, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/divergent_fanout_split.mmd]": 0.0005382092203944921, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/dogleg_exempt_distinct.mmd]": 0.0006979999598115683, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/dogleg_exempt_sameline.mmd]": 0.000558875035494566, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/dogleg_twoline_fanout.mmd]": 0.000575333135202527, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/exit_corner_offset_dogleg.mmd]": 0.0006619170308113098, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/fan_bypass_nesting.mmd]": 0.0011192921083420515, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/fan_in_merge.mmd]": 0.000824125250801444, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/fold_double.mmd]": 0.0020104986615478992, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/fold_fan_across.mmd]": 0.001971666933968663, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/fold_stacked_branch.mmd]": 0.0018649159464985132, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/funcprofiler_upstream.mmd]": 0.00119274971075356, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/header_nudge.mmd]": 0.0005371249280869961, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/header_side_rotated.mmd]": 0.0005374990869313478, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/inter_row_wrap_clearance.mmd]": 0.0005876249633729458, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/junction_entry_align.mmd]": 0.0009355002548545599, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/junction_entry_collision.mmd]": 0.0007382498588413, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/junction_entry_reversed_fold.mmd]": 0.0006899181753396988, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/junction_fanout_convergence.mmd]": 0.0005892077460885048, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/left_entry_up_wrap.mmd]": 0.0004662510473281145, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/left_exit_sink_below.mmd]": 0.0015070419758558273, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0016876249574124813, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0007023331709206104, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006404169835150242, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0006010830402374268, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005658748559653759, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005554570816457272, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_to_tb_top_drop.mmd]": 0.00045087398029863834, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0004824581556022167, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_to_tb_top_near_vertical.mmd]": 0.00044966605491936207, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_to_tb_top_two_lines.mmd]": 0.00047787558287382126, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_top_entry_cross_column.mmd]": 0.0005747494287788868, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.00300837610848248, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_around_below_leftmost.mmd]": 0.000801206799224019, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_bottom_row_bypass.mmd]": 0.0007823342457413673, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_leftmost_sink_branch.mmd]": 0.0009009160567075014, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_offrow_continuation.mmd]": 0.0006433750968426466, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_port_above_approach.mmd]": 0.0007063338998705149, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_pullaway.mmd]": 0.0008070832118391991, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_right_entry.mmd]": 0.0008094168733805418, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_trunk_out_of_range_section.mmd]": 0.0008998748380690813, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/merge_trunk_over_low_section.mmd]": 0.0010467092506587505, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/mismatched_tracks.mmd]": 0.0007464168593287468, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/mixed_bundle_column.mmd]": 0.0009633342269808054, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/mixed_port_sides.mmd]": 0.0005853339098393917, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/multi_input_convergence.mmd]": 0.0006368330214172602, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/multi_line_bundle.mmd]": 0.0008396652992814779, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007135828491300344, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/near_vertical_junction_hook.mmd]": 0.0006263758987188339, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/off_track_convergence.mmd]": 0.0006391259375959635, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/off_track_convergence_multiline.mmd]": 0.0007062503136694431, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/off_track_input_above_consumer.mmd]": 0.001686041010543704, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/parallel_independent.mmd]": 0.0006305009592324495, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/peeloff_extra_line_consumer.mmd]": 0.0006577090825885534, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/peeloff_riser_respace.mmd]": 0.0006319591775536537, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/reconverge_reversed_fold.mmd]": 0.001715291989967227, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/right_entry_from_above.mmd]": 0.00043925107456743717, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/right_entry_from_above_far.mmd]": 0.0004463321529328823, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005011670291423798, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/right_entry_wrap_no_fan.mmd]": 0.0004530409350991249, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/rl_entry_runway.mmd]": 0.0005345407407730818, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/rnaseq_lite.mmd]": 0.0013075012248009443, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/route_around_intervening.mmd]": 0.0006435422692447901, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/section_diamond.mmd]": 0.0007724992465227842, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/self_crossing_bridge.mmd]": 0.0006150829140096903, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/shared_sink_parallel.mmd]": 0.0010168740991503, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/stacked_left_exit_drop.mmd]": 0.0004549585282802582, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/stacked_lr_serpentine.mmd]": 0.0007382908370345831, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_bottom_entry_flow_start.mmd]": 0.000442249933257699, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0005718329921364784, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0006854170933365822, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_column_continuation_two_lines.mmd]": 0.00048391567543148994, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_internal_diagonal.mmd]": 0.00048683304339647293, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_left_exit_step.mmd]": 0.001572666922584176, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_lr_exit_left.mmd]": 0.0006737490184605122, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_lr_exit_right.mmd]": 0.0018638328183442354, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_passthrough_trunk.mmd]": 0.0006624159868806601, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005133759696036577, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_right_entry_stack.mmd]": 0.0006658327765762806, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/tb_two_line_vert_seam.mmd]": 0.0004914170131087303, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/terminal_symmetric_fan.mmd]": 0.0015947921201586723, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/top_entry_header_clash.mmd]": 0.0006929978262633085, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/trunk_through_fan.mmd]": 0.000685832928866148, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/twoline_fanout_up.mmd]": 0.0007459158077836037, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/u_turn_fold.mmd]": 0.001495750853791833, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/upward_bypass.mmd]": 0.0009555432479828596, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/variant_calling.mmd]": 0.001559291034936905, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/wide_fan_in.mmd]": 0.001130416989326477, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[topologies/wide_fan_out.mmd]": 0.0011600409634411335, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[trunk_align_matching_bundle.mmd]": 0.0030980000738054514, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[variant_calling.mmd]": 0.0007872909773141146, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[variant_calling_tuned.mmd]": 0.0008837501518428326, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[variantbenchmarking.mmd]": 0.013928248779848218, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[variantbenchmarking_auto.mmd]": 0.003564374754205346, + "tests/test_layout_invariants.py::test_perp_entry_feed_not_collinear[variantprioritization.mmd]": 0.0033708743285387754, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[bubble_forced_label_clears_diagonal.mmd]": 0.0004561252426356077, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[bubble_label_clears_diagonal.mmd]": 0.000440375879406929, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[bubble_output_above.mmd]": 0.0004116669297218323, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[captioned_sibling_outputs.mmd]": 0.0004035008605569601, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[centered_tracks.mmd]": 0.0004585408605635166, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[cross_track_interchange.mmd]": 0.0007587501313537359, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[da_pipeline.mmd]": 0.0018574998248368502, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[diagonal_labels.mmd]": 0.0008657912258058786, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[diagonal_single_trunk_off_track.mmd]": 0.0008789999410510063, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[differentialabundance.mmd]": 0.0020933758933097124, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[differentialabundance_default.mmd]": 0.001911291154101491, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[directional_flow.mmd]": 0.0004408750683069229, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[disconnected_components.mmd]": 0.0007202909328043461, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[epitopeprediction.mmd]": 0.0010921258945018053, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[file_icon_fanin.mmd]": 0.0007482499349862337, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[file_icons.mmd]": 0.0026678747963160276, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[font_scale.mmd]": 0.0004437072202563286, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[genomeassembly.mmd]": 0.0017190000507980585, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[genomeassembly_organellar.mmd]": 0.0016153750475496054, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[genomeassembly_staggered.mmd]": 0.001262123929336667, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[genomic_pipeline.mmd]": 0.0035364581272006035, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[group_labels.mmd]": 0.0005873749032616615, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/01_minimal.mmd]": 0.0004080419894307852, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/02_sections.mmd]": 0.0016717079561203718, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/03_fan_out.mmd]": 0.0035681258887052536, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/03b_fan_in_merge.mmd]": 0.0019780828151851892, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/04_directions.mmd]": 0.004622584907338023, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/05_file_icons.mmd]": 0.000693456968292594, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/05b_multi_icons.mmd]": 0.001117458799853921, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/05c_files_icon.mmd]": 0.0005622922908514738, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/05d_folder_icon.mmd]": 0.000572999007999897, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/05f_banner_labels.mmd]": 0.0006037908606231213, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/06a_without_hidden.mmd]": 0.0018462501466274261, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[guide/06b_with_hidden.mmd]": 0.0035976250655949116, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[hlatyping.mmd]": 0.0012489988002926111, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[icon_caption_wrap.mmd]": 0.0012933749239891768, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[leaf_file_icon_on_trunk.mmd]": 0.0015970407985150814, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[legend_combo.mmd]": 0.0013191658072173595, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[legend_logo_placement.mmd]": 0.001805249135941267, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[longread_variant_calling.mmd]": 0.002442459110170603, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[marker_styles.mmd]": 0.0007134159095585346, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[multiline_labels.mmd]": 0.0006600001361221075, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[off_track_output_branched.mmd]": 0.0004883760120719671, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[off_track_outputs.mmd]": 0.0005030829925090075, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[off_track_outputs_along_trunk.mmd]": 0.0004862912464886904, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[rnaseq_auto.mmd]": 0.0032545002177357674, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[rnaseq_sections.mmd]": 0.0022565838880836964, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[rnaseq_sections_manual.mmd]": 0.0022931669373065233, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[rnaseq_simple.mmd]": 0.0009088742081075907, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[simple_pipeline.mmd]": 0.0003772501368075609, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[tb_file_termini.mmd]": 0.0006089997477829456, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[tb_right_exit_feeder_slots.mmd]": 0.0007984589319676161, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/aligner_row_pinned_continuation.mmd]": 0.0013445832300931215, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/around_below_ep_col_gt0.mmd]": 0.0006474566180258989, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/around_section_below.mmd]": 0.0006243330426514149, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/asymmetric_tree.mmd]": 0.0013088751584291458, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0009047079365700483, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/branch_fold_forward.mmd]": 0.0009445410687476397, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/branch_fold_stability.mmd]": 0.000796375097706914, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bt_chain.mmd]": 0.0003832080401480198, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bt_exit_top_above.mmd]": 0.0004900421481579542, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bt_exit_top_above_2line.mmd]": 0.0005145829636603594, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bt_fork.mmd]": 0.00039220904000103474, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bt_perp_entry_below.mmd]": 0.0005395419429987669, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bt_to_lr.mmd]": 0.0005320007912814617, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bt_to_tb.mmd]": 0.0004995840135961771, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bundle_terminator_continuation.mmd]": 0.00036004185676574707, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_fan_in_outer_slot.mmd]": 0.0014550411142408848, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0007717078551650047, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_label_rake.mmd]": 0.0007299180142581463, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_label_rake_left.mmd]": 0.0007368337828665972, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_label_rake_wide.mmd]": 0.0007249589543789625, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_leftward_far_side_entry.mmd]": 0.0006855418905615807, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_leftward_overflow.mmd]": 0.0007526248227804899, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/bypass_v_tight.mmd]": 0.0006459169089794159, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/clear_channel_target_aware_push.mmd]": 0.0031975831370800734, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/compact_gap_peer_conflict.mmd]": 0.0036242499481886625, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/compact_hidden_passthrough.mmd]": 0.0006905423942953348, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/complex_multipath.mmd]": 0.001328249927610159, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/convergence_stacked_sink.mmd]": 0.0010435418225824833, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/convergent_offrow_exit_climb.mmd]": 0.0018345010466873646, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006129581015557051, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/cross_col_top_entry.mmd]": 0.0004475829191505909, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/cross_column_perp_drop.mmd]": 0.005152375204488635, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/cross_column_perp_drop_far_exit.mmd]": 0.014374333899468184, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/cross_row_gap_wrap.mmd]": 0.003417917061597109, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/deep_linear.mmd]": 0.001472085015848279, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/disjoint_sameline_trunks.mmd]": 0.0023819170892238617, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/divergent_fanout_split.mmd]": 0.002454084111377597, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/dogleg_exempt_distinct.mmd]": 0.0007181260734796524, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/dogleg_exempt_sameline.mmd]": 0.0005826661363244057, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/dogleg_twoline_fanout.mmd]": 0.0005966247990727425, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/exit_corner_offset_dogleg.mmd]": 0.0006850000936537981, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/fan_bypass_nesting.mmd]": 0.0011582907754927874, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/fan_in_merge.mmd]": 0.0008380408398807049, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/fold_double.mmd]": 0.002169291954487562, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/fold_fan_across.mmd]": 0.008450249210000038, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/fold_stacked_branch.mmd]": 0.0018941671587526798, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/funcprofiler_upstream.mmd]": 0.0012303341645747423, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/header_nudge.mmd]": 0.0005660001188516617, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/header_side_rotated.mmd]": 0.0005758341867476702, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/inrow_skip_breeze.mmd]": 0.0004450420383363962, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/inter_row_wrap_clearance.mmd]": 0.002956292126327753, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/interchange_lane_reorder.mmd]": 0.00816199998371303, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/junction_entry_align.mmd]": 0.0023609581403434277, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/junction_entry_collision.mmd]": 0.0009954168926924467, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/junction_entry_reversed_fold.mmd]": 0.0009248326532542706, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/junction_fanout_convergence.mmd]": 0.001870458945631981, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/left_entry_up_wrap.mmd]": 0.0012949162628501654, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/left_exit_sink_below.mmd]": 0.0018072898965328932, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0050932911690324545, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0007035830058157444, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006637910846620798, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0006432079244405031, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0006107497029006481, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005789580754935741, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_to_tb_top_drop.mmd]": 0.00048399902880191803, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.000503207091242075, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004777500871568918, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_to_tb_top_two_lines.mmd]": 0.0004867089446634054, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_top_entry_cross_column.mmd]": 0.0004478760529309511, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005184570327401161, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_around_below_leftmost.mmd]": 0.0007285820320248604, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_bottom_row_bypass.mmd]": 0.0025548331905156374, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_leftmost_sink_branch.mmd]": 0.0010049999691545963, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_offrow_continuation.mmd]": 0.0007060819771140814, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_port_above_approach.mmd]": 0.000728958984836936, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_pullaway.mmd]": 0.0008126671891659498, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_right_entry.mmd]": 0.0007866250816732645, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_trunk_out_of_range_section.mmd]": 0.0009000420104712248, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/merge_trunk_over_low_section.mmd]": 0.00507095898501575, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/mismatched_tracks.mmd]": 0.0008120830170810223, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/mixed_bundle_column.mmd]": 0.0012924587354063988, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/mixed_port_sides.mmd]": 0.0006338329985737801, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/multi_input_convergence.mmd]": 0.0006674167234450579, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/multi_line_bundle.mmd]": 0.0008704171050339937, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007939580827951431, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/near_vertical_junction_hook.mmd]": 0.0007285831961780787, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/off_track_convergence.mmd]": 0.007524833083152771, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/off_track_convergence_multiline.mmd]": 0.0019363330211490393, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/off_track_input_above_consumer.mmd]": 0.0030576239805668592, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/parallel_independent.mmd]": 0.0007915419992059469, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/peeloff_extra_line_consumer.mmd]": 0.0007778331637382507, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/peeloff_riser_respace.mmd]": 0.0007185840513557196, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/post_convergence_trunk.mmd]": 0.0005160828586667776, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/reconverge_reversed_fold.mmd]": 0.011669709114357829, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/right_entry_from_above.mmd]": 0.0005966660100966692, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/right_entry_from_above_far.mmd]": 0.003240332007408142, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/right_entry_gap_above_empty_row.mmd]": 0.0050662492867559195, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/right_entry_wrap_no_fan.mmd]": 0.0010867088567465544, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/rl_entry_runway.mmd]": 0.013654707930982113, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/rnaseq_lite.mmd]": 0.0014528748579323292, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/route_around_intervening.mmd]": 0.0007153749465942383, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/section_diamond.mmd]": 0.0008252079132944345, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/self_crossing_bridge.mmd]": 0.0006641671061515808, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/shared_sink_parallel.mmd]": 0.0018406251911073923, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/single_section.mmd]": 0.000370292691513896, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/stacked_left_exit_drop.mmd]": 0.0004813750274479389, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/stacked_lr_serpentine.mmd]": 0.0007445421069860458, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.00072470773011446, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_bottom_entry_flow_start.mmd]": 0.0004509999416768551, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0005902920383960009, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007448329124599695, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_column_continuation_two_lines.mmd]": 0.000501581933349371, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_convergence_straight_drop.mmd]": 0.0003560008481144905, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_internal_diagonal.mmd]": 0.0004946659319102764, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_left_exit_step.mmd]": 0.0007673332002013922, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_lr_exit_left.mmd]": 0.0006107077933847904, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_lr_exit_right.mmd]": 0.0006245430558919907, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_passthrough_continuation.mmd]": 0.00041349977254867554, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_passthrough_trunk.mmd]": 0.0005847502034157515, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0004339588340371847, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_right_entry_stack.mmd]": 0.0006348749157041311, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_trunk_through_fan.mmd]": 0.000376333249732852, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/tb_two_line_vert_seam.mmd]": 0.00047400128096342087, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/terminal_symmetric_fan.mmd]": 0.0023056240752339363, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/terminus_join.mmd]": 0.0005455831997096539, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/top_entry_header_clash.mmd]": 0.0028687084559351206, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/trunk_through_fan.mmd]": 0.0008065409492701292, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/twoline_fanout_up.mmd]": 0.0006157488096505404, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/u_turn_fold.mmd]": 0.003810707712545991, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/uneven_diamond.mmd]": 0.0006002499721944332, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/upward_bypass.mmd]": 0.0010710840579122305, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/variant_calling.mmd]": 0.0016544992104172707, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/wide_fan_in.mmd]": 0.0008512500207871199, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/wide_fan_out.mmd]": 0.000875081866979599, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/wide_label_fan.mmd]": 0.0004269997589290142, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[topologies/wrapped_label_trunk.mmd]": 0.000428125262260437, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[trunk_align_matching_bundle.mmd]": 0.0006030839867889881, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[uneven_diamond.mmd]": 0.0003824171144515276, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[variant_calling.mmd]": 0.0007985001429915428, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[variant_calling_tuned.mmd]": 0.0009827509056776762, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[variantbenchmarking.mmd]": 0.004740583943203092, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[variantbenchmarking_auto.mmd]": 0.0027702911756932735, + "tests/test_layout_invariants.py::test_perp_fed_entry_anchored_to_consumer[variantprioritization.mmd]": 0.002918458078056574, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[bubble_forced_label_clears_diagonal.mmd]": 0.00042437505908310413, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[bubble_label_clears_diagonal.mmd]": 0.0004330000374466181, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[bubble_output_above.mmd]": 0.0004087500274181366, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[captioned_sibling_outputs.mmd]": 0.0003835828974843025, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[centered_tracks.mmd]": 0.0005429999437183142, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[cross_track_interchange.mmd]": 0.0014084167778491974, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[da_pipeline.mmd]": 0.001812665956094861, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[diagonal_labels.mmd]": 0.0008905429858714342, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[diagonal_single_trunk_off_track.mmd]": 0.0008951670024544001, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[differentialabundance.mmd]": 0.008377750171348453, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[differentialabundance_default.mmd]": 0.0025763330049812794, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[directional_flow.mmd]": 0.0005249578971415758, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[disconnected_components.mmd]": 0.0007366260979324579, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[epitopeprediction.mmd]": 0.00343333394266665, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[file_icon_fanin.mmd]": 0.0007388328667730093, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[file_icons.mmd]": 0.0009497099090367556, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[font_scale.mmd]": 0.0003874581307172775, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[genomeassembly.mmd]": 0.0013323738239705563, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[genomeassembly_organellar.mmd]": 0.0030144171323627234, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[genomeassembly_staggered.mmd]": 0.0012472090311348438, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[genomic_pipeline.mmd]": 0.002507583936676383, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[group_labels.mmd]": 0.0005462488625198603, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/01_minimal.mmd]": 0.0003773339558392763, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/02_sections.mmd]": 0.0006199160125106573, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/03_fan_out.mmd]": 0.0009172910358756781, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/03b_fan_in_merge.mmd]": 0.000830208184197545, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/04_directions.mmd]": 0.0009088760707527399, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/05_file_icons.mmd]": 0.0005327078979462385, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/05b_multi_icons.mmd]": 0.0005775417666882277, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/05c_files_icon.mmd]": 0.0005281250923871994, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/05d_folder_icon.mmd]": 0.0005290408153086901, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/05f_banner_labels.mmd]": 0.0005581669975072145, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/06a_without_hidden.mmd]": 0.0007067490369081497, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[guide/06b_with_hidden.mmd]": 0.007365874946117401, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[hlatyping.mmd]": 0.0008708327077329159, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[icon_caption_wrap.mmd]": 0.0004141237586736679, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[leaf_file_icon_on_trunk.mmd]": 0.0005020841490477324, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[legend_combo.mmd]": 0.0005989172495901585, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[legend_logo_placement.mmd]": 0.0010279156267642975, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[longread_variant_calling.mmd]": 0.003017707960680127, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[marker_styles.mmd]": 0.0006512918043881655, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[multiline_labels.mmd]": 0.0005269160028547049, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[off_track_output_branched.mmd]": 0.0004256248939782381, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[off_track_outputs.mmd]": 0.0004950407892465591, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[off_track_outputs_along_trunk.mmd]": 0.0004947090055793524, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[rnaseq_auto.mmd]": 0.0016157091595232487, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[rnaseq_sections.mmd]": 0.002195667941123247, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[rnaseq_sections_manual.mmd]": 0.002217707922682166, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[rnaseq_simple.mmd]": 0.0003558751195669174, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[simple_pipeline.mmd]": 0.0005427501164376736, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[tb_file_termini.mmd]": 0.0006558748427778482, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[tb_right_exit_feeder_slots.mmd]": 0.0023076250217854977, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/aligner_row_pinned_continuation.mmd]": 0.0029144170694053173, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/around_below_ep_col_gt0.mmd]": 0.0020635409746319056, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/around_section_below.mmd]": 0.0016209159512072802, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/asymmetric_tree.mmd]": 0.002807459095492959, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bottom_row_climb_clear_corridor.mmd]": 0.002363875973969698, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/branch_fold_forward.mmd]": 0.0018947499338537455, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/branch_fold_stability.mmd]": 0.0008379160426557064, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bt_chain.mmd]": 0.0018735830672085285, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bt_exit_top_above.mmd]": 0.0005208752118051052, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bt_exit_top_above_2line.mmd]": 0.0038035428151488304, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bt_fork.mmd]": 0.0005315002053976059, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bt_perp_entry_below.mmd]": 0.0005112078506499529, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bt_to_lr.mmd]": 0.0005071258638054132, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bt_to_tb.mmd]": 0.0022497500758618116, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bundle_terminator_continuation.mmd]": 0.0004190842155367136, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_fan_in_outer_slot.mmd]": 0.0014357899781316519, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0007714577950537205, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_label_rake.mmd]": 0.0007143740076571703, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_label_rake_left.mmd]": 0.0011781251523643732, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_label_rake_wide.mmd]": 0.0007790001109242439, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_leftward_far_side_entry.mmd]": 0.0007085001561790705, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_leftward_overflow.mmd]": 0.000680666184052825, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/bypass_v_tight.mmd]": 0.0005851658061146736, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/clear_channel_target_aware_push.mmd]": 0.0006605410017073154, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/compact_gap_peer_conflict.mmd]": 0.0015490842051804066, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/compact_hidden_passthrough.mmd]": 0.000756000867113471, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/complex_multipath.mmd]": 0.0013277921825647354, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/convergence_stacked_sink.mmd]": 0.0010687089525163174, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/convergent_offrow_exit_climb.mmd]": 0.001911083934828639, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006323331035673618, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/cross_col_top_entry.mmd]": 0.001359707908704877, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/cross_column_perp_drop.mmd]": 0.0007440412882715464, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0005300419870764017, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/cross_row_gap_wrap.mmd]": 0.0008978322148323059, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/deep_linear.mmd]": 0.0013280410785228014, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/disjoint_sameline_trunks.mmd]": 0.0009754591155797243, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/divergent_fanout_split.mmd]": 0.0006051249802112579, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/dogleg_exempt_distinct.mmd]": 0.0007010842673480511, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/dogleg_exempt_sameline.mmd]": 0.0005948338657617569, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/dogleg_twoline_fanout.mmd]": 0.0005947498138993979, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/exit_corner_offset_dogleg.mmd]": 0.000686208251863718, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/fan_bypass_nesting.mmd]": 0.0011566670145839453, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/fan_in_merge.mmd]": 0.005392665974795818, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/fold_double.mmd]": 0.01280900090932846, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/fold_fan_across.mmd]": 0.0070539170410484076, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/fold_stacked_branch.mmd]": 0.0033144988119602203, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/funcprofiler_upstream.mmd]": 0.004038709215819836, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/header_nudge.mmd]": 0.0006230408325791359, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/header_side_rotated.mmd]": 0.0005484989378601313, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/inrow_skip_breeze.mmd]": 0.0003980009350925684, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/inter_row_wrap_clearance.mmd]": 0.0006064181216061115, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/interchange_lane_reorder.mmd]": 0.00047045922838151455, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/junction_entry_align.mmd]": 0.0018550001550465822, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/junction_entry_collision.mmd]": 0.0011557491961866617, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/junction_entry_reversed_fold.mmd]": 0.0007737502455711365, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/junction_fanout_convergence.mmd]": 0.0006291249301284552, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/left_entry_up_wrap.mmd]": 0.0004826257936656475, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/left_exit_sink_below.mmd]": 0.0007391669787466526, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006006250623613596, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0005800412036478519, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.000609374837949872, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0007418328896164894, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0006252499297261238, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005936648230999708, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_to_tb_top_drop.mmd]": 0.0004590412136167288, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0017577910330146551, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006819998379796743, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005139170680195093, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_top_entry_cross_column.mmd]": 0.0004649159964174032, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0004810832906514406, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_around_below_leftmost.mmd]": 0.0017602078150957823, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_bottom_row_bypass.mmd]": 0.0023070420138537884, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_leftmost_sink_branch.mmd]": 0.0009837502148002386, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_offrow_continuation.mmd]": 0.0006651238072663546, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_port_above_approach.mmd]": 0.000924333930015564, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_pullaway.mmd]": 0.0018297070637345314, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_right_entry.mmd]": 0.0008248761296272278, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_trunk_out_of_range_section.mmd]": 0.0008897921070456505, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/merge_trunk_over_low_section.mmd]": 0.0011630828958004713, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/mismatched_tracks.mmd]": 0.0007603340782225132, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/mixed_bundle_column.mmd]": 0.009480124339461327, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/mixed_port_sides.mmd]": 0.0006332080811262131, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/multi_input_convergence.mmd]": 0.0006699177902191877, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/multi_line_bundle.mmd]": 0.0008526260498911142, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/multicarrier_offrow_exit_climb.mmd]": 0.00071891606785357, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/near_vertical_junction_hook.mmd]": 0.0006519588641822338, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/off_track_convergence.mmd]": 0.0006352921482175589, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/off_track_convergence_multiline.mmd]": 0.000715040834620595, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/off_track_input_above_consumer.mmd]": 0.0018543743062764406, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/parallel_independent.mmd]": 0.0023192078806459904, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/peeloff_extra_line_consumer.mmd]": 0.0019979181233793497, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/peeloff_riser_respace.mmd]": 0.000755250221118331, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/post_convergence_trunk.mmd]": 0.0004002510104328394, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/reconverge_reversed_fold.mmd]": 0.0017809588462114334, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/right_entry_from_above.mmd]": 0.0004641262348741293, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/right_entry_from_above_far.mmd]": 0.0004516660701483488, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/right_entry_gap_above_empty_row.mmd]": 0.000502042006701231, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/right_entry_wrap_no_fan.mmd]": 0.000470832921564579, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/rl_entry_runway.mmd]": 0.0005479177925735712, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/rnaseq_lite.mmd]": 0.001312000211328268, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/route_around_intervening.mmd]": 0.0007125828415155411, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/section_diamond.mmd]": 0.0007642910350114107, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/self_crossing_bridge.mmd]": 0.0006070418749004602, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/shared_sink_parallel.mmd]": 0.0010337929707020521, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/single_section.mmd]": 0.0003364172298461199, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/stacked_left_exit_drop.mmd]": 0.00044508418068289757, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/stacked_lr_serpentine.mmd]": 0.0038138749077916145, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007076249457895756, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_bottom_entry_flow_start.mmd]": 0.00046062469482421875, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0005743319634348154, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007183740381151438, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_column_continuation_two_lines.mmd]": 0.0004895410966128111, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_convergence_straight_drop.mmd]": 0.0008173338137567043, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_internal_diagonal.mmd]": 0.0005403759423643351, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_left_exit_step.mmd]": 0.0007774580735713243, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_lr_exit_left.mmd]": 0.003117790911346674, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_lr_exit_right.mmd]": 0.0006527500227093697, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_passthrough_continuation.mmd]": 0.0004037502221763134, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_passthrough_trunk.mmd]": 0.0006503337062895298, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_perp_exit_side_neighbour.mmd]": 0.00045020761899650097, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_right_entry_stack.mmd]": 0.0006437511183321476, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_trunk_through_fan.mmd]": 0.0004015420563519001, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/tb_two_line_vert_seam.mmd]": 0.0005197909194976091, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/terminal_symmetric_fan.mmd]": 0.0005130828358232975, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/terminus_join.mmd]": 0.00032737385481595993, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/top_entry_header_clash.mmd]": 0.00045183394104242325, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/trunk_through_fan.mmd]": 0.0006659168284386396, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/twoline_fanout_up.mmd]": 0.0018893750384449959, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/u_turn_fold.mmd]": 0.0015874998643994331, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/uneven_diamond.mmd]": 0.00039854180067777634, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/upward_bypass.mmd]": 0.001007335027679801, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/variant_calling.mmd]": 0.0046411261428147554, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/wide_fan_in.mmd]": 0.0012667910195887089, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/wide_fan_out.mmd]": 0.0008445000275969505, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/wide_label_fan.mmd]": 0.0004185421857982874, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[topologies/wrapped_label_trunk.mmd]": 0.0004280002322047949, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[trunk_align_matching_bundle.mmd]": 0.0006413750816136599, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[uneven_diamond.mmd]": 0.000388959189876914, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[variant_calling.mmd]": 0.0007934579625725746, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[variant_calling_tuned.mmd]": 0.0008988350164145231, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[variantbenchmarking.mmd]": 0.00221616611815989, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[variantbenchmarking_auto.mmd]": 0.0021372081246227026, + "tests/test_layout_invariants.py::test_ports_on_section_boundary[variantprioritization.mmd]": 0.0009595830924808979, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[bubble_forced_label_clears_diagonal.mmd]": 0.007130332291126251, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[bubble_label_clears_diagonal.mmd]": 0.003090041922405362, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[bubble_output_above.mmd]": 0.003945500357076526, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[captioned_sibling_outputs.mmd]": 0.0005601660814136267, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[centered_tracks.mmd]": 0.00046837516129016876, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[cross_track_interchange.mmd]": 0.0007942512165755033, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[da_pipeline.mmd]": 0.007114000152796507, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[diagonal_labels.mmd]": 0.0008866249118000269, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[diagonal_single_trunk_off_track.mmd]": 0.0009832088835537434, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[differentialabundance.mmd]": 0.0018496240954846144, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[differentialabundance_default.mmd]": 0.001991085009649396, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[directional_flow.mmd]": 0.0004512497689574957, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[disconnected_components.mmd]": 0.0007040419150143862, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[epitopeprediction.mmd]": 0.0011032489128410816, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[file_icon_fanin.mmd]": 0.000797417014837265, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[file_icons.mmd]": 0.0005245830398052931, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[font_scale.mmd]": 0.000505625968798995, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[genomeassembly.mmd]": 0.016994916135445237, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[genomeassembly_organellar.mmd]": 0.0014422487001866102, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[genomeassembly_staggered.mmd]": 0.0015949178487062454, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[genomic_pipeline.mmd]": 0.003251583082601428, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[group_labels.mmd]": 0.0006285421550273895, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/01_minimal.mmd]": 0.0004539990331977606, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/02_sections.mmd]": 0.0006461660377681255, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/03_fan_out.mmd]": 0.0010353750549256802, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/03b_fan_in_merge.mmd]": 0.0009007081389427185, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/04_directions.mmd]": 0.0009505830239504576, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/05_file_icons.mmd]": 0.0005739578045904636, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/05b_multi_icons.mmd]": 0.004605042049661279, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/05c_files_icon.mmd]": 0.0006763329729437828, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/05d_folder_icon.mmd]": 0.0005567909684032202, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/05f_banner_labels.mmd]": 0.0005832090973854065, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/06a_without_hidden.mmd]": 0.0007148748263716698, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[guide/06b_with_hidden.mmd]": 0.0007366256322711706, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[hlatyping.mmd]": 0.0009539579041302204, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[icon_caption_wrap.mmd]": 0.00034187384881079197, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[leaf_file_icon_on_trunk.mmd]": 0.0004017909523099661, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[legend_combo.mmd]": 0.000445124926045537, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[legend_logo_placement.mmd]": 0.0009856668766587973, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[longread_variant_calling.mmd]": 0.0017778328619897366, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[marker_styles.mmd]": 0.00443233409896493, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[multiline_labels.mmd]": 0.0005116667598485947, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[off_track_output_branched.mmd]": 0.0013180430978536606, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[off_track_outputs.mmd]": 0.0011094999499619007, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[off_track_outputs_along_trunk.mmd]": 0.0004509992431849241, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[rnaseq_auto.mmd]": 0.0018670421559363604, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[rnaseq_sections.mmd]": 0.0023404581006616354, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[rnaseq_sections_manual.mmd]": 0.002376001328229904, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[rnaseq_simple.mmd]": 0.0003552080597728491, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[simple_pipeline.mmd]": 0.0004202490672469139, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[tb_file_termini.mmd]": 0.0007990407757461071, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[tb_right_exit_feeder_slots.mmd]": 0.0007182499393820763, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/aligner_row_pinned_continuation.mmd]": 0.0009100418537855148, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/around_below_ep_col_gt0.mmd]": 0.0006023328751325607, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/around_section_below.mmd]": 0.0005962920840829611, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/asymmetric_tree.mmd]": 0.002591873984783888, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0008343339432030916, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/branch_fold_forward.mmd]": 0.0009150418918579817, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/branch_fold_stability.mmd]": 0.0007509579882025719, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bt_chain.mmd]": 0.00035437499172985554, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bt_exit_top_above.mmd]": 0.00045670801773667336, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bt_exit_top_above_2line.mmd]": 0.0005180011503398418, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bt_fork.mmd]": 0.00036266702227294445, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bt_perp_entry_below.mmd]": 0.00050400011241436, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bt_to_lr.mmd]": 0.0004971250891685486, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bt_to_tb.mmd]": 0.000470208004117012, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bundle_terminator_continuation.mmd]": 0.0003942921757698059, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_fan_in_outer_slot.mmd]": 0.0014325000811368227, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_gap2_rightward_overflow.mmd]": 0.009350833017379045, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_label_rake.mmd]": 0.0008751240093261003, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_label_rake_left.mmd]": 0.0031522498466074467, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_label_rake_wide.mmd]": 0.0028652918990701437, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_leftward_far_side_entry.mmd]": 0.0032483339309692383, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_leftward_overflow.mmd]": 0.0007727090269327164, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/bypass_v_tight.mmd]": 0.0013169171288609505, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/clear_channel_target_aware_push.mmd]": 0.0009963340125977993, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/compact_gap_peer_conflict.mmd]": 0.0007565829437226057, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/compact_hidden_passthrough.mmd]": 0.0006503749173134565, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/complex_multipath.mmd]": 0.0013145008124411106, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/convergence_stacked_sink.mmd]": 0.001104291994124651, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/convergent_offrow_exit_climb.mmd]": 0.0024384167045354843, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/corridor_narrow_gap_fallback.mmd]": 0.010908875614404678, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/cross_col_top_entry.mmd]": 0.0005727082025259733, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/cross_column_perp_drop.mmd]": 0.0005097922403365374, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/cross_column_perp_drop_far_exit.mmd]": 0.002598414896056056, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/cross_row_gap_wrap.mmd]": 0.0030783750116825104, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/deep_linear.mmd]": 0.0033894572407007217, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/disjoint_sameline_trunks.mmd]": 0.0008664589840918779, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/divergent_fanout_split.mmd]": 0.0005661251489073038, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/dogleg_exempt_distinct.mmd]": 0.0007002090569585562, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/dogleg_exempt_sameline.mmd]": 0.0005870007444173098, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/dogleg_twoline_fanout.mmd]": 0.0005742076318711042, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/exit_corner_offset_dogleg.mmd]": 0.0006773751229047775, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/fan_bypass_nesting.mmd]": 0.001149540999904275, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/fan_in_merge.mmd]": 0.001441997941583395, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/fold_double.mmd]": 0.002162209013476968, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/fold_fan_across.mmd]": 0.001736959209665656, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/fold_stacked_branch.mmd]": 0.001809125067666173, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/funcprofiler_upstream.mmd]": 0.0015892500523477793, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/header_nudge.mmd]": 0.002799415960907936, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/header_side_rotated.mmd]": 0.0017616658005863428, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/inrow_skip_breeze.mmd]": 0.0012262919917702675, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/inter_row_wrap_clearance.mmd]": 0.0011284160427749157, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/interchange_lane_reorder.mmd]": 0.0005407091230154037, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/junction_entry_align.mmd]": 0.0033103341702371836, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/junction_entry_collision.mmd]": 0.0008341672364622355, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/junction_entry_reversed_fold.mmd]": 0.0007423327770084143, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/junction_fanout_convergence.mmd]": 0.0006088342051953077, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/left_entry_up_wrap.mmd]": 0.00047495821490883827, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/left_exit_sink_below.mmd]": 0.0007420422043651342, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0005996248219162226, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0005682918708771467, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0005941679701209068, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.000584334135055542, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005685829091817141, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005685409996658564, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_to_tb_top_drop.mmd]": 0.0169865011703223, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.000560833141207695, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_to_tb_top_near_vertical.mmd]": 0.000491417245939374, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_to_tb_top_two_lines.mmd]": 0.0004953749012202024, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_top_entry_cross_column.mmd]": 0.00047050020657479763, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007071257568895817, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_around_below_leftmost.mmd]": 0.0008055840153247118, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_bottom_row_bypass.mmd]": 0.003117831889539957, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_leftmost_sink_branch.mmd]": 0.0010458333417773247, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_offrow_continuation.mmd]": 0.0006937498692423105, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_port_above_approach.mmd]": 0.0006789581384509802, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_pullaway.mmd]": 0.0008248321246355772, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_right_entry.mmd]": 0.0017977929674088955, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_trunk_out_of_range_section.mmd]": 0.0034308747854083776, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/merge_trunk_over_low_section.mmd]": 0.0010535407345741987, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/mismatched_tracks.mmd]": 0.002520292764529586, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/mixed_bundle_column.mmd]": 0.0010452501010149717, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/mixed_port_sides.mmd]": 0.0005981239955872297, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/multi_input_convergence.mmd]": 0.0006680008955299854, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/multi_line_bundle.mmd]": 0.0008434990886598825, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007229577749967575, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/near_vertical_junction_hook.mmd]": 0.0006527500227093697, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/off_track_convergence.mmd]": 0.0006420838180929422, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/off_track_convergence_multiline.mmd]": 0.0007334582041949034, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/off_track_input_above_consumer.mmd]": 0.0017560410778969526, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/parallel_independent.mmd]": 0.000755916815251112, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/peeloff_extra_line_consumer.mmd]": 0.0009424998424947262, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/peeloff_riser_respace.mmd]": 0.0007046670652925968, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/post_convergence_trunk.mmd]": 0.0004024168010801077, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/reconverge_reversed_fold.mmd]": 0.0028845416381955147, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/right_entry_from_above.mmd]": 0.0007066659163683653, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/right_entry_from_above_far.mmd]": 0.0005548750050365925, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005521662533283234, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/right_entry_wrap_no_fan.mmd]": 0.00046158209443092346, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/rl_entry_runway.mmd]": 0.0005647917278110981, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/rnaseq_lite.mmd]": 0.0013348329812288284, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/route_around_intervening.mmd]": 0.0006363342981785536, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/section_diamond.mmd]": 0.000775541877374053, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/self_crossing_bridge.mmd]": 0.000666667940095067, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/shared_sink_parallel.mmd]": 0.0011296668089926243, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/single_section.mmd]": 0.00037375022657215595, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/stacked_left_exit_drop.mmd]": 0.0004587499424815178, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/stacked_lr_serpentine.mmd]": 0.0033080847933888435, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007783751934766769, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_bottom_entry_flow_start.mmd]": 0.00046675000339746475, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001521583180874586, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0008600822184234858, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_column_continuation_two_lines.mmd]": 0.0005542079452425241, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_convergence_straight_drop.mmd]": 0.0003813749644905329, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_internal_diagonal.mmd]": 0.0005326669197529554, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_left_exit_step.mmd]": 0.0010689999908208847, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_lr_exit_left.mmd]": 0.0011438739020377398, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_lr_exit_right.mmd]": 0.0006818331312388182, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_passthrough_continuation.mmd]": 0.0004125011619180441, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_passthrough_trunk.mmd]": 0.0005887087900191545, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_perp_exit_side_neighbour.mmd]": 0.00044962484389543533, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_right_entry_stack.mmd]": 0.0006325417198240757, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_trunk_through_fan.mmd]": 0.002059999853372574, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/tb_two_line_vert_seam.mmd]": 0.002689623972401023, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/terminal_symmetric_fan.mmd]": 0.0033364170230925083, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/terminus_join.mmd]": 0.001744542270898819, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/top_entry_header_clash.mmd]": 0.0008330000564455986, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/trunk_through_fan.mmd]": 0.0006813339423388243, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/twoline_fanout_up.mmd]": 0.0007160000968724489, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/u_turn_fold.mmd]": 0.003885291051119566, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/uneven_diamond.mmd]": 0.000732834218069911, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/upward_bypass.mmd]": 0.0010253752116113901, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/variant_calling.mmd]": 0.001632374944165349, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/wide_fan_in.mmd]": 0.0007945839315652847, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/wide_fan_out.mmd]": 0.0018353750929236412, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/wide_label_fan.mmd]": 0.0009959579911082983, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[topologies/wrapped_label_trunk.mmd]": 0.0004653329961001873, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[trunk_align_matching_bundle.mmd]": 0.0005752509459853172, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[uneven_diamond.mmd]": 0.00106150028295815, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[variant_calling.mmd]": 0.0009609600529074669, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[variant_calling_tuned.mmd]": 0.0010224999859929085, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[variantbenchmarking.mmd]": 0.014308582991361618, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[variantbenchmarking_auto.mmd]": 0.0023396662436425686, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues[variantprioritization.mmd]": 0.000987874809652567, + "tests/test_layout_invariants.py::test_post_convergence_trunk_continues_repro": 0.00038175005465745926, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[bubble_forced_label_clears_diagonal.mmd]": 0.000595875084400177, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[bubble_label_clears_diagonal.mmd]": 0.006571125006303191, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[bubble_output_above.mmd]": 0.0006673752795904875, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[captioned_sibling_outputs.mmd]": 0.0005959996487945318, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[da_pipeline.mmd]": 0.0049560407642275095, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[diagonal_single_trunk_off_track.mmd]": 0.001706915907561779, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[differentialabundance.mmd]": 0.007522666826844215, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[differentialabundance_default.mmd]": 0.003572584129869938, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[off_track_output_branched.mmd]": 0.0012145419605076313, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[off_track_outputs.mmd]": 0.0015518749132752419, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[off_track_outputs_along_trunk.mmd]": 0.005169708980247378, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[topologies/off_track_convergence.mmd]": 0.001489460002630949, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[topologies/off_track_convergence_multiline.mmd]": 0.0008380841463804245, + "tests/test_layout_invariants.py::test_reanchor_off_track_bbox_fit_is_reversible[topologies/off_track_input_above_consumer.mmd]": 0.0042030420154333115, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[bubble_forced_label_clears_diagonal.mmd]": 0.0007556660566478968, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[bubble_label_clears_diagonal.mmd]": 0.0023372082505375147, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[bubble_output_above.mmd]": 0.0006126260850578547, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[captioned_sibling_outputs.mmd]": 0.0005029172170907259, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[da_pipeline.mmd]": 0.0023040000814944506, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[diagonal_single_trunk_off_track.mmd]": 0.0014113339129835367, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[differentialabundance.mmd]": 0.0019093321170657873, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[differentialabundance_default.mmd]": 0.0018739160150289536, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[off_track_output_branched.mmd]": 0.0005577919073402882, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[off_track_outputs.mmd]": 0.000537042273208499, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[off_track_outputs_along_trunk.mmd]": 0.0005301248747855425, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[topologies/off_track_convergence.mmd]": 0.0009521248284727335, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[topologies/off_track_convergence_multiline.mmd]": 0.0007865841034799814, + "tests/test_layout_invariants.py::test_reanchor_off_track_requires_snapped_consumers[topologies/off_track_input_above_consumer.mmd]": 0.0017949589528143406, + "tests/test_layout_invariants.py::test_refanned_trunk_stays_on_inflated_row_pitch": 0.0015705409459769726, + "tests/test_layout_invariants.py::test_rl_return_row_convergence_renders_cleanly": 0.13108945917338133, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[bubble_forced_label_clears_diagonal.mmd]": 0.0006351247429847717, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[bubble_label_clears_diagonal.mmd]": 0.0005754169542342424, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[bubble_output_above.mmd]": 0.0005288748070597649, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[captioned_sibling_outputs.mmd]": 0.0005322499200701714, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[centered_tracks.mmd]": 0.0006641242653131485, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[cross_track_interchange.mmd]": 0.002432042034342885, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[da_pipeline.mmd]": 0.004963790997862816, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[diagonal_labels.mmd]": 0.0017345421947538853, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[diagonal_single_trunk_off_track.mmd]": 0.0016861259937286377, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[differentialabundance.mmd]": 0.02545462572015822, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[differentialabundance_default.mmd]": 0.01722104102373123, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[directional_flow.mmd]": 0.0011545000597834587, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[disconnected_components.mmd]": 0.0013172926846891642, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[epitopeprediction.mmd]": 0.004763084230944514, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[file_icon_fanin.mmd]": 0.0014252923429012299, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[file_icons.mmd]": 0.0009345838334411383, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[font_scale.mmd]": 0.0005105410236865282, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[genomeassembly.mmd]": 0.005955416010692716, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[genomeassembly_organellar.mmd]": 0.010920373722910881, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[genomeassembly_staggered.mmd]": 0.0037797922268509865, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[genomic_pipeline.mmd]": 0.00981045700609684, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[group_labels.mmd]": 0.0009612920694053173, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/01_minimal.mmd]": 0.008398958249017596, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/02_sections.mmd]": 0.0015244998503476381, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/03_fan_out.mmd]": 0.0018472920637577772, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/03b_fan_in_merge.mmd]": 0.0018311662133783102, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/04_directions.mmd]": 0.0017296660225838423, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/05_file_icons.mmd]": 0.0008203331381082535, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/05b_multi_icons.mmd]": 0.0009129170794039965, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/05c_files_icon.mmd]": 0.0038744998164474964, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/05d_folder_icon.mmd]": 0.002908082911744714, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/05f_banner_labels.mmd]": 0.0013694590888917446, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/06a_without_hidden.mmd]": 0.002129332860931754, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[guide/06b_with_hidden.mmd]": 0.004120456986129284, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[hlatyping.mmd]": 0.0020870831795036793, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[icon_caption_wrap.mmd]": 0.0005136667750775814, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[leaf_file_icon_on_trunk.mmd]": 0.0013730418868362904, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[legend_combo.mmd]": 0.0009086260106414557, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[legend_logo_placement.mmd]": 0.006582374218851328, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[longread_variant_calling.mmd]": 0.004998416174203157, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[marker_styles.mmd]": 0.0009305821731686592, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[multiline_labels.mmd]": 0.0022015830036252737, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[off_track_output_branched.mmd]": 0.0008730827830731869, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[off_track_outputs.mmd]": 0.0006698749493807554, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[off_track_outputs_along_trunk.mmd]": 0.0006425422616302967, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[rnaseq_auto.mmd]": 0.014648083131760359, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[rnaseq_sections.mmd]": 0.005860375938937068, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[rnaseq_sections_manual.mmd]": 0.005399875808507204, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[rnaseq_simple.mmd]": 0.0015620843041688204, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[simple_pipeline.mmd]": 0.0005719992332160473, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[tb_file_termini.mmd]": 0.0009742081165313721, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[tb_right_exit_feeder_slots.mmd]": 0.0018027094192802906, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/aligner_row_pinned_continuation.mmd]": 0.0035887921694666147, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/around_below_ep_col_gt0.mmd]": 0.008401041850447655, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/around_section_below.mmd]": 0.003063499927520752, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/asymmetric_tree.mmd]": 0.00647779181599617, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0033940840512514114, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/branch_fold_forward.mmd]": 0.001613333122804761, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/branch_fold_stability.mmd]": 0.0012799997348338366, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bt_chain.mmd]": 0.0004625010769814253, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bt_exit_top_above.mmd]": 0.0006452489178627729, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bt_exit_top_above_2line.mmd]": 0.0007378750015050173, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bt_fork.mmd]": 0.0005152919329702854, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bt_perp_entry_below.mmd]": 0.0007090819999575615, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bt_to_lr.mmd]": 0.0007456671446561813, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bt_to_tb.mmd]": 0.0007605843711644411, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bundle_terminator_continuation.mmd]": 0.0004651250783354044, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_fan_in_outer_slot.mmd]": 0.007777041057124734, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0034788341727107763, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_label_rake.mmd]": 0.004223415860906243, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_label_rake_left.mmd]": 0.011235333979129791, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_label_rake_wide.mmd]": 0.0032118340022861958, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_leftward_far_side_entry.mmd]": 0.005093999905511737, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_leftward_overflow.mmd]": 0.00545562501065433, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/bypass_v_tight.mmd]": 0.001082416856661439, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/clear_channel_target_aware_push.mmd]": 0.0013039170298725367, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/compact_gap_peer_conflict.mmd]": 0.0011979162227362394, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/compact_hidden_passthrough.mmd]": 0.0009711261373013258, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/complex_multipath.mmd]": 0.0027535827830433846, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/convergence_stacked_sink.mmd]": 0.0059992908500134945, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/convergent_offrow_exit_climb.mmd]": 0.012642248766496778, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/corridor_narrow_gap_fallback.mmd]": 0.0028209148440510035, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/cross_col_top_entry.mmd]": 0.0007742487359791994, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/cross_column_perp_drop.mmd]": 0.0016013761050999165, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007417076267302036, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/cross_row_gap_wrap.mmd]": 0.0016910422127693892, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/deep_linear.mmd]": 0.0022192501928657293, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/disjoint_sameline_trunks.mmd]": 0.0022567911073565483, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/divergent_fanout_split.mmd]": 0.0009983752388507128, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/dogleg_exempt_distinct.mmd]": 0.0013437909074127674, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/dogleg_exempt_sameline.mmd]": 0.001496041426435113, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/dogleg_twoline_fanout.mmd]": 0.0013287069741636515, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/exit_corner_offset_dogleg.mmd]": 0.001591915963217616, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/fan_bypass_nesting.mmd]": 0.0031355409882962704, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/fan_in_merge.mmd]": 0.001992167206481099, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/fold_double.mmd]": 0.011144417803734541, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/fold_fan_across.mmd]": 0.007328334264457226, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/fold_stacked_branch.mmd]": 0.0046201241202652454, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/funcprofiler_upstream.mmd]": 0.008708000183105469, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/header_nudge.mmd]": 0.0016197923105210066, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/header_side_rotated.mmd]": 0.004073165124282241, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/inrow_skip_breeze.mmd]": 0.0016965828835964203, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/inter_row_wrap_clearance.mmd]": 0.00339225004427135, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/interchange_lane_reorder.mmd]": 0.0023639590945094824, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/junction_entry_align.mmd]": 0.0021743341349065304, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/junction_entry_collision.mmd]": 0.001700500026345253, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/junction_entry_reversed_fold.mmd]": 0.0014689590316265821, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/junction_fanout_convergence.mmd]": 0.0017327088862657547, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/left_entry_up_wrap.mmd]": 0.0010474987793713808, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/left_exit_sink_below.mmd]": 0.003472875105217099, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.001163500128313899, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0010409583337605, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0033147919457405806, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.004186166916042566, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_perp_top_exit_side_entry.mmd]": 0.003256332827731967, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_to_tb_top_cross_col.mmd]": 0.0012957500293850899, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_to_tb_top_drop.mmd]": 0.0007397071458399296, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.000844873720780015, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0007143327966332436, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_to_tb_top_two_lines.mmd]": 0.0009151669219136238, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_top_entry_cross_column.mmd]": 0.0008367488626390696, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0008054999634623528, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_around_below_leftmost.mmd]": 0.003079333109781146, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_bottom_row_bypass.mmd]": 0.0015267080161720514, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_leftmost_sink_branch.mmd]": 0.00146333291195333, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_offrow_continuation.mmd]": 0.0010965398978441954, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_port_above_approach.mmd]": 0.0012445829343050718, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_pullaway.mmd]": 0.001549749169498682, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_right_entry.mmd]": 0.0061767499428242445, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_trunk_out_of_range_section.mmd]": 0.0019435002468526363, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/merge_trunk_over_low_section.mmd]": 0.0036705839447677135, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/mismatched_tracks.mmd]": 0.01014079200103879, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/mixed_bundle_column.mmd]": 0.002320957602933049, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/mixed_port_sides.mmd]": 0.0010331259109079838, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/multi_input_convergence.mmd]": 0.0010843328200280666, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/multi_line_bundle.mmd]": 0.0017119590193033218, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0013642918784171343, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/near_vertical_junction_hook.mmd]": 0.0027146670036017895, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/off_track_convergence.mmd]": 0.0010297081898897886, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/off_track_convergence_multiline.mmd]": 0.0013504999224096537, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/off_track_input_above_consumer.mmd]": 0.006420126184821129, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/parallel_independent.mmd]": 0.001016249880194664, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/peeloff_extra_line_consumer.mmd]": 0.0020849157590419054, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/peeloff_riser_respace.mmd]": 0.001859207870438695, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/post_convergence_trunk.mmd]": 0.000548000680282712, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/reconverge_reversed_fold.mmd]": 0.0035932499449700117, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/right_entry_from_above.mmd]": 0.0006791672203689814, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/right_entry_from_above_far.mmd]": 0.0006664171814918518, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/right_entry_gap_above_empty_row.mmd]": 0.0007770839147269726, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/right_entry_wrap_no_fan.mmd]": 0.0006600411143153906, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/rl_entry_runway.mmd]": 0.008472333895042539, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/rnaseq_lite.mmd]": 0.005692916689440608, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/route_around_intervening.mmd]": 0.0027805007994174957, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/section_diamond.mmd]": 0.0032007917761802673, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/self_crossing_bridge.mmd]": 0.0010449159890413284, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/shared_sink_parallel.mmd]": 0.0028308327309787273, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/single_section.mmd]": 0.0005812908057123423, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/stacked_left_exit_drop.mmd]": 0.0006953335832804441, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/stacked_lr_serpentine.mmd]": 0.0032502508256584406, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0040905417408794165, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_bottom_entry_flow_start.mmd]": 0.0025916669983416796, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0028990840073674917, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0015271669253706932, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_column_continuation_two_lines.mmd]": 0.002475708955898881, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_convergence_straight_drop.mmd]": 0.0005746257957071066, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_internal_diagonal.mmd]": 0.0009225837420672178, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_left_exit_step.mmd]": 0.002808833960443735, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_lr_exit_left.mmd]": 0.002414124784991145, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_lr_exit_right.mmd]": 0.0021952087990939617, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_passthrough_continuation.mmd]": 0.0006454577669501305, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_passthrough_trunk.mmd]": 0.0016071673016995192, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0007084999233484268, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_right_entry_stack.mmd]": 0.0035670411307364702, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_trunk_through_fan.mmd]": 0.0005746239330619574, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/tb_two_line_vert_seam.mmd]": 0.0009282911196351051, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/terminal_symmetric_fan.mmd]": 0.0008412920869886875, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/terminus_join.mmd]": 0.0004362098407000303, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/top_entry_header_clash.mmd]": 0.001482417806982994, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/trunk_through_fan.mmd]": 0.001268582884222269, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/twoline_fanout_up.mmd]": 0.0010389159433543682, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/u_turn_fold.mmd]": 0.002599499886855483, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/uneven_diamond.mmd]": 0.0006279170047491789, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/upward_bypass.mmd]": 0.0036722489167004824, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/variant_calling.mmd]": 0.0038271250668913126, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/wide_fan_in.mmd]": 0.0025795837864279747, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/wide_fan_out.mmd]": 0.0030343749094754457, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/wide_label_fan.mmd]": 0.0006373748183250427, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[topologies/wrapped_label_trunk.mmd]": 0.0006873332895338535, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[trunk_align_matching_bundle.mmd]": 0.0009352909401059151, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[uneven_diamond.mmd]": 0.0005123738665133715, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[variant_calling.mmd]": 0.001597000751644373, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[variant_calling_tuned.mmd]": 0.00629462581127882, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[variantbenchmarking.mmd]": 0.005799541715532541, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[variantbenchmarking_auto.mmd]": 0.0045555830001831055, + "tests/test_layout_invariants.py::test_routed_paths_clear_next_row_headers[variantprioritization.mmd]": 0.0018376668449491262, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[bubble_forced_label_clears_diagonal.mmd]": 0.0006677077617496252, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[bubble_label_clears_diagonal.mmd]": 0.0006157911848276854, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[bubble_output_above.mmd]": 0.0005335411988198757, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[captioned_sibling_outputs.mmd]": 0.0005269991233944893, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[centered_tracks.mmd]": 0.0006820838898420334, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[cross_track_interchange.mmd]": 0.0014038318768143654, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[da_pipeline.mmd]": 0.005249374778941274, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[diagonal_labels.mmd]": 0.0016792931128293276, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[diagonal_single_trunk_off_track.mmd]": 0.0017106251325458288, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[differentialabundance.mmd]": 0.005028915824368596, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[differentialabundance_default.mmd]": 0.014505126047879457, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[directional_flow.mmd]": 0.0021362919360399246, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[disconnected_components.mmd]": 0.0014531661290675402, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[epitopeprediction.mmd]": 0.0021549160592257977, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[file_icon_fanin.mmd]": 0.001471291994675994, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[file_icons.mmd]": 0.0007969161961227655, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[font_scale.mmd]": 0.000514250248670578, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[genomeassembly.mmd]": 0.004552248865365982, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[genomeassembly_organellar.mmd]": 0.0033065429888665676, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[genomeassembly_staggered.mmd]": 0.0044309592340141535, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[genomic_pipeline.mmd]": 0.0200442080385983, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[group_labels.mmd]": 0.0015250432770699263, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/01_minimal.mmd]": 0.0005624990444630384, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/02_sections.mmd]": 0.0010189570020884275, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/03_fan_out.mmd]": 0.001765499822795391, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/03b_fan_in_merge.mmd]": 0.002456708112731576, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/04_directions.mmd]": 0.0035074169281870127, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/05_file_icons.mmd]": 0.0008667907677590847, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/05b_multi_icons.mmd]": 0.0009127501398324966, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/05c_files_icon.mmd]": 0.0007839160971343517, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/05d_folder_icon.mmd]": 0.0007725832983851433, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/05f_banner_labels.mmd]": 0.0008967919275164604, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/06a_without_hidden.mmd]": 0.0012086671777069569, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[guide/06b_with_hidden.mmd]": 0.0012049181386828423, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[hlatyping.mmd]": 0.009511583019047976, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[icon_caption_wrap.mmd]": 0.00043016625568270683, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[leaf_file_icon_on_trunk.mmd]": 0.0005267499946057796, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[legend_combo.mmd]": 0.0017020429950207472, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[legend_logo_placement.mmd]": 0.003025125013664365, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[longread_variant_calling.mmd]": 0.005121709080412984, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[marker_styles.mmd]": 0.0013202503323554993, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[multiline_labels.mmd]": 0.0007770839147269726, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[off_track_output_branched.mmd]": 0.0005998746491968632, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[off_track_outputs.mmd]": 0.001140126259997487, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[off_track_outputs_along_trunk.mmd]": 0.000590750016272068, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[rnaseq_auto.mmd]": 0.0035806659143418074, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[rnaseq_sections.mmd]": 0.011215915903449059, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[rnaseq_sections_manual.mmd]": 0.00508383265696466, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[rnaseq_simple.mmd]": 0.0015569571405649185, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[simple_pipeline.mmd]": 0.0005407917778939009, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[tb_file_termini.mmd]": 0.00098025007173419, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[tb_right_exit_feeder_slots.mmd]": 0.001784041989594698, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/aligner_row_pinned_continuation.mmd]": 0.0017658339347690344, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/around_below_ep_col_gt0.mmd]": 0.004239083267748356, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/around_section_below.mmd]": 0.0016780002042651176, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/asymmetric_tree.mmd]": 0.0022946661338210106, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0014696670696139336, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/branch_fold_forward.mmd]": 0.0016363330651074648, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/branch_fold_stability.mmd]": 0.001501085003837943, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bt_chain.mmd]": 0.0005149580538272858, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bt_exit_top_above.mmd]": 0.0006691247690469027, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bt_exit_top_above_2line.mmd]": 0.0007426242809742689, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bt_fork.mmd]": 0.0005193750839680433, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bt_perp_entry_below.mmd]": 0.0007120838854461908, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bt_to_lr.mmd]": 0.0007846239022910595, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bt_to_tb.mmd]": 0.000755916815251112, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bundle_terminator_continuation.mmd]": 0.0008274589199572802, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_fan_in_outer_slot.mmd]": 0.011022249003872275, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_gap2_rightward_overflow.mmd]": 0.012090706964954734, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_label_rake.mmd]": 0.0038694150280207396, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_label_rake_left.mmd]": 0.0014557081740349531, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_label_rake_wide.mmd]": 0.001309625105932355, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_leftward_far_side_entry.mmd]": 0.003605248872190714, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_leftward_overflow.mmd]": 0.0029122503474354744, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/bypass_v_tight.mmd]": 0.008678500074893236, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/clear_channel_target_aware_push.mmd]": 0.0012444169260561466, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/compact_gap_peer_conflict.mmd]": 0.0011870849411934614, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/compact_hidden_passthrough.mmd]": 0.0009706243872642517, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/complex_multipath.mmd]": 0.0026839589700102806, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/convergence_stacked_sink.mmd]": 0.0019383742474019527, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/convergent_offrow_exit_climb.mmd]": 0.017216874985024333, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/corridor_narrow_gap_fallback.mmd]": 0.0012872498482465744, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/cross_col_top_entry.mmd]": 0.0008383751846849918, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/cross_column_perp_drop.mmd]": 0.0018804578576236963, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/cross_column_perp_drop_far_exit.mmd]": 0.002769292099401355, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/cross_row_gap_wrap.mmd]": 0.0016785841435194016, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/deep_linear.mmd]": 0.002190292114391923, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/disjoint_sameline_trunks.mmd]": 0.002184083219617605, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/divergent_fanout_split.mmd]": 0.0010459567420184612, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/dogleg_exempt_distinct.mmd]": 0.00860366690903902, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/dogleg_exempt_sameline.mmd]": 0.0010242501739412546, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/dogleg_twoline_fanout.mmd]": 0.001072583021596074, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/exit_corner_offset_dogleg.mmd]": 0.0012644159141927958, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/fan_bypass_nesting.mmd]": 0.002969540888443589, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/fan_in_merge.mmd]": 0.012836584122851491, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/fold_double.mmd]": 0.007202500011771917, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/fold_fan_across.mmd]": 0.0035607507452368736, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/fold_stacked_branch.mmd]": 0.004571208730340004, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/funcprofiler_upstream.mmd]": 0.003963416209444404, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/header_nudge.mmd]": 0.0007828329689800739, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/header_side_rotated.mmd]": 0.003453250043094158, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/inrow_skip_breeze.mmd]": 0.001772250048816204, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/inter_row_wrap_clearance.mmd]": 0.0012407079339027405, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/interchange_lane_reorder.mmd]": 0.00721612642519176, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/junction_entry_align.mmd]": 0.0049642079975456, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/junction_entry_collision.mmd]": 0.010111916344612837, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/junction_entry_reversed_fold.mmd]": 0.0015897091943770647, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/junction_fanout_convergence.mmd]": 0.002216667402535677, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/left_entry_up_wrap.mmd]": 0.0008815410546958447, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/left_exit_sink_below.mmd]": 0.0012219578493386507, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0010097508784383535, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.000984791899099946, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0013012499548494816, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.004642166895791888, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0046856270637363195, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_to_tb_top_cross_col.mmd]": 0.006157082272693515, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_to_tb_top_drop.mmd]": 0.0007395830471068621, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0023106669541448355, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_to_tb_top_near_vertical.mmd]": 0.001436249352991581, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_to_tb_top_two_lines.mmd]": 0.000830584205687046, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_top_entry_cross_column.mmd]": 0.0006532499101012945, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007470001000910997, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_around_below_leftmost.mmd]": 0.0038715831469744444, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_bottom_row_bypass.mmd]": 0.0030358340591192245, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_leftmost_sink_branch.mmd]": 0.0015244167298078537, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_offrow_continuation.mmd]": 0.0012783741112798452, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_port_above_approach.mmd]": 0.0024926248006522655, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_pullaway.mmd]": 0.001698166597634554, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_right_entry.mmd]": 0.004794083070009947, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_trunk_out_of_range_section.mmd]": 0.005476916907355189, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/merge_trunk_over_low_section.mmd]": 0.001869498984888196, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/mismatched_tracks.mmd]": 0.0012502081226557493, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/mixed_bundle_column.mmd]": 0.0020436670165508986, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/mixed_port_sides.mmd]": 0.0009457918349653482, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/multi_input_convergence.mmd]": 0.0010409990791231394, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/multi_line_bundle.mmd]": 0.0017439171206206083, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0013372499961405993, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/near_vertical_junction_hook.mmd]": 0.003006750252097845, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/off_track_convergence.mmd]": 0.0009929998777806759, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/off_track_convergence_multiline.mmd]": 0.001239249249920249, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/off_track_input_above_consumer.mmd]": 0.003792708972468972, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/parallel_independent.mmd]": 0.000957417069002986, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/peeloff_extra_line_consumer.mmd]": 0.0018903750460594893, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/peeloff_riser_respace.mmd]": 0.0018170010298490524, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/post_convergence_trunk.mmd]": 0.0005526668392121792, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/reconverge_reversed_fold.mmd]": 0.005082248942926526, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/right_entry_from_above.mmd]": 0.0007731672376394272, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/right_entry_from_above_far.mmd]": 0.0018102079629898071, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/right_entry_gap_above_empty_row.mmd]": 0.0016114579048007727, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/right_entry_wrap_no_fan.mmd]": 0.0007084168028086424, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/rl_entry_runway.mmd]": 0.0044370838440954685, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/rnaseq_lite.mmd]": 0.010387875139713287, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/route_around_intervening.mmd]": 0.009737999876961112, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/section_diamond.mmd]": 0.0016156677156686783, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/self_crossing_bridge.mmd]": 0.0010853330604732037, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/shared_sink_parallel.mmd]": 0.003185626119375229, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/single_section.mmd]": 0.000504208030179143, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/stacked_left_exit_drop.mmd]": 0.0006904157344251871, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/stacked_lr_serpentine.mmd]": 0.001154791796579957, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.01156370877288282, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_bottom_entry_flow_start.mmd]": 0.0008394995238631964, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0013023747596889734, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0012290009763091803, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_column_continuation_two_lines.mmd]": 0.0007492080330848694, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_convergence_straight_drop.mmd]": 0.0004736669361591339, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_internal_diagonal.mmd]": 0.0008857089560478926, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_left_exit_step.mmd]": 0.0017228329088538885, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_lr_exit_left.mmd]": 0.0013315000105649233, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_lr_exit_right.mmd]": 0.0012202500365674496, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_passthrough_continuation.mmd]": 0.0005578328855335712, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_passthrough_trunk.mmd]": 0.001597417052835226, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006347494199872017, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_right_entry_stack.mmd]": 0.0011272088158875704, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_trunk_through_fan.mmd]": 0.0005058348178863525, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/tb_two_line_vert_seam.mmd]": 0.0008585001341998577, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/terminal_symmetric_fan.mmd]": 0.000797040993347764, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/terminus_join.mmd]": 0.0003960828762501478, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/top_entry_header_clash.mmd]": 0.0006247498095035553, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/trunk_through_fan.mmd]": 0.0011076671071350574, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/twoline_fanout_up.mmd]": 0.0010665408335626125, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/u_turn_fold.mmd]": 0.002479791874065995, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/uneven_diamond.mmd]": 0.008654542034491897, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/upward_bypass.mmd]": 0.003039542119950056, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/variant_calling.mmd]": 0.0031824589241296053, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/wide_fan_in.mmd]": 0.001308457925915718, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/wide_fan_out.mmd]": 0.0014542511198669672, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/wide_label_fan.mmd]": 0.0005367931444197893, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[topologies/wrapped_label_trunk.mmd]": 0.0036702919751405716, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[trunk_align_matching_bundle.mmd]": 0.0009608753025531769, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[uneven_diamond.mmd]": 0.0005112509243190289, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[variant_calling.mmd]": 0.0015344582498073578, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[variant_calling_tuned.mmd]": 0.00306833372451365, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[variantbenchmarking.mmd]": 0.006032290868461132, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[variantbenchmarking_auto.mmd]": 0.023361500119790435, + "tests/test_layout_invariants.py::test_routes_dont_loop_backwards[variantprioritization.mmd]": 0.0023073749616742134, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[cross_track_interchange.mmd]": 0.0013732090592384338, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[da_pipeline.mmd]": 0.009000374702736735, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[diagonal_labels.mmd]": 0.0018044591415673494, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[diagonal_single_trunk_off_track.mmd]": 0.0018045827746391296, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[differentialabundance.mmd]": 0.0121734996791929, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[differentialabundance_default.mmd]": 0.009252124931663275, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[disconnected_components.mmd]": 0.0011968761682510376, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[epitopeprediction.mmd]": 0.004785249009728432, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[file_icon_fanin.mmd]": 0.0016693328507244587, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[file_icons.mmd]": 0.000808709068223834, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[genomeassembly.mmd]": 0.009125290671363473, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[genomeassembly_organellar.mmd]": 0.009778040926903486, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[genomeassembly_staggered.mmd]": 0.0028055000584572554, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[genomic_pipeline.mmd]": 0.007173666264861822, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[group_labels.mmd]": 0.0020117510575801134, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/02_sections.mmd]": 0.0010502489749342203, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/03_fan_out.mmd]": 0.0017992500215768814, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/03b_fan_in_merge.mmd]": 0.001860958058387041, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/04_directions.mmd]": 0.005685917101800442, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/05_file_icons.mmd]": 0.0010264997836202383, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/05b_multi_icons.mmd]": 0.000976666808128357, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/05c_files_icon.mmd]": 0.0008082080166786909, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/05d_folder_icon.mmd]": 0.0008564160671085119, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/05f_banner_labels.mmd]": 0.0009422930888831615, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/06a_without_hidden.mmd]": 0.001656040083616972, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[guide/06b_with_hidden.mmd]": 0.004255749750882387, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[hlatyping.mmd]": 0.0032625850290060043, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[legend_logo_placement.mmd]": 0.005052582826465368, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[longread_variant_calling.mmd]": 0.014326707925647497, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[marker_styles.mmd]": 0.0027952499222010374, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[multiline_labels.mmd]": 0.0025650837924331427, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[regressions/stacked_collector_fanin.mmd]": 0.3121342503000051, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[rnaseq_auto.mmd]": 0.003967708209529519, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[rnaseq_sections.mmd]": 0.005539873847737908, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[rnaseq_sections_manual.mmd]": 0.006105500040575862, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[tb_file_termini.mmd]": 0.003652875777333975, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[tb_right_exit_feeder_slots.mmd]": 0.0035975000355392694, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/aligner_row_pinned_continuation.mmd]": 0.003199291881173849, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/around_below_ep_col_gt0.mmd]": 0.0032510829623788595, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/around_section_below.mmd]": 0.004253458930179477, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/asymmetric_tree.mmd]": 0.0021588753443211317, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0013995831832289696, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/branch_fold_forward.mmd]": 0.0015575429424643517, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/branch_fold_stability.mmd]": 0.001269458094611764, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bt_exit_top_above.mmd]": 0.0006391669157892466, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bt_exit_top_above_2line.mmd]": 0.0007349171210080385, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bt_perp_entry_below.mmd]": 0.0007062910590320826, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bt_to_lr.mmd]": 0.0011497922241687775, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bt_to_tb.mmd]": 0.001980375964194536, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_fan_in_outer_slot.mmd]": 0.0034874577540904284, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0022162930108606815, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_label_rake.mmd]": 0.001252833055332303, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_label_rake_left.mmd]": 0.0012402499560266733, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_label_rake_wide.mmd]": 0.0012247092090547085, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_leftward_far_side_entry.mmd]": 0.001770250266417861, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_leftward_overflow.mmd]": 0.0037423751782625914, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/bypass_v_tight.mmd]": 0.0010921258945018053, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/clear_channel_target_aware_push.mmd]": 0.0013800831511616707, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/compact_gap_peer_conflict.mmd]": 0.0012330419849604368, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/compact_hidden_passthrough.mmd]": 0.0009869171772152185, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/complex_multipath.mmd]": 0.002797459252178669, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/convergence_stacked_sink.mmd]": 0.0020263749174773693, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/convergent_offrow_exit_climb.mmd]": 0.013308499939739704, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/corridor_narrow_gap_fallback.mmd]": 0.004908666014671326, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/cross_col_top_entry.mmd]": 0.0009400828275829554, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/cross_column_perp_drop.mmd]": 0.000848124036565423, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0007859168108552694, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/cross_row_gap_wrap.mmd]": 0.0017669571097940207, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/deep_linear.mmd]": 0.002323250053450465, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/disjoint_sameline_trunks.mmd]": 0.002227290766313672, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/divergent_fanout_split.mmd]": 0.000973166897892952, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/dogleg_exempt_distinct.mmd]": 0.0013291668146848679, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/dogleg_exempt_sameline.mmd]": 0.0021112500689923763, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/dogleg_twoline_fanout.mmd]": 0.0024842896964401007, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/exit_corner_offset_dogleg.mmd]": 0.0024536678101867437, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/fan_bypass_nesting.mmd]": 0.0025948327966034412, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/fan_in_merge.mmd]": 0.0018685420509427786, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/fold_double.mmd]": 0.006697457982227206, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/fold_fan_across.mmd]": 0.004364250227808952, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/fold_stacked_branch.mmd]": 0.0038465422112494707, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/funcprofiler_upstream.mmd]": 0.005874084075912833, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/header_nudge.mmd]": 0.0009273330215364695, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/header_side_rotated.mmd]": 0.001059916103258729, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/inter_row_wrap_clearance.mmd]": 0.0015925420448184013, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/junction_entry_align.mmd]": 0.0019177498761564493, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/junction_entry_collision.mmd]": 0.0016281662974506617, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/junction_entry_reversed_fold.mmd]": 0.0014014998450875282, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/junction_fanout_convergence.mmd]": 0.0011806669645011425, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/left_entry_up_wrap.mmd]": 0.0037622919771820307, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/left_exit_sink_below.mmd]": 0.007652082946151495, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011617501731961966, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0011662920005619526, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010683750733733177, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.001074083847925067, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0010955007746815681, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_to_tb_top_cross_col.mmd]": 0.000964457867667079, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_to_tb_top_drop.mmd]": 0.0006793329957872629, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008234591223299503, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0022960409987717867, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_to_tb_top_two_lines.mmd]": 0.0021008739713579416, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_top_entry_cross_column.mmd]": 0.0018902509473264217, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0009587919339537621, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_around_below_leftmost.mmd]": 0.005636457819491625, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_bottom_row_bypass.mmd]": 0.0017539579421281815, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_leftmost_sink_branch.mmd]": 0.0015849170740693808, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_offrow_continuation.mmd]": 0.0022543331142514944, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_port_above_approach.mmd]": 0.0012177496682852507, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_pullaway.mmd]": 0.0014422498643398285, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_right_entry.mmd]": 0.0014072079211473465, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_trunk_out_of_range_section.mmd]": 0.0017702076584100723, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/merge_trunk_over_low_section.mmd]": 0.008385499939322472, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/mismatched_tracks.mmd]": 0.0027918752748519182, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/mixed_bundle_column.mmd]": 0.002122665988281369, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/mixed_port_sides.mmd]": 0.0009443741291761398, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/multi_input_convergence.mmd]": 0.007249915739521384, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/multi_line_bundle.mmd]": 0.007149666082113981, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0014525828883051872, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/near_vertical_junction_hook.mmd]": 0.002183459000661969, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/off_track_convergence.mmd]": 0.0009988329838961363, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/off_track_convergence_multiline.mmd]": 0.0012550409883260727, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/off_track_input_above_consumer.mmd]": 0.004022500012069941, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/parallel_independent.mmd]": 0.0010305410251021385, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/peeloff_extra_line_consumer.mmd]": 0.0034718757960945368, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/peeloff_riser_respace.mmd]": 0.001933583989739418, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/reconverge_reversed_fold.mmd]": 0.003756584133952856, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/right_entry_from_above.mmd]": 0.0006730840541422367, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/right_entry_from_above_far.mmd]": 0.0006519998423755169, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/right_entry_gap_above_empty_row.mmd]": 0.00074237328954041, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/right_entry_wrap_no_fan.mmd]": 0.0006443741731345654, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/rl_entry_runway.mmd]": 0.0008486658334732056, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/rnaseq_lite.mmd]": 0.008422000100836158, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/route_around_intervening.mmd]": 0.001144748879596591, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/section_diamond.mmd]": 0.0013195001520216465, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/self_crossing_bridge.mmd]": 0.0009758751839399338, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/shared_sink_parallel.mmd]": 0.006239666836336255, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/stacked_left_exit_drop.mmd]": 0.0008050838951021433, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/stacked_lr_serpentine.mmd]": 0.0011543745640665293, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006724591366946697, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001178000122308731, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0013377498835325241, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_column_continuation_two_lines.mmd]": 0.0007536658085882664, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_internal_diagonal.mmd]": 0.0009004590101540089, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_left_exit_step.mmd]": 0.005038290750235319, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_lr_exit_left.mmd]": 0.0011910421308130026, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_lr_exit_right.mmd]": 0.001189416740089655, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_passthrough_trunk.mmd]": 0.0013205420691519976, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_perp_exit_side_neighbour.mmd]": 0.006183958845213056, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_right_entry_stack.mmd]": 0.0036670411936938763, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/tb_two_line_vert_seam.mmd]": 0.0028962078504264355, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/terminal_symmetric_fan.mmd]": 0.0009090418461710215, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/top_entry_header_clash.mmd]": 0.0006882490124553442, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/trunk_through_fan.mmd]": 0.0011858337093144655, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/twoline_fanout_up.mmd]": 0.0010475828312337399, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/u_turn_fold.mmd]": 0.0027655831072479486, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/upward_bypass.mmd]": 0.0029159579426050186, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/variant_calling.mmd]": 0.0033266679383814335, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/wide_fan_in.mmd]": 0.0013394998386502266, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[topologies/wide_fan_out.mmd]": 0.0014866669662296772, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[trunk_align_matching_bundle.mmd]": 0.0009615421295166016, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[variant_calling.mmd]": 0.0014981250278651714, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[variant_calling_tuned.mmd]": 0.0017243330366909504, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[variantbenchmarking.mmd]": 0.011324416613206267, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[variantbenchmarking_auto.mmd]": 0.005232291994616389, + "tests/test_layout_invariants.py::test_routes_enter_sections_only_at_ports[variantprioritization.mmd]": 0.005184000125154853, + "tests/test_layout_invariants.py::test_row_gap_accommodates_bypass[da_pipeline.mmd]": 0.2159916239324957, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[bubble_forced_label_clears_diagonal.mmd]": 0.00046466593630611897, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[bubble_label_clears_diagonal.mmd]": 0.00043491506949067116, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[bubble_output_above.mmd]": 0.00039999978616833687, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[captioned_sibling_outputs.mmd]": 0.0011121660936623812, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[centered_tracks.mmd]": 0.0004400003235787153, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[cross_track_interchange.mmd]": 0.0007594171911478043, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[da_pipeline.mmd]": 0.0019401260651648045, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[diagonal_labels.mmd]": 0.0008459591772407293, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[diagonal_single_trunk_off_track.mmd]": 0.0009009158238768578, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[differentialabundance.mmd]": 0.00824654195457697, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[differentialabundance_default.mmd]": 0.0019020410254597664, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[directional_flow.mmd]": 0.00045162602327764034, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[disconnected_components.mmd]": 0.002270542783662677, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[epitopeprediction.mmd]": 0.005506082903593779, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[file_icon_fanin.mmd]": 0.0007419160101562738, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[file_icons.mmd]": 0.0012547499500215054, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[font_scale.mmd]": 0.0004274998791515827, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[genomeassembly.mmd]": 0.001337583176791668, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[genomeassembly_organellar.mmd]": 0.0015433751977980137, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[genomeassembly_staggered.mmd]": 0.0012382485438138247, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[genomic_pipeline.mmd]": 0.0028544592205435038, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[group_labels.mmd]": 0.0005974159575998783, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/01_minimal.mmd]": 0.00038899946957826614, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/02_sections.mmd]": 0.0006066239438951015, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/03_fan_out.mmd]": 0.0008914577774703503, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/03b_fan_in_merge.mmd]": 0.0008284579962491989, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/04_directions.mmd]": 0.0036607501097023487, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/05_file_icons.mmd]": 0.0020774577278643847, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/05b_multi_icons.mmd]": 0.004481291864067316, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/05c_files_icon.mmd]": 0.0005699999164789915, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/05d_folder_icon.mmd]": 0.001114418264478445, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/05f_banner_labels.mmd]": 0.0005823341198265553, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/06a_without_hidden.mmd]": 0.0009055831469595432, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[guide/06b_with_hidden.mmd]": 0.0009207921102643013, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[hlatyping.mmd]": 0.0009136658627539873, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[icon_caption_wrap.mmd]": 0.0003519989550113678, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[leaf_file_icon_on_trunk.mmd]": 0.0004027104005217552, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[legend_combo.mmd]": 0.00042850105091929436, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[legend_logo_placement.mmd]": 0.0009052080567926168, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[longread_variant_calling.mmd]": 0.0017387510742992163, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[marker_styles.mmd]": 0.0021687489934265614, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[multiline_labels.mmd]": 0.0005194989498704672, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[off_track_output_branched.mmd]": 0.0004663339350372553, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[off_track_outputs.mmd]": 0.0008381251245737076, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[off_track_outputs_along_trunk.mmd]": 0.00044812378473579884, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[rnaseq_auto.mmd]": 0.0016709573101252317, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[rnaseq_sections.mmd]": 0.002180125331506133, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[rnaseq_sections_manual.mmd]": 0.0022908339742571115, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[rnaseq_simple.mmd]": 0.00033091683872044086, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[simple_pipeline.mmd]": 0.00040650018490850925, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[tb_file_termini.mmd]": 0.0006166659295558929, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[tb_right_exit_feeder_slots.mmd]": 0.0007301669102162123, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/aligner_row_pinned_continuation.mmd]": 0.0010441250633448362, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/around_below_ep_col_gt0.mmd]": 0.00078737479634583, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/around_section_below.mmd]": 0.000625999178737402, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/asymmetric_tree.mmd]": 0.0010614588391035795, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0007556250784546137, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/branch_fold_forward.mmd]": 0.0008978741243481636, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/branch_fold_stability.mmd]": 0.0007526660338044167, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bt_chain.mmd]": 0.00038733403198421, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bt_exit_top_above.mmd]": 0.00046245940029621124, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bt_exit_top_above_2line.mmd]": 0.0004685421008616686, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bt_fork.mmd]": 0.0003612907603383064, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bt_perp_entry_below.mmd]": 0.0004797489382326603, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bt_to_lr.mmd]": 0.00046583404764533043, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bt_to_tb.mmd]": 0.0004692920483648777, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bundle_terminator_continuation.mmd]": 0.00037570809945464134, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_fan_in_outer_slot.mmd]": 0.0014462079852819443, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0007380840834230185, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_label_rake.mmd]": 0.000696208793669939, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_label_rake_left.mmd]": 0.00070033292286098, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_label_rake_wide.mmd]": 0.000695499824360013, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_leftward_far_side_entry.mmd]": 0.0006537081208080053, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_leftward_overflow.mmd]": 0.0006579167675226927, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/bypass_v_tight.mmd]": 0.0005723340436816216, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/clear_channel_target_aware_push.mmd]": 0.0006475842092186213, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/compact_gap_peer_conflict.mmd]": 0.0006583759095519781, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/compact_hidden_passthrough.mmd]": 0.0005953751970082521, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/complex_multipath.mmd]": 0.0012197077739983797, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/convergence_stacked_sink.mmd]": 0.003924000076949596, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/convergent_offrow_exit_climb.mmd]": 0.003896375186741352, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/corridor_narrow_gap_fallback.mmd]": 0.0007495840545743704, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/cross_col_top_entry.mmd]": 0.0005297921597957611, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/cross_column_perp_drop.mmd]": 0.000496250344440341, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/cross_column_perp_drop_far_exit.mmd]": 0.000589749077335, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/cross_row_gap_wrap.mmd]": 0.0008885830175131559, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/deep_linear.mmd]": 0.0013257497921586037, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/disjoint_sameline_trunks.mmd]": 0.0010105830151587725, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/divergent_fanout_split.mmd]": 0.0006461248267441988, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/dogleg_exempt_distinct.mmd]": 0.0007023739162832499, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/dogleg_exempt_sameline.mmd]": 0.00454975082539022, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/dogleg_twoline_fanout.mmd]": 0.0013509148266166449, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/exit_corner_offset_dogleg.mmd]": 0.001714250072836876, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/fan_bypass_nesting.mmd]": 0.0028734600637108088, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/fan_in_merge.mmd]": 0.0009981668554246426, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/fold_double.mmd]": 0.002092124195769429, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/fold_fan_across.mmd]": 0.0017308329697698355, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/fold_stacked_branch.mmd]": 0.001803999999538064, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/funcprofiler_upstream.mmd]": 0.0034702911507338285, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/header_nudge.mmd]": 0.0006812913343310356, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/header_side_rotated.mmd]": 0.0005730409175157547, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/inrow_skip_breeze.mmd]": 0.0004250837955623865, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/inter_row_wrap_clearance.mmd]": 0.0008794988971203566, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/interchange_lane_reorder.mmd]": 0.0006524571217596531, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/junction_entry_align.mmd]": 0.0011601250153034925, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/junction_entry_collision.mmd]": 0.001548208063468337, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/junction_entry_reversed_fold.mmd]": 0.0007913748268038034, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/junction_fanout_convergence.mmd]": 0.001999208703637123, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/left_entry_up_wrap.mmd]": 0.0005376250483095646, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/left_exit_sink_below.mmd]": 0.0011611671652644873, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0016231245826929808, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0018142079934477806, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0008704999927431345, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0006890411023050547, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0006162920035421848, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_to_tb_top_cross_col.mmd]": 0.0018386240117251873, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_to_tb_top_drop.mmd]": 0.0012497080024331808, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0012311260215938091, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0005291251000016928, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_to_tb_top_two_lines.mmd]": 0.000508457887917757, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_top_entry_cross_column.mmd]": 0.0004730003420263529, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0007903340738266706, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_around_below_leftmost.mmd]": 0.0007936672773212194, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_bottom_row_bypass.mmd]": 0.0035925842821598053, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_leftmost_sink_branch.mmd]": 0.0032749169040471315, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_offrow_continuation.mmd]": 0.0006946672219783068, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_port_above_approach.mmd]": 0.00209650001488626, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_pullaway.mmd]": 0.0020661253947764635, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_right_entry.mmd]": 0.0020074578933417797, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_trunk_out_of_range_section.mmd]": 0.000981707125902176, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/merge_trunk_over_low_section.mmd]": 0.0009545427747070789, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/mismatched_tracks.mmd]": 0.0007303340826183558, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/mixed_bundle_column.mmd]": 0.0009674578905105591, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/mixed_port_sides.mmd]": 0.0005845827981829643, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/multi_input_convergence.mmd]": 0.0018361660186201334, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/multi_line_bundle.mmd]": 0.0009747513104230165, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007614593487232924, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/near_vertical_junction_hook.mmd]": 0.0012746260035783052, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/off_track_convergence.mmd]": 0.0006963750347495079, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/off_track_convergence_multiline.mmd]": 0.0007520420476794243, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/off_track_input_above_consumer.mmd]": 0.0017874999903142452, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/parallel_independent.mmd]": 0.000635041855275631, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/peeloff_extra_line_consumer.mmd]": 0.03745620930567384, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/peeloff_riser_respace.mmd]": 0.03078791731968522, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/post_convergence_trunk.mmd]": 0.0008078760001808405, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/reconverge_reversed_fold.mmd]": 0.00864383322186768, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/right_entry_from_above.mmd]": 0.0005275423172861338, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/right_entry_from_above_far.mmd]": 0.0005923330318182707, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/right_entry_gap_above_empty_row.mmd]": 0.0031550407875329256, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/right_entry_wrap_no_fan.mmd]": 0.0005128749180585146, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/rl_entry_runway.mmd]": 0.0005764998495578766, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/rnaseq_lite.mmd]": 0.001673374092206359, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/route_around_intervening.mmd]": 0.000751707935705781, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/section_diamond.mmd]": 0.000810250174254179, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/self_crossing_bridge.mmd]": 0.0006948339287191629, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/shared_sink_parallel.mmd]": 0.0011103751603513956, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/single_section.mmd]": 0.0003602481447160244, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/stacked_left_exit_drop.mmd]": 0.00047104107216000557, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/stacked_lr_serpentine.mmd]": 0.004624541150406003, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.002362124854698777, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_bottom_entry_flow_start.mmd]": 0.0010893330909311771, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0010049999691545963, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007947499398142099, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_column_continuation_two_lines.mmd]": 0.0005183748435229063, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_convergence_straight_drop.mmd]": 0.0003728328738361597, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_internal_diagonal.mmd]": 0.0007685841992497444, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_left_exit_step.mmd]": 0.0011317909229546785, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_lr_exit_left.mmd]": 0.001704416237771511, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_lr_exit_right.mmd]": 0.001695791957899928, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_passthrough_continuation.mmd]": 0.0012240002397447824, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_passthrough_trunk.mmd]": 0.002229624893516302, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0034241259563714266, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_right_entry_stack.mmd]": 0.007606373867020011, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_trunk_through_fan.mmd]": 0.0012492910027503967, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/tb_two_line_vert_seam.mmd]": 0.0006426249165087938, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/terminal_symmetric_fan.mmd]": 0.0005282510537654161, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/terminus_join.mmd]": 0.0003411669749766588, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/top_entry_header_clash.mmd]": 0.0004529990255832672, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/trunk_through_fan.mmd]": 0.0006603747606277466, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/twoline_fanout_up.mmd]": 0.0005885842256247997, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/u_turn_fold.mmd]": 0.002596832811832428, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/uneven_diamond.mmd]": 0.0005714159924536943, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/upward_bypass.mmd]": 0.003921375842764974, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/variant_calling.mmd]": 0.0019785829354077578, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/wide_fan_in.mmd]": 0.0014328337274491787, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/wide_fan_out.mmd]": 0.0008787096012383699, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/wide_label_fan.mmd]": 0.00045841699466109276, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[topologies/wrapped_label_trunk.mmd]": 0.0004337909631431103, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[trunk_align_matching_bundle.mmd]": 0.0006524999625980854, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[uneven_diamond.mmd]": 0.0003896679263561964, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[variant_calling.mmd]": 0.0007982917595654726, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[variant_calling_tuned.mmd]": 0.000903415959328413, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[variantbenchmarking.mmd]": 0.002275249920785427, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[variantbenchmarking_auto.mmd]": 0.005654749693349004, + "tests/test_layout_invariants.py::test_row_gap_between_adjacent_rows[variantprioritization.mmd]": 0.0014432091265916824, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[cross_track_interchange.mmd]": 0.0017322918865829706, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[da_pipeline.mmd]": 0.005959208123385906, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[diagonal_labels.mmd]": 0.0014289577957242727, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[diagonal_single_trunk_off_track.mmd]": 0.0014718330930918455, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[differentialabundance.mmd]": 0.0023235429544001818, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[differentialabundance_default.mmd]": 0.008787916274741292, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[disconnected_components.mmd]": 0.0026533352211117744, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[epitopeprediction.mmd]": 0.005781000014394522, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[file_icon_fanin.mmd]": 0.0019387081265449524, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[file_icons.mmd]": 0.003656374989077449, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[genomeassembly.mmd]": 0.0032661668956279755, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[genomeassembly_organellar.mmd]": 0.0034494567662477493, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[genomeassembly_staggered.mmd]": 0.002598959021270275, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[genomic_pipeline.mmd]": 0.00877104070968926, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[group_labels.mmd]": 0.0024998742155730724, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/02_sections.mmd]": 0.00236220913939178, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/03_fan_out.mmd]": 0.003592291846871376, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/03b_fan_in_merge.mmd]": 0.0017304171342402697, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/04_directions.mmd]": 0.0012135012075304985, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/05_file_icons.mmd]": 0.0006719578523188829, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/05b_multi_icons.mmd]": 0.0007339997682720423, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/05c_files_icon.mmd]": 0.0006798750255256891, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/05d_folder_icon.mmd]": 0.0008142502047121525, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/05f_banner_labels.mmd]": 0.0022579170763492584, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/06a_without_hidden.mmd]": 0.001413417048752308, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[guide/06b_with_hidden.mmd]": 0.0010645012371242046, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[hlatyping.mmd]": 0.00136591587215662, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[legend_logo_placement.mmd]": 0.001977374777197838, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[longread_variant_calling.mmd]": 0.003815083997324109, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[marker_styles.mmd]": 0.0008382501546293497, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[multiline_labels.mmd]": 0.0007663329597562551, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[rnaseq_auto.mmd]": 0.002208748832345009, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[rnaseq_sections.mmd]": 0.011925625149160624, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[rnaseq_sections_manual.mmd]": 0.01584679214283824, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[tb_file_termini.mmd]": 0.0008958750404417515, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[tb_right_exit_feeder_slots.mmd]": 0.0013884149957448244, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/aligner_row_pinned_continuation.mmd]": 0.0011915003415197134, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/around_below_ep_col_gt0.mmd]": 0.0007728338241577148, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/around_section_below.mmd]": 0.0007406671065837145, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/asymmetric_tree.mmd]": 0.007926668040454388, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0010848739184439182, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/branch_fold_forward.mmd]": 0.0014384160749614239, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/branch_fold_stability.mmd]": 0.003064041957259178, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bt_exit_top_above.mmd]": 0.0008772499859333038, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bt_exit_top_above_2line.mmd]": 0.0005832500755786896, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bt_perp_entry_below.mmd]": 0.0005732499994337559, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bt_to_lr.mmd]": 0.0005888750310987234, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bt_to_tb.mmd]": 0.0005698329769074917, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_fan_in_outer_slot.mmd]": 0.032412667060270905, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_gap2_rightward_overflow.mmd]": 0.003190917195752263, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_label_rake.mmd]": 0.0010387508664280176, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_label_rake_left.mmd]": 0.0009619577322155237, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_label_rake_wide.mmd]": 0.0009260419756174088, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_leftward_far_side_entry.mmd]": 0.0009110420942306519, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_leftward_overflow.mmd]": 0.0008877080399543047, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/bypass_v_tight.mmd]": 0.0007801249157637358, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/clear_channel_target_aware_push.mmd]": 0.0008427489083260298, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/compact_gap_peer_conflict.mmd]": 0.013212124118581414, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/compact_hidden_passthrough.mmd]": 0.0008061660919338465, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/complex_multipath.mmd]": 0.006877833046019077, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/convergence_stacked_sink.mmd]": 0.0013583751861006021, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/convergent_offrow_exit_climb.mmd]": 0.0035000010393559933, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/corridor_narrow_gap_fallback.mmd]": 0.000818875152617693, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/cross_col_top_entry.mmd]": 0.0005530831404030323, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/cross_column_perp_drop.mmd]": 0.0005486670415848494, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0005325418896973133, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/cross_row_gap_wrap.mmd]": 0.0010734156239777803, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/deep_linear.mmd]": 0.002420583041384816, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/disjoint_sameline_trunks.mmd]": 0.0011035411152988672, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/divergent_fanout_split.mmd]": 0.0006522089242935181, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/dogleg_exempt_distinct.mmd]": 0.0008242919575423002, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/dogleg_exempt_sameline.mmd]": 0.0007109579164534807, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/dogleg_twoline_fanout.mmd]": 0.0007567091379314661, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/exit_corner_offset_dogleg.mmd]": 0.0008239578455686569, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/fan_bypass_nesting.mmd]": 0.0014922500122338533, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/fan_in_merge.mmd]": 0.0010322919115424156, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/fold_double.mmd]": 0.002646791283041239, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/fold_fan_across.mmd]": 0.004392124945297837, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/fold_stacked_branch.mmd]": 0.0023066250141710043, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/funcprofiler_upstream.mmd]": 0.0028003330808132887, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/header_nudge.mmd]": 0.0007457497995346785, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/header_side_rotated.mmd]": 0.0007010418921709061, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/inter_row_wrap_clearance.mmd]": 0.00189662491902709, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/junction_entry_align.mmd]": 0.0013025829102844, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/junction_entry_collision.mmd]": 0.001102582085877657, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/junction_entry_reversed_fold.mmd]": 0.0014053329359740019, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/junction_fanout_convergence.mmd]": 0.0034948738757520914, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/left_entry_up_wrap.mmd]": 0.0021910821087658405, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/left_exit_sink_below.mmd]": 0.0011169158387929201, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0015787500888109207, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0012382508721202612, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.00083108339458704, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0007662910502403975, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0007400000467896461, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_to_tb_top_cross_col.mmd]": 0.0007126659620553255, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_to_tb_top_drop.mmd]": 0.0005613761022686958, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0006040411535650492, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0005602489691227674, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_to_tb_top_two_lines.mmd]": 0.0006286259740591049, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_top_entry_cross_column.mmd]": 0.0005699999164789915, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0006239158101379871, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_around_below_leftmost.mmd]": 0.000984417274594307, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_bottom_row_bypass.mmd]": 0.0012391672935336828, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_leftmost_sink_branch.mmd]": 0.0020811669528484344, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_offrow_continuation.mmd]": 0.0015760408714413643, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_port_above_approach.mmd]": 0.0014270821120589972, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_pullaway.mmd]": 0.0010665412992238998, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_right_entry.mmd]": 0.0009769578464329243, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_trunk_out_of_range_section.mmd]": 0.0011800839565694332, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/merge_trunk_over_low_section.mmd]": 0.0011321671772748232, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/mismatched_tracks.mmd]": 0.0008836667984724045, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/mixed_bundle_column.mmd]": 0.0012767077423632145, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/mixed_port_sides.mmd]": 0.0007533750031143427, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/multi_input_convergence.mmd]": 0.0007710012141615152, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/multi_line_bundle.mmd]": 0.0012512910179793835, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0009018327109515667, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/near_vertical_junction_hook.mmd]": 0.0008295406587421894, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/off_track_convergence.mmd]": 0.0007749993819743395, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/off_track_convergence_multiline.mmd]": 0.0018978759180754423, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/off_track_input_above_consumer.mmd]": 0.0023978326935321093, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/parallel_independent.mmd]": 0.0008095419034361839, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/peeloff_extra_line_consumer.mmd]": 0.0009259169455617666, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/peeloff_riser_respace.mmd]": 0.000890625175088644, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/reconverge_reversed_fold.mmd]": 0.0023006261326372623, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/right_entry_from_above.mmd]": 0.0005604999605566263, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/right_entry_from_above_far.mmd]": 0.0005497499369084835, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/right_entry_gap_above_empty_row.mmd]": 0.000623208237811923, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/right_entry_wrap_no_fan.mmd]": 0.0005442511755973101, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/rl_entry_runway.mmd]": 0.0006800431292504072, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/rnaseq_lite.mmd]": 0.004738416755571961, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/route_around_intervening.mmd]": 0.0010860832408070564, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/section_diamond.mmd]": 0.0017128332983702421, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/self_crossing_bridge.mmd]": 0.0009396250825375319, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/shared_sink_parallel.mmd]": 0.0014778331387788057, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/stacked_left_exit_drop.mmd]": 0.0005769156850874424, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/stacked_lr_serpentine.mmd]": 0.0008847080171108246, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_bottom_entry_flow_start.mmd]": 0.0005540421698242426, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.00074629089795053, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0009194165468215942, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_column_continuation_two_lines.mmd]": 0.0010522922966629267, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_internal_diagonal.mmd]": 0.0007040002383291721, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_left_exit_step.mmd]": 0.0009997508022934198, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_lr_exit_left.mmd]": 0.0007602081168442965, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_lr_exit_right.mmd]": 0.0007525007240474224, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_passthrough_trunk.mmd]": 0.0007134589832276106, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_perp_exit_side_neighbour.mmd]": 0.007310583954676986, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_right_entry_stack.mmd]": 0.006432749098166823, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/tb_two_line_vert_seam.mmd]": 0.0006782496348023415, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/terminal_symmetric_fan.mmd]": 0.0006859160494059324, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/top_entry_header_clash.mmd]": 0.0005419577937573195, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/trunk_through_fan.mmd]": 0.00086424988694489, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/twoline_fanout_up.mmd]": 0.0037171258591115475, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/u_turn_fold.mmd]": 0.0020314990542829037, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/upward_bypass.mmd]": 0.008983833016827703, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/variant_calling.mmd]": 0.006209959276020527, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/wide_fan_in.mmd]": 0.001452291151508689, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[topologies/wide_fan_out.mmd]": 0.002499750116840005, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[trunk_align_matching_bundle.mmd]": 0.0010490422137081623, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[variant_calling.mmd]": 0.0011958340182900429, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[variant_calling_tuned.mmd]": 0.0011918751988559961, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[variantbenchmarking.mmd]": 0.002597581595182419, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[variantbenchmarking_auto.mmd]": 0.0025762920267879963, + "tests/test_layout_invariants.py::test_row_trunk_marker_cy_consistent[variantprioritization.mmd]": 0.00966429221443832, + "tests/test_layout_invariants.py::test_section1_below_trunk_compact[da_pipeline.mmd]": 0.001972706988453865, + "tests/test_layout_invariants.py::test_section1_input_above_trunk[da_pipeline.mmd]": 0.0020266666542738676, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-bubble_forced_label_clears_diagonal.mmd]": 0.000545792281627655, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-bubble_label_clears_diagonal.mmd]": 0.000489208847284317, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-bubble_output_above.mmd]": 0.00044074980542063713, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-captioned_sibling_outputs.mmd]": 0.00043966597877442837, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-centered_tracks.mmd]": 0.0004875422455370426, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-cross_track_interchange.mmd]": 0.0008072499185800552, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-da_pipeline.mmd]": 0.0018413739744573832, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-diagonal_labels.mmd]": 0.005981832975521684, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-diagonal_single_trunk_off_track.mmd]": 0.0009178761392831802, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-differentialabundance.mmd]": 0.002031124895438552, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-differentialabundance_default.mmd]": 0.0028417068533599377, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-directional_flow.mmd]": 0.0008304170332849026, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-disconnected_components.mmd]": 0.0007904171943664551, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-epitopeprediction.mmd]": 0.007431917125359178, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-file_icon_fanin.mmd]": 0.000785500044003129, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-file_icons.mmd]": 0.0006563751958310604, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-font_scale.mmd]": 0.00041125016286969185, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-genomeassembly.mmd]": 0.0015082901809364557, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-genomeassembly_organellar.mmd]": 0.009524668101221323, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-genomeassembly_staggered.mmd]": 0.0012925001792609692, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-genomic_pipeline.mmd]": 0.010135916993021965, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-group_labels.mmd]": 0.0006348751485347748, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/01_minimal.mmd]": 0.00040270923636853695, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/02_sections.mmd]": 0.0006471667438745499, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/03_fan_out.mmd]": 0.0009202912915498018, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/03b_fan_in_merge.mmd]": 0.0009257909841835499, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/04_directions.mmd]": 0.0011082093697041273, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/05_file_icons.mmd]": 0.0008972079958766699, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/05b_multi_icons.mmd]": 0.0006179600022733212, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/05c_files_icon.mmd]": 0.0005684169009327888, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/05d_folder_icon.mmd]": 0.0005533329676836729, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/05f_banner_labels.mmd]": 0.0005914159119129181, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/06a_without_hidden.mmd]": 0.0007397090084850788, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-guide/06b_with_hidden.mmd]": 0.0007601657416671515, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-hlatyping.mmd]": 0.0009303330443799496, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-icon_caption_wrap.mmd]": 0.0015174169093370438, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-leaf_file_icon_on_trunk.mmd]": 0.001245291205123067, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-legend_combo.mmd]": 0.0004614582285284996, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-legend_logo_placement.mmd]": 0.000965918181464076, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-longread_variant_calling.mmd]": 0.0019033749122172594, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-marker_styles.mmd]": 0.0006804587319493294, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-multiline_labels.mmd]": 0.0014385818503797054, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-off_track_output_branched.mmd]": 0.0006310830358415842, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-off_track_outputs.mmd]": 0.0005058329552412033, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-off_track_outputs_along_trunk.mmd]": 0.010983957909047604, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-rnaseq_auto.mmd]": 0.0016601241659373045, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-rnaseq_sections.mmd]": 0.005020959069952369, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-rnaseq_sections_manual.mmd]": 0.007993959123268723, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-rnaseq_simple.mmd]": 0.0004818758461624384, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-simple_pipeline.mmd]": 0.0011803340166807175, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-tb_file_termini.mmd]": 0.0018694568425416946, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-tb_right_exit_feeder_slots.mmd]": 0.0007825829088687897, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/aligner_row_pinned_continuation.mmd]": 0.001426375936716795, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/around_below_ep_col_gt0.mmd]": 0.0006802079733461142, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/around_section_below.mmd]": 0.0006390828639268875, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/asymmetric_tree.mmd]": 0.0011212090030312538, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bottom_row_climb_clear_corridor.mmd]": 0.000802250113338232, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/branch_fold_forward.mmd]": 0.000909165944904089, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/branch_fold_stability.mmd]": 0.0007898339536041021, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bt_chain.mmd]": 0.011483582900837064, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bt_exit_top_above.mmd]": 0.0006269582081586123, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bt_exit_top_above_2line.mmd]": 0.0006747918669134378, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bt_fork.mmd]": 0.00042795902118086815, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bt_perp_entry_below.mmd]": 0.0005202919710427523, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bt_to_lr.mmd]": 0.0005342080257833004, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bt_to_tb.mmd]": 0.0005569581408053637, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bundle_terminator_continuation.mmd]": 0.0013186652213335037, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_fan_in_outer_slot.mmd]": 0.0020000000949949026, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_gap2_rightward_overflow.mmd]": 0.004826292162761092, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_label_rake.mmd]": 0.0010772489476948977, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_label_rake_left.mmd]": 0.0008046245202422142, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_label_rake_wide.mmd]": 0.0007632505148649216, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_leftward_far_side_entry.mmd]": 0.0007101672235876322, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_leftward_overflow.mmd]": 0.0006859167478978634, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/bypass_v_tight.mmd]": 0.0006279179360717535, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/clear_channel_target_aware_push.mmd]": 0.0007045830134302378, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/compact_gap_peer_conflict.mmd]": 0.0009755820501595736, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/compact_hidden_passthrough.mmd]": 0.0007267922628670931, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/complex_multipath.mmd]": 0.0052388329058885574, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/convergence_stacked_sink.mmd]": 0.0022274989169090986, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/convergent_offrow_exit_climb.mmd]": 0.0018570851534605026, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/corridor_narrow_gap_fallback.mmd]": 0.000656957970932126, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/cross_col_top_entry.mmd]": 0.0005311248824000359, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/cross_column_perp_drop.mmd]": 0.002057417295873165, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/cross_column_perp_drop_far_exit.mmd]": 0.0005773340817540884, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/cross_row_gap_wrap.mmd]": 0.0009495830163359642, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/deep_linear.mmd]": 0.001326208934187889, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/disjoint_sameline_trunks.mmd]": 0.0010497509501874447, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/divergent_fanout_split.mmd]": 0.0005990408826619387, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/dogleg_exempt_distinct.mmd]": 0.0007130000740289688, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/dogleg_exempt_sameline.mmd]": 0.0005981249269098043, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/dogleg_twoline_fanout.mmd]": 0.0005963330622762442, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/exit_corner_offset_dogleg.mmd]": 0.000683874124661088, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/fan_bypass_nesting.mmd]": 0.0011587499175220728, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/fan_in_merge.mmd]": 0.0008922501001507044, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/fold_double.mmd]": 0.0020820002537220716, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/fold_fan_across.mmd]": 0.003406875068321824, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/fold_stacked_branch.mmd]": 0.0018155421130359173, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/funcprofiler_upstream.mmd]": 0.0012391249183565378, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/header_nudge.mmd]": 0.0005665419157594442, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/header_side_rotated.mmd]": 0.0024712919257581234, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/inrow_skip_breeze.mmd]": 0.0023278328590095043, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/inter_row_wrap_clearance.mmd]": 0.0018027499318122864, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/interchange_lane_reorder.mmd]": 0.0005352080333977938, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/junction_entry_align.mmd]": 0.0011246660724282265, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/junction_entry_collision.mmd]": 0.0008202490862458944, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/junction_entry_reversed_fold.mmd]": 0.0007373341359198093, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/junction_fanout_convergence.mmd]": 0.0006197909824550152, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/left_entry_up_wrap.mmd]": 0.0005034590139985085, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/left_exit_sink_below.mmd]": 0.0007481670472770929, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006071249954402447, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0005780409555882215, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006134579889476299, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.00973129109479487, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_perp_top_exit_side_entry.mmd]": 0.0007001259364187717, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_to_tb_top_cross_col.mmd]": 0.0006141248159110546, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_to_tb_top_drop.mmd]": 0.0005169601645320654, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0005352513398975134, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004852502606809139, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_to_tb_top_two_lines.mmd]": 0.0005283320788294077, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_top_entry_cross_column.mmd]": 0.000505917239934206, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/lr_top_entry_cross_column_two_line.mmd]": 0.000501957954838872, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_around_below_leftmost.mmd]": 0.0007624167483299971, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_bottom_row_bypass.mmd]": 0.0038092914037406445, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_leftmost_sink_branch.mmd]": 0.004158376017585397, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_offrow_continuation.mmd]": 0.0007831661496311426, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_port_above_approach.mmd]": 0.000801917165517807, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_pullaway.mmd]": 0.000846206909045577, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_right_entry.mmd]": 0.0008209999650716782, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_trunk_out_of_range_section.mmd]": 0.000996665796265006, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/merge_trunk_over_low_section.mmd]": 0.0009317498188465834, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/mismatched_tracks.mmd]": 0.0007369171362370253, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/mixed_bundle_column.mmd]": 0.0009890832006931305, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/mixed_port_sides.mmd]": 0.0030060429126024246, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/multi_input_convergence.mmd]": 0.0008119570557028055, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/multi_line_bundle.mmd]": 0.0008872922044247389, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/multicarrier_offrow_exit_climb.mmd]": 0.000795707805082202, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/near_vertical_junction_hook.mmd]": 0.000837832922115922, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/off_track_convergence.mmd]": 0.0020162088330835104, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/off_track_convergence_multiline.mmd]": 0.0008152511436492205, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/off_track_input_above_consumer.mmd]": 0.0021942921448498964, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/parallel_independent.mmd]": 0.0007415409199893475, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/peeloff_extra_line_consumer.mmd]": 0.0008852919563651085, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/peeloff_riser_respace.mmd]": 0.0026140420231968164, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/post_convergence_trunk.mmd]": 0.0014402917586266994, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/reconverge_reversed_fold.mmd]": 0.0032209577038884163, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/right_entry_from_above.mmd]": 0.0005250831600278616, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/right_entry_from_above_far.mmd]": 0.0032769162207841873, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/right_entry_gap_above_empty_row.mmd]": 0.0007491239812225103, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/right_entry_wrap_no_fan.mmd]": 0.0006054157856851816, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/rl_entry_runway.mmd]": 0.0006091680843383074, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/rnaseq_lite.mmd]": 0.0019868738017976284, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/route_around_intervening.mmd]": 0.0006629182025790215, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/section_diamond.mmd]": 0.002498334040865302, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/self_crossing_bridge.mmd]": 0.002793709049001336, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/shared_sink_parallel.mmd]": 0.0018685839604586363, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/single_section.mmd]": 0.00042562512680888176, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/stacked_left_exit_drop.mmd]": 0.0005315840244293213, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/stacked_lr_serpentine.mmd]": 0.0007919170893728733, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007747921627014875, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_bottom_entry_flow_start.mmd]": 0.00048095802776515484, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0005948329344391823, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007336651906371117, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_column_continuation_two_lines.mmd]": 0.00048775109462440014, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_convergence_straight_drop.mmd]": 0.0008763337973505259, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_internal_diagonal.mmd]": 0.0006364162545651197, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_left_exit_step.mmd]": 0.0008371660951524973, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_lr_exit_left.mmd]": 0.0006483751349151134, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_lr_exit_right.mmd]": 0.0006250429432839155, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_passthrough_continuation.mmd]": 0.0005665009375661612, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_passthrough_trunk.mmd]": 0.0006151667330414057, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_perp_exit_side_neighbour.mmd]": 0.00048450008034706116, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_right_entry_stack.mmd]": 0.0006723329424858093, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_trunk_through_fan.mmd]": 0.0003986670635640621, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/tb_two_line_vert_seam.mmd]": 0.0005031249020248652, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/terminal_symmetric_fan.mmd]": 0.0005311248824000359, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/terminus_join.mmd]": 0.00034445803612470627, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/top_entry_header_clash.mmd]": 0.0004815412685275078, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/trunk_through_fan.mmd]": 0.0006784591823816299, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/twoline_fanout_up.mmd]": 0.0006263758987188339, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/u_turn_fold.mmd]": 0.0015345008578151464, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/uneven_diamond.mmd]": 0.0003926260396838188, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/upward_bypass.mmd]": 0.000986292026937008, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/variant_calling.mmd]": 0.001536166062578559, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/wide_fan_in.mmd]": 0.006558082764968276, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/wide_fan_out.mmd]": 0.0019062082283198833, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/wide_label_fan.mmd]": 0.0004544169642031193, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-topologies/wrapped_label_trunk.mmd]": 0.00045712501741945744, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-trunk_align_matching_bundle.mmd]": 0.0008920009713619947, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-uneven_diamond.mmd]": 0.0004416659940034151, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-variant_calling.mmd]": 0.0011641671881079674, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-variant_calling_tuned.mmd]": 0.001262750942260027, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-variantbenchmarking.mmd]": 0.0023838751949369907, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-variantbenchmarking_auto.mmd]": 0.014499042183160782, + "tests/test_layout_invariants.py::test_section_bbox_contains_all_content[default-variantprioritization.mmd]": 0.0025197912473231554, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[bubble_forced_label_clears_diagonal.mmd]": 0.0007330419030040503, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[bubble_label_clears_diagonal.mmd]": 0.0013137930072844028, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[bubble_output_above.mmd]": 0.0006042500026524067, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[captioned_sibling_outputs.mmd]": 0.0007631259504705667, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[centered_tracks.mmd]": 0.0004592500627040863, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[cross_track_interchange.mmd]": 0.0007657499518245459, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[da_pipeline.mmd]": 0.0029583328869193792, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[diagonal_labels.mmd]": 0.0008907930459827185, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[diagonal_single_trunk_off_track.mmd]": 0.0009673750028014183, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[differentialabundance.mmd]": 0.0023861669469624758, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[differentialabundance_default.mmd]": 0.004369082860648632, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[directional_flow.mmd]": 0.0010859172325581312, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[disconnected_components.mmd]": 0.0007839580066502094, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[epitopeprediction.mmd]": 0.0011086659505963326, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[file_icon_fanin.mmd]": 0.0008125826716423035, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[file_icons.mmd]": 0.000544500071555376, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[font_scale.mmd]": 0.0003947499208152294, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[genomeassembly.mmd]": 0.001340542919933796, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[genomeassembly_organellar.mmd]": 0.003008000086992979, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[genomeassembly_staggered.mmd]": 0.001254499889910221, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[genomic_pipeline.mmd]": 0.006674665957689285, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[group_labels.mmd]": 0.0015455428510904312, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/01_minimal.mmd]": 0.0009505827911198139, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/02_sections.mmd]": 0.001872332999482751, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/03_fan_out.mmd]": 0.0012127510271966457, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/03b_fan_in_merge.mmd]": 0.0009242508094757795, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/04_directions.mmd]": 0.00093850027769804, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/05_file_icons.mmd]": 0.0005520840641111135, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/05b_multi_icons.mmd]": 0.000591623829677701, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/05c_files_icon.mmd]": 0.0006610837299376726, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/05d_folder_icon.mmd]": 0.0023761249613016844, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/05f_banner_labels.mmd]": 0.002007083036005497, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/06a_without_hidden.mmd]": 0.000802499009296298, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[guide/06b_with_hidden.mmd]": 0.0007402088958770037, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[hlatyping.mmd]": 0.000998958246782422, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[icon_caption_wrap.mmd]": 0.00045849988237023354, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[leaf_file_icon_on_trunk.mmd]": 0.003386208787560463, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[legend_combo.mmd]": 0.0006007498595863581, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[legend_logo_placement.mmd]": 0.0010559158399701118, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[longread_variant_calling.mmd]": 0.00443233409896493, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[marker_styles.mmd]": 0.0007594171911478043, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[multiline_labels.mmd]": 0.0014180419966578484, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[off_track_output_branched.mmd]": 0.0010755837429314852, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[off_track_outputs.mmd]": 0.0005644161719828844, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[off_track_outputs_along_trunk.mmd]": 0.000461166026070714, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[rnaseq_auto.mmd]": 0.003011540975421667, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[rnaseq_sections.mmd]": 0.0024040001444518566, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[rnaseq_sections_manual.mmd]": 0.005962292198091745, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[rnaseq_simple.mmd]": 0.0005440011154860258, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[simple_pipeline.mmd]": 0.0015486667398363352, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[tb_file_termini.mmd]": 0.002487249905243516, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[tb_right_exit_feeder_slots.mmd]": 0.0031039987225085497, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/aligner_row_pinned_continuation.mmd]": 0.0008911262266337872, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/around_below_ep_col_gt0.mmd]": 0.0006020001601427794, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/around_section_below.mmd]": 0.0005975826643407345, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/asymmetric_tree.mmd]": 0.0010486249811947346, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0008236670400947332, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/branch_fold_forward.mmd]": 0.0009354590438306332, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/branch_fold_stability.mmd]": 0.0007858751341700554, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bt_chain.mmd]": 0.00036670826375484467, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bt_exit_top_above.mmd]": 0.00048737600445747375, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bt_exit_top_above_2line.mmd]": 0.0005074592772871256, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bt_fork.mmd]": 0.0003822918515652418, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bt_perp_entry_below.mmd]": 0.0005072918720543385, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bt_to_lr.mmd]": 0.00048341695219278336, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bt_to_tb.mmd]": 0.00048441626131534576, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bundle_terminator_continuation.mmd]": 0.00034683384001255035, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_fan_in_outer_slot.mmd]": 0.0014507921878248453, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_gap2_rightward_overflow.mmd]": 0.012462458806112409, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_label_rake.mmd]": 0.004382291110232472, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_label_rake_left.mmd]": 0.0008389570284634829, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_label_rake_wide.mmd]": 0.0009160831104964018, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_leftward_far_side_entry.mmd]": 0.0007937089540064335, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_leftward_overflow.mmd]": 0.0007344987243413925, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/bypass_v_tight.mmd]": 0.000626708148047328, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/clear_channel_target_aware_push.mmd]": 0.0034921676851809025, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/compact_gap_peer_conflict.mmd]": 0.0019329150673002005, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/compact_hidden_passthrough.mmd]": 0.000962583115324378, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/complex_multipath.mmd]": 0.00782054103910923, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/convergence_stacked_sink.mmd]": 0.004910207120701671, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/convergent_offrow_exit_climb.mmd]": 0.006927791982889175, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/corridor_narrow_gap_fallback.mmd]": 0.0017490419559180737, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/cross_col_top_entry.mmd]": 0.0005396667402237654, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/cross_column_perp_drop.mmd]": 0.0005195420235395432, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0005193739198148251, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/cross_row_gap_wrap.mmd]": 0.0009248761925846338, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/deep_linear.mmd]": 0.0013221260160207748, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/disjoint_sameline_trunks.mmd]": 0.0008071658667176962, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/divergent_fanout_split.mmd]": 0.0013904571533203125, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/dogleg_exempt_distinct.mmd]": 0.0007148750592023134, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/dogleg_exempt_sameline.mmd]": 0.0009602499194443226, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/dogleg_twoline_fanout.mmd]": 0.0007740000728517771, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/exit_corner_offset_dogleg.mmd]": 0.0008162499871104956, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/fan_bypass_nesting.mmd]": 0.0014643757604062557, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/fan_in_merge.mmd]": 0.0019450820982456207, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/fold_double.mmd]": 0.0021214999724179506, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/fold_fan_across.mmd]": 0.0016952920705080032, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/fold_stacked_branch.mmd]": 0.003254375886172056, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/funcprofiler_upstream.mmd]": 0.0012664170935750008, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/header_nudge.mmd]": 0.000567625043913722, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/header_side_rotated.mmd]": 0.0005593339446932077, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/inrow_skip_breeze.mmd]": 0.00037979218177497387, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/inter_row_wrap_clearance.mmd]": 0.0020703740883618593, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/interchange_lane_reorder.mmd]": 0.001802707789465785, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/junction_entry_align.mmd]": 0.0011034170165657997, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/junction_entry_collision.mmd]": 0.0008507920429110527, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/junction_entry_reversed_fold.mmd]": 0.0007132501341402531, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/junction_fanout_convergence.mmd]": 0.0014822089578956366, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/left_entry_up_wrap.mmd]": 0.0005603330209851265, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/left_exit_sink_below.mmd]": 0.0007481260690838099, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006154587026685476, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0005834992043673992, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006019598804414272, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0005991670768707991, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005664590280503035, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005669991951435804, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_to_tb_top_drop.mmd]": 0.0004832909908145666, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0009472502861171961, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004870421253144741, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_to_tb_top_two_lines.mmd]": 0.0004978340584784746, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_top_entry_cross_column.mmd]": 0.0004758741706609726, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005039169918745756, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_around_below_leftmost.mmd]": 0.0007178329396992922, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_bottom_row_bypass.mmd]": 0.0007847507949918509, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_leftmost_sink_branch.mmd]": 0.0009482072200626135, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_offrow_continuation.mmd]": 0.0006574178114533424, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_port_above_approach.mmd]": 0.0045026668813079596, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_pullaway.mmd]": 0.0011246679350733757, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_right_entry.mmd]": 0.0007994577754288912, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_trunk_out_of_range_section.mmd]": 0.0008804581593722105, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/merge_trunk_over_low_section.mmd]": 0.0008996238466352224, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/mismatched_tracks.mmd]": 0.0007061657961457968, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/mixed_bundle_column.mmd]": 0.0009568748064339161, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/mixed_port_sides.mmd]": 0.0005688327364623547, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/multi_input_convergence.mmd]": 0.0006417897529900074, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/multi_line_bundle.mmd]": 0.0008264591451734304, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007177079096436501, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/near_vertical_junction_hook.mmd]": 0.00063699996098876, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/off_track_convergence.mmd]": 0.0006364998407661915, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/off_track_convergence_multiline.mmd]": 0.0007009170949459076, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/off_track_input_above_consumer.mmd]": 0.0017161672003567219, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/parallel_independent.mmd]": 0.0006285838317126036, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/peeloff_extra_line_consumer.mmd]": 0.0006630420684814453, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/peeloff_riser_respace.mmd]": 0.000673915958032012, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/post_convergence_trunk.mmd]": 0.005922999000176787, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/reconverge_reversed_fold.mmd]": 0.004540708847343922, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/right_entry_from_above.mmd]": 0.0018427921459078789, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/right_entry_from_above_far.mmd]": 0.0009258762001991272, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006208738777786493, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/right_entry_wrap_no_fan.mmd]": 0.0016130416188389063, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/rl_entry_runway.mmd]": 0.0008023341652005911, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/rnaseq_lite.mmd]": 0.0013532086741179228, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/route_around_intervening.mmd]": 0.0006457490380853415, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/section_diamond.mmd]": 0.0008256658911705017, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/self_crossing_bridge.mmd]": 0.0013040420599281788, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/shared_sink_parallel.mmd]": 0.02359920903109014, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/single_section.mmd]": 0.0004943741951137781, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/stacked_left_exit_drop.mmd]": 0.0005023747216910124, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/stacked_lr_serpentine.mmd]": 0.001169540686532855, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0008100839331746101, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_bottom_entry_flow_start.mmd]": 0.0004905411042273045, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0006069589871913195, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007170420140028, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_column_continuation_two_lines.mmd]": 0.0038114588242024183, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_convergence_straight_drop.mmd]": 0.0019145007245242596, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_internal_diagonal.mmd]": 0.0011612910311669111, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_left_exit_step.mmd]": 0.0011950829066336155, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_lr_exit_left.mmd]": 0.0006796240340918303, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_lr_exit_right.mmd]": 0.0007113351020962, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_passthrough_continuation.mmd]": 0.0004310836084187031, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_passthrough_trunk.mmd]": 0.000662956852465868, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_perp_exit_side_neighbour.mmd]": 0.000452875392511487, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_right_entry_stack.mmd]": 0.000654999865218997, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_trunk_through_fan.mmd]": 0.00046779075637459755, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/tb_two_line_vert_seam.mmd]": 0.0016054592560976744, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/terminal_symmetric_fan.mmd]": 0.0009724169503897429, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/terminus_join.mmd]": 0.0003637080080807209, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/top_entry_header_clash.mmd]": 0.0004787081852555275, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/trunk_through_fan.mmd]": 0.0008437929209321737, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/twoline_fanout_up.mmd]": 0.0006055841222405434, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/u_turn_fold.mmd]": 0.0015910009387880564, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/uneven_diamond.mmd]": 0.00040212576277554035, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/upward_bypass.mmd]": 0.000997000141069293, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/variant_calling.mmd]": 0.0015549988020211458, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/wide_fan_in.mmd]": 0.004809708800166845, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/wide_fan_out.mmd]": 0.0020858333446085453, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/wide_label_fan.mmd]": 0.0004623741842806339, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[topologies/wrapped_label_trunk.mmd]": 0.0004447498358786106, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[trunk_align_matching_bundle.mmd]": 0.0006981238257139921, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[uneven_diamond.mmd]": 0.001195291057229042, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[variant_calling.mmd]": 0.004901041043922305, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[variant_calling_tuned.mmd]": 0.0025557922199368477, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[variantbenchmarking.mmd]": 0.0024344578851014376, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[variantbenchmarking_auto.mmd]": 0.0025285000447183847, + "tests/test_layout_invariants.py::test_section_bbox_has_bottom_padding[variantprioritization.mmd]": 0.0010131672024726868, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[bubble_forced_label_clears_diagonal.mmd]": 0.00043954094871878624, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[bubble_label_clears_diagonal.mmd]": 0.0004273762460798025, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[bubble_output_above.mmd]": 0.00040924898348748684, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[captioned_sibling_outputs.mmd]": 0.0004046668764203787, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[centered_tracks.mmd]": 0.0005628746002912521, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[cross_track_interchange.mmd]": 0.0012661260552704334, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[da_pipeline.mmd]": 0.0027652920689433813, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[diagonal_labels.mmd]": 0.003381292102858424, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[diagonal_single_trunk_off_track.mmd]": 0.005139833083376288, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[differentialabundance.mmd]": 0.0022894160356372595, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[differentialabundance_default.mmd]": 0.0020329582039266825, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[directional_flow.mmd]": 0.0004901262000203133, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[disconnected_components.mmd]": 0.0007615829817950726, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[epitopeprediction.mmd]": 0.0012158320751041174, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[file_icon_fanin.mmd]": 0.0009720819070935249, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[file_icons.mmd]": 0.0005766667891293764, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[font_scale.mmd]": 0.00044033280573785305, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[genomeassembly.mmd]": 0.0035880832001566887, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[genomeassembly_organellar.mmd]": 0.003797793062403798, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[genomeassembly_staggered.mmd]": 0.0028723753057420254, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[genomic_pipeline.mmd]": 0.005614792229607701, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[group_labels.mmd]": 0.0007789991796016693, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/01_minimal.mmd]": 0.0003888329956680536, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/02_sections.mmd]": 0.0006090416572988033, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/03_fan_out.mmd]": 0.0009464160539209843, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/03b_fan_in_merge.mmd]": 0.0008849990554153919, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/04_directions.mmd]": 0.002291416982188821, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/05_file_icons.mmd]": 0.0006274159532040358, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/05b_multi_icons.mmd]": 0.0006030008662492037, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/05c_files_icon.mmd]": 0.00054125115275383, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/05d_folder_icon.mmd]": 0.0006336667574942112, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/05f_banner_labels.mmd]": 0.0019647921435534954, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/06a_without_hidden.mmd]": 0.0008231252431869507, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[guide/06b_with_hidden.mmd]": 0.0008525832090526819, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[hlatyping.mmd]": 0.0009248750284314156, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[icon_caption_wrap.mmd]": 0.0005013325717300177, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[leaf_file_icon_on_trunk.mmd]": 0.00044312397949397564, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[legend_combo.mmd]": 0.0004517489578574896, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[legend_logo_placement.mmd]": 0.0011024167761206627, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[longread_variant_calling.mmd]": 0.0022002090699970722, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[marker_styles.mmd]": 0.00080445921048522, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[multiline_labels.mmd]": 0.0014770850539207458, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[off_track_output_branched.mmd]": 0.0018755840137600899, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[off_track_outputs.mmd]": 0.002131334040313959, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[off_track_outputs_along_trunk.mmd]": 0.002092583803460002, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[rnaseq_auto.mmd]": 0.0020438760984688997, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[rnaseq_sections.mmd]": 0.0029041669331490993, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[rnaseq_sections_manual.mmd]": 0.0022456650622189045, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[rnaseq_simple.mmd]": 0.00043212599121034145, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[simple_pipeline.mmd]": 0.000394290778785944, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[tb_file_termini.mmd]": 0.0006054590921849012, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[tb_right_exit_feeder_slots.mmd]": 0.002093083690851927, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/aligner_row_pinned_continuation.mmd]": 0.0009093321859836578, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/around_below_ep_col_gt0.mmd]": 0.0006131241098046303, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/around_section_below.mmd]": 0.0006325000431388617, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/asymmetric_tree.mmd]": 0.0011480008251965046, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0007812501862645149, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/branch_fold_forward.mmd]": 0.0009049579966813326, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/branch_fold_stability.mmd]": 0.0034345840103924274, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bt_chain.mmd]": 0.0004747500643134117, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bt_exit_top_above.mmd]": 0.00048587494529783726, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bt_exit_top_above_2line.mmd]": 0.0005045421421527863, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bt_fork.mmd]": 0.00037037557922303677, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bt_perp_entry_below.mmd]": 0.0004928747657686472, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bt_to_lr.mmd]": 0.0004927921108901501, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bt_to_tb.mmd]": 0.0004757510032504797, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bundle_terminator_continuation.mmd]": 0.00036225002259016037, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_fan_in_outer_slot.mmd]": 0.012110000941902399, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002964416053146124, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_label_rake.mmd]": 0.0008384587708860636, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_label_rake_left.mmd]": 0.0009448339696973562, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_label_rake_wide.mmd]": 0.000771084101870656, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_leftward_far_side_entry.mmd]": 0.0006853328086435795, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_leftward_overflow.mmd]": 0.0006941249594092369, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/bypass_v_tight.mmd]": 0.0005909169558435678, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/clear_channel_target_aware_push.mmd]": 0.0006569176912307739, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/compact_gap_peer_conflict.mmd]": 0.0006926669739186764, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/compact_hidden_passthrough.mmd]": 0.0006302909459918737, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/complex_multipath.mmd]": 0.0033289992716163397, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/convergence_stacked_sink.mmd]": 0.003158249892294407, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/convergent_offrow_exit_climb.mmd]": 0.0025901237968355417, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006763751152902842, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/cross_col_top_entry.mmd]": 0.0005234996788203716, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/cross_column_perp_drop.mmd]": 0.0028065000660717487, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0005237909499555826, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/cross_row_gap_wrap.mmd]": 0.0009115012362599373, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/deep_linear.mmd]": 0.00562441605143249, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/disjoint_sameline_trunks.mmd]": 0.0008704590145498514, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/divergent_fanout_split.mmd]": 0.0005688329692929983, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/dogleg_exempt_distinct.mmd]": 0.0007912907749414444, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/dogleg_exempt_sameline.mmd]": 0.0007631247863173485, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/dogleg_twoline_fanout.mmd]": 0.0006760829128324986, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/exit_corner_offset_dogleg.mmd]": 0.0007148329168558121, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/fan_bypass_nesting.mmd]": 0.0012214160524308681, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/fan_in_merge.mmd]": 0.014280041912570596, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/fold_double.mmd]": 0.002188915852457285, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/fold_fan_across.mmd]": 0.0017234589904546738, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/fold_stacked_branch.mmd]": 0.0017970842309296131, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/funcprofiler_upstream.mmd]": 0.001219124998897314, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/header_nudge.mmd]": 0.0005570841021835804, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/header_side_rotated.mmd]": 0.000572417164221406, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/inrow_skip_breeze.mmd]": 0.0003967511001974344, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/inter_row_wrap_clearance.mmd]": 0.000608749920502305, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/interchange_lane_reorder.mmd]": 0.0004709591157734394, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/junction_entry_align.mmd]": 0.0021005410235375166, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/junction_entry_collision.mmd]": 0.0008903332054615021, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/junction_entry_reversed_fold.mmd]": 0.0007293340750038624, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/junction_fanout_convergence.mmd]": 0.0006130826659500599, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/left_entry_up_wrap.mmd]": 0.0005053749773651361, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/left_exit_sink_below.mmd]": 0.0007437090389430523, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006004159804433584, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0009848331101238728, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.00085687474347651, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0006377920508384705, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0009008755441755056, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_to_tb_top_cross_col.mmd]": 0.0006338329985737801, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_to_tb_top_drop.mmd]": 0.00047837477177381516, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0008594179525971413, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_to_tb_top_near_vertical.mmd]": 0.003082833718508482, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_to_tb_top_two_lines.mmd]": 0.0010085408575832844, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_top_entry_cross_column.mmd]": 0.002855167957022786, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005453326739370823, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_around_below_leftmost.mmd]": 0.0007390431128442287, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_bottom_row_bypass.mmd]": 0.0007952912710607052, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_leftmost_sink_branch.mmd]": 0.0009560007601976395, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_offrow_continuation.mmd]": 0.005647498881444335, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_port_above_approach.mmd]": 0.0019502919167280197, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_pullaway.mmd]": 0.0016994171310216188, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_right_entry.mmd]": 0.0009000836871564388, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_trunk_out_of_range_section.mmd]": 0.003193081822246313, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/merge_trunk_over_low_section.mmd]": 0.0010245000012218952, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/mismatched_tracks.mmd]": 0.0007628339808434248, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/mixed_bundle_column.mmd]": 0.0011842488311231136, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/mixed_port_sides.mmd]": 0.0006046672351658344, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/multi_input_convergence.mmd]": 0.000651082955300808, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/multi_line_bundle.mmd]": 0.0008592500817030668, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007460829801857471, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/near_vertical_junction_hook.mmd]": 0.0006694586481899023, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/off_track_convergence.mmd]": 0.0007234171498566866, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/off_track_convergence_multiline.mmd]": 0.0008648762013763189, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/off_track_input_above_consumer.mmd]": 0.0028752500656992197, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/parallel_independent.mmd]": 0.0006637910846620798, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/peeloff_extra_line_consumer.mmd]": 0.0007424589712172747, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/peeloff_riser_respace.mmd]": 0.0007033338770270348, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/post_convergence_trunk.mmd]": 0.0003811253700405359, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/reconverge_reversed_fold.mmd]": 0.001883125863969326, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/right_entry_from_above.mmd]": 0.000559668056666851, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/right_entry_from_above_far.mmd]": 0.0004742499440908432, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005515827797353268, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/right_entry_wrap_no_fan.mmd]": 0.00047574914060533047, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/rl_entry_runway.mmd]": 0.0005552920047193766, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/rnaseq_lite.mmd]": 0.0013054169248789549, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/route_around_intervening.mmd]": 0.0006387920584529638, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/section_diamond.mmd]": 0.0011252081021666527, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/self_crossing_bridge.mmd]": 0.0007514576427638531, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/shared_sink_parallel.mmd]": 0.0028778330888599157, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/single_section.mmd]": 0.000408833846449852, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/stacked_left_exit_drop.mmd]": 0.0005080422852188349, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/stacked_lr_serpentine.mmd]": 0.0007489579729735851, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007458741310983896, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_bottom_entry_flow_start.mmd]": 0.0004727498162537813, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0006015838589519262, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007220841944217682, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_column_continuation_two_lines.mmd]": 0.0021192498970776796, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_convergence_straight_drop.mmd]": 0.0004086662083864212, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_internal_diagonal.mmd]": 0.0005455836653709412, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_left_exit_step.mmd]": 0.0007685418240725994, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_lr_exit_left.mmd]": 0.0006374169606715441, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_lr_exit_right.mmd]": 0.0005977910477668047, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_passthrough_continuation.mmd]": 0.0004051250871270895, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_passthrough_trunk.mmd]": 0.0005738318432122469, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_perp_exit_side_neighbour.mmd]": 0.00044291699305176735, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_right_entry_stack.mmd]": 0.0006397501565515995, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_trunk_through_fan.mmd]": 0.0003880830481648445, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/tb_two_line_vert_seam.mmd]": 0.0005126670002937317, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/terminal_symmetric_fan.mmd]": 0.0042602920439094305, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/terminus_join.mmd]": 0.0007651252672076225, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/top_entry_header_clash.mmd]": 0.0005163762252777815, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/trunk_through_fan.mmd]": 0.0009864580351859331, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/twoline_fanout_up.mmd]": 0.0009792069904506207, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/u_turn_fold.mmd]": 0.0018834162037819624, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/uneven_diamond.mmd]": 0.0004044158849865198, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/upward_bypass.mmd]": 0.0010015827137976885, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/variant_calling.mmd]": 0.0030956249684095383, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/wide_fan_in.mmd]": 0.0008865003474056721, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/wide_fan_out.mmd]": 0.0009309991728514433, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/wide_label_fan.mmd]": 0.00042879232205450535, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[topologies/wrapped_label_trunk.mmd]": 0.0004366668872535229, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[trunk_align_matching_bundle.mmd]": 0.0010814168490469456, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[uneven_diamond.mmd]": 0.0004252090584486723, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[variant_calling.mmd]": 0.0007896667812019587, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[variant_calling_tuned.mmd]": 0.0008843748364597559, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[variantbenchmarking.mmd]": 0.00431999983265996, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[variantbenchmarking_auto.mmd]": 0.002236125757917762, + "tests/test_layout_invariants.py::test_section_bbox_has_top_padding[variantprioritization.mmd]": 0.0009796249214559793, + "tests/test_layout_invariants.py::test_section_bbox_matches_content_extent[da_pipeline.mmd]": 0.005950041813775897, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[bubble_forced_label_clears_diagonal.mmd]": 0.0005420830566436052, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[bubble_label_clears_diagonal.mmd]": 0.00046558305621147156, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[bubble_output_above.mmd]": 0.0004596251528710127, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[captioned_sibling_outputs.mmd]": 0.0004204988945275545, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[centered_tracks.mmd]": 0.0004701258148998022, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[cross_track_interchange.mmd]": 0.0008268747478723526, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[da_pipeline.mmd]": 0.0021712500602006912, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[diagonal_labels.mmd]": 0.0009340420365333557, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[diagonal_single_trunk_off_track.mmd]": 0.0009959167800843716, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[differentialabundance.mmd]": 0.0018983760382980108, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[differentialabundance_default.mmd]": 0.002189833205193281, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[directional_flow.mmd]": 0.0004703747108578682, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[disconnected_components.mmd]": 0.003604208817705512, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[epitopeprediction.mmd]": 0.002306499984115362, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[file_icon_fanin.mmd]": 0.0008579588029533625, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[file_icons.mmd]": 0.0013668336905539036, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[font_scale.mmd]": 0.00043199979700148106, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[genomeassembly.mmd]": 0.0036110826767981052, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[genomeassembly_organellar.mmd]": 0.013157500885426998, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[genomeassembly_staggered.mmd]": 0.009883125079795718, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[genomic_pipeline.mmd]": 0.007507625035941601, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[group_labels.mmd]": 0.0007017918396741152, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/01_minimal.mmd]": 0.00042391614988446236, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/02_sections.mmd]": 0.0008007080759853125, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/03_fan_out.mmd]": 0.0010114579927176237, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/03b_fan_in_merge.mmd]": 0.0009055407717823982, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/04_directions.mmd]": 0.03018879215233028, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/05_file_icons.mmd]": 0.0006835830863565207, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/05b_multi_icons.mmd]": 0.0006429580971598625, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/05c_files_icon.mmd]": 0.000586208887398243, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/05d_folder_icon.mmd]": 0.0005720013286918402, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/05f_banner_labels.mmd]": 0.000612292205914855, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/06a_without_hidden.mmd]": 0.0007788741495460272, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[guide/06b_with_hidden.mmd]": 0.0029124580323696136, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[hlatyping.mmd]": 0.0009544161148369312, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[icon_caption_wrap.mmd]": 0.005276207812130451, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[leaf_file_icon_on_trunk.mmd]": 0.000540624838322401, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[legend_combo.mmd]": 0.0007006670348346233, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[legend_logo_placement.mmd]": 0.00107954116538167, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[longread_variant_calling.mmd]": 0.0018934591207653284, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[marker_styles.mmd]": 0.0006807090248912573, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[multiline_labels.mmd]": 0.0006073329132050276, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[off_track_output_branched.mmd]": 0.00047321035526692867, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[off_track_outputs.mmd]": 0.0005317921750247478, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[off_track_outputs_along_trunk.mmd]": 0.00044324900954961777, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[rnaseq_auto.mmd]": 0.0016663342248648405, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[rnaseq_sections.mmd]": 0.0022952500730752945, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[rnaseq_sections_manual.mmd]": 0.0022712498903274536, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[rnaseq_simple.mmd]": 0.0003422501031309366, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[simple_pipeline.mmd]": 0.0003787069581449032, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[tb_file_termini.mmd]": 0.0009997498709708452, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[tb_right_exit_feeder_slots.mmd]": 0.0007427087984979153, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/aligner_row_pinned_continuation.mmd]": 0.0009220829233527184, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/around_below_ep_col_gt0.mmd]": 0.0006217909976840019, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/around_section_below.mmd]": 0.006266999989748001, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/asymmetric_tree.mmd]": 0.0024562079925090075, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0008525422308593988, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/branch_fold_forward.mmd]": 0.0009460009168833494, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/branch_fold_stability.mmd]": 0.0007877491880208254, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bt_chain.mmd]": 0.0003488329239189625, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bt_exit_top_above.mmd]": 0.0004546660929918289, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bt_exit_top_above_2line.mmd]": 0.0017688330262899399, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bt_fork.mmd]": 0.0005017907824367285, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bt_perp_entry_below.mmd]": 0.000563332112506032, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bt_to_lr.mmd]": 0.000545041635632515, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bt_to_tb.mmd]": 0.0010941661894321442, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bundle_terminator_continuation.mmd]": 0.00042641605250537395, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_fan_in_outer_slot.mmd]": 0.006757792085409164, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0008594579994678497, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_label_rake.mmd]": 0.0016542489174753428, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_label_rake_left.mmd]": 0.0011029595043510199, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_label_rake_wide.mmd]": 0.0008208751678466797, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_leftward_far_side_entry.mmd]": 0.0023779147304594517, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_leftward_overflow.mmd]": 0.0010114170145243406, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/bypass_v_tight.mmd]": 0.0008680850733071566, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/clear_channel_target_aware_push.mmd]": 0.0007358330767601728, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/compact_gap_peer_conflict.mmd]": 0.0007267920300364494, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/compact_hidden_passthrough.mmd]": 0.00069070840254426, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/complex_multipath.mmd]": 0.0013307901099324226, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/convergence_stacked_sink.mmd]": 0.0010935410391539335, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/convergent_offrow_exit_climb.mmd]": 0.0018152501434087753, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006430409848690033, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/cross_col_top_entry.mmd]": 0.0009284161496907473, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/cross_column_perp_drop.mmd]": 0.0009217082988470793, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/cross_column_perp_drop_far_exit.mmd]": 0.001091583864763379, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/cross_row_gap_wrap.mmd]": 0.0010744163300842047, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/deep_linear.mmd]": 0.0025519169867038727, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/disjoint_sameline_trunks.mmd]": 0.004065875196829438, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/divergent_fanout_split.mmd]": 0.0006106679793447256, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/dogleg_exempt_distinct.mmd]": 0.0007080826908349991, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/dogleg_exempt_sameline.mmd]": 0.0005969582125544548, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/dogleg_twoline_fanout.mmd]": 0.000616373959928751, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/exit_corner_offset_dogleg.mmd]": 0.000687750056385994, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/fan_bypass_nesting.mmd]": 0.0011834579054266214, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/fan_in_merge.mmd]": 0.0008696671575307846, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/fold_double.mmd]": 0.00463562598451972, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/fold_fan_across.mmd]": 0.001899583963677287, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/fold_stacked_branch.mmd]": 0.002685708925127983, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/funcprofiler_upstream.mmd]": 0.0038256251718848944, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/header_nudge.mmd]": 0.0005969579797238111, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/header_side_rotated.mmd]": 0.000564084155485034, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/inrow_skip_breeze.mmd]": 0.00040325080044567585, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/inter_row_wrap_clearance.mmd]": 0.0007588330190628767, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/interchange_lane_reorder.mmd]": 0.004029874922707677, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/junction_entry_align.mmd]": 0.001059998758137226, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/junction_entry_collision.mmd]": 0.0008143757004290819, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/junction_entry_reversed_fold.mmd]": 0.0007505838293582201, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/junction_fanout_convergence.mmd]": 0.0006621673237532377, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/left_entry_up_wrap.mmd]": 0.0005667898803949356, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/left_exit_sink_below.mmd]": 0.0017060409300029278, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0007184161804616451, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0006235840264707804, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006685417611151934, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0007503749802708626, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0007561247330158949, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_to_tb_top_cross_col.mmd]": 0.000791667029261589, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_to_tb_top_drop.mmd]": 0.0005074171349406242, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0005276673473417759, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004910419229418039, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005278741009533405, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_top_entry_cross_column.mmd]": 0.006924208020791411, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0014882930554449558, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_around_below_leftmost.mmd]": 0.0008186660706996918, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_bottom_row_bypass.mmd]": 0.0008740418124943972, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_leftmost_sink_branch.mmd]": 0.0009620829951018095, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_offrow_continuation.mmd]": 0.0008668738882988691, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_port_above_approach.mmd]": 0.0007717490661889315, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_pullaway.mmd]": 0.0008367500267922878, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_right_entry.mmd]": 0.0008187487255781889, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_trunk_out_of_range_section.mmd]": 0.000905666034668684, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/merge_trunk_over_low_section.mmd]": 0.001013000262901187, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/mismatched_tracks.mmd]": 0.0037561659701168537, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/mixed_bundle_column.mmd]": 0.0013868329115211964, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/mixed_port_sides.mmd]": 0.0006639158818870783, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/multi_input_convergence.mmd]": 0.0006777071394026279, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/multi_line_bundle.mmd]": 0.0008507920429110527, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0007412929553538561, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/near_vertical_junction_hook.mmd]": 0.0006740831304341555, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/off_track_convergence.mmd]": 0.0006660011131316423, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/off_track_convergence_multiline.mmd]": 0.0007346661295741796, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/off_track_input_above_consumer.mmd]": 0.0018022910226136446, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/parallel_independent.mmd]": 0.0006762491539120674, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/peeloff_extra_line_consumer.mmd]": 0.0006869167555123568, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/peeloff_riser_respace.mmd]": 0.0006545828655362129, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/post_convergence_trunk.mmd]": 0.0019932088907808065, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/reconverge_reversed_fold.mmd]": 0.003023833967745304, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/right_entry_from_above.mmd]": 0.0005498339887708426, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/right_entry_from_above_far.mmd]": 0.0004929588176310062, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006172910798341036, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/right_entry_wrap_no_fan.mmd]": 0.00048341695219278336, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/rl_entry_runway.mmd]": 0.0006255828775465488, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/rnaseq_lite.mmd]": 0.001740708015859127, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/route_around_intervening.mmd]": 0.0007712079677730799, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/section_diamond.mmd]": 0.0008247487712651491, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/self_crossing_bridge.mmd]": 0.0006506671197712421, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/shared_sink_parallel.mmd]": 0.0010934160090982914, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/single_section.mmd]": 0.00034562544897198677, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/stacked_left_exit_drop.mmd]": 0.00046524987556040287, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/stacked_lr_serpentine.mmd]": 0.0007180829998105764, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.005822415929287672, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_bottom_entry_flow_start.mmd]": 0.0007438336033374071, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0006463741883635521, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007728750351816416, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_column_continuation_two_lines.mmd]": 0.0005390839651226997, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_convergence_straight_drop.mmd]": 0.00039516715332865715, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_internal_diagonal.mmd]": 0.0005296249873936176, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_left_exit_step.mmd]": 0.0008624161127954721, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_lr_exit_left.mmd]": 0.0006734579801559448, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_lr_exit_right.mmd]": 0.000625750282779336, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_passthrough_continuation.mmd]": 0.0007869582623243332, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_passthrough_trunk.mmd]": 0.0009242501109838486, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005169988144189119, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_right_entry_stack.mmd]": 0.000661082798615098, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_trunk_through_fan.mmd]": 0.00046808295883238316, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/tb_two_line_vert_seam.mmd]": 0.0006516238208860159, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/terminal_symmetric_fan.mmd]": 0.0005921248812228441, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/terminus_join.mmd]": 0.000337167177349329, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/top_entry_header_clash.mmd]": 0.00047379196621477604, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/trunk_through_fan.mmd]": 0.0006920418236404657, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/twoline_fanout_up.mmd]": 0.0006543737836182117, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/u_turn_fold.mmd]": 0.0018779581878334284, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/uneven_diamond.mmd]": 0.00040058395825326443, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/upward_bypass.mmd]": 0.001036540837958455, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/variant_calling.mmd]": 0.0023450821172446012, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/wide_fan_in.mmd]": 0.0009741680696606636, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/wide_fan_out.mmd]": 0.001024375669658184, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/wide_label_fan.mmd]": 0.0005160842556506395, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[topologies/wrapped_label_trunk.mmd]": 0.0006031249649822712, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[trunk_align_matching_bundle.mmd]": 0.0022438340820372105, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[uneven_diamond.mmd]": 0.0004796241410076618, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[variant_calling.mmd]": 0.0008895418141037226, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[variant_calling_tuned.mmd]": 0.0009373740758746862, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[variantbenchmarking.mmd]": 0.00564195797778666, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[variantbenchmarking_auto.mmd]": 0.00239545782096684, + "tests/test_layout_invariants.py::test_section_bbox_top_hugs_content[variantprioritization.mmd]": 0.0010174999479204416, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[bubble_forced_label_clears_diagonal.mmd]": 0.026009376160800457, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[bubble_label_clears_diagonal.mmd]": 0.20007662498392165, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[bubble_output_above.mmd]": 0.025183208053931594, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[captioned_sibling_outputs.mmd]": 0.01604020898230374, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[centered_tracks.mmd]": 0.022639082046225667, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[cross_track_interchange.mmd]": 0.09449141612276435, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[da_pipeline.mmd]": 0.183497958118096, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[diagonal_labels.mmd]": 0.06613962491974235, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[diagonal_single_trunk_off_track.mmd]": 0.0546035417355597, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[differentialabundance.mmd]": 0.2116357919294387, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[differentialabundance_default.mmd]": 0.4666491663083434, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[directional_flow.mmd]": 0.021122124744579196, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[disconnected_components.mmd]": 0.03951287525705993, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[epitopeprediction.mmd]": 0.0799595839343965, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[file_icon_fanin.mmd]": 0.042385166976600885, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[file_icons.mmd]": 0.02288500010035932, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[font_scale.mmd]": 0.018771375063806772, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[genomeassembly.mmd]": 0.07457870803773403, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[genomeassembly_organellar.mmd]": 0.10023608198389411, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[genomeassembly_staggered.mmd]": 0.05801995797082782, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[genomic_pipeline.mmd]": 0.306726248934865, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[group_labels.mmd]": 0.025771791813895106, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/01_minimal.mmd]": 0.00036837602965533733, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/02_sections.mmd]": 0.0006028749048709869, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/03_fan_out.mmd]": 0.0008992920629680157, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/03b_fan_in_merge.mmd]": 0.000816333806142211, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/04_directions.mmd]": 0.0009128341916948557, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/05_file_icons.mmd]": 0.0005165841430425644, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/05b_multi_icons.mmd]": 0.0028321249410510063, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/05c_files_icon.mmd]": 0.0007636661175638437, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/05d_folder_icon.mmd]": 0.0006136249285191298, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/05f_banner_labels.mmd]": 0.0006144570652395487, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/06a_without_hidden.mmd]": 0.000819917069748044, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[guide/06b_with_hidden.mmd]": 0.0007587089203298092, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[hlatyping.mmd]": 0.0586972504388541, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[icon_caption_wrap.mmd]": 0.004481250885874033, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[leaf_file_icon_on_trunk.mmd]": 0.015356499701738358, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[legend_combo.mmd]": 0.01254345802590251, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[legend_logo_placement.mmd]": 0.0451679159887135, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[longread_variant_calling.mmd]": 0.16837491584010422, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[marker_styles.mmd]": 0.047331207897514105, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[multiline_labels.mmd]": 0.020249665947631, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[off_track_output_branched.mmd]": 0.015862833941355348, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[off_track_outputs.mmd]": 0.023408709093928337, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[off_track_outputs_along_trunk.mmd]": 0.021706457948312163, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[rnaseq_auto.mmd]": 0.39585729176178575, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[rnaseq_sections.mmd]": 0.23590737394988537, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[rnaseq_sections_manual.mmd]": 0.23921812511980534, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[rnaseq_simple.mmd]": 0.019965959014371037, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[simple_pipeline.mmd]": 0.015678666066378355, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[tb_file_termini.mmd]": 0.025717874988913536, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[tb_right_exit_feeder_slots.mmd]": 0.02859112457372248, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/aligner_row_pinned_continuation.mmd]": 0.0661506240721792, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/around_below_ep_col_gt0.mmd]": 0.05057616508565843, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/around_section_below.mmd]": 0.03845941601321101, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/asymmetric_tree.mmd]": 0.050298958318307996, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bottom_row_climb_clear_corridor.mmd]": 0.024859500350430608, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/branch_fold_forward.mmd]": 0.3210429169703275, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/branch_fold_stability.mmd]": 0.05670587392523885, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bt_chain.mmd]": 0.012328706914559007, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bt_exit_top_above.mmd]": 0.011025958927348256, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bt_exit_top_above_2line.mmd]": 0.040992333088070154, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bt_fork.mmd]": 0.011290833121165633, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bt_perp_entry_below.mmd]": 0.027464916929602623, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bt_to_lr.mmd]": 0.01819316716864705, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bt_to_tb.mmd]": 0.019587000831961632, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bundle_terminator_continuation.mmd]": 0.006335333921015263, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_fan_in_outer_slot.mmd]": 0.06921387510374188, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_gap2_rightward_overflow.mmd]": 0.028273416915908456, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_label_rake.mmd]": 0.03858333406969905, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_label_rake_left.mmd]": 0.0366505840793252, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_label_rake_wide.mmd]": 0.0699536669999361, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_leftward_far_side_entry.mmd]": 0.028781291795894504, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_leftward_overflow.mmd]": 0.025056334910914302, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/bypass_v_tight.mmd]": 0.031045332783833146, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/clear_channel_target_aware_push.mmd]": 0.03391049895435572, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/compact_gap_peer_conflict.mmd]": 0.027482124976813793, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/compact_hidden_passthrough.mmd]": 0.022556582931429148, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/complex_multipath.mmd]": 0.04014316597022116, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/convergence_stacked_sink.mmd]": 0.041387666715309024, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/convergent_offrow_exit_climb.mmd]": 0.1297923754900694, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/corridor_narrow_gap_fallback.mmd]": 0.033294082852080464, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/cross_col_top_entry.mmd]": 0.021376832854002714, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/cross_column_perp_drop.mmd]": 0.03071237518452108, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/cross_column_perp_drop_far_exit.mmd]": 0.011646500090137124, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/cross_row_gap_wrap.mmd]": 0.035002582939341664, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/deep_linear.mmd]": 0.04473616718314588, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/disjoint_sameline_trunks.mmd]": 0.04367641592398286, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/divergent_fanout_split.mmd]": 0.016077290754765272, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/dogleg_exempt_distinct.mmd]": 0.03350995806977153, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/dogleg_exempt_sameline.mmd]": 0.02020233403891325, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/dogleg_twoline_fanout.mmd]": 0.024294334230944514, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/exit_corner_offset_dogleg.mmd]": 0.016978417756035924, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/fan_bypass_nesting.mmd]": 0.06446970882825553, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/fan_in_merge.mmd]": 0.043153875041753054, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/fold_double.mmd]": 0.1094695411156863, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/fold_fan_across.mmd]": 0.07467987504787743, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/fold_stacked_branch.mmd]": 0.31994408438913524, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/funcprofiler_upstream.mmd]": 0.20932883420027792, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/header_nudge.mmd]": 0.02200350002385676, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/header_side_rotated.mmd]": 0.020187624963000417, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/inrow_skip_breeze.mmd]": 0.017713166074827313, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/inter_row_wrap_clearance.mmd]": 0.02138954121619463, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/interchange_lane_reorder.mmd]": 0.021962666884064674, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/junction_entry_align.mmd]": 0.06758054089732468, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/junction_entry_collision.mmd]": 0.05506291729398072, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/junction_entry_reversed_fold.mmd]": 0.04041204182431102, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/junction_fanout_convergence.mmd]": 0.02548954077064991, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/left_entry_up_wrap.mmd]": 0.009786623995751143, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/left_exit_sink_below.mmd]": 0.026544915745034814, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.023735041031613946, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.025675457902252674, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.02070491574704647, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.013142208103090525, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_perp_top_exit_side_entry.mmd]": 0.04533766699023545, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_to_tb_top_cross_col.mmd]": 0.025979749858379364, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_to_tb_top_drop.mmd]": 0.014237833907827735, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.01647820882499218, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_to_tb_top_near_vertical.mmd]": 0.015733917010948062, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_to_tb_top_two_lines.mmd]": 0.015609623864293098, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_top_entry_cross_column.mmd]": 0.023558042012155056, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.2032604997511953, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_around_below_leftmost.mmd]": 0.01921804202720523, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_bottom_row_bypass.mmd]": 0.039795208955183625, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_leftmost_sink_branch.mmd]": 0.03371749981306493, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_offrow_continuation.mmd]": 0.022773667238652706, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_port_above_approach.mmd]": 0.02132995892316103, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_pullaway.mmd]": 0.02763620810583234, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_right_entry.mmd]": 0.02728749974630773, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_trunk_out_of_range_section.mmd]": 0.0411832919344306, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/merge_trunk_over_low_section.mmd]": 0.04884858406148851, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/mismatched_tracks.mmd]": 0.024395874934270978, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/mixed_bundle_column.mmd]": 0.06013408279977739, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/mixed_port_sides.mmd]": 0.01650154311209917, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/multi_input_convergence.mmd]": 0.02508025011047721, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/multi_line_bundle.mmd]": 0.025261458940804005, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/multicarrier_offrow_exit_climb.mmd]": 0.04848345904611051, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/near_vertical_junction_hook.mmd]": 0.03076970810070634, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/off_track_convergence.mmd]": 0.03041683416813612, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/off_track_convergence_multiline.mmd]": 0.03098970791324973, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/off_track_input_above_consumer.mmd]": 0.09679883508943021, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/parallel_independent.mmd]": 0.02065049996599555, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/peeloff_extra_line_consumer.mmd]": 0.0407621250487864, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/peeloff_riser_respace.mmd]": 0.02066204114817083, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/post_convergence_trunk.mmd]": 0.011229582829400897, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/reconverge_reversed_fold.mmd]": 0.399690207792446, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/right_entry_from_above.mmd]": 0.0009550829418003559, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/right_entry_from_above_far.mmd]": 0.0018616658635437489, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005571239162236452, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/right_entry_wrap_no_fan.mmd]": 0.0004704170860350132, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/rl_entry_runway.mmd]": 0.0005554587114602327, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/rnaseq_lite.mmd]": 0.0013456253800541162, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/route_around_intervening.mmd]": 0.0007914581801742315, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/section_diamond.mmd]": 0.001964166294783354, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/self_crossing_bridge.mmd]": 0.0009450840298086405, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/shared_sink_parallel.mmd]": 0.006136333104223013, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/single_section.mmd]": 0.0004367509391158819, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/stacked_left_exit_drop.mmd]": 0.0004986678250133991, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/stacked_lr_serpentine.mmd]": 0.0014319182373583317, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0016516242176294327, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_bottom_entry_flow_start.mmd]": 0.0012616671156138182, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.002812376245856285, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0020484579727053642, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_column_continuation_two_lines.mmd]": 0.0008719989564269781, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_convergence_straight_drop.mmd]": 0.000408790772780776, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_internal_diagonal.mmd]": 0.0009053749963641167, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_left_exit_step.mmd]": 0.0019156658090651035, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_lr_exit_left.mmd]": 0.0010502089280635118, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_lr_exit_right.mmd]": 0.0007064992096275091, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_passthrough_continuation.mmd]": 0.0004515419714152813, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_passthrough_trunk.mmd]": 0.001809166045859456, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_perp_exit_side_neighbour.mmd]": 0.001599959097802639, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_right_entry_stack.mmd]": 0.0019624161068350077, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_trunk_through_fan.mmd]": 0.0009577090386301279, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/tb_two_line_vert_seam.mmd]": 0.0012468742206692696, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/terminal_symmetric_fan.mmd]": 0.0014326248783618212, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/terminus_join.mmd]": 0.0009475820697844028, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/top_entry_header_clash.mmd]": 0.0013529991265386343, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/trunk_through_fan.mmd]": 0.006323625100776553, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/twoline_fanout_up.mmd]": 0.02133004111237824, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/u_turn_fold.mmd]": 0.0015941241290420294, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/uneven_diamond.mmd]": 0.0026995001826435328, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/upward_bypass.mmd]": 0.0027713750023394823, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/variant_calling.mmd]": 0.00221500126644969, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/wide_fan_in.mmd]": 0.0008164157625287771, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/wide_fan_out.mmd]": 0.0007998342625796795, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/wide_label_fan.mmd]": 0.0003948751837015152, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[topologies/wrapped_label_trunk.mmd]": 0.0004342910833656788, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[trunk_align_matching_bundle.mmd]": 0.03137345891445875, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[uneven_diamond.mmd]": 0.011607292341068387, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[variant_calling.mmd]": 0.033567250007763505, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[variant_calling_tuned.mmd]": 0.056996791157871485, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[variantbenchmarking.mmd]": 0.2308915420435369, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[variantbenchmarking_auto.mmd]": 0.2843315419740975, + "tests/test_layout_invariants.py::test_section_entry_hub_on_grid[variantprioritization.mmd]": 0.07782812393270433, + "tests/test_layout_invariants.py::test_section_fit_top_anchors_on_highest_content": 0.0005012082401663065, + "tests/test_layout_invariants.py::test_section_fit_top_bounded_by_row_above": 0.00017391587607562542, + "tests/test_layout_invariants.py::test_section_fit_top_clamps_to_bypass_curve_clearance": 0.00018754089251160622, + "tests/test_layout_invariants.py::test_section_fit_top_clamps_to_port_above_content": 0.0006467087659984827, + "tests/test_layout_invariants.py::test_section_top_band_filled[da_pipeline.mmd]": 0.21780662517994642, + "tests/test_layout_invariants.py::test_side_branch_edge_stays_off_trunk[da_pipeline.mmd]": 0.011531167896464467, + "tests/test_layout_invariants.py::test_single_trunk_off_track_step_not_inflated_by_diagonal_band": 0.006408166838809848, + "tests/test_layout_invariants.py::test_sparse_loop_column_clearance_guard_catches_crowding": 0.0009905421175062656, + "tests/test_layout_invariants.py::test_stacked_elbow_check_detects_graze": 0.00018841726705431938, + "tests/test_layout_invariants.py::test_stacked_file_icons_label_clearance[differentialabundance.mmd]": 0.0019524171948432922, + "tests/test_layout_invariants.py::test_stacked_file_icons_label_clearance[differentialabundance_default.mmd]": 0.0018622919451445341, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[bubble_forced_label_clears_diagonal.mmd]": 0.02645183401182294, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[bubble_label_clears_diagonal.mmd]": 0.01091095875017345, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[bubble_output_above.mmd]": 0.0291295419447124, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[captioned_sibling_outputs.mmd]": 0.018087292090058327, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[centered_tracks.mmd]": 0.02288395818322897, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[cross_track_interchange.mmd]": 0.05108975013718009, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[da_pipeline.mmd]": 0.36608204199001193, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[diagonal_labels.mmd]": 0.0685813738964498, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[diagonal_single_trunk_off_track.mmd]": 0.08205841481685638, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[differentialabundance.mmd]": 0.14747454086318612, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[differentialabundance_default.mmd]": 0.18537533283233643, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[directional_flow.mmd]": 0.0180759159848094, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[disconnected_components.mmd]": 0.019477708032354712, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[epitopeprediction.mmd]": 0.06521537527441978, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[file_icon_fanin.mmd]": 0.05508375004865229, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[file_icons.mmd]": 0.017377832904458046, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[font_scale.mmd]": 0.013452250743284822, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[genomeassembly.mmd]": 0.06994883203878999, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[genomeassembly_organellar.mmd]": 0.08969608298502862, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[genomeassembly_staggered.mmd]": 0.3391682922374457, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[genomic_pipeline.mmd]": 0.4479895413387567, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[group_labels.mmd]": 0.024524667067453265, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/01_minimal.mmd]": 0.009317082120105624, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/02_sections.mmd]": 0.01727012498304248, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/03_fan_out.mmd]": 0.04909791680984199, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/03b_fan_in_merge.mmd]": 0.05003408412449062, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/04_directions.mmd]": 0.04273816593922675, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/05_file_icons.mmd]": 0.02193270903080702, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/05b_multi_icons.mmd]": 0.015617083059623837, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/05c_files_icon.mmd]": 0.017207125900313258, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/05d_folder_icon.mmd]": 0.019969957880675793, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/05f_banner_labels.mmd]": 0.016110500087961555, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/06a_without_hidden.mmd]": 0.03194179106503725, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[guide/06b_with_hidden.mmd]": 0.02603524993173778, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[hlatyping.mmd]": 0.055034083081409335, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[icon_caption_wrap.mmd]": 0.008458040887489915, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[leaf_file_icon_on_trunk.mmd]": 0.009250333067029715, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[legend_combo.mmd]": 0.016447083093225956, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[legend_logo_placement.mmd]": 0.05269779218360782, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[longread_variant_calling.mmd]": 0.19705620827153325, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[marker_styles.mmd]": 0.041703041177242994, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[multiline_labels.mmd]": 0.029603792121633887, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[off_track_output_branched.mmd]": 0.010277542984113097, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[off_track_outputs.mmd]": 0.023280001245439053, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[off_track_outputs_along_trunk.mmd]": 0.01056791772134602, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[rnaseq_auto.mmd]": 0.12558599980548024, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[rnaseq_sections.mmd]": 0.5550228331703693, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[rnaseq_sections_manual.mmd]": 0.4723730832338333, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[rnaseq_simple.mmd]": 0.006620123749598861, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[simple_pipeline.mmd]": 0.08407154097221792, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[tb_file_termini.mmd]": 0.03946637501940131, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[tb_right_exit_feeder_slots.mmd]": 0.029742168029770255, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/aligner_row_pinned_continuation.mmd]": 0.07755366596393287, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/around_below_ep_col_gt0.mmd]": 0.01592329074628651, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/around_section_below.mmd]": 0.013900167075917125, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/asymmetric_tree.mmd]": 0.0526013330090791, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bottom_row_climb_clear_corridor.mmd]": 0.018984000198543072, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/branch_fold_forward.mmd]": 0.031792749650776386, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/branch_fold_stability.mmd]": 0.017620082711800933, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bt_chain.mmd]": 0.0057817501947283745, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bt_exit_top_above.mmd]": 0.01726983394473791, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bt_exit_top_above_2line.mmd]": 0.03216912620700896, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bt_fork.mmd]": 0.008190248860046268, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bt_perp_entry_below.mmd]": 0.013605041895061731, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bt_to_lr.mmd]": 0.017008208436891437, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bt_to_tb.mmd]": 0.016241498989984393, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bundle_terminator_continuation.mmd]": 0.018539375625550747, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_fan_in_outer_slot.mmd]": 0.05414466583169997, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_gap2_rightward_overflow.mmd]": 0.03205954167060554, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_label_rake.mmd]": 0.0268967910669744, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_label_rake_left.mmd]": 0.045134583255276084, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_label_rake_wide.mmd]": 0.08341337367892265, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_leftward_far_side_entry.mmd]": 0.029218832962214947, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_leftward_overflow.mmd]": 0.04733120906166732, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/bypass_v_tight.mmd]": 0.0388458757661283, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/clear_channel_target_aware_push.mmd]": 0.035854667192324996, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/compact_gap_peer_conflict.mmd]": 0.024783916072919965, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/compact_hidden_passthrough.mmd]": 0.014932333957403898, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/complex_multipath.mmd]": 0.058314374880865216, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/convergence_stacked_sink.mmd]": 0.03598795807920396, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/convergent_offrow_exit_climb.mmd]": 0.11399862519465387, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/corridor_narrow_gap_fallback.mmd]": 0.03122929111123085, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/cross_col_top_entry.mmd]": 0.03670241707004607, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/cross_column_perp_drop.mmd]": 0.30007229186594486, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/cross_column_perp_drop_far_exit.mmd]": 0.01830666628666222, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/cross_row_gap_wrap.mmd]": 0.022148875053972006, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/deep_linear.mmd]": 0.03705041715875268, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/disjoint_sameline_trunks.mmd]": 0.03506229096092284, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/divergent_fanout_split.mmd]": 0.013252874603495002, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/dogleg_exempt_distinct.mmd]": 0.03845995804294944, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/dogleg_exempt_sameline.mmd]": 0.02731333300471306, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/dogleg_twoline_fanout.mmd]": 0.014822543133050203, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/exit_corner_offset_dogleg.mmd]": 0.026717500062659383, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/fan_bypass_nesting.mmd]": 0.04075533291324973, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/fan_in_merge.mmd]": 0.034052457893267274, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/fold_double.mmd]": 0.1199890011921525, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/fold_fan_across.mmd]": 0.10266970726661384, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/fold_stacked_branch.mmd]": 0.0930563339497894, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/funcprofiler_upstream.mmd]": 0.22748608305118978, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/header_nudge.mmd]": 0.013266835128888488, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/header_side_rotated.mmd]": 0.014523916644975543, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/inrow_skip_breeze.mmd]": 0.008864375064149499, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/inter_row_wrap_clearance.mmd]": 0.015672416891902685, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/interchange_lane_reorder.mmd]": 0.017693750094622374, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/junction_entry_align.mmd]": 0.050467126071453094, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/junction_entry_collision.mmd]": 0.025761957745999098, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/junction_entry_reversed_fold.mmd]": 0.045225416077300906, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/junction_fanout_convergence.mmd]": 0.015136208850890398, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/left_entry_up_wrap.mmd]": 0.009493582881987095, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/left_exit_sink_below.mmd]": 0.028099125251173973, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.015422083204612136, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.012732832925394177, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.01924420823343098, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.014268125174567103, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_perp_top_exit_side_entry.mmd]": 0.012036335188895464, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_to_tb_top_cross_col.mmd]": 0.025032876059412956, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_to_tb_top_drop.mmd]": 0.01546483300626278, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.016060709254816175, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_to_tb_top_near_vertical.mmd]": 0.016819376032799482, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_to_tb_top_two_lines.mmd]": 0.016723124776035547, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_top_entry_cross_column.mmd]": 0.016239582560956478, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.016621833899989724, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_around_below_leftmost.mmd]": 0.037461582804098725, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_bottom_row_bypass.mmd]": 0.027085041161626577, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_leftmost_sink_branch.mmd]": 0.027236666996032, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_offrow_continuation.mmd]": 0.020979665918275714, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_port_above_approach.mmd]": 0.017587459180504084, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_pullaway.mmd]": 0.02316095889545977, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_right_entry.mmd]": 0.023493874818086624, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_trunk_out_of_range_section.mmd]": 0.02158758486621082, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/merge_trunk_over_low_section.mmd]": 0.28015758423134685, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/mismatched_tracks.mmd]": 0.03876591776497662, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/mixed_bundle_column.mmd]": 0.02474129293113947, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/mixed_port_sides.mmd]": 0.018467998830601573, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/multi_input_convergence.mmd]": 0.02778516709804535, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/multi_line_bundle.mmd]": 0.01925487513653934, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/multicarrier_offrow_exit_climb.mmd]": 0.03527304180897772, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/near_vertical_junction_hook.mmd]": 0.02097483421675861, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/off_track_convergence.mmd]": 0.02954654092900455, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/off_track_convergence_multiline.mmd]": 0.03188537457026541, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/off_track_input_above_consumer.mmd]": 0.11998637486249208, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/parallel_independent.mmd]": 0.02814599988050759, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/peeloff_extra_line_consumer.mmd]": 0.0418760001193732, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/peeloff_riser_respace.mmd]": 0.022389251040294766, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/post_convergence_trunk.mmd]": 0.006742250174283981, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/reconverge_reversed_fold.mmd]": 0.35717479209415615, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/right_entry_from_above.mmd]": 0.01795179210603237, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/right_entry_from_above_far.mmd]": 0.012035833206027746, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/right_entry_gap_above_empty_row.mmd]": 0.02684291498735547, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/right_entry_wrap_no_fan.mmd]": 0.013306332984939218, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/rl_entry_runway.mmd]": 0.02991262497380376, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/rnaseq_lite.mmd]": 0.07790558319538832, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/route_around_intervening.mmd]": 0.028636583127081394, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/section_diamond.mmd]": 0.03830245812423527, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/self_crossing_bridge.mmd]": 0.015083083882927895, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/shared_sink_parallel.mmd]": 0.03076270828023553, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/single_section.mmd]": 0.005398999899625778, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/stacked_left_exit_drop.mmd]": 0.018023583106696606, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/stacked_lr_serpentine.mmd]": 0.01623341697268188, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.04207045887596905, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_bottom_entry_flow_start.mmd]": 0.008085876004770398, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.016438583377748728, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.1630091262049973, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_column_continuation_two_lines.mmd]": 0.01813966711051762, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_convergence_straight_drop.mmd]": 0.02400803961791098, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_internal_diagonal.mmd]": 0.018454333068802953, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_left_exit_step.mmd]": 0.04146720771677792, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_lr_exit_left.mmd]": 0.033715000841766596, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_lr_exit_right.mmd]": 0.030266583198681474, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_passthrough_continuation.mmd]": 0.010361999971792102, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_passthrough_trunk.mmd]": 0.027756582712754607, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0101319570094347, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_right_entry_stack.mmd]": 0.0286188751924783, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_trunk_through_fan.mmd]": 0.015527209034189582, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/tb_two_line_vert_seam.mmd]": 0.018099209060892463, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/terminal_symmetric_fan.mmd]": 0.024732957826927304, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/terminus_join.mmd]": 0.014466248918324709, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/top_entry_header_clash.mmd]": 0.017760083079338074, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/trunk_through_fan.mmd]": 0.03172941622324288, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/twoline_fanout_up.mmd]": 0.02404154115356505, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/u_turn_fold.mmd]": 0.06341504072770476, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/uneven_diamond.mmd]": 0.006764750694856048, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/upward_bypass.mmd]": 0.06162745808251202, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/variant_calling.mmd]": 0.13792887469753623, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/wide_fan_in.mmd]": 0.02414024993777275, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/wide_fan_out.mmd]": 0.029084041947498918, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/wide_label_fan.mmd]": 0.017310584662482142, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[topologies/wrapped_label_trunk.mmd]": 0.009538749931380153, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[trunk_align_matching_bundle.mmd]": 0.025685793021693826, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[uneven_diamond.mmd]": 0.00986100104637444, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[variant_calling.mmd]": 0.03423716686666012, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[variant_calling_tuned.mmd]": 0.04501395719125867, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[variantbenchmarking.mmd]": 0.4713511250447482, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[variantbenchmarking_auto.mmd]": 0.18146995780989528, + "tests/test_layout_invariants.py::test_station_x_within_column_tolerance[variantprioritization.mmd]": 0.049835792277008295, + "tests/test_layout_invariants.py::test_straight_through_line_keeps_constant_offset[topologies/junction_entry_align.mmd-alpha]": 0.0014307908713817596, + "tests/test_layout_invariants.py::test_straight_through_line_keeps_constant_offset[topologies/junction_entry_collision.mmd-alpha]": 0.001100749708712101, + "tests/test_layout_invariants.py::test_subset_section_bundle_anchored_on_trunk[rnaseq_auto.mmd-pseudo_align]": 0.01050245831720531, + "tests/test_layout_invariants.py::test_subset_section_bundle_anchored_on_trunk[rnaseq_auto.mmd-qc_report]": 0.004003958078101277, + "tests/test_layout_invariants.py::test_subset_section_bundle_anchored_on_trunk[sarek_metro.mmd-calling]": 0.1872324168216437, + "tests/test_layout_invariants.py::test_subset_section_bundle_anchored_on_trunk[topologies/dogleg_exempt_distinct.mmd-bot_sink]": 0.0009551660623401403, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[bubble_forced_label_clears_diagonal.mmd]": 0.0009546650107949972, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[bubble_label_clears_diagonal.mmd]": 0.0006167918909341097, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[bubble_output_above.mmd]": 0.001350583741441369, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[captioned_sibling_outputs.mmd]": 0.000807708827778697, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[centered_tracks.mmd]": 0.0005663339979946613, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[cross_track_interchange.mmd]": 0.0016337919514626265, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[da_pipeline.mmd]": 0.002543417038396001, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[diagonal_labels.mmd]": 0.0012226670514792204, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[diagonal_single_trunk_off_track.mmd]": 0.001232667127624154, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[differentialabundance.mmd]": 0.002406124025583267, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[differentialabundance_default.mmd]": 0.002312334254384041, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[directional_flow.mmd]": 0.0005413328763097525, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[disconnected_components.mmd]": 0.0008990839123725891, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[epitopeprediction.mmd]": 0.0014639173168689013, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[file_icon_fanin.mmd]": 0.006033959100022912, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[file_icons.mmd]": 0.0006433341186493635, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[font_scale.mmd]": 0.000864874105900526, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[genomeassembly.mmd]": 0.0024183341301977634, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[genomeassembly_organellar.mmd]": 0.0031610417645424604, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[genomeassembly_staggered.mmd]": 0.005073582986369729, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[genomic_pipeline.mmd]": 0.00518708280287683, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[group_labels.mmd]": 0.0007338330615311861, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/01_minimal.mmd]": 0.00046108290553092957, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/02_sections.mmd]": 0.0008204590994864702, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/03_fan_out.mmd]": 0.0011938316747546196, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/03b_fan_in_merge.mmd]": 0.0017450421582907438, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/04_directions.mmd]": 0.002331207972019911, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/05_file_icons.mmd]": 0.0006952087860554457, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/05b_multi_icons.mmd]": 0.0007143749389797449, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/05c_files_icon.mmd]": 0.0006588739342987537, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/05d_folder_icon.mmd]": 0.0006444992031902075, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/05f_banner_labels.mmd]": 0.000790709862485528, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/06a_without_hidden.mmd]": 0.0009737091604620218, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[guide/06b_with_hidden.mmd]": 0.0013346248306334019, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[hlatyping.mmd]": 0.0011723344214260578, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[icon_caption_wrap.mmd]": 0.000548164825886488, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[leaf_file_icon_on_trunk.mmd]": 0.000516081927344203, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[legend_combo.mmd]": 0.000498458743095398, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[legend_logo_placement.mmd]": 0.0012362920679152012, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[longread_variant_calling.mmd]": 0.002332875272259116, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[marker_styles.mmd]": 0.0007574167102575302, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[multiline_labels.mmd]": 0.0007016239687800407, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[off_track_output_branched.mmd]": 0.0005410001613199711, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[off_track_outputs.mmd]": 0.0005624168552458286, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[off_track_outputs_along_trunk.mmd]": 0.0005280422046780586, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[rnaseq_auto.mmd]": 0.002170792082324624, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[rnaseq_sections.mmd]": 0.0033176252618432045, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[rnaseq_sections_manual.mmd]": 0.003000999800860882, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[rnaseq_simple.mmd]": 0.0004225829616189003, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[simple_pipeline.mmd]": 0.0004255003295838833, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[tb_file_termini.mmd]": 0.0007996668573468924, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[tb_right_exit_feeder_slots.mmd]": 0.0015015420503914356, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/aligner_row_pinned_continuation.mmd]": 0.004846873227506876, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/around_below_ep_col_gt0.mmd]": 0.0008461261168122292, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/around_section_below.mmd]": 0.0018230411224067211, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/asymmetric_tree.mmd]": 0.0014981240965425968, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0014664162881672382, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/branch_fold_forward.mmd]": 0.001186000183224678, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/branch_fold_stability.mmd]": 0.016712458105757833, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bt_chain.mmd]": 0.003463375149294734, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bt_exit_top_above.mmd]": 0.0006275421474128962, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bt_exit_top_above_2line.mmd]": 0.0005769990384578705, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bt_fork.mmd]": 0.00040445802733302116, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bt_perp_entry_below.mmd]": 0.0005645421333611012, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bt_to_lr.mmd]": 0.000594249926507473, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bt_to_tb.mmd]": 0.0015906249172985554, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bundle_terminator_continuation.mmd]": 0.001749873859807849, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_fan_in_outer_slot.mmd]": 0.0019946240354329348, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0032399988267570734, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_label_rake.mmd]": 0.002485207747668028, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_label_rake_left.mmd]": 0.001259458251297474, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_label_rake_wide.mmd]": 0.0015722920652478933, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_leftward_far_side_entry.mmd]": 0.0010377077851444483, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_leftward_overflow.mmd]": 0.0009927907958626747, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/bypass_v_tight.mmd]": 0.0008297089952975512, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/clear_channel_target_aware_push.mmd]": 0.00232933321967721, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/compact_gap_peer_conflict.mmd]": 0.0012984159402549267, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/compact_hidden_passthrough.mmd]": 0.0007556250784546137, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/complex_multipath.mmd]": 0.001656165812164545, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/convergence_stacked_sink.mmd]": 0.0013088751584291458, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/convergent_offrow_exit_climb.mmd]": 0.0024747499264776707, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/corridor_narrow_gap_fallback.mmd]": 0.001779457088559866, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/cross_col_top_entry.mmd]": 0.0017650001682341099, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/cross_column_perp_drop.mmd]": 0.0013409580569714308, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006532499101012945, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/cross_row_gap_wrap.mmd]": 0.0011271669063717127, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/deep_linear.mmd]": 0.014118249993771315, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/disjoint_sameline_trunks.mmd]": 0.019024667097255588, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/divergent_fanout_split.mmd]": 0.0007771248929202557, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/dogleg_exempt_distinct.mmd]": 0.0008603327441960573, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/dogleg_exempt_sameline.mmd]": 0.000692583154886961, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/dogleg_twoline_fanout.mmd]": 0.0007349601946771145, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/exit_corner_offset_dogleg.mmd]": 0.006450125249102712, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/fan_bypass_nesting.mmd]": 0.005957082845270634, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/fan_in_merge.mmd]": 0.0045444180723279715, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/fold_double.mmd]": 0.0029090838506817818, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/fold_fan_across.mmd]": 0.002390498761087656, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/fold_stacked_branch.mmd]": 0.002736332593485713, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/funcprofiler_upstream.mmd]": 0.01285341614857316, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/header_nudge.mmd]": 0.002665458945557475, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/header_side_rotated.mmd]": 0.0009049158543348312, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/inrow_skip_breeze.mmd]": 0.0004796241410076618, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/inter_row_wrap_clearance.mmd]": 0.0022960419300943613, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/interchange_lane_reorder.mmd]": 0.0007254593074321747, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/junction_entry_align.mmd]": 0.0012950832024216652, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/junction_entry_collision.mmd]": 0.0019791661761701107, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/junction_entry_reversed_fold.mmd]": 0.0017088737804442644, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/junction_fanout_convergence.mmd]": 0.002331876428797841, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/left_entry_up_wrap.mmd]": 0.002351042116060853, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/left_exit_sink_below.mmd]": 0.001739999745041132, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0010925419628620148, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0007872511632740498, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0007677068933844566, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0007740410510450602, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0008914570789784193, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_to_tb_top_cross_col.mmd]": 0.0007963741663843393, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_to_tb_top_drop.mmd]": 0.0005893749184906483, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0006325410213321447, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006276252679526806, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_to_tb_top_two_lines.mmd]": 0.0006600010674446821, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_top_entry_cross_column.mmd]": 0.0006095841526985168, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005792081356048584, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_around_below_leftmost.mmd]": 0.01654674904420972, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_bottom_row_bypass.mmd]": 0.0029422910884022713, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_leftmost_sink_branch.mmd]": 0.0030116247944533825, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_offrow_continuation.mmd]": 0.0012785010039806366, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_port_above_approach.mmd]": 0.0009222489316016436, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_pullaway.mmd]": 0.0010171260219067335, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_right_entry.mmd]": 0.0010234590154141188, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_trunk_out_of_range_section.mmd]": 0.00241899979300797, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/merge_trunk_over_low_section.mmd]": 0.01875249994918704, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/mismatched_tracks.mmd]": 0.001036542234942317, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/mixed_bundle_column.mmd]": 0.001311334315687418, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/mixed_port_sides.mmd]": 0.0011778739280998707, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/multi_input_convergence.mmd]": 0.0008039588574320078, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/multi_line_bundle.mmd]": 0.0031433748081326485, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0010009158868342638, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/near_vertical_junction_hook.mmd]": 0.0018393327482044697, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/off_track_convergence.mmd]": 0.009819166269153357, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/off_track_convergence_multiline.mmd]": 0.00284529197961092, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/off_track_input_above_consumer.mmd]": 0.004505584016442299, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/parallel_independent.mmd]": 0.0008071670308709145, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/peeloff_extra_line_consumer.mmd]": 0.003833459224551916, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/peeloff_riser_respace.mmd]": 0.0009793327189981937, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/post_convergence_trunk.mmd]": 0.0004838749300688505, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/reconverge_reversed_fold.mmd]": 0.002501582959666848, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/right_entry_from_above.mmd]": 0.0005972499493509531, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/right_entry_from_above_far.mmd]": 0.00060608284547925, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006680428050458431, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/right_entry_wrap_no_fan.mmd]": 0.0006399161648005247, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/rl_entry_runway.mmd]": 0.0007034996524453163, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/rnaseq_lite.mmd]": 0.005150041775777936, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/route_around_intervening.mmd]": 0.0008289171382784843, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/section_diamond.mmd]": 0.0009699170477688313, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/self_crossing_bridge.mmd]": 0.000758832786232233, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/shared_sink_parallel.mmd]": 0.001445291331037879, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/single_section.mmd]": 0.0004157919902354479, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/stacked_left_exit_drop.mmd]": 0.00078037497587502, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/stacked_lr_serpentine.mmd]": 0.0027315423358231783, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0030723754316568375, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_bottom_entry_flow_start.mmd]": 0.0006542510818690062, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0007759998552501202, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0009804998990148306, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_column_continuation_two_lines.mmd]": 0.0005911265034228563, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_convergence_straight_drop.mmd]": 0.0006418328266590834, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_internal_diagonal.mmd]": 0.0007090840954333544, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_left_exit_step.mmd]": 0.0010276248212903738, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_lr_exit_left.mmd]": 0.000779333058744669, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_lr_exit_right.mmd]": 0.0007531659211963415, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_passthrough_continuation.mmd]": 0.00048212497495114803, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_passthrough_trunk.mmd]": 0.0007352910470217466, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0005279588513076305, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_right_entry_stack.mmd]": 0.0008257932495325804, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_trunk_through_fan.mmd]": 0.0004401670303195715, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/tb_two_line_vert_seam.mmd]": 0.0006531658582389355, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/terminal_symmetric_fan.mmd]": 0.0006619577761739492, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/terminus_join.mmd]": 0.0003767919261008501, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/top_entry_header_clash.mmd]": 0.0005375829059630632, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/trunk_through_fan.mmd]": 0.0008515429217368364, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/twoline_fanout_up.mmd]": 0.0010429578833281994, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/u_turn_fold.mmd]": 0.0019320431165397167, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/uneven_diamond.mmd]": 0.0029829167760908604, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/upward_bypass.mmd]": 0.006046416005119681, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/variant_calling.mmd]": 0.012546750018373132, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/wide_fan_in.mmd]": 0.001388999167829752, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/wide_fan_out.mmd]": 0.0011368757113814354, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/wide_label_fan.mmd]": 0.0004976671189069748, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[topologies/wrapped_label_trunk.mmd]": 0.0005832079332321882, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[trunk_align_matching_bundle.mmd]": 0.0019382492173463106, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[uneven_diamond.mmd]": 0.0011697078589349985, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[variant_calling.mmd]": 0.0010295421816408634, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[variant_calling_tuned.mmd]": 0.0011625420302152634, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[variantbenchmarking.mmd]": 0.0025647080037742853, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[variantbenchmarking_auto.mmd]": 0.012791208690032363, + "tests/test_layout_invariants.py::test_symfan_pairs_share_y[variantprioritization.mmd]": 0.0025231658946722746, + "tests/test_layout_invariants.py::test_tb_straight_through_line_keeps_constant_offset[topologies/tb_passthrough_trunk.mmd-reporting-affy]": 0.0008741659112274647, + "tests/test_layout_invariants.py::test_tb_straight_through_line_keeps_constant_offset[topologies/tb_passthrough_trunk.mmd-reporting-mq]": 0.012029416160658002, + "tests/test_layout_invariants.py::test_tb_straight_through_line_keeps_constant_offset[topologies/tb_passthrough_trunk.mmd-reporting-rna]": 0.0008451659232378006, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[bubble_forced_label_clears_diagonal.mmd]": 0.000430708983913064, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[bubble_label_clears_diagonal.mmd]": 0.00042020902037620544, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[bubble_output_above.mmd]": 0.004143500234931707, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[captioned_sibling_outputs.mmd]": 0.0004507489502429962, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[centered_tracks.mmd]": 0.0004406261723488569, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[cross_track_interchange.mmd]": 0.0007429579272866249, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[da_pipeline.mmd]": 0.00186616787686944, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[diagonal_labels.mmd]": 0.0008553331717848778, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[diagonal_single_trunk_off_track.mmd]": 0.0011597496923059225, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[differentialabundance.mmd]": 0.0019431249238550663, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[differentialabundance_default.mmd]": 0.0046532489359378815, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[directional_flow.mmd]": 0.001481959130614996, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[disconnected_components.mmd]": 0.0013156251516193151, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[epitopeprediction.mmd]": 0.00119058508425951, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[file_icon_fanin.mmd]": 0.0010487500112503767, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[file_icons.mmd]": 0.0019107090774923563, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[font_scale.mmd]": 0.0004321667365729809, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[genomeassembly.mmd]": 0.001519208075478673, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[genomeassembly_organellar.mmd]": 0.0025918337050825357, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[genomeassembly_staggered.mmd]": 0.002476917114108801, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[genomic_pipeline.mmd]": 0.0042433340568095446, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[group_labels.mmd]": 0.0006151653360575438, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/01_minimal.mmd]": 0.0003797512035816908, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/02_sections.mmd]": 0.000614166958257556, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/03_fan_out.mmd]": 0.0008827499113976955, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/03b_fan_in_merge.mmd]": 0.004709081724286079, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/04_directions.mmd]": 0.001024290919303894, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/05_file_icons.mmd]": 0.0006034169346094131, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/05b_multi_icons.mmd]": 0.0006184158846735954, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/05c_files_icon.mmd]": 0.000536751002073288, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/05d_folder_icon.mmd]": 0.0005522491410374641, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/05f_banner_labels.mmd]": 0.0005654161795973778, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/06a_without_hidden.mmd]": 0.0007200841791927814, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[guide/06b_with_hidden.mmd]": 0.0007415420841425657, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[hlatyping.mmd]": 0.0026558740064501762, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[icon_caption_wrap.mmd]": 0.001053541898727417, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[leaf_file_icon_on_trunk.mmd]": 0.0026092499028891325, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[legend_combo.mmd]": 0.0005366669502109289, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[legend_logo_placement.mmd]": 0.0009244580287486315, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[longread_variant_calling.mmd]": 0.001759332837536931, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[marker_styles.mmd]": 0.0015260432846844196, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[multiline_labels.mmd]": 0.002589208073914051, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[off_track_output_branched.mmd]": 0.0009591672569513321, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[off_track_outputs.mmd]": 0.0013234172947704792, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[off_track_outputs_along_trunk.mmd]": 0.0005389999132603407, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[rnaseq_auto.mmd]": 0.003864833852276206, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[rnaseq_sections.mmd]": 0.002239083871245384, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[rnaseq_sections_manual.mmd]": 0.00546300015412271, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[rnaseq_simple.mmd]": 0.0004151260945945978, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[simple_pipeline.mmd]": 0.0004356240388005972, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[tb_file_termini.mmd]": 0.002145499223843217, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[tb_right_exit_feeder_slots.mmd]": 0.0008061670232564211, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/aligner_row_pinned_continuation.mmd]": 0.0010292499791830778, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/around_below_ep_col_gt0.mmd]": 0.0021724579855799675, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/around_section_below.mmd]": 0.0006456670816987753, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/asymmetric_tree.mmd]": 0.0011112920474261045, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0008169999346137047, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/branch_fold_forward.mmd]": 0.0009151669219136238, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/branch_fold_stability.mmd]": 0.0008062503766268492, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bt_chain.mmd]": 0.00038208416663110256, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bt_exit_top_above.mmd]": 0.0004892910365015268, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bt_exit_top_above_2line.mmd]": 0.0005149170756340027, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bt_fork.mmd]": 0.00038954196497797966, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bt_perp_entry_below.mmd]": 0.000504292082041502, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bt_to_lr.mmd]": 0.0007448748219758272, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bt_to_tb.mmd]": 0.0005506258457899094, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bundle_terminator_continuation.mmd]": 0.003560708137229085, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_fan_in_outer_slot.mmd]": 0.0015117081347852945, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0007898749317973852, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_label_rake.mmd]": 0.0008575827814638615, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_label_rake_left.mmd]": 0.0018385420553386211, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_label_rake_wide.mmd]": 0.001956123858690262, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_leftward_far_side_entry.mmd]": 0.0024863341823220253, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_leftward_overflow.mmd]": 0.0007418750319629908, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/bypass_v_tight.mmd]": 0.0006176671013236046, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/clear_channel_target_aware_push.mmd]": 0.0006649158895015717, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/compact_gap_peer_conflict.mmd]": 0.0006965408101677895, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/compact_hidden_passthrough.mmd]": 0.0006413322407752275, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/complex_multipath.mmd]": 0.010738540906459093, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/convergence_stacked_sink.mmd]": 0.002156333066523075, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/convergent_offrow_exit_climb.mmd]": 0.0018728740978986025, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/corridor_narrow_gap_fallback.mmd]": 0.0007143751718103886, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/cross_col_top_entry.mmd]": 0.0005020408425480127, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/cross_column_perp_drop.mmd]": 0.000537459272891283, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0008983751758933067, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/cross_row_gap_wrap.mmd]": 0.000914375064894557, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/deep_linear.mmd]": 0.0013099589850753546, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/disjoint_sameline_trunks.mmd]": 0.0008145421743392944, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/divergent_fanout_split.mmd]": 0.0005621663294732571, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/dogleg_exempt_distinct.mmd]": 0.0006805001758038998, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/dogleg_exempt_sameline.mmd]": 0.0005847080610692501, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/dogleg_twoline_fanout.mmd]": 0.0005818323697894812, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/exit_corner_offset_dogleg.mmd]": 0.0006482487078756094, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/fan_bypass_nesting.mmd]": 0.0011261259205639362, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/fan_in_merge.mmd]": 0.0008091668132692575, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/fold_double.mmd]": 0.0020218342542648315, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/fold_fan_across.mmd]": 0.001661168411374092, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/fold_stacked_branch.mmd]": 0.004778000060468912, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/funcprofiler_upstream.mmd]": 0.004190041217952967, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/header_nudge.mmd]": 0.0006253342144191265, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/header_side_rotated.mmd]": 0.0005637924186885357, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/inrow_skip_breeze.mmd]": 0.00039583398029208183, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/inter_row_wrap_clearance.mmd]": 0.0006994169671088457, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/interchange_lane_reorder.mmd]": 0.0010742919985204935, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/junction_entry_align.mmd]": 0.000985457794740796, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/junction_entry_collision.mmd]": 0.004443248966708779, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/junction_entry_reversed_fold.mmd]": 0.0007737907581031322, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/junction_fanout_convergence.mmd]": 0.0006371261551976204, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/left_entry_up_wrap.mmd]": 0.0006935831625014544, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/left_exit_sink_below.mmd]": 0.0007788739167153835, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006205420941114426, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0005765408277511597, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006155411247164011, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0005914587527513504, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005934159271419048, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005852081812918186, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_to_tb_top_drop.mmd]": 0.0004826239310204983, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0004964158870279789, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_to_tb_top_near_vertical.mmd]": 0.003192331874743104, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_to_tb_top_two_lines.mmd]": 0.002176624024286866, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_top_entry_cross_column.mmd]": 0.0011482490226626396, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0006153751164674759, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_around_below_leftmost.mmd]": 0.002445291029289365, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_bottom_row_bypass.mmd]": 0.002184291835874319, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_leftmost_sink_branch.mmd]": 0.001426291186362505, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_offrow_continuation.mmd]": 0.001267499988898635, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_port_above_approach.mmd]": 0.0008792500011622906, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_pullaway.mmd]": 0.0008519168477505445, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_right_entry.mmd]": 0.0008100431878119707, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_trunk_out_of_range_section.mmd]": 0.0008933749049901962, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/merge_trunk_over_low_section.mmd]": 0.001577331917360425, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/mismatched_tracks.mmd]": 0.0007636670488864183, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/mixed_bundle_column.mmd]": 0.000978332245722413, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/mixed_port_sides.mmd]": 0.0005807499401271343, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/multi_input_convergence.mmd]": 0.0006647082045674324, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/multi_line_bundle.mmd]": 0.002526958007365465, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0010734579991549253, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/near_vertical_junction_hook.mmd]": 0.00226529105566442, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/off_track_convergence.mmd]": 0.0007696240209043026, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/off_track_convergence_multiline.mmd]": 0.0008165009785443544, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/off_track_input_above_consumer.mmd]": 0.001989667071029544, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/parallel_independent.mmd]": 0.0007090838626027107, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/peeloff_extra_line_consumer.mmd]": 0.0007139602676033974, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/peeloff_riser_respace.mmd]": 0.0006686241831630468, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/post_convergence_trunk.mmd]": 0.0003907913342118263, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/reconverge_reversed_fold.mmd]": 0.001862125238403678, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/right_entry_from_above.mmd]": 0.00048629194498062134, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/right_entry_from_above_far.mmd]": 0.0017249593511223793, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005609581712633371, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/right_entry_wrap_no_fan.mmd]": 0.0004775428678840399, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/rl_entry_runway.mmd]": 0.0005574170500040054, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/rnaseq_lite.mmd]": 0.0013262080028653145, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/route_around_intervening.mmd]": 0.0006474587135016918, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/section_diamond.mmd]": 0.0007872497662901878, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/self_crossing_bridge.mmd]": 0.0006650409195572138, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/shared_sink_parallel.mmd]": 0.00104975001886487, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/single_section.mmd]": 0.0003461248707026243, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/stacked_left_exit_drop.mmd]": 0.0004651246126741171, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/stacked_lr_serpentine.mmd]": 0.0007015417795628309, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007025422528386116, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_bottom_entry_flow_start.mmd]": 0.000489165773615241, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0005906247533857822, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0007298344280570745, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_column_continuation_two_lines.mmd]": 0.0024278329219669104, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_convergence_straight_drop.mmd]": 0.0013615828938782215, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_internal_diagonal.mmd]": 0.0014611659571528435, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_left_exit_step.mmd]": 0.002017875202000141, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_lr_exit_left.mmd]": 0.0013574170880019665, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_lr_exit_right.mmd]": 0.0008423759136348963, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_passthrough_continuation.mmd]": 0.0004931660369038582, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_passthrough_trunk.mmd]": 0.000906042056158185, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006287919823080301, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_right_entry_stack.mmd]": 0.0007414990104734898, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_trunk_through_fan.mmd]": 0.0005475841462612152, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/tb_two_line_vert_seam.mmd]": 0.0005520430859178305, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/terminal_symmetric_fan.mmd]": 0.0005256668664515018, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/terminus_join.mmd]": 0.00034716702066361904, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/top_entry_header_clash.mmd]": 0.0005583332385867834, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/trunk_through_fan.mmd]": 0.0007154995109885931, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/twoline_fanout_up.mmd]": 0.0005844170227646828, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/u_turn_fold.mmd]": 0.001591209089383483, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/uneven_diamond.mmd]": 0.0004165829159319401, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/upward_bypass.mmd]": 0.001044791890308261, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/variant_calling.mmd]": 0.0017247910145670176, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/wide_fan_in.mmd]": 0.0007976670749485493, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/wide_fan_out.mmd]": 0.0008115421514958143, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/wide_label_fan.mmd]": 0.0004102091770619154, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[topologies/wrapped_label_trunk.mmd]": 0.000441916985437274, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[trunk_align_matching_bundle.mmd]": 0.0006053319666534662, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[uneven_diamond.mmd]": 0.0004023339133709669, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[variant_calling.mmd]": 0.002093709073960781, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[variant_calling_tuned.mmd]": 0.0025740419514477253, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[variantbenchmarking.mmd]": 0.0045083758886903524, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[variantbenchmarking_auto.mmd]": 0.00423229206353426, + "tests/test_layout_invariants.py::test_tb_top_entry_clean_drop_hugs_top[variantprioritization.mmd]": 0.0009907511994242668, + "tests/test_layout_invariants.py::test_terminal_fan_symmetric_about_entry_port[da_pipeline.mmd]": 0.001847415929660201, + "tests/test_layout_invariants.py::test_terminal_fan_symmetric_about_entry_port[differentialabundance.mmd]": 0.0019737500697374344, + "tests/test_layout_invariants.py::test_terminal_fan_symmetric_about_entry_port[topologies/terminal_symmetric_fan.mmd]": 0.0005279167089611292, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[bubble_forced_label_clears_diagonal.mmd]": 0.0007308737840503454, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[bubble_label_clears_diagonal.mmd]": 0.0005685002543032169, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[bubble_output_above.mmd]": 0.000508416909724474, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[captioned_sibling_outputs.mmd]": 0.0005549157503992319, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[centered_tracks.mmd]": 0.001376248663291335, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[cross_track_interchange.mmd]": 0.0016763340681791306, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[da_pipeline.mmd]": 0.007492667995393276, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[diagonal_labels.mmd]": 0.003985833842307329, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[diagonal_single_trunk_off_track.mmd]": 0.0015666240360587835, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[differentialabundance.mmd]": 0.0048117919359356165, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[differentialabundance_default.mmd]": 0.01408279174938798, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[directional_flow.mmd]": 0.0007278339471668005, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[disconnected_components.mmd]": 0.007754167076200247, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[epitopeprediction.mmd]": 0.0020948329474776983, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[file_icon_fanin.mmd]": 0.0064053337555378675, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[file_icons.mmd]": 0.0007685839664191008, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[font_scale.mmd]": 0.0005436670035123825, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[genomeassembly.mmd]": 0.0073029170744121075, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[genomeassembly_organellar.mmd]": 0.0043574171140789986, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[genomeassembly_staggered.mmd]": 0.006947833113372326, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[genomic_pipeline.mmd]": 0.011061000172048807, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[group_labels.mmd]": 0.0008679998572915792, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/01_minimal.mmd]": 0.0004517922643572092, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/02_sections.mmd]": 0.0008482078555971384, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/03_fan_out.mmd]": 0.0014812510926276445, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/03b_fan_in_merge.mmd]": 0.001599418232217431, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/04_directions.mmd]": 0.001419957960024476, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/05_file_icons.mmd]": 0.0006595838349312544, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/05b_multi_icons.mmd]": 0.0007405851501971483, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/05c_files_icon.mmd]": 0.0006681669037789106, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/05d_folder_icon.mmd]": 0.0006780407857149839, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/05f_banner_labels.mmd]": 0.0007567082066088915, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/06a_without_hidden.mmd]": 0.0010078339837491512, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[guide/06b_with_hidden.mmd]": 0.0025684579741209745, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[hlatyping.mmd]": 0.001359415939077735, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[icon_caption_wrap.mmd]": 0.0010588748846203089, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[leaf_file_icon_on_trunk.mmd]": 0.0014739579055458307, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[legend_combo.mmd]": 0.0015264996327459812, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[legend_logo_placement.mmd]": 0.0037200830411165953, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[longread_variant_calling.mmd]": 0.004530957899987698, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[marker_styles.mmd]": 0.0008983751758933067, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[multiline_labels.mmd]": 0.0014223747421056032, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[off_track_output_branched.mmd]": 0.0006059592124074697, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[off_track_outputs.mmd]": 0.0006516252178698778, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[off_track_outputs_along_trunk.mmd]": 0.000565666938200593, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[rnaseq_auto.mmd]": 0.005338624818250537, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[rnaseq_sections.mmd]": 0.0043978760950267315, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[rnaseq_sections_manual.mmd]": 0.01338870800100267, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[rnaseq_simple.mmd]": 0.0018382079433649778, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[simple_pipeline.mmd]": 0.0012107088696211576, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[tb_file_termini.mmd]": 0.0032835418824106455, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[tb_right_exit_feeder_slots.mmd]": 0.004141791956499219, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/aligner_row_pinned_continuation.mmd]": 0.0016864181961864233, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/around_below_ep_col_gt0.mmd]": 0.001316040987148881, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/around_section_below.mmd]": 0.0025715420488268137, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/asymmetric_tree.mmd]": 0.002650792244821787, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0042524151504039764, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/branch_fold_forward.mmd]": 0.002709124004468322, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/branch_fold_stability.mmd]": 0.0056094578467309475, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bt_chain.mmd]": 0.0011455423664301634, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bt_exit_top_above.mmd]": 0.0007081239018589258, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bt_exit_top_above_2line.mmd]": 0.0007240418344736099, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bt_fork.mmd]": 0.0004705418832600117, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bt_perp_entry_below.mmd]": 0.0007052079308778048, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bt_to_lr.mmd]": 0.0007397490553557873, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bt_to_tb.mmd]": 0.0017642909660935402, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bundle_terminator_continuation.mmd]": 0.0004522076342254877, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_fan_in_outer_slot.mmd]": 0.003069499973207712, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002027709037065506, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_label_rake.mmd]": 0.0010509160347282887, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_label_rake_left.mmd]": 0.0010287510231137276, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_label_rake_wide.mmd]": 0.0067569168750196695, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017262501642107964, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_leftward_overflow.mmd]": 0.004078625002875924, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/bypass_v_tight.mmd]": 0.0008458332158625126, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/clear_channel_target_aware_push.mmd]": 0.001016457099467516, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/compact_gap_peer_conflict.mmd]": 0.0009853749070316553, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/compact_hidden_passthrough.mmd]": 0.0008270833641290665, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/complex_multipath.mmd]": 0.009423582814633846, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/convergence_stacked_sink.mmd]": 0.003387667238712311, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/convergent_offrow_exit_climb.mmd]": 0.012026125099509954, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/corridor_narrow_gap_fallback.mmd]": 0.0030270421411842108, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/cross_col_top_entry.mmd]": 0.0009698327630758286, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/cross_column_perp_drop.mmd]": 0.0006933757103979588, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006634588353335857, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/cross_row_gap_wrap.mmd]": 0.0013988739810883999, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/deep_linear.mmd]": 0.0018477912526577711, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/disjoint_sameline_trunks.mmd]": 0.001960208872333169, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/divergent_fanout_split.mmd]": 0.021751875057816505, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/dogleg_exempt_distinct.mmd]": 0.0026547510642558336, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/dogleg_exempt_sameline.mmd]": 0.0010312511585652828, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/dogleg_twoline_fanout.mmd]": 0.0009829159826040268, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/exit_corner_offset_dogleg.mmd]": 0.0011901671532541513, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/fan_bypass_nesting.mmd]": 0.0030221669003367424, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/fan_in_merge.mmd]": 0.0018950842786580324, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/fold_double.mmd]": 0.011622373946011066, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/fold_fan_across.mmd]": 0.010605707066133618, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/fold_stacked_branch.mmd]": 0.0033525421749800444, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/funcprofiler_upstream.mmd]": 0.0038850421551615, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/header_nudge.mmd]": 0.0030405831057578325, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/header_side_rotated.mmd]": 0.0011633336544036865, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/inrow_skip_breeze.mmd]": 0.0005314990412443876, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/inter_row_wrap_clearance.mmd]": 0.0009572089184075594, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/interchange_lane_reorder.mmd]": 0.0005725009832531214, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/junction_entry_align.mmd]": 0.0016434579156339169, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/junction_entry_collision.mmd]": 0.001394874881953001, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/junction_entry_reversed_fold.mmd]": 0.0017264990601688623, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/junction_fanout_convergence.mmd]": 0.0010870001278817654, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/left_entry_up_wrap.mmd]": 0.0007459991611540318, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/left_exit_sink_below.mmd]": 0.0010832499247044325, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.003411500947549939, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.00096100103110075, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0009093319531530142, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0017344588413834572, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0008772918954491615, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_to_tb_top_cross_col.mmd]": 0.0008184157777577639, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_to_tb_top_drop.mmd]": 0.001983541063964367, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0013395408168435097, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_to_tb_top_near_vertical.mmd]": 0.002626333851367235, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_to_tb_top_two_lines.mmd]": 0.0021338751539587975, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_top_entry_cross_column.mmd]": 0.0017797909677028656, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0008366669062525034, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_around_below_leftmost.mmd]": 0.0013634997885674238, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_bottom_row_bypass.mmd]": 0.0013198340311646461, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_leftmost_sink_branch.mmd]": 0.0012459589634090662, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_offrow_continuation.mmd]": 0.000945541774854064, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_port_above_approach.mmd]": 0.000910123810172081, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_pullaway.mmd]": 0.0031930420082062483, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_right_entry.mmd]": 0.0012989570386707783, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_trunk_out_of_range_section.mmd]": 0.0017201260197907686, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/merge_trunk_over_low_section.mmd]": 0.0016254580114036798, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/mismatched_tracks.mmd]": 0.0010839160531759262, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/mixed_bundle_column.mmd]": 0.001821125391870737, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/mixed_port_sides.mmd]": 0.003648000070825219, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/multi_input_convergence.mmd]": 0.0011261668987572193, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/multi_line_bundle.mmd]": 0.0030186667572706938, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0012954170815646648, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/near_vertical_junction_hook.mmd]": 0.011824249289929867, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/off_track_convergence.mmd]": 0.00395950092934072, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/off_track_convergence_multiline.mmd]": 0.0029872506856918335, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/off_track_input_above_consumer.mmd]": 0.006508084014058113, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/parallel_independent.mmd]": 0.0008388750720769167, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/peeloff_extra_line_consumer.mmd]": 0.0016706259921193123, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/peeloff_riser_respace.mmd]": 0.0015924579929560423, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/post_convergence_trunk.mmd]": 0.00043737515807151794, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/reconverge_reversed_fold.mmd]": 0.008998749079182744, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/right_entry_from_above.mmd]": 0.0007107078563421965, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/right_entry_from_above_far.mmd]": 0.0006292499601840973, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/right_entry_gap_above_empty_row.mmd]": 0.000758166192099452, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/right_entry_wrap_no_fan.mmd]": 0.000609041890129447, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/rl_entry_runway.mmd]": 0.0008197082206606865, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/rnaseq_lite.mmd]": 0.0023030841257423162, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/route_around_intervening.mmd]": 0.0010915831662714481, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/section_diamond.mmd]": 0.0011536253150552511, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/self_crossing_bridge.mmd]": 0.0008364170789718628, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/shared_sink_parallel.mmd]": 0.0022796252742409706, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/single_section.mmd]": 0.0004106669221073389, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/stacked_left_exit_drop.mmd]": 0.00221829186193645, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/stacked_lr_serpentine.mmd]": 0.001086292089894414, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.001164834015071392, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_bottom_entry_flow_start.mmd]": 0.001382583286613226, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001050082966685295, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0026267091743648052, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_column_continuation_two_lines.mmd]": 0.001980875851586461, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_convergence_straight_drop.mmd]": 0.002523791277781129, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_internal_diagonal.mmd]": 0.0020160009153187275, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_left_exit_step.mmd]": 0.004090667003765702, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_lr_exit_left.mmd]": 0.0015062079764902592, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_lr_exit_right.mmd]": 0.0012117507867515087, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_passthrough_continuation.mmd]": 0.0005492919590324163, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_passthrough_trunk.mmd]": 0.0008612500969320536, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0006322080735117197, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_right_entry_stack.mmd]": 0.0011317089665681124, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_trunk_through_fan.mmd]": 0.0004672079812735319, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/tb_two_line_vert_seam.mmd]": 0.0007846241351217031, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/terminal_symmetric_fan.mmd]": 0.0006834168452769518, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/terminus_join.mmd]": 0.0003778750542551279, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/top_entry_header_clash.mmd]": 0.0005683319177478552, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/trunk_through_fan.mmd]": 0.0009697920177131891, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/twoline_fanout_up.mmd]": 0.0011176667176187038, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/u_turn_fold.mmd]": 0.00211508315987885, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/uneven_diamond.mmd]": 0.0005054580979049206, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/upward_bypass.mmd]": 0.0030257911421358585, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/variant_calling.mmd]": 0.0026561252307146788, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/wide_fan_in.mmd]": 0.0011510842014104128, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/wide_fan_out.mmd]": 0.0012602501083165407, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/wide_label_fan.mmd]": 0.0005003761034458876, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[topologies/wrapped_label_trunk.mmd]": 0.0005442078690975904, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[trunk_align_matching_bundle.mmd]": 0.002373750088736415, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[uneven_diamond.mmd]": 0.0014334986917674541, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[variant_calling.mmd]": 0.0015722920652478933, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[variant_calling_tuned.mmd]": 0.0016514577437192202, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[variantbenchmarking.mmd]": 0.004986583720892668, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[variantbenchmarking_auto.mmd]": 0.005089999875053763, + "tests/test_layout_invariants.py::test_terminus_not_directly_after_diagonal[variantprioritization.mmd]": 0.00595500017516315, + "tests/test_layout_invariants.py::test_thick_bundle_row_pitch[rnaseq_sections_manual.mmd]": 0.006061875028535724, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[bubble_forced_label_clears_diagonal.mmd]": 0.0007530837319791317, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[bubble_label_clears_diagonal.mmd]": 0.0006433338858187199, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[bubble_output_above.mmd]": 0.001198166748508811, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[captioned_sibling_outputs.mmd]": 0.0008719591423869133, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[centered_tracks.mmd]": 0.0006557079032063484, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[cross_track_interchange.mmd]": 0.0030975830741226673, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[da_pipeline.mmd]": 0.006690458860248327, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[diagonal_labels.mmd]": 0.004658749094232917, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[diagonal_single_trunk_off_track.mmd]": 0.0017598748672753572, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[differentialabundance.mmd]": 0.022363000083714724, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[differentialabundance_default.mmd]": 0.007808083668351173, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[directional_flow.mmd]": 0.0012848337646573782, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[disconnected_components.mmd]": 0.0017240408342331648, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[epitopeprediction.mmd]": 0.00329549890011549, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[file_icon_fanin.mmd]": 0.004947166191413999, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[file_icons.mmd]": 0.0008341672364622355, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[font_scale.mmd]": 0.0023703339975327253, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[genomeassembly.mmd]": 0.0038904580287635326, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[genomeassembly_organellar.mmd]": 0.007274581817910075, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[genomeassembly_staggered.mmd]": 0.003037415910512209, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[genomic_pipeline.mmd]": 0.006924916990101337, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[group_labels.mmd]": 0.000852667260915041, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/01_minimal.mmd]": 0.0005112499929964542, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/02_sections.mmd]": 0.0009764989372342825, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/03_fan_out.mmd]": 0.0017197499983012676, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/03b_fan_in_merge.mmd]": 0.002734874840825796, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/04_directions.mmd]": 0.0023906249552965164, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/05_file_icons.mmd]": 0.0010814580600708723, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/05b_multi_icons.mmd]": 0.002578499959781766, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/05c_files_icon.mmd]": 0.0014042500406503677, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/05d_folder_icon.mmd]": 0.0030446669552475214, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/05f_banner_labels.mmd]": 0.0009746667928993702, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/06a_without_hidden.mmd]": 0.0012497501447796822, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[guide/06b_with_hidden.mmd]": 0.0012040839064866304, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[hlatyping.mmd]": 0.019885917892679572, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[icon_caption_wrap.mmd]": 0.0005532079376280308, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[leaf_file_icon_on_trunk.mmd]": 0.0005741671193391085, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[legend_combo.mmd]": 0.0035482910461723804, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[legend_logo_placement.mmd]": 0.0018461248837411404, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[longread_variant_calling.mmd]": 0.020949500147253275, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[marker_styles.mmd]": 0.0012643749359995127, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[multiline_labels.mmd]": 0.0008499170653522015, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[off_track_output_branched.mmd]": 0.0006334157660603523, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[off_track_outputs.mmd]": 0.0007466240786015987, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[off_track_outputs_along_trunk.mmd]": 0.000956167234107852, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[rnaseq_auto.mmd]": 0.007116999011486769, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[rnaseq_sections.mmd]": 0.005476250080391765, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[rnaseq_sections_manual.mmd]": 0.009782166918739676, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[rnaseq_simple.mmd]": 0.0012829587794840336, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[simple_pipeline.mmd]": 0.004521834198385477, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[tb_file_termini.mmd]": 0.0011552919168025255, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[tb_right_exit_feeder_slots.mmd]": 0.003979874076321721, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/aligner_row_pinned_continuation.mmd]": 0.0017666660714894533, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/around_below_ep_col_gt0.mmd]": 0.0011747919488698244, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/around_section_below.mmd]": 0.001108749769628048, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/asymmetric_tree.mmd]": 0.00198487495072186, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bottom_row_climb_clear_corridor.mmd]": 0.009344875114038587, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/branch_fold_forward.mmd]": 0.005447375355288386, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/branch_fold_stability.mmd]": 0.0013798330910503864, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bt_chain.mmd]": 0.0019984999671578407, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bt_exit_top_above.mmd]": 0.0019089169800281525, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bt_exit_top_above_2line.mmd]": 0.0014220408629626036, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bt_fork.mmd]": 0.0005778749473392963, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bt_perp_entry_below.mmd]": 0.0009602922946214676, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bt_to_lr.mmd]": 0.002125418046489358, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bt_to_tb.mmd]": 0.0011215838603675365, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bundle_terminator_continuation.mmd]": 0.0015805009752511978, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_fan_in_outer_slot.mmd]": 0.006440832978114486, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_gap2_rightward_overflow.mmd]": 0.004592832876369357, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_label_rake.mmd]": 0.0013411680702120066, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_label_rake_left.mmd]": 0.0012431249488145113, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_label_rake_wide.mmd]": 0.0012179161421954632, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_leftward_far_side_entry.mmd]": 0.0017337917815893888, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_leftward_overflow.mmd]": 0.003019876079633832, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/bypass_v_tight.mmd]": 0.001711999997496605, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/clear_channel_target_aware_push.mmd]": 0.001227125059813261, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/compact_gap_peer_conflict.mmd]": 0.0013464170042425394, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/compact_hidden_passthrough.mmd]": 0.0010388740338385105, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/complex_multipath.mmd]": 0.007639459101483226, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/convergence_stacked_sink.mmd]": 0.0019972079899162054, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/convergent_offrow_exit_climb.mmd]": 0.006666915956884623, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/corridor_narrow_gap_fallback.mmd]": 0.00115566560998559, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/cross_col_top_entry.mmd]": 0.0006719587836414576, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/cross_column_perp_drop.mmd]": 0.0006714155897498131, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0006805418524891138, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/cross_row_gap_wrap.mmd]": 0.001580541953444481, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/deep_linear.mmd]": 0.0021101669408380985, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/disjoint_sameline_trunks.mmd]": 0.004251793026924133, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/divergent_fanout_split.mmd]": 0.000994709087535739, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/dogleg_exempt_distinct.mmd]": 0.00126700010150671, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/dogleg_exempt_sameline.mmd]": 0.0009604997467249632, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/dogleg_twoline_fanout.mmd]": 0.0010432100389152765, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/exit_corner_offset_dogleg.mmd]": 0.002085374901071191, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/fan_bypass_nesting.mmd]": 0.002377167111262679, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/fan_in_merge.mmd]": 0.001924209063872695, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/fold_double.mmd]": 0.0037342498544603586, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/fold_fan_across.mmd]": 0.005825207801535726, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/fold_stacked_branch.mmd]": 0.0036491660866886377, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/funcprofiler_upstream.mmd]": 0.0038972911424934864, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/header_nudge.mmd]": 0.0007812080439180136, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/header_side_rotated.mmd]": 0.0007630421314388514, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/inrow_skip_breeze.mmd]": 0.000545792281627655, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/inter_row_wrap_clearance.mmd]": 0.002182251075282693, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/interchange_lane_reorder.mmd]": 0.0006787499878555536, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/junction_entry_align.mmd]": 0.0019467920064926147, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/junction_entry_collision.mmd]": 0.00166441616602242, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/junction_entry_reversed_fold.mmd]": 0.003798749065026641, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/junction_fanout_convergence.mmd]": 0.002271499950438738, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/left_entry_up_wrap.mmd]": 0.0012768751475960016, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/left_exit_sink_below.mmd]": 0.0014537498354911804, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0011112499050796032, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.00100312614813447, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0010179998353123665, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0010009580291807652, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_perp_top_exit_side_entry.mmd]": 0.000961249927058816, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_to_tb_top_cross_col.mmd]": 0.0008726662490516901, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_to_tb_top_drop.mmd]": 0.000623876228928566, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0007407502271234989, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0006560829933732748, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_to_tb_top_two_lines.mmd]": 0.003942874958738685, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_top_entry_cross_column.mmd]": 0.0017551239579916, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.000843083718791604, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_around_below_leftmost.mmd]": 0.00147387501783669, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_bottom_row_bypass.mmd]": 0.0018421250861138105, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_leftmost_sink_branch.mmd]": 0.0015542088076472282, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_offrow_continuation.mmd]": 0.0010934590827673674, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_port_above_approach.mmd]": 0.0010964588727802038, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_pullaway.mmd]": 0.0013739170972257853, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_right_entry.mmd]": 0.0013641668483614922, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_trunk_out_of_range_section.mmd]": 0.0025056260637938976, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/merge_trunk_over_low_section.mmd]": 0.0028616245836019516, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/mismatched_tracks.mmd]": 0.005019207717850804, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/mixed_bundle_column.mmd]": 0.005929458187893033, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/mixed_port_sides.mmd]": 0.003801416838541627, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/multi_input_convergence.mmd]": 0.00259012496098876, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/multi_line_bundle.mmd]": 0.003983499016612768, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0035829171538352966, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/near_vertical_junction_hook.mmd]": 0.0016018750611692667, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/off_track_convergence.mmd]": 0.0026119998656213284, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/off_track_convergence_multiline.mmd]": 0.0022825831547379494, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/off_track_input_above_consumer.mmd]": 0.006743375211954117, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/parallel_independent.mmd]": 0.001364374766126275, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/peeloff_extra_line_consumer.mmd]": 0.003710916033014655, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/peeloff_riser_respace.mmd]": 0.0027477911207824945, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/post_convergence_trunk.mmd]": 0.0005830831360071898, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/reconverge_reversed_fold.mmd]": 0.003649666905403137, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/right_entry_from_above.mmd]": 0.0007277489639818668, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/right_entry_from_above_far.mmd]": 0.0006572080310434103, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/right_entry_gap_above_empty_row.mmd]": 0.003504208056256175, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/right_entry_wrap_no_fan.mmd]": 0.0010052090510725975, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/rl_entry_runway.mmd]": 0.0022990829311311245, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/rnaseq_lite.mmd]": 0.003443458117544651, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/route_around_intervening.mmd]": 0.00331904087215662, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/section_diamond.mmd]": 0.001811792142689228, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/self_crossing_bridge.mmd]": 0.0012061670422554016, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/shared_sink_parallel.mmd]": 0.01073549990542233, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/single_section.mmd]": 0.0005041670519858599, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/stacked_left_exit_drop.mmd]": 0.000680750235915184, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/stacked_lr_serpentine.mmd]": 0.001111624762415886, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0026457090862095356, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_bottom_entry_flow_start.mmd]": 0.002780583221465349, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0012025830801576376, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0011803749948740005, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_column_continuation_two_lines.mmd]": 0.000730208121240139, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_convergence_straight_drop.mmd]": 0.0004783759359270334, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_internal_diagonal.mmd]": 0.0008574991952627897, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_left_exit_step.mmd]": 0.0016394169069826603, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_lr_exit_left.mmd]": 0.005435416009277105, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_lr_exit_right.mmd]": 0.0012624997179955244, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_passthrough_continuation.mmd]": 0.0010897915344685316, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_passthrough_trunk.mmd]": 0.004371458198875189, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0007612081244587898, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_right_entry_stack.mmd]": 0.001390041783452034, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_trunk_through_fan.mmd]": 0.0006171660497784615, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/tb_two_line_vert_seam.mmd]": 0.0009357088711112738, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/terminal_symmetric_fan.mmd]": 0.0008124569430947304, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/terminus_join.mmd]": 0.00040358281694352627, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/top_entry_header_clash.mmd]": 0.0006461259908974171, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/trunk_through_fan.mmd]": 0.0010840827599167824, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/twoline_fanout_up.mmd]": 0.0010818748269230127, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/u_turn_fold.mmd]": 0.00316979200579226, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/uneven_diamond.mmd]": 0.0005991659127175808, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/upward_bypass.mmd]": 0.00292516709305346, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/variant_calling.mmd]": 0.003212875919416547, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/wide_fan_in.mmd]": 0.0013129166327416897, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/wide_fan_out.mmd]": 0.0014355829916894436, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/wide_label_fan.mmd]": 0.0005265830550342798, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[topologies/wrapped_label_trunk.mmd]": 0.0006135008297860622, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[trunk_align_matching_bundle.mmd]": 0.0012990839313715696, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[uneven_diamond.mmd]": 0.0006297491490840912, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[variant_calling.mmd]": 0.001653041923418641, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[variant_calling_tuned.mmd]": 0.002078335266560316, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[variantbenchmarking.mmd]": 0.004879415966570377, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[variantbenchmarking_auto.mmd]": 0.016229209024459124, + "tests/test_layout_invariants.py::test_top_entry_lead_corner_concentric[variantprioritization.mmd]": 0.0022690840996801853, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[bubble_forced_label_clears_diagonal.mmd]": 0.0004904167726635933, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[bubble_label_clears_diagonal.mmd]": 0.00044633401557803154, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[bubble_output_above.mmd]": 0.00041083316318690777, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[captioned_sibling_outputs.mmd]": 0.0004045839887112379, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[centered_tracks.mmd]": 0.0012595001608133316, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[cross_track_interchange.mmd]": 0.0013677501119673252, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[da_pipeline.mmd]": 0.006093000993132591, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[diagonal_labels.mmd]": 0.0009873330127447844, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[diagonal_single_trunk_off_track.mmd]": 0.0109924569260329, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[differentialabundance.mmd]": 0.0021093739196658134, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[differentialabundance_default.mmd]": 0.001943875104188919, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[directional_flow.mmd]": 0.0019069579429924488, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[disconnected_components.mmd]": 0.003105125157162547, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[epitopeprediction.mmd]": 0.0018695828039199114, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[file_icon_fanin.mmd]": 0.0026097088120877743, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[file_icons.mmd]": 0.0015990820247679949, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[font_scale.mmd]": 0.0004985830746591091, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[genomeassembly.mmd]": 0.003709458978846669, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[genomeassembly_organellar.mmd]": 0.0022481237538158894, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[genomeassembly_staggered.mmd]": 0.002121708123013377, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[genomic_pipeline.mmd]": 0.002702750964090228, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[group_labels.mmd]": 0.0026848327834159136, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/01_minimal.mmd]": 0.00045812525786459446, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/02_sections.mmd]": 0.0015038750134408474, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/03_fan_out.mmd]": 0.001014916691929102, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/03b_fan_in_merge.mmd]": 0.0009600010234862566, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/04_directions.mmd]": 0.0010729169007390738, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/05_file_icons.mmd]": 0.0012301248498260975, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/05b_multi_icons.mmd]": 0.0016710830386728048, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/05c_files_icon.mmd]": 0.0007060831412672997, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/05d_folder_icon.mmd]": 0.0008592512458562851, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/05f_banner_labels.mmd]": 0.0006574569270014763, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/06a_without_hidden.mmd]": 0.0020114181097596884, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[guide/06b_with_hidden.mmd]": 0.0010772079695016146, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[hlatyping.mmd]": 0.0010008339304476976, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[icon_caption_wrap.mmd]": 0.004537666914984584, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[leaf_file_icon_on_trunk.mmd]": 0.0022683751303702593, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[legend_combo.mmd]": 0.00045933318324387074, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[legend_logo_placement.mmd]": 0.0009335398208349943, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[longread_variant_calling.mmd]": 0.0017714169807732105, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[marker_styles.mmd]": 0.0006192920263856649, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[multiline_labels.mmd]": 0.0009178337641060352, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[off_track_output_branched.mmd]": 0.0009248750284314156, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[off_track_outputs.mmd]": 0.0004866670351475477, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[off_track_outputs_along_trunk.mmd]": 0.0016312920488417149, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[rnaseq_auto.mmd]": 0.0016556661576032639, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[rnaseq_sections.mmd]": 0.0045067076571285725, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[rnaseq_sections_manual.mmd]": 0.006045707734301686, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[rnaseq_simple.mmd]": 0.0004890011623501778, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[simple_pipeline.mmd]": 0.0004222523421049118, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[tb_file_termini.mmd]": 0.0012452909722924232, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[tb_right_exit_feeder_slots.mmd]": 0.0008763752412050962, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/aligner_row_pinned_continuation.mmd]": 0.0009884170722216368, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/around_below_ep_col_gt0.mmd]": 0.0018447509501129389, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/around_section_below.mmd]": 0.001260792138054967, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/asymmetric_tree.mmd]": 0.001368124969303608, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0007949587889015675, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/branch_fold_forward.mmd]": 0.0008965409360826015, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/branch_fold_stability.mmd]": 0.0020910841412842274, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bt_chain.mmd]": 0.004178582923486829, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bt_exit_top_above.mmd]": 0.0005057498347014189, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bt_exit_top_above_2line.mmd]": 0.0005023330450057983, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bt_fork.mmd]": 0.0005393752362579107, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bt_perp_entry_below.mmd]": 0.0005365421529859304, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bt_to_lr.mmd]": 0.0005216661375015974, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bt_to_tb.mmd]": 0.0005199168808758259, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bundle_terminator_continuation.mmd]": 0.002263416303321719, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_fan_in_outer_slot.mmd]": 0.0027655831072479486, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_gap2_rightward_overflow.mmd]": 0.002350292168557644, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_label_rake.mmd]": 0.0028000411111861467, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_label_rake_left.mmd]": 0.0007644160650670528, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_label_rake_wide.mmd]": 0.0007432489655911922, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_leftward_far_side_entry.mmd]": 0.005895249778404832, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_leftward_overflow.mmd]": 0.0007159989327192307, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/bypass_v_tight.mmd]": 0.0007626658771187067, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/clear_channel_target_aware_push.mmd]": 0.000702874967828393, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/compact_gap_peer_conflict.mmd]": 0.0007173740305006504, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/compact_hidden_passthrough.mmd]": 0.0006422919686883688, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/complex_multipath.mmd]": 0.0012969577219337225, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/convergence_stacked_sink.mmd]": 0.0010767900384962559, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/convergent_offrow_exit_climb.mmd]": 0.0018294162582606077, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006530412938445807, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/cross_col_top_entry.mmd]": 0.0004858348984271288, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/cross_column_perp_drop.mmd]": 0.0005038760136812925, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0004771242383867502, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/cross_row_gap_wrap.mmd]": 0.0008975828532129526, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/deep_linear.mmd]": 0.0013514580205082893, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/disjoint_sameline_trunks.mmd]": 0.0008344589732587337, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/divergent_fanout_split.mmd]": 0.0019934996962547302, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/dogleg_exempt_distinct.mmd]": 0.0009166239760816097, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/dogleg_exempt_sameline.mmd]": 0.0006247921846807003, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/dogleg_twoline_fanout.mmd]": 0.0006642511580139399, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/exit_corner_offset_dogleg.mmd]": 0.0021029161289334297, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/fan_bypass_nesting.mmd]": 0.0029870830476284027, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/fan_in_merge.mmd]": 0.0009212906006723642, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/fold_double.mmd]": 0.012479040771722794, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/fold_fan_across.mmd]": 0.0023031660821288824, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/fold_stacked_branch.mmd]": 0.0020327921956777573, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/funcprofiler_upstream.mmd]": 0.0013324168976396322, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/header_nudge.mmd]": 0.0005888328887522221, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/header_side_rotated.mmd]": 0.0006007091142237186, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/inrow_skip_breeze.mmd]": 0.0006980830803513527, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/inter_row_wrap_clearance.mmd]": 0.0007972489111125469, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/interchange_lane_reorder.mmd]": 0.0005276671145111322, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/junction_entry_align.mmd]": 0.001004792284220457, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/junction_entry_collision.mmd]": 0.0007633727509528399, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/junction_entry_reversed_fold.mmd]": 0.0006921251770108938, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/junction_fanout_convergence.mmd]": 0.0012965421192348003, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/left_entry_up_wrap.mmd]": 0.0005650839302688837, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/left_exit_sink_below.mmd]": 0.0009238331113010645, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0006845840252935886, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0006090409588068724, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006154580041766167, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0007064579986035824, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0006484170444309711, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_to_tb_top_cross_col.mmd]": 0.0006677068304270506, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_to_tb_top_drop.mmd]": 0.0005005430430173874, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0005322908982634544, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004684578161686659, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_to_tb_top_two_lines.mmd]": 0.0004877080209553242, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_top_entry_cross_column.mmd]": 0.000489208847284317, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0005086257588118315, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_around_below_leftmost.mmd]": 0.0007356659043580294, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_bottom_row_bypass.mmd]": 0.0009156258311122656, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_leftmost_sink_branch.mmd]": 0.0020824570674449205, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_offrow_continuation.mmd]": 0.005824167747050524, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_port_above_approach.mmd]": 0.0017497080843895674, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_pullaway.mmd]": 0.0008989169728010893, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_right_entry.mmd]": 0.0008609159849584103, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_trunk_out_of_range_section.mmd]": 0.0010051261633634567, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/merge_trunk_over_low_section.mmd]": 0.0018255410250276327, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/mismatched_tracks.mmd]": 0.001823873957619071, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/mixed_bundle_column.mmd]": 0.0012267089914530516, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/mixed_port_sides.mmd]": 0.0006364581640809774, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/multi_input_convergence.mmd]": 0.0006627489347010851, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/multi_line_bundle.mmd]": 0.0009940830059349537, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/multicarrier_offrow_exit_climb.mmd]": 0.000788042088970542, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/near_vertical_junction_hook.mmd]": 0.0006967519875615835, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/off_track_convergence.mmd]": 0.0006891258526593447, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/off_track_convergence_multiline.mmd]": 0.0007499998901039362, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/off_track_input_above_consumer.mmd]": 0.0019546248950064182, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/parallel_independent.mmd]": 0.0006882080342620611, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/peeloff_extra_line_consumer.mmd]": 0.0007267070468515158, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/peeloff_riser_respace.mmd]": 0.0006866247858852148, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/post_convergence_trunk.mmd]": 0.00039012590423226357, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/reconverge_reversed_fold.mmd]": 0.0018675001338124275, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/right_entry_from_above.mmd]": 0.0004690408241003752, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/right_entry_from_above_far.mmd]": 0.005640832940116525, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/right_entry_gap_above_empty_row.mmd]": 0.0006432491354644299, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/right_entry_wrap_no_fan.mmd]": 0.0004735407419502735, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/rl_entry_runway.mmd]": 0.000557000981643796, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/rnaseq_lite.mmd]": 0.001344624673947692, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/route_around_intervening.mmd]": 0.003487540641799569, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/section_diamond.mmd]": 0.0008814579341560602, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/self_crossing_bridge.mmd]": 0.0006499169394373894, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/shared_sink_parallel.mmd]": 0.0021922499872744083, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/single_section.mmd]": 0.0006652919109910727, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/stacked_left_exit_drop.mmd]": 0.0005615430418401957, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/stacked_lr_serpentine.mmd]": 0.00623333384282887, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.002817374188452959, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_bottom_entry_flow_start.mmd]": 0.0022437090519815683, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.001404000911861658, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0008416662458330393, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_column_continuation_two_lines.mmd]": 0.0005371239967644215, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_convergence_straight_drop.mmd]": 0.0003665429539978504, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_internal_diagonal.mmd]": 0.0005242491606622934, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_left_exit_step.mmd]": 0.0007649159524589777, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_lr_exit_left.mmd]": 0.0005949183832854033, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_lr_exit_right.mmd]": 0.00204820791259408, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_passthrough_continuation.mmd]": 0.0006897908169776201, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_passthrough_trunk.mmd]": 0.0006332509219646454, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0004475011955946684, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_right_entry_stack.mmd]": 0.0028247078880667686, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_trunk_through_fan.mmd]": 0.001075417036190629, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/tb_two_line_vert_seam.mmd]": 0.0012738332152366638, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/terminal_symmetric_fan.mmd]": 0.0005931239575147629, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/terminus_join.mmd]": 0.001365831820294261, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/top_entry_header_clash.mmd]": 0.0013937919866293669, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/trunk_through_fan.mmd]": 0.0008400001097470522, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/twoline_fanout_up.mmd]": 0.0006555826403200626, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/u_turn_fold.mmd]": 0.004428501008078456, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/uneven_diamond.mmd]": 0.00045983376912772655, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/upward_bypass.mmd]": 0.0010922504588961601, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/variant_calling.mmd]": 0.0015921250451356173, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/wide_fan_in.mmd]": 0.0069324171636253595, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/wide_fan_out.mmd]": 0.0022591669112443924, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/wide_label_fan.mmd]": 0.0004731668159365654, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[topologies/wrapped_label_trunk.mmd]": 0.0005163338501006365, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[trunk_align_matching_bundle.mmd]": 0.001989084994420409, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[uneven_diamond.mmd]": 0.00044729001820087433, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[variant_calling.mmd]": 0.02127045812085271, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[variant_calling_tuned.mmd]": 0.013041998725384474, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[variantbenchmarking.mmd]": 0.006947375368326902, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[variantbenchmarking_auto.mmd]": 0.010386251145973802, + "tests/test_layout_invariants.py::test_topological_siblings_share_y_or_symmetric[variantprioritization.mmd]": 0.0015642079524695873, + "tests/test_layout_invariants.py::test_trunk_exit_follows_reconvergence[hlatyping.mmd]": 0.0008910419419407845, + "tests/test_layout_invariants.py::test_trunk_exit_follows_reconvergence[topologies/trunk_through_fan.mmd]": 0.0006737920921295881, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[bubble_forced_label_clears_diagonal.mmd]": 0.006077083060517907, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[bubble_label_clears_diagonal.mmd]": 0.000556916231289506, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[bubble_output_above.mmd]": 0.0005474579520523548, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[captioned_sibling_outputs.mmd]": 0.0005213750991970301, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[centered_tracks.mmd]": 0.0005604587495326996, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[cross_track_interchange.mmd]": 0.0007916248869150877, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[da_pipeline.mmd]": 0.0019945420790463686, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[diagonal_labels.mmd]": 0.0010046251118183136, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[diagonal_single_trunk_off_track.mmd]": 0.0009633330628275871, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[differentialabundance.mmd]": 0.0019486669916659594, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[differentialabundance_default.mmd]": 0.001858626026660204, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[directional_flow.mmd]": 0.00045049889013171196, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[disconnected_components.mmd]": 0.0007412910927087069, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[epitopeprediction.mmd]": 0.001099956687539816, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[file_icon_fanin.mmd]": 0.0008011660538613796, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[file_icons.mmd]": 0.0005457920487970114, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[font_scale.mmd]": 0.0004079591017216444, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[genomeassembly.mmd]": 0.0013360409066081047, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[genomeassembly_organellar.mmd]": 0.0014281671028584242, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[genomeassembly_staggered.mmd]": 0.0012794588692486286, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[genomic_pipeline.mmd]": 0.008397165918722749, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[group_labels.mmd]": 0.0010732091031968594, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/01_minimal.mmd]": 0.0003794170916080475, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/02_sections.mmd]": 0.0006108339875936508, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/03_fan_out.mmd]": 0.0008972920477390289, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/03b_fan_in_merge.mmd]": 0.0008181668817996979, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/04_directions.mmd]": 0.0009240000508725643, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/05_file_icons.mmd]": 0.000554041238501668, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/05b_multi_icons.mmd]": 0.00113483308814466, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/05c_files_icon.mmd]": 0.0007558758370578289, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/05d_folder_icon.mmd]": 0.0005689158570021391, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/05f_banner_labels.mmd]": 0.001595999812707305, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/06a_without_hidden.mmd]": 0.000855583930388093, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[guide/06b_with_hidden.mmd]": 0.0007600830867886543, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[hlatyping.mmd]": 0.0013226657174527645, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[icon_caption_wrap.mmd]": 0.00035066669806838036, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[leaf_file_icon_on_trunk.mmd]": 0.00041012419387698174, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[legend_combo.mmd]": 0.0012909159995615482, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[legend_logo_placement.mmd]": 0.0024702497757971287, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[longread_variant_calling.mmd]": 0.004054667195305228, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[marker_styles.mmd]": 0.0008219161536544561, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[multiline_labels.mmd]": 0.000539206899702549, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[off_track_output_branched.mmd]": 0.00045179203152656555, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[off_track_outputs.mmd]": 0.009471999946981668, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[off_track_outputs_along_trunk.mmd]": 0.0004571252502501011, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[rnaseq_auto.mmd]": 0.005667000077664852, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[rnaseq_sections.mmd]": 0.0023411258589476347, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[rnaseq_sections_manual.mmd]": 0.009087626123800874, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[rnaseq_simple.mmd]": 0.0003606670070439577, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[simple_pipeline.mmd]": 0.0005289169494062662, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[tb_file_termini.mmd]": 0.000638917088508606, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[tb_right_exit_feeder_slots.mmd]": 0.0007485421374440193, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/aligner_row_pinned_continuation.mmd]": 0.0009049167856574059, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/around_below_ep_col_gt0.mmd]": 0.001114624086767435, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/around_section_below.mmd]": 0.0006932499818503857, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/asymmetric_tree.mmd]": 0.001107292016968131, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0009608750697225332, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/branch_fold_forward.mmd]": 0.0009514568373560905, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/branch_fold_stability.mmd]": 0.0007792927790433168, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bt_chain.mmd]": 0.00035687629133462906, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bt_exit_top_above.mmd]": 0.006775791058316827, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bt_exit_top_above_2line.mmd]": 0.0005793340969830751, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bt_fork.mmd]": 0.0004377500154078007, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bt_perp_entry_below.mmd]": 0.0004930419381707907, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bt_to_lr.mmd]": 0.0006145818624645472, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bt_to_tb.mmd]": 0.0005291248671710491, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bundle_terminator_continuation.mmd]": 0.00037541682831943035, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_fan_in_outer_slot.mmd]": 0.002301000291481614, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_gap2_rightward_overflow.mmd]": 0.0007894160225987434, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_label_rake.mmd]": 0.0007434168364852667, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_label_rake_left.mmd]": 0.0007314169779419899, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_label_rake_wide.mmd]": 0.0008037078659981489, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_leftward_far_side_entry.mmd]": 0.0007029580883681774, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_leftward_overflow.mmd]": 0.0006731241010129452, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/bypass_v_tight.mmd]": 0.0006015007384121418, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/clear_channel_target_aware_push.mmd]": 0.0006667068228125572, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/compact_gap_peer_conflict.mmd]": 0.0006813739892095327, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/compact_hidden_passthrough.mmd]": 0.0006131259724497795, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/complex_multipath.mmd]": 0.001247707987204194, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/convergence_stacked_sink.mmd]": 0.0010454158764332533, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/convergent_offrow_exit_climb.mmd]": 0.004069332731887698, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/corridor_narrow_gap_fallback.mmd]": 0.0006479169242084026, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/cross_col_top_entry.mmd]": 0.0004753749817609787, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/cross_column_perp_drop.mmd]": 0.0004800420720130205, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/cross_column_perp_drop_far_exit.mmd]": 0.000477291876450181, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/cross_row_gap_wrap.mmd]": 0.0009012932423502207, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/deep_linear.mmd]": 0.0013083319645375013, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/disjoint_sameline_trunks.mmd]": 0.0008260419126600027, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/divergent_fanout_split.mmd]": 0.0005395840853452682, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/dogleg_exempt_distinct.mmd]": 0.0006800841074436903, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/dogleg_exempt_sameline.mmd]": 0.0005715000443160534, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/dogleg_twoline_fanout.mmd]": 0.0005762910004705191, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/exit_corner_offset_dogleg.mmd]": 0.0006955002900213003, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/fan_bypass_nesting.mmd]": 0.001193708973005414, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/fan_in_merge.mmd]": 0.0008554158266633749, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/fold_double.mmd]": 0.002055208198726177, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/fold_fan_across.mmd]": 0.004443459212779999, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/fold_stacked_branch.mmd]": 0.010627167066559196, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/funcprofiler_upstream.mmd]": 0.0012793326750397682, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/header_nudge.mmd]": 0.0008362489752471447, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/header_side_rotated.mmd]": 0.0005968750920146704, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/inrow_skip_breeze.mmd]": 0.00040975003503262997, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/inter_row_wrap_clearance.mmd]": 0.000609666109085083, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/interchange_lane_reorder.mmd]": 0.0004938319325447083, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/junction_entry_align.mmd]": 0.0009572082199156284, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/junction_entry_collision.mmd]": 0.01523191574960947, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/junction_entry_reversed_fold.mmd]": 0.0008002500981092453, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/junction_fanout_convergence.mmd]": 0.0017293752171099186, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/left_entry_up_wrap.mmd]": 0.0005547911860048771, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/left_exit_sink_below.mmd]": 0.00167795829474926, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0010587088763713837, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0007180012762546539, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0006628336850553751, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0006219989154487848, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0005762497894465923, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_to_tb_top_cross_col.mmd]": 0.0005888331215828657, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_to_tb_top_drop.mmd]": 0.00047574983909726143, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0004962091334164143, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0004763752222061157, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_to_tb_top_two_lines.mmd]": 0.0005034171044826508, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_top_entry_cross_column.mmd]": 0.00046020722948014736, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.000503624090924859, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_around_below_leftmost.mmd]": 0.000755667220801115, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_bottom_row_bypass.mmd]": 0.0009364590514451265, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_leftmost_sink_branch.mmd]": 0.0008516672533005476, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_offrow_continuation.mmd]": 0.0006558760069310665, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_port_above_approach.mmd]": 0.0006629179697483778, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_pullaway.mmd]": 0.000783582916483283, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_right_entry.mmd]": 0.0007676247041672468, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_trunk_out_of_range_section.mmd]": 0.0008878351654857397, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/merge_trunk_over_low_section.mmd]": 0.0009027908090502024, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/mismatched_tracks.mmd]": 0.0007055411115288734, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/mixed_bundle_column.mmd]": 0.0009652089793235064, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/mixed_port_sides.mmd]": 0.0005737922620028257, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/multi_input_convergence.mmd]": 0.0006358744576573372, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/multi_line_bundle.mmd]": 0.0008422089740633965, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/multicarrier_offrow_exit_climb.mmd]": 0.000717666931450367, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/near_vertical_junction_hook.mmd]": 0.0006436670664697886, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/off_track_convergence.mmd]": 0.000644708052277565, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/off_track_convergence_multiline.mmd]": 0.010500583797693253, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/off_track_input_above_consumer.mmd]": 0.0018159998580813408, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/parallel_independent.mmd]": 0.0008558747358620167, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/peeloff_extra_line_consumer.mmd]": 0.012289876351132989, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/peeloff_riser_respace.mmd]": 0.0036469593178480864, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/post_convergence_trunk.mmd]": 0.0004966247361153364, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/reconverge_reversed_fold.mmd]": 0.00403404189273715, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/right_entry_from_above.mmd]": 0.00047016702592372894, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/right_entry_from_above_far.mmd]": 0.0004456250462681055, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/right_entry_gap_above_empty_row.mmd]": 0.0005467082373797894, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/right_entry_wrap_no_fan.mmd]": 0.0004778748843818903, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/rl_entry_runway.mmd]": 0.000591083662584424, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/rnaseq_lite.mmd]": 0.0013107499107718468, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/route_around_intervening.mmd]": 0.0006395420059561729, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/section_diamond.mmd]": 0.0007796245627105236, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/self_crossing_bridge.mmd]": 0.0006351238116621971, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/shared_sink_parallel.mmd]": 0.001032709376886487, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/single_section.mmd]": 0.0003725411370396614, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/stacked_left_exit_drop.mmd]": 0.0004964172840118408, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/stacked_lr_serpentine.mmd]": 0.0007708331104367971, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.0007679590489715338, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_bottom_entry_flow_start.mmd]": 0.0004771656822413206, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0005757920444011688, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.002471208106726408, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_column_continuation_two_lines.mmd]": 0.0012946261558681726, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_convergence_straight_drop.mmd]": 0.0011163740418851376, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_internal_diagonal.mmd]": 0.0009057079441845417, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_left_exit_step.mmd]": 0.0008507499005645514, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_lr_exit_left.mmd]": 0.0006045831833034754, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_lr_exit_right.mmd]": 0.0012869169004261494, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_passthrough_continuation.mmd]": 0.0018015832174569368, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_passthrough_trunk.mmd]": 0.0006998740136623383, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_perp_exit_side_neighbour.mmd]": 0.00044858409091830254, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_right_entry_stack.mmd]": 0.0006274580955505371, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_trunk_through_fan.mmd]": 0.0005762490909546614, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/tb_two_line_vert_seam.mmd]": 0.0007741248700767756, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/terminal_symmetric_fan.mmd]": 0.0015805838629603386, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/terminus_join.mmd]": 0.0010526659898459911, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/top_entry_header_clash.mmd]": 0.004437875468283892, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/trunk_through_fan.mmd]": 0.003036833368241787, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/twoline_fanout_up.mmd]": 0.0037083751522004604, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/u_turn_fold.mmd]": 0.004259209148585796, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/uneven_diamond.mmd]": 0.0011270421091467142, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/upward_bypass.mmd]": 0.001376959029585123, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/variant_calling.mmd]": 0.005014209076762199, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/wide_fan_in.mmd]": 0.0008961248677223921, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/wide_fan_out.mmd]": 0.0008344999514520168, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/wide_label_fan.mmd]": 0.00040875026024878025, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[topologies/wrapped_label_trunk.mmd]": 0.00042791804298758507, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[trunk_align_matching_bundle.mmd]": 0.0005996671970933676, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[uneven_diamond.mmd]": 0.0003849170170724392, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[variant_calling.mmd]": 0.0008400401566177607, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[variant_calling_tuned.mmd]": 0.0014888341538608074, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[variantbenchmarking.mmd]": 0.0035282918252050877, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[variantbenchmarking_auto.mmd]": 0.0023040829692035913, + "tests/test_layout_invariants.py::test_visual_stack_station_xs_share_column[variantprioritization.mmd]": 0.0009836668614298105, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[bubble_forced_label_clears_diagonal.mmd]": 0.001115292077884078, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[bubble_label_clears_diagonal.mmd]": 0.0021304588299244642, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[bubble_output_above.mmd]": 0.0009167487733066082, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[captioned_sibling_outputs.mmd]": 0.0007724997121840715, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[centered_tracks.mmd]": 0.001116001047194004, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[cross_track_interchange.mmd]": 0.001925209304317832, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[da_pipeline.mmd]": 0.01814933307468891, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[diagonal_labels.mmd]": 0.002597374841570854, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[diagonal_single_trunk_off_track.mmd]": 0.004791750106960535, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[differentialabundance.mmd]": 0.02227858197875321, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[differentialabundance_default.mmd]": 0.0326780010946095, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[directional_flow.mmd]": 0.004265208030119538, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[disconnected_components.mmd]": 0.0021389999892562628, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[epitopeprediction.mmd]": 0.00457987398840487, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[file_icon_fanin.mmd]": 0.0063310000114142895, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[file_icons.mmd]": 0.00128399976529181, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[font_scale.mmd]": 0.0008557508699595928, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[genomeassembly.mmd]": 0.00881225080229342, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[genomeassembly_organellar.mmd]": 0.01641720812767744, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[genomeassembly_staggered.mmd]": 0.004414584254845977, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[genomic_pipeline.mmd]": 0.03517487505450845, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[group_labels.mmd]": 0.0013745001051574945, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/01_minimal.mmd]": 0.0021783343981951475, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/02_sections.mmd]": 0.002700583077967167, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/03_fan_out.mmd]": 0.00292804092168808, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/03b_fan_in_merge.mmd]": 0.0024775411002337933, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/04_directions.mmd]": 0.0024078339338302612, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/05_file_icons.mmd]": 0.0011376249603927135, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/05b_multi_icons.mmd]": 0.0012783329002559185, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/05c_files_icon.mmd]": 0.004099665908142924, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/05d_folder_icon.mmd]": 0.0028697100933641195, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/05f_banner_labels.mmd]": 0.005745333153754473, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/06a_without_hidden.mmd]": 0.0020444164983928204, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[guide/06b_with_hidden.mmd]": 0.0018496259581297636, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[hlatyping.mmd]": 0.004800790920853615, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[icon_caption_wrap.mmd]": 0.002878749743103981, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[leaf_file_icon_on_trunk.mmd]": 0.004525040974840522, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[legend_combo.mmd]": 0.0012272079475224018, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[legend_logo_placement.mmd]": 0.002357959048822522, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[longread_variant_calling.mmd]": 0.016122373985126615, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[marker_styles.mmd]": 0.0019585827831178904, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[multiline_labels.mmd]": 0.0013356253039091825, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[off_track_output_branched.mmd]": 0.0011306239757686853, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[off_track_outputs.mmd]": 0.002656499156728387, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[off_track_outputs_along_trunk.mmd]": 0.0023685831110924482, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[rnaseq_auto.mmd]": 0.0126546670217067, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[rnaseq_sections.mmd]": 0.021387584041804075, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[rnaseq_sections_manual.mmd]": 0.020601124968379736, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[rnaseq_simple.mmd]": 0.0007322088349610567, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[simple_pipeline.mmd]": 0.0034425840713083744, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[tb_file_termini.mmd]": 0.00165087403729558, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[tb_right_exit_feeder_slots.mmd]": 0.0022095825988799334, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/aligner_row_pinned_continuation.mmd]": 0.005118665983900428, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/around_below_ep_col_gt0.mmd]": 0.002394166775047779, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/around_section_below.mmd]": 0.004127376014366746, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/asymmetric_tree.mmd]": 0.0032777090091258287, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bottom_row_climb_clear_corridor.mmd]": 0.0032042928505688906, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/branch_fold_forward.mmd]": 0.0023378340993076563, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/branch_fold_stability.mmd]": 0.0018704580143094063, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bt_chain.mmd]": 0.0006990840192884207, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bt_exit_top_above.mmd]": 0.001151209231466055, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bt_exit_top_above_2line.mmd]": 0.0010035419836640358, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bt_fork.mmd]": 0.0006704581901431084, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bt_perp_entry_below.mmd]": 0.005983083043247461, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bt_to_lr.mmd]": 0.001130291959270835, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bt_to_tb.mmd]": 0.0010548767168074846, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bundle_terminator_continuation.mmd]": 0.0006265840493142605, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_fan_in_outer_slot.mmd]": 0.0050737918354570866, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_gap2_rightward_overflow.mmd]": 0.004613416967913508, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_label_rake.mmd]": 0.004841709043830633, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_label_rake_left.mmd]": 0.0019092499278485775, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_label_rake_wide.mmd]": 0.006731499219313264, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_leftward_far_side_entry.mmd]": 0.006872624158859253, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_leftward_overflow.mmd]": 0.0038791224360466003, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/bypass_v_tight.mmd]": 0.0012444171588867903, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/clear_channel_target_aware_push.mmd]": 0.001708625815808773, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/compact_gap_peer_conflict.mmd]": 0.00163966603577137, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/compact_hidden_passthrough.mmd]": 0.0019859569147229195, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/complex_multipath.mmd]": 0.009907667990773916, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/convergence_stacked_sink.mmd]": 0.005163125228136778, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/convergent_offrow_exit_climb.mmd]": 0.019589498871937394, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/corridor_narrow_gap_fallback.mmd]": 0.0016759999562054873, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/cross_col_top_entry.mmd]": 0.001561333891004324, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/cross_column_perp_drop.mmd]": 0.0009624590165913105, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0022190003655850887, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/cross_row_gap_wrap.mmd]": 0.004467375110834837, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/deep_linear.mmd]": 0.00871508289128542, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/disjoint_sameline_trunks.mmd]": 0.00265512615442276, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/divergent_fanout_split.mmd]": 0.001383000984787941, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/dogleg_exempt_distinct.mmd]": 0.005644458811730146, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/dogleg_exempt_sameline.mmd]": 0.0014815002214163542, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/dogleg_twoline_fanout.mmd]": 0.001451374962925911, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/exit_corner_offset_dogleg.mmd]": 0.001595082925632596, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/fan_bypass_nesting.mmd]": 0.0054648329969495535, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/fan_in_merge.mmd]": 0.006355208111926913, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/fold_double.mmd]": 0.008204043144360185, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/fold_fan_across.mmd]": 0.020348750753328204, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/fold_stacked_branch.mmd]": 0.012307957978919148, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/funcprofiler_upstream.mmd]": 0.011049374006688595, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/header_nudge.mmd]": 0.004415957955643535, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/header_side_rotated.mmd]": 0.001055584056302905, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/inrow_skip_breeze.mmd]": 0.0007513763848692179, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/inter_row_wrap_clearance.mmd]": 0.0015095421113073826, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/interchange_lane_reorder.mmd]": 0.0068905840162187815, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/junction_entry_align.mmd]": 0.014072376070544124, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/junction_entry_collision.mmd]": 0.004865915747359395, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/junction_entry_reversed_fold.mmd]": 0.0018847922328859568, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/junction_fanout_convergence.mmd]": 0.001473624724894762, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/left_entry_up_wrap.mmd]": 0.00273154117166996, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/left_exit_sink_below.mmd]": 0.0017438328359276056, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.0013543739914894104, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0012715430930256844, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0016364171169698238, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.003319124924018979, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0013188337907195091, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_to_tb_top_cross_col.mmd]": 0.0012719589285552502, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_to_tb_top_drop.mmd]": 0.0008238321170210838, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.000980166019871831, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0011128329206258059, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_to_tb_top_two_lines.mmd]": 0.002492415951564908, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_top_entry_cross_column.mmd]": 0.0010339601431041956, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0018810001201927662, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_around_below_leftmost.mmd]": 0.0020274592097848654, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_bottom_row_bypass.mmd]": 0.002102042082697153, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_leftmost_sink_branch.mmd]": 0.003341581905260682, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_offrow_continuation.mmd]": 0.0016474169678986073, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_port_above_approach.mmd]": 0.0016122909728437662, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_pullaway.mmd]": 0.0020510840695351362, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_right_entry.mmd]": 0.001851334236562252, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_trunk_out_of_range_section.mmd]": 0.007492625154554844, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/merge_trunk_over_low_section.mmd]": 0.0028046248480677605, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/mismatched_tracks.mmd]": 0.002127918181940913, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/mixed_bundle_column.mmd]": 0.003922376316040754, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/mixed_port_sides.mmd]": 0.0019804169423878193, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/multi_input_convergence.mmd]": 0.009020417230203748, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/multi_line_bundle.mmd]": 0.005936499917879701, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/multicarrier_offrow_exit_climb.mmd]": 0.006004540948197246, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/near_vertical_junction_hook.mmd]": 0.006153958151116967, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/off_track_convergence.mmd]": 0.0025813342072069645, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/off_track_convergence_multiline.mmd]": 0.002576167229562998, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/off_track_input_above_consumer.mmd]": 0.008926667040213943, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/parallel_independent.mmd]": 0.0033236248418688774, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/peeloff_extra_line_consumer.mmd]": 0.003579209093004465, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/peeloff_riser_respace.mmd]": 0.005505748791620135, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/post_convergence_trunk.mmd]": 0.0008292500860989094, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/reconverge_reversed_fold.mmd]": 0.007000000914558768, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/right_entry_from_above.mmd]": 0.0009528752416372299, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/right_entry_from_above_far.mmd]": 0.0008825010154396296, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/right_entry_gap_above_empty_row.mmd]": 0.0010857919696718454, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/right_entry_wrap_no_fan.mmd]": 0.0008778742048889399, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/rl_entry_runway.mmd]": 0.0012863741721957922, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/rnaseq_lite.mmd]": 0.004480500007048249, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/route_around_intervening.mmd]": 0.0014974991790950298, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/section_diamond.mmd]": 0.01998079172335565, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/self_crossing_bridge.mmd]": 0.0015860830899327993, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/shared_sink_parallel.mmd]": 0.011444751173257828, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/single_section.mmd]": 0.0007741241715848446, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/stacked_left_exit_drop.mmd]": 0.0010235419031232595, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/stacked_lr_serpentine.mmd]": 0.003322334261611104, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.003488415852189064, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_bottom_entry_flow_start.mmd]": 0.0012229999992996454, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.005387249868363142, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0028434579726308584, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_column_continuation_two_lines.mmd]": 0.0021788342855870724, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_convergence_straight_drop.mmd]": 0.0006307088769972324, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_internal_diagonal.mmd]": 0.001138209132477641, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_left_exit_step.mmd]": 0.0026922079268842936, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_lr_exit_left.mmd]": 0.0015160832554101944, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_lr_exit_right.mmd]": 0.011320959078148007, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_passthrough_continuation.mmd]": 0.000852665863931179, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_passthrough_trunk.mmd]": 0.0013897093012928963, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0009058332070708275, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_right_entry_stack.mmd]": 0.0014769171830266714, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_trunk_through_fan.mmd]": 0.0006778761744499207, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/tb_two_line_vert_seam.mmd]": 0.001062583876773715, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/terminal_symmetric_fan.mmd]": 0.0011299990583211184, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/terminus_join.mmd]": 0.0006347510498017073, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/top_entry_header_clash.mmd]": 0.0010074167512357235, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/trunk_through_fan.mmd]": 0.003135292325168848, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/twoline_fanout_up.mmd]": 0.002897749887779355, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/u_turn_fold.mmd]": 0.013501624809578061, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/uneven_diamond.mmd]": 0.0009197918698191643, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/upward_bypass.mmd]": 0.007732083089649677, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/variant_calling.mmd]": 0.006227166159078479, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/wide_fan_in.mmd]": 0.0019772914238274097, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/wide_fan_out.mmd]": 0.004519584123045206, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/wide_label_fan.mmd]": 0.0031121240463107824, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[topologies/wrapped_label_trunk.mmd]": 0.0028725836891680956, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[trunk_align_matching_bundle.mmd]": 0.001245124964043498, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[uneven_diamond.mmd]": 0.000716750044375658, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[variant_calling.mmd]": 0.0022749167401343584, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[variant_calling_tuned.mmd]": 0.002666708780452609, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[variantbenchmarking.mmd]": 0.013330542016774416, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[variantbenchmarking_auto.mmd]": 0.013831957941874862, + "tests/test_layout_invariants.py::test_wrapped_label_clears_foreign_trunk[variantprioritization.mmd]": 0.011433165986090899, + "tests/test_layout_invariants.py::test_wrapped_label_trunk_lift_has_teeth": 0.01899595675058663, + "tests/test_layout_metrics.py::test_busy_pipeline_reports_positive_counts": 0.2600304586812854, + "tests/test_layout_metrics.py::test_canvas_argument_changes_only_wasted_canvas[complex_multipath]": 0.0950905429199338, + "tests/test_layout_metrics.py::test_canvas_argument_changes_only_wasted_canvas[rnaseq_auto]": 0.16637816675938666, + "tests/test_layout_metrics.py::test_canvas_argument_changes_only_wasted_canvas[simple_pipeline]": 0.015679498901590705, + "tests/test_layout_metrics.py::test_canvas_argument_changes_only_wasted_canvas[variantbenchmarking]": 0.3528035010676831, + "tests/test_layout_metrics.py::test_canvas_argument_changes_only_wasted_canvas[wide_fan_out]": 0.055154290748760104, + "tests/test_layout_metrics.py::test_compute_metrics_is_deterministic[complex_multipath]": 0.07238849974237382, + "tests/test_layout_metrics.py::test_compute_metrics_is_deterministic[rnaseq_auto]": 0.42276587523519993, + "tests/test_layout_metrics.py::test_compute_metrics_is_deterministic[simple_pipeline]": 0.01735412492416799, + "tests/test_layout_metrics.py::test_compute_metrics_is_deterministic[variantbenchmarking]": 0.3694245838560164, + "tests/test_layout_metrics.py::test_compute_metrics_is_deterministic[wide_fan_out]": 0.041005000937730074, + "tests/test_layout_metrics.py::test_compute_metrics_returns_full_schema[complex_multipath]": 0.06499337474815547, + "tests/test_layout_metrics.py::test_compute_metrics_returns_full_schema[rnaseq_auto]": 0.13295029080472887, + "tests/test_layout_metrics.py::test_compute_metrics_returns_full_schema[simple_pipeline]": 0.01939808391034603, + "tests/test_layout_metrics.py::test_compute_metrics_returns_full_schema[variantbenchmarking]": 0.27360745891928673, + "tests/test_layout_metrics.py::test_compute_metrics_returns_full_schema[wide_fan_out]": 0.043387583922594786, + "tests/test_layout_metrics.py::test_delta_direction": 0.0001627500168979168, + "tests/test_layout_metrics.py::test_format_delta_sign_and_zero": 0.000155250309035182, + "tests/test_layout_metrics.py::test_format_value": 0.00017804186791181564, + "tests/test_layout_metrics.py::test_guard_and_enumerator_share_strike_definition": 0.31342299887910485, + "tests/test_layout_metrics.py::test_label_strike_metric_matches_guard_enumerator": 0.1434511251281947, + "tests/test_layout_metrics.py::test_metrics_table_marks_better_and_worse": 0.00018416717648506165, + "tests/test_layout_metrics.py::test_metrics_table_omitted_when_no_scorecards": 0.00015545799396932125, + "tests/test_layout_metrics.py::test_simple_pipeline_is_defect_free": 0.015356248943135142, + "tests/test_left_exit_right_entry_step.py::test_exit_bundle_keeps_feed_order_into_the_entry": 0.03135537402704358, + "tests/test_left_exit_right_entry_step.py::test_exit_bundle_steps_through_a_descent_west_of_the_port": 0.025220084004104137, + "tests/test_left_exit_right_entry_step.py::test_fixture_renders_without_curve_defect": 0.036311083007603884, + "tests/test_legend_combo.py::test_combo_constituent_lines_suppressed_from_individual_rows": 0.0029054998885840178, + "tests/test_legend_combo.py::test_combo_drops_unknown_keeps_known_members": 0.016840124735608697, + "tests/test_legend_combo.py::test_combo_member_with_standalone_segment_keeps_its_row": 0.018539539771154523, + "tests/test_legend_combo.py::test_combo_requires_two_lines_and_label": 0.005822333041578531, + "tests/test_legend_combo.py::test_combo_row_renders_multicolour_swatch_and_label": 0.005605250829830766, + "tests/test_legend_combo.py::test_combo_with_unknown_line_warns_and_ignores": 0.002747250022366643, + "tests/test_legend_combo.py::test_default_off_byte_identical_legend": 0.004807501100003719, + "tests/test_legend_combo.py::test_non_combo_line_still_gets_its_row": 0.0029503339901566505, + "tests/test_legend_placement.py::test_bare_corner_keeps_overlap_fallback": 0.4823952089063823, + "tests/test_legend_placement.py::test_explicit_pin_warns_on_route_overlap": 0.09438716596923769, + "tests/test_legend_placement.py::test_keyword_legend_never_overlaps_routes": 0.043955499306321144, + "tests/test_legend_placement.py::test_legend_absolute_coordinates_land_exactly[differentialabundance]": 0.1999187907204032, + "tests/test_legend_placement.py::test_legend_absolute_coordinates_land_exactly[rnaseq_sections]": 0.6018944580573589, + "tests/test_legend_placement.py::test_legend_canvas_anchor_pins_bottom_right[differentialabundance]": 0.424576458055526, + "tests/test_legend_placement.py::test_legend_canvas_anchor_pins_bottom_right[rnaseq_sections]": 0.5323546251747757, + "tests/test_legend_placement.py::test_legend_offset_applies_and_skips_fallback[differentialabundance]": 0.16992945806123316, + "tests/test_legend_placement.py::test_legend_offset_applies_and_skips_fallback[rnaseq_sections]": 0.48753020889125764, + "tests/test_live_mapping.py::test_check_mapping_clean": 0.0003330409526824951, + "tests/test_live_mapping.py::test_check_mapping_flags_dead_pattern": 0.0002033740747720003, + "tests/test_live_mapping.py::test_check_mapping_flags_process_matching_multiple_stations": 0.0009840431157499552, + "tests/test_live_mapping.py::test_check_mapping_flags_unmapped_process": 0.00023062480613589287, + "tests/test_live_mapping.py::test_check_mapping_ignore_suppresses_unmapped": 0.00023337500169873238, + "tests/test_live_mapping.py::test_check_mapping_reports_unmapped_stations": 0.00017229118384420872, + "tests/test_live_mapping.py::test_process_names_from_dag_reads_stadium_nodes": 0.0007727930787950754, + "tests/test_live_mapping.py::test_stations_for_process_case_insensitive": 0.00019270810298621655, + "tests/test_live_mapping.py::test_stations_for_process_matches_qualified_name": 0.00029029231518507004, + "tests/test_live_mapping.py::test_stations_for_process_no_match": 0.00018604216165840626, + "tests/test_live_server.py::test_build_page_contains_halo_ids": 0.0109762919601053, + "tests/test_live_server.py::test_completed_station_stays_done_for_rest_of_run": 0.0055945818312466145, + "tests/test_live_server.py::test_dark_theme_page_uses_dark_chrome": 0.009976499946787953, + "tests/test_live_server.py::test_default_overlay_is_selected_and_applied": 0.006247792160138488, + "tests/test_live_server.py::test_each_halo_carries_the_shared_overlay_marks": 0.0048600840382277966, + "tests/test_live_server.py::test_explicit_overlay_drives_the_initial_style": 0.007703166687861085, + "tests/test_live_server.py::test_http_smoke[None]": 0.5919762507546693, + "tests/test_live_server.py::test_http_smoke[sekret]": 0.5252237911336124, + "tests/test_live_server.py::test_is_light_bg_classifies_themes": 0.00017658271826803684, + "tests/test_live_server.py::test_light_theme_page_uses_light_chrome": 0.0064290419686585665, + "tests/test_live_server.py::test_multi_server_http_smoke": 0.5554968339856714, + "tests/test_live_server.py::test_only_a_new_run_resets_a_done_station": 0.005606624996289611, + "tests/test_live_server.py::test_only_mapped_stations_are_overlaid": 0.0047012080904096365, + "tests/test_live_server.py::test_overlay_marks_match_the_drawn_station_pill": 0.008619749918580055, + "tests/test_live_server.py::test_page_offers_every_overlay_style": 0.007936041103675961, + "tests/test_live_server.py::test_registry_register_and_listing": 0.008396959397941828, + "tests/test_live_server.py::test_run_ended_tracks_terminal_state": 0.011802040971815586, + "tests/test_live_server.py::test_run_lifecycle_launch_wires_weblog": 0.007577166892588139, + "tests/test_live_server.py::test_run_lifecycle_opens_browser": 0.007012458052486181, + "tests/test_live_server.py::test_run_lifecycle_stops_after_complete": 0.002962833968922496, + "tests/test_live_server.py::test_serve_cli_wires_launch_and_prints_url": 0.01102224993519485, + "tests/test_live_server.py::test_serve_rejects_unknown_overlay": 0.0057747079990804195, + "tests/test_live_server.py::test_started_resets_prior_run": 0.012888624100014567, + "tests/test_live_server.py::test_state_machine_failure": 0.004091999959200621, + "tests/test_live_server.py::test_state_machine_matches_qualified_name": 0.008798874216154218, + "tests/test_live_server.py::test_state_machine_queued_running_done": 0.005285792285576463, + "tests/test_live_server.py::test_unknown_overlay_falls_back_to_default": 0.005301498109474778, + "tests/test_live_server.py::test_weblog_command_appends_when_absent": 0.0012452907394617796, + "tests/test_live_server.py::test_weblog_command_keeps_caller_supplied": 0.0005145419854670763, + "tests/test_lr_perp_entry_containment_invariant.py::test_perp_entry_run_stays_contained[cross_col_top_entry]": 0.032955123810097575, + "tests/test_lr_perp_entry_containment_invariant.py::test_perp_entry_run_stays_contained[lr_perp_bottom_exit_perp_entry]": 0.03012866689823568, + "tests/test_lr_perp_entry_containment_invariant.py::test_perp_entry_run_stays_contained[lr_perp_top_exit_perp_entry]": 0.026054915972054005, + "tests/test_lr_perp_entry_containment_invariant.py::test_perp_entry_run_stays_contained[lr_perp_top_exit_perp_entry_diverging]": 0.02597887604497373, + "tests/test_lr_perp_entry_containment_invariant.py::test_perp_entry_run_stays_contained[lr_top_entry_cross_column]": 0.02507791598327458, + "tests/test_lr_perp_entry_containment_invariant.py::test_perp_entry_run_stays_contained[merge_trunk_out_of_range_section]": 0.07862266688607633, + "tests/test_manifest.py::test_cdata_survives_bracket_sequence": 0.0034917090088129044, + "tests/test_manifest.py::test_coordinate_space_is_viewbox": 0.017167333979159594, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/centered_tracks-path0-False]": 0.030902208061888814, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/cross_track_interchange-path1-False]": 0.0719934580847621, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/diagonal_labels-path2-False]": 0.1521135421935469, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/differentialabundance-path3-False]": 0.5156759992241859, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/differentialabundance_default-path4-False]": 0.4018649992067367, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/directional_flow-path5-False]": 0.032556874910369515, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/disconnected_components-path6-False]": 0.052865332923829556, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/epitopeprediction-path7-False]": 0.1523255007341504, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/file_icons-path8-False]": 0.03480770788155496, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/genomeassembly-path9-False]": 0.1833933750167489, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/genomeassembly_staggered-path10-False]": 0.707058375235647, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/genomic_pipeline-path11-False]": 1.0416259160265326, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/group_labels-path12-False]": 0.04954025009647012, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/hlatyping-path13-False]": 0.12055549887008965, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/legend_combo-path14-False]": 0.04134929203428328, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/legend_logo_placement-path15-False]": 0.0993067491799593, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/longread_variant_calling-path16-False]": 0.4263360411860049, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/marker_styles-path17-False]": 0.0644017499871552, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/off_track_outputs-path18-False]": 0.05221233400516212, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/rnaseq_auto-path19-False]": 0.2912690849043429, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/rnaseq_sections-path20-False]": 1.236032874789089, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/rnaseq_sections_manual-path21-False]": 1.1700033331289887, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/simple_pipeline-path22-False]": 0.03602691716514528, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/tb_file_termini-path23-False]": 0.09349595825187862, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/variant_calling-path24-False]": 0.07393574970774353, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/variant_calling_tuned-path25-False]": 0.10286541585810483, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/variantbenchmarking-path26-False]": 0.610377999022603, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/variantbenchmarking_auto-path27-False]": 0.5551223738584667, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[examples/variantprioritization-path28-False]": 0.10897399880923331, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/01_minimal-path164-False]": 0.025718749035149813, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/02_sections-path165-False]": 0.042616166872903705, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/03_fan_out-path166-False]": 0.07542491611093283, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/03b_fan_in_merge-path167-False]": 0.07721462403424084, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/04_directions-path168-False]": 0.08342675003223121, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/05_file_icons-path169-False]": 0.04972195811569691, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/05b_multi_icons-path170-False]": 0.0690995417535305, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/05c_files_icon-path171-False]": 0.059891375014558434, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/05d_folder_icon-path172-False]": 0.03890683315694332, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/05f_banner_labels-path173-False]": 0.05460108397528529, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/06a_without_hidden-path174-False]": 0.10733504197560251, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[guide/06b_with_hidden-path175-False]": 0.30853141588158906, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[nextflow/duplicate_processes-path195-True]": 0.04685949976556003, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[nextflow/flat_pipeline-path196-True]": 0.08628237503580749, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[nextflow/unquoted_labels-path197-True]": 0.050878583919256926, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[nextflow/variant_calling-path198-True]": 0.07827058434486389, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[nextflow/with_subworkflows-path199-True]": 0.12070275098085403, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/bubble_forced_label_clears_diagonal-path176-False]": 0.02097504213452339, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/bubble_label_clears_diagonal-path177-False]": 0.03338149981573224, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/bubble_output_above-path178-False]": 0.020281665725633502, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/captioned_sibling_outputs-path179-False]": 0.0181988759431988, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/da_pipeline-path180-False]": 0.40437637479044497, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/diagonal_single_trunk_off_track-path181-False]": 0.1402114168740809, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/file_icon_fanin-path182-False]": 0.09953241725452244, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/font_scale-path183-False]": 0.018053792184218764, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/genomeassembly_organellar-path184-False]": 0.20515587530098855, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/icon_caption_wrap-path185-False]": 0.01294804085046053, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/leaf_file_icon_on_trunk-path186-False]": 0.04100104095414281, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/multiline_labels-path187-False]": 0.06997270812280476, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/off_track_output_branched-path188-False]": 0.038503124844282866, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/off_track_outputs_along_trunk-path189-False]": 0.0942922078538686, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/rnaseq_sections-path190-False]": 0.974781374912709, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/rnaseq_simple-path191-False]": 0.02410454209893942, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/tb_right_exit_feeder_slots-path192-False]": 0.08367137471213937, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/trunk_align_matching_bundle-path193-False]": 0.05412258277647197, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[tests/uneven_diamond-path194-False]": 0.03915250091813505, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/aligner_row_pinned_continuation-path29-False]": 0.15826525003649294, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/around_below_ep_col_gt0-path30-False]": 0.07372591691091657, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/around_section_below-path31-False]": 0.06582154124043882, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/asymmetric_tree-path32-False]": 0.11751720891334116, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bottom_row_climb_clear_corridor-path33-False]": 0.06200499995611608, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/branch_fold_forward-path34-False]": 0.144435333320871, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/branch_fold_stability-path35-False]": 0.0919845828320831, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bt_chain-path36-False]": 0.02447137492708862, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bt_exit_top_above-path37-False]": 0.035827373852953315, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bt_exit_top_above_2line-path38-False]": 0.04542699991725385, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bt_fork-path39-False]": 0.022693500388413668, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bt_perp_entry_below-path40-False]": 0.038947708904743195, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bt_to_lr-path41-False]": 0.03795687621459365, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bt_to_tb-path42-False]": 0.04947062488645315, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bundle_terminator_continuation-path43-False]": 0.02473320788703859, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_fan_in_outer_slot-path44-False]": 0.20780095923691988, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_gap2_rightward_overflow-path45-False]": 0.16170454188250005, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_label_rake-path46-False]": 0.09651812515221536, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_label_rake_left-path47-False]": 0.10244295815937221, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_label_rake_wide-path48-False]": 0.1411220410373062, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_leftward_far_side_entry-path49-False]": 0.12637204094789922, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_leftward_overflow-path50-False]": 0.17929916619323194, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/bypass_v_tight-path51-False]": 0.09186179214157164, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/clear_channel_target_aware_push-path52-False]": 0.3083796235732734, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/compact_gap_peer_conflict-path53-False]": 0.09815041697584093, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/compact_hidden_passthrough-path54-False]": 0.16008645785041153, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/complex_multipath-path55-False]": 0.16059845802374184, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/convergence_stacked_sink-path56-False]": 0.11512029101140797, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/convergent_offrow_exit_climb-path57-False]": 0.4996873748023063, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/corridor_narrow_gap_fallback-path58-False]": 0.0663329167291522, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/cross_col_top_entry-path59-False]": 0.021982581820338964, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/cross_column_perp_drop-path60-False]": 0.03389162546955049, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/cross_column_perp_drop_far_exit-path61-False]": 0.022850958164781332, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/cross_row_gap_wrap-path62-False]": 0.0685981665737927, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/deep_linear-path63-False]": 0.1549871237948537, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/disjoint_sameline_trunks-path64-False]": 0.1049360407050699, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/divergent_fanout_split-path65-False]": 0.0517533749807626, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/dogleg_exempt_distinct-path66-False]": 0.06177795818075538, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/dogleg_exempt_sameline-path67-False]": 0.05927612422965467, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/dogleg_twoline_fanout-path68-False]": 0.07019312516786158, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/exit_corner_offset_dogleg-path69-False]": 0.07774920901283622, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/fan_bypass_nesting-path70-False]": 0.1210791259072721, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/fan_in_merge-path71-False]": 0.10763533320277929, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/fold_double-path72-False]": 0.4751644991338253, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/fold_fan_across-path73-False]": 0.3018647918943316, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/fold_stacked_branch-path74-False]": 0.2624167900066823, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/funcprofiler_upstream-path75-False]": 0.4622111669741571, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/header_nudge-path76-False]": 0.050245416117832065, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/header_side_rotated-path77-False]": 0.04396887542679906, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/inrow_skip_breeze-path78-False]": 0.041589291067793965, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/inter_row_wrap_clearance-path79-False]": 0.06497941724956036, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/interchange_lane_reorder-path80-False]": 0.045224207919090986, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/junction_entry_align-path81-False]": 0.09666362358257174, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/junction_entry_collision-path82-False]": 0.12038662401027977, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/junction_entry_reversed_fold-path83-False]": 0.08020458277314901, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/junction_fanout_convergence-path84-False]": 0.07347983331419528, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/left_entry_up_wrap-path85-False]": 0.04920266685076058, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/left_exit_sink_below-path86-False]": 0.07390533294528723, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_perp_bottom_exit_perp_entry-path87-False]": 0.04277766612358391, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_perp_bottom_exit_side_entry-path88-False]": 0.06382275000214577, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_perp_top_exit_perp_entry-path89-False]": 0.04807854117825627, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_perp_top_exit_perp_entry_diverging-path90-False]": 0.043231707997620106, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_perp_top_exit_side_entry-path91-False]": 0.0626055421307683, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_to_tb_top_cross_col-path92-False]": 0.05624425015412271, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_to_tb_top_drop-path93-False]": 0.024799834238365293, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_to_tb_top_drop_two_lines-path94-False]": 0.04230637405999005, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_to_tb_top_near_vertical-path95-False]": 0.03921591583639383, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_to_tb_top_two_lines-path96-False]": 0.026305875042453408, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_top_entry_cross_column-path97-False]": 0.0400374170858413, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/lr_top_entry_cross_column_two_line-path98-False]": 0.031557834008708596, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_around_below_leftmost-path99-False]": 0.07497487403452396, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_bottom_row_bypass-path100-False]": 0.08561320812441409, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_leftmost_sink_branch-path101-False]": 0.08826049999333918, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_offrow_continuation-path102-False]": 0.06502279173582792, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_port_above_approach-path103-False]": 0.07482983311638236, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_pullaway-path104-False]": 0.09823149931617081, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_right_entry-path105-False]": 0.08327891700901091, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_trunk_out_of_range_section-path106-False]": 0.10357329063117504, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/merge_trunk_over_low_section-path107-False]": 0.08435450098477304, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/mismatched_tracks-path108-False]": 0.11660975101403892, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/mixed_bundle_column-path109-False]": 0.101239331997931, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/mixed_port_sides-path110-False]": 0.05286100087687373, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/multi_input_convergence-path111-False]": 0.055640583857893944, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/multi_line_bundle-path112-False]": 0.08521220926195383, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/multicarrier_offrow_exit_climb-path113-False]": 0.09598545706830919, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/near_vertical_junction_hook-path114-False]": 0.064903249964118, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/off_track_convergence-path115-False]": 0.07366433297283947, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/off_track_convergence_multiline-path116-False]": 0.3196637916844338, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/off_track_input_above_consumer-path117-False]": 0.24599933391436934, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/parallel_independent-path118-False]": 0.04395162593573332, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/peeloff_extra_line_consumer-path119-False]": 0.10562412603758276, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/peeloff_riser_respace-path120-False]": 0.09639629279263318, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/post_convergence_trunk-path121-False]": 0.031134458957239985, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/reconverge_reversed_fold-path122-False]": 0.2500687101855874, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/right_entry_from_above-path123-False]": 0.026386750862002373, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/right_entry_from_above_far-path124-False]": 0.041588665917515755, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/right_entry_gap_above_empty_row-path125-False]": 0.04372204071842134, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/right_entry_wrap_no_fan-path126-False]": 0.04031424899585545, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/rl_entry_runway-path127-False]": 0.06638224981725216, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/rnaseq_lite-path128-False]": 0.16200183308683336, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/route_around_intervening-path129-False]": 0.06139945867471397, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/section_diamond-path130-False]": 0.06414012494497001, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/self_crossing_bridge-path131-False]": 0.06258820812217891, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/shared_sink_parallel-path132-False]": 0.1543354569002986, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/single_section-path133-False]": 0.029263125034049153, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/stacked_left_exit_drop-path134-False]": 0.03159875003620982, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/stacked_lr_serpentine-path135-False]": 0.053277916042134166, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/symmetric_diamond_beside_wide_fan-path136-False]": 0.10529845929704607, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_bottom_entry_flow_start-path137-False]": 0.024057584116235375, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_bottom_exit_bundle_jog-path138-False]": 0.053430333035066724, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_bottom_exit_fork_diamond-path139-False]": 0.06537087401375175, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_column_continuation_two_lines-path140-False]": 0.039998751133680344, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_convergence_straight_drop-path141-False]": 0.03797450033016503, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_internal_diagonal-path142-False]": 0.040737206814810634, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_left_exit_step-path143-False]": 0.08123124903067946, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_lr_exit_left-path144-False]": 0.06545116705819964, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_lr_exit_right-path145-False]": 0.06556370877660811, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_passthrough_continuation-path146-False]": 0.0251057508867234, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_passthrough_trunk-path147-False]": 0.05394779215566814, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_perp_exit_side_neighbour-path148-False]": 0.053009292809292674, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_right_entry_stack-path149-False]": 0.06947833392769098, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_trunk_through_fan-path150-False]": 0.036832625046372414, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/tb_two_line_vert_seam-path151-False]": 0.04117187485098839, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/terminal_symmetric_fan-path152-False]": 0.05077370791696012, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/terminus_join-path153-False]": 0.011938543058931828, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/top_entry_header_clash-path154-False]": 0.02620283281430602, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/trunk_through_fan-path155-False]": 0.05364145687781274, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/u_turn_fold-path156-False]": 0.1638720422051847, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/uneven_diamond-path157-False]": 0.05153808416798711, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/upward_bypass-path158-False]": 0.1781811669934541, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/variant_calling-path159-False]": 0.4277664590626955, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/wide_fan_in-path160-False]": 0.05863870889879763, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/wide_fan_out-path161-False]": 0.08051383378915489, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/wide_label_fan-path162-False]": 0.03995454008691013, + "tests/test_manifest.py::test_corpus_manifest_roundtrips[topologies/wrapped_label_trunk-path163-False]": 0.03057649894617498, + "tests/test_manifest.py::test_data_attrs_mirror_manifest_geometry": 0.020687499782070518, + "tests/test_manifest.py::test_id_is_join_key_to_dom": 0.017584416083991528, + "tests/test_manifest.py::test_manifest_arrays_follow_graph_declaration_order": 0.03201387613080442, + "tests/test_manifest.py::test_manifest_embedded_and_roundtrips": 0.020966833224520087, + "tests/test_manifest.py::test_manifest_is_deterministic": 0.019942251034080982, + "tests/test_manifest.py::test_match_block_documents_semantics": 0.01093900017440319, + "tests/test_manifest.py::test_matcher_mirrors_live_server": 0.02112779300659895, + "tests/test_manifest.py::test_no_manifest_drops_only_data_not_glyphs": 0.014796708710491657, + "tests/test_manifest.py::test_no_manifest_opt_out_emits_drawn_map_only": 0.016660708002746105, + "tests/test_manifest.py::test_nodes_coords_and_patterns_match_graph": 0.01757854176685214, + "tests/test_manifest.py::test_svg_without_manifest_returns_none": 0.00017875037156045437, + "tests/test_manifest.py::test_unmapped_node_has_empty_patterns": 0.012855583103373647, + "tests/test_manifest_standalone.py::test_build_manifest_data_from_plain_nodes_roundtrips": 0.00027304189279675484, + "tests/test_manifest_standalone.py::test_consumer_path_on_a_hand_built_svg": 0.0007332498207688332, + "tests/test_manifest_standalone.py::test_inject_manifest_places_metadata_after_opening_svg_tag": 0.0010064167436212301, + "tests/test_manifest_standalone.py::test_inject_manifest_without_svg_tag_raises": 0.00028487504459917545, + "tests/test_manifest_standalone.py::test_json_schema_is_valid_and_built_manifest_conforms": 0.014874749816954136, + "tests/test_manifest_standalone.py::test_json_schema_rejects_a_node_missing_geometry": 0.007391124963760376, + "tests/test_manifest_standalone.py::test_manifest_package_has_no_nf_metro_dependencies": 0.005507832858711481, + "tests/test_manifest_standalone.py::test_match_target_defaults_to_nextflow_and_is_overridable": 0.00019691698253154755, + "tests/test_manifest_standalone.py::test_matching_node_ids_is_case_insensitive_and_ordered": 0.0003215419128537178, + "tests/test_manifest_standalone.py::test_node_data_attrs_shape_and_rounding": 0.0016602093819528818, + "tests/test_manifest_standalone.py::test_overlay_svg_responsive_omits_fixed_dimensions": 0.00033033289946615696, + "tests/test_manifest_standalone.py::test_overlay_svg_shares_the_manifest_viewbox": 0.00019108341075479984, + "tests/test_markers.py::test_dark_marker_glyph_has_light_outline": 0.013893166789785028, + "tests/test_markers.py::test_marker_corner_radius_per_shape": 0.0011674989946186543, + "tests/test_markers.py::test_marker_directive_defaults_circle_solid": 0.012189665110781789, + "tests/test_markers.py::test_marker_directive_literal_colour_fill": 0.014221625868231058, + "tests/test_markers.py::test_marker_directive_precedes_node_definition": 0.0024600832257419825, + "tests/test_markers.py::test_marker_directive_sets_shape_and_fill": 0.0040998749900609255, + "tests/test_markers.py::test_marker_directive_unknown_shape_warns_and_ignores": 0.005956833017989993, + "tests/test_markers.py::test_marker_directive_unmarked_station_has_no_marker": 0.004993749083951116, + "tests/test_markers.py::test_marker_fill_color_keywords_and_literal": 0.0001608340535312891, + "tests/test_markers.py::test_marker_legend_default_empty": 0.0027874168008565903, + "tests/test_markers.py::test_marker_legend_directive_collects_entries": 0.004275917075574398, + "tests/test_markers.py::test_marker_legend_directive_requires_caption": 0.0052913338877260685, + "tests/test_markers.py::test_marker_legend_swatch_has_light_outline": 0.01519929082132876, + "tests/test_markers.py::test_marker_station_renders_valid_svg": 0.00773629080504179, + "tests/test_markers.py::test_marker_stroke_color_falls_back_to_station_stroke": 0.00018341606482863426, + "tests/test_markers.py::test_marker_stroke_color_uses_theme_marker_stroke": 0.00018770783208310604, + "tests/test_markers.py::test_no_marker_directives_byte_identical": 0.018078373977914453, + "tests/test_markers.py::test_pill_marker_directive_parses": 0.006043792003765702, + "tests/test_markers.py::test_pill_marker_grows_across_multiple_tracks": 0.008582582930102944, + "tests/test_markers.py::test_pill_marker_is_capsule_elongated_along_the_line": 0.006567792966961861, + "tests/test_merge_branch_trunk_invariant.py::test_checker_fires_when_context_disagrees_with_trunk": 0.10903329192660749, + "tests/test_merge_branch_trunk_invariant.py::test_genomeassembly_organellar_assemblies_connected": 0.12628704099915922, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/centered_tracks.mmd]": 0.01736299879848957, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/cross_track_interchange.mmd]": 0.03868995723314583, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/diagonal_labels.mmd]": 0.06681633298285306, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/differentialabundance.mmd]": 0.16166187613271177, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/differentialabundance_default.mmd]": 0.436811416875571, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/directional_flow.mmd]": 0.01892116595990956, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/disconnected_components.mmd]": 0.025486125145107508, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/epitopeprediction.mmd]": 0.05699637485668063, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/file_icons.mmd]": 0.026552290888503194, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/genomeassembly.mmd]": 0.08487195800989866, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/genomeassembly_staggered.mmd]": 0.06035287375561893, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/genomic_pipeline.mmd]": 0.25330075109377503, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/group_labels.mmd]": 0.020026790909469128, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/01_minimal.mmd]": 0.01101112412288785, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/02_sections.mmd]": 0.019288125215098262, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/03_fan_out.mmd]": 0.03709187521599233, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/03b_fan_in_merge.mmd]": 0.05349958315491676, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/04_directions.mmd]": 0.039368542144075036, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/05_file_icons.mmd]": 0.022959207883104682, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/05b_multi_icons.mmd]": 0.018541125115007162, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/05c_files_icon.mmd]": 0.015984707977622747, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/05d_folder_icon.mmd]": 0.023203207878395915, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/05f_banner_labels.mmd]": 0.031807541847229004, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/06a_without_hidden.mmd]": 0.02684224979020655, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/guide/06b_with_hidden.mmd]": 0.025873374892398715, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/hlatyping.mmd]": 0.04389199893921614, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/legend_combo.mmd]": 0.012684125220403075, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/legend_logo_placement.mmd]": 0.059372708667069674, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/line_spread.mmd]": 0.05548445787280798, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/longread_variant_calling.mmd]": 0.16618574992753565, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/marker_styles.mmd]": 0.050598666071891785, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/off_track_outputs.mmd]": 0.03739225096069276, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/rail_mode.mmd]": 0.02666979283094406, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/rail_section.mmd]": 0.058275333140045404, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/rnaseq_auto.mmd]": 0.125044833868742, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/rnaseq_sections.mmd]": 0.7296031261794269, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.49508912512101233, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/sarek_metro.mmd]": 0.2021894168574363, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/simple_pipeline.mmd]": 0.012215499067679048, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/tb_file_termini.mmd]": 0.02390904212370515, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.07747470797039568, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.022547665983438492, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/around_section_below.mmd]": 0.020343583077192307, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.049845332745462656, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.015906708082184196, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.04021341563202441, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.025442081736400723, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bt_chain.mmd]": 0.014403666136786342, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.02298979088664055, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.03169012488797307, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bt_fork.mmd]": 0.006893583107739687, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.01964970794506371, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.02208166616037488, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.017746874131262302, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.014584958320483565, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.035826500272378325, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.032663292018696666, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.02022516494616866, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.018377500819042325, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.055237459018826485, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.029490457847714424, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.23641908285208046, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.03393279225565493, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.023182498989626765, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.023302874760702252, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.022892500972375274, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/complex_multipath.mmd]": 0.050987997790798545, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.05753712588921189, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.20337604079395533, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.04143129102885723, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.03033550106920302, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.04417712497524917, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.032223207876086235, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.05126691679470241, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/deep_linear.mmd]": 0.06798345712013543, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.031393209006637335, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.014014209154993296, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.020873000845313072, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.0763776262756437, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.023135374765843153, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.03520741709508002, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.05676291626878083, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03545929095707834, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/fold_double.mmd]": 0.1192553339060396, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.09859158401377499, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.0960194580256939, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.46526670828461647, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/header_nudge.mmd]": 0.022120333276689053, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.03457037499174476, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.021608417155221105, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.02935841609723866, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.02325645717792213, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.06243683397769928, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.03878745925612748, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.027541416930034757, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.020401168381795287, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.023204750381410122, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.03940295893698931, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.031655207043513656, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.014886208111420274, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.024976375279948115, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.025888668140396476, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.019923208747059107, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.017774665961042047, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.027954791905358434, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.01608479185961187, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.018529125722125173, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.028256415855139494, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.014042874099686742, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.010259459260851145, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.02708825096487999, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.03580079087987542, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.032744749216362834, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.04208954097703099, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.0413055419921875, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.021703709149733186, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.018292874796316028, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.04456670815125108, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.03829191718250513, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.03046945808455348, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.04839895688928664, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.0185392489656806, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.022988082841038704, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.025647540809586644, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.041900832671672106, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.021858918014913797, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.027213667053729296, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.02473529102280736, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.1024514171294868, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/parallel_independent.mmd]": 0.02610370796173811, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.04796354076825082, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.07094145775772631, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.02143987501040101, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.007874958915635943, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.016208625864237547, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.013221418019384146, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.010217501083388925, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.38863920769654214, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.028005999978631735, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.027671457966789603, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.02045075106434524, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.013213624013587832, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.02177612599916756, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.06507325125858188, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.027999708196148276, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/section_diamond.mmd]": 0.036372334230691195, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.06612404086627066, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.05103679187595844, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/single_section.mmd]": 0.008677665842697024, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.039365248987451196, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.029118166072294116, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.06192783312872052, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.09943866706453264, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.02963608386926353, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.042200708063319325, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.01399295893497765, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.0208592489361763, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.031106665963307023, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.042916165897622705, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.02265083370730281, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.029373791767284274, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.00902399979531765, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.016281459014862776, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.008817666210234165, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.019863459980115294, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.01898916717618704, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.014686207054182887, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.02968108281493187, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/terminus_join.mmd]": 0.007943458389490843, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.01739316713064909, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.026002417085692286, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.05815629102289677, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.006942959036678076, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/upward_bypass.mmd]": 0.04987366683781147, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/variant_calling.mmd]": 0.21282575000077486, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.020455374848097563, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.04873141599819064, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.01495212409645319, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.008836791152134538, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/variant_calling.mmd]": 0.041603416204452515, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/variant_calling_tuned.mmd]": 0.05731708183884621, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/variantbenchmarking.mmd]": 0.26909654261544347, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.35512374993413687, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[examples/variantprioritization.mmd]": 0.046241499949246645, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/bubble_forced_label_clears_diagonal.mmd]": 0.01878958404995501, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/bubble_label_clears_diagonal.mmd]": 0.01708995900116861, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/bubble_output_above.mmd]": 0.016147376038134098, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/captioned_sibling_outputs.mmd]": 0.014687208225950599, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/da_pipeline.mmd]": 0.44099245802499354, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/diagonal_single_trunk_off_track.mmd]": 0.07272691698744893, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/file_icon_fanin.mmd]": 0.03450520918704569, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/font_scale.mmd]": 0.008446792140603065, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/genomeassembly_organellar.mmd]": 0.10611224989406765, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/icon_caption_wrap.mmd]": 0.00528604188002646, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/leaf_file_icon_on_trunk.mmd]": 0.018562041223049164, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/multiline_labels.mmd]": 0.026288125198334455, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/off_track_output_branched.mmd]": 0.018139833118766546, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/off_track_outputs_along_trunk.mmd]": 0.01879499899223447, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rail_diagonal_labels.mmd]": 0.0109096250962466, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rail_marked_single_line.mmd]": 0.028021416161209345, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rail_marker_fill.mmd]": 0.007282956736162305, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rail_marker_subset_interchange.mmd]": 0.026496291859075427, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rail_pitch_vs_labels.mmd]": 0.028835708973929286, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rail_single_line_callers.mmd]": 0.025200541829690337, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rnaseq_sections.mmd]": 0.5448631660547107, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/rnaseq_simple.mmd]": 0.013530125375837088, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/tb_right_exit_feeder_slots.mmd]": 0.03393295803107321, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/trunk_align_matching_bundle.mmd]": 0.019762791926041245, + "tests/test_merge_branch_trunk_invariant.py::test_merge_branches_meet_trunk_in_gallery[tests/fixtures/uneven_diamond.mmd]": 0.008564915973693132, + "tests/test_merge_convergence.py::test_feeder_descent_snaps_only_in_trunk_column[merge_bottom_row_bypass]": 0.03989570704288781, + "tests/test_merge_convergence.py::test_feeder_descent_snaps_only_in_trunk_column[merge_pullaway]": 0.3256548747885972, + "tests/test_merge_convergence.py::test_feeder_descent_snaps_only_in_trunk_column[merge_right_entry]": 0.031781707890331745, + "tests/test_merge_convergence.py::test_merge_branches_join_trunk_channel[merge_bottom_row_bypass]": 0.02837579231709242, + "tests/test_merge_convergence.py::test_merge_branches_join_trunk_channel[merge_pullaway]": 0.02855187514796853, + "tests/test_merge_convergence.py::test_merge_branches_join_trunk_channel[merge_right_entry]": 0.03154562530107796, + "tests/test_merge_convergence.py::test_no_same_line_parallel_merge_descents[merge_bottom_row_bypass]": 0.03356462391093373, + "tests/test_merge_convergence.py::test_no_same_line_parallel_merge_descents[merge_pullaway]": 0.03727937419898808, + "tests/test_merge_convergence.py::test_no_same_line_parallel_merge_descents[merge_right_entry]": 0.029386498732492328, + "tests/test_merge_convergence.py::test_same_line_port_approaches_coincide[merge_bottom_row_bypass]": 0.03139779204502702, + "tests/test_merge_convergence.py::test_same_line_port_approaches_coincide[merge_pullaway]": 0.02869800035841763, + "tests/test_merge_convergence.py::test_same_line_port_approaches_coincide[merge_right_entry]": 0.027946749702095985, + "tests/test_mixed_entry_directions.py::test_cli_rejects_mixed_entry_directions[render-opposing]": 0.02363425074145198, + "tests/test_mixed_entry_directions.py::test_cli_rejects_mixed_entry_directions[render-perpendicular]": 0.025447499938309193, + "tests/test_mixed_entry_directions.py::test_cli_rejects_mixed_entry_directions[validate-opposing]": 0.022373375948518515, + "tests/test_mixed_entry_directions.py::test_cli_rejects_mixed_entry_directions[validate-perpendicular]": 0.01259837532415986, + "tests/test_mixed_entry_directions.py::test_compute_layout_rejects_mixed_entry_directions[opposing]": 0.025175540009513497, + "tests/test_mixed_entry_directions.py::test_compute_layout_rejects_mixed_entry_directions[perpendicular]": 0.06098229228518903, + "tests/test_mixed_entry_directions.py::test_error_names_lines_per_side": 0.01143566588871181, + "tests/test_mixed_entry_directions.py::test_mixed_entry_rejected_without_validate[opposing]": 0.021618915954604745, + "tests/test_mixed_entry_directions.py::test_mixed_entry_rejected_without_validate[perpendicular]": 0.027312168153002858, + "tests/test_mixed_entry_directions.py::test_single_direction_entries_not_rejected[around-below]": 0.017536416882649064, + "tests/test_mixed_entry_directions.py::test_single_direction_entries_not_rejected[genomeassembly-collapse]": 0.34053783398121595, + "tests/test_mixed_entry_directions.py::test_single_direction_entries_not_rejected[rnaseq]": 0.5192383318208158, + "tests/test_mixed_entry_directions.py::test_single_direction_entries_not_rejected[variantbenchmarking-collapse]": 0.25308991805650294, + "tests/test_offset_regime.py::test_apply_route_offsets_returns_baked_points_verbatim": 0.0001860419288277626, + "tests/test_offset_regime.py::test_apply_route_offsets_shifts_deferred_endpoints": 0.00018808268941938877, + "tests/test_offset_regime.py::test_default_regime_is_deferred": 0.0008607928175479174, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/centered_tracks.mmd]": 0.03419841779395938, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/cross_track_interchange.mmd]": 0.04393962491303682, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/diagonal_labels.mmd]": 0.0881221666932106, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/differentialabundance.mmd]": 0.174741999944672, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/differentialabundance_default.mmd]": 0.22175020817667246, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/directional_flow.mmd]": 0.02476004185155034, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/disconnected_components.mmd]": 0.025007290998473763, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/epitopeprediction.mmd]": 0.07083324925042689, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/file_icons.mmd]": 0.023151792120188475, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/genomeassembly.mmd]": 0.08293416700325906, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/genomeassembly_staggered.mmd]": 0.43452241690829396, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/genomic_pipeline.mmd]": 0.384076917078346, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/group_labels.mmd]": 0.03392654191702604, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/01_minimal.mmd]": 0.018060790607705712, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/02_sections.mmd]": 0.02460312400944531, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/03_fan_out.mmd]": 0.034319458063691854, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/03b_fan_in_merge.mmd]": 0.02089966693893075, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/04_directions.mmd]": 0.03791054128669202, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/05_file_icons.mmd]": 0.016653250204399228, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/05b_multi_icons.mmd]": 0.021586416056379676, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/05c_files_icon.mmd]": 0.03164670802652836, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/05d_folder_icon.mmd]": 0.026496707927435637, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/05f_banner_labels.mmd]": 0.029090333031490445, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/06a_without_hidden.mmd]": 0.030073999892920256, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/guide/06b_with_hidden.mmd]": 0.028897915966808796, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/hlatyping.mmd]": 0.0628277501091361, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/legend_combo.mmd]": 0.016191249946132302, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/legend_logo_placement.mmd]": 0.03366124886088073, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/line_spread.mmd]": 0.0392427088227123, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/longread_variant_calling.mmd]": 0.2085836250334978, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/marker_styles.mmd]": 0.028617750154808164, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/off_track_outputs.mmd]": 0.025343915913254023, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/rail_mode.mmd]": 0.027196668088436127, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/rail_section.mmd]": 0.03971525002270937, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/rnaseq_auto.mmd]": 0.11047250009141862, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/rnaseq_sections.mmd]": 0.4914196659810841, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.4594512088224292, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/sarek_metro.mmd]": 0.42100375005975366, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/simple_pipeline.mmd]": 0.008329707197844982, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/tb_file_termini.mmd]": 0.03356450120918453, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.034760457230731845, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.016803291393443942, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/around_section_below.mmd]": 0.019249873934313655, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.03699695924296975, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.017564665991812944, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.04501108196564019, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.025096540804952383, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bt_chain.mmd]": 0.008201874792575836, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.03397175017744303, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.01956474920734763, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bt_fork.mmd]": 0.007682582829147577, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.017198584275320172, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.015547875314950943, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.01235533319413662, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.010140624130144715, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.11628508288413286, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.029049542266875505, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.023747959174215794, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.3056570419576019, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.08013162505812943, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.04709241725504398, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.021809292025864124, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.043456916930153966, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.031528667313978076, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.0340857501141727, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.014292375883087516, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/complex_multipath.mmd]": 0.03683037497103214, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.04766841698437929, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.17061762535013258, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.04097483307123184, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.021615958772599697, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.014461667276918888, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.017786749871447682, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.025970958173274994, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/deep_linear.mmd]": 0.06498845899477601, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.046202207915484905, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.013372833142057061, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.030338832875713706, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.03254083311185241, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.01867683418095112, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.03438929282128811, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.06777550000697374, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03971433313563466, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/fold_double.mmd]": 0.13670083275064826, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.13705062377266586, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.12395729217678308, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.27766666607931256, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/header_nudge.mmd]": 0.017521042376756668, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.04319766676053405, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.023159541888162494, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.06398966582491994, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.04374637617729604, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.06209816690534353, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.04831474996171892, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.03804037533700466, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.03214579098857939, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.022641291841864586, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.04305866570211947, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.47433324973098934, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.016784665873274207, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.030916959047317505, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.020929167047142982, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.032141583040356636, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.016548458486795425, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.023434000089764595, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.025347917107865214, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.019851583056151867, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.01978520816192031, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.019867293071001768, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.01895637740381062, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.050748375011608005, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.031652084086090326, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.029245666693896055, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.04668345721438527, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.02867495804093778, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.04184608324430883, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.03217266616411507, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.043985709082335234, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.12058954196982086, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.04730329220183194, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.06475083320401609, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.05751324980519712, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.04001100012101233, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.04329550126567483, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.04542571026831865, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.04262837488204241, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.026631249813362956, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.020532000344246626, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.12931837397627532, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/parallel_independent.mmd]": 0.01728795818053186, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.03193949908018112, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.049842084059491754, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.007889332948252559, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.011332874884828925, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.02935641771182418, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.02377512468956411, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.013454583939164877, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.12928679212927818, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.010719042038545012, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.016130040865391493, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.025797874201089144, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.022830583155155182, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.014472707873210311, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.06881433515809476, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.029652873752638698, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/section_diamond.mmd]": 0.027477082097902894, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.03091733413748443, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.03815433382987976, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/single_section.mmd]": 0.008991000009700656, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.034803585382178426, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.02312200120650232, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.04692508396692574, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.013081915909424424, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.013915789779275656, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.03994983434677124, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.01199254090897739, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.011113748885691166, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.02779704099521041, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.027432667091488838, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.03406704100780189, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.032695500180125237, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.01528533292002976, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.03580762492492795, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.008915208047255874, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.2986252917908132, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.017400040989741683, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.019538083812221885, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.017725790850818157, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/terminus_join.mmd]": 0.005520540988072753, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.01695662410929799, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.0337118748575449, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.05967949912883341, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.011859083082526922, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/upward_bypass.mmd]": 0.05730120907537639, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/variant_calling.mmd]": 0.16880254074931145, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.04389120824635029, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.03548904089257121, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.020288667175918818, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.02749104192480445, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/variant_calling.mmd]": 0.03456716681830585, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/variant_calling_tuned.mmd]": 0.038579790852963924, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/variantbenchmarking.mmd]": 0.29226150014437735, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.1440862910822034, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[examples/variantprioritization.mmd]": 0.04937108396552503, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/bubble_forced_label_clears_diagonal.mmd]": 0.01884783385321498, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/bubble_label_clears_diagonal.mmd]": 0.021265874849632382, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/bubble_output_above.mmd]": 0.015591957839205861, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/captioned_sibling_outputs.mmd]": 0.016802540747448802, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/da_pipeline.mmd]": 0.1637838752940297, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/diagonal_single_trunk_off_track.mmd]": 0.06760437483899295, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/file_icon_fanin.mmd]": 0.04024804220534861, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/font_scale.mmd]": 0.026975501095876098, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/genomeassembly_organellar.mmd]": 0.09321595914661884, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/icon_caption_wrap.mmd]": 0.013524665962904692, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/leaf_file_icon_on_trunk.mmd]": 0.025663415901362896, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/multiline_labels.mmd]": 0.022487625014036894, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/off_track_output_branched.mmd]": 0.009888834087178111, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/off_track_outputs_along_trunk.mmd]": 0.025621250038966537, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rail_diagonal_labels.mmd]": 0.031249250285327435, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rail_marked_single_line.mmd]": 0.026951707899570465, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rail_marker_fill.mmd]": 0.006144124083220959, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rail_marker_subset_interchange.mmd]": 0.008485500235110521, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rail_pitch_vs_labels.mmd]": 0.024706540862098336, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rail_single_line_callers.mmd]": 0.011871249647811055, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rnaseq_sections.mmd]": 0.7290928331203759, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/rnaseq_simple.mmd]": 0.006247584940865636, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/tb_right_exit_feeder_slots.mmd]": 0.03158395807258785, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/trunk_align_matching_bundle.mmd]": 0.018594248918816447, + "tests/test_offset_regime.py::test_deferred_offsets_apply_laterally_in_gallery[tests/fixtures/uneven_diamond.mmd]": 0.010919916909188032, + "tests/test_offset_regime.py::test_planted_vertical_deferred_offset_aborts_render_path": 0.4685894588474184, + "tests/test_offset_regime.py::test_planted_vertical_deferred_offset_is_caught": 0.48697033314965665, + "tests/test_options_parity.py::test_cli_override_beats_directive": 0.0009348329622298479, + "tests/test_options_parity.py::test_cli_override_skips_parse_time_options": 0.00016754097305238247, + "tests/test_options_parity.py::test_every_option_is_in_both_planes": 0.00021087401546537876, + "tests/test_options_parity.py::test_html_output_honours_graph_width_and_animate": 0.010730166686698794, + "tests/test_options_parity.py::test_new_directive_malformed_ignored[diamond_style: round-diamond_style-straight]": 0.000995915848761797, + "tests/test_options_parity.py::test_new_directive_malformed_ignored[section_x_gap: -1-section_x_gap-None]": 0.0010880830232053995, + "tests/test_options_parity.py::test_new_directive_malformed_ignored[width: tall-width-None]": 0.0038459168281406164, + "tests/test_options_parity.py::test_new_directive_malformed_ignored[x_spacing: -5-x_spacing-None]": 0.0010795840062201023, + "tests/test_options_parity.py::test_new_directive_malformed_ignored[x_spacing: huge-x_spacing-None]": 0.0032868338748812675, + "tests/test_options_parity.py::test_new_directive_sets_field[animate: true-animate-True]": 0.001947375014424324, + "tests/test_options_parity.py::test_new_directive_sets_field[diamond_style: symmetric-diamond_style-symmetric]": 0.0010719988495111465, + "tests/test_options_parity.py::test_new_directive_sets_field[height: 900-height-900]": 0.0010455844458192587, + "tests/test_options_parity.py::test_new_directive_sets_field[section_x_gap: 90-section_x_gap-90.0]": 0.0032522499095648527, + "tests/test_options_parity.py::test_new_directive_sets_field[section_y_gap: 70-section_y_gap-70.0]": 0.0010956241749227047, + "tests/test_options_parity.py::test_new_directive_sets_field[width: 1400-width-1400]": 0.0009707491844892502, + "tests/test_options_parity.py::test_new_directive_sets_field[x_spacing: 120-x_spacing-120.0]": 0.0011399160139262676, + "tests/test_options_parity.py::test_new_directive_sets_field[y_spacing: 80-y_spacing-80.0]": 0.0026030822191387415, + "tests/test_options_parity.py::test_no_duplicate_or_shadowed_options": 0.000522000016644597, + "tests/test_options_parity.py::test_section_x_gap_directive_drives_layout": 0.026325125247240067, + "tests/test_options_parity.py::test_style_directive_selects_theme_and_cli_overrides": 0.00020366674289107323, + "tests/test_options_parity.py::test_x_spacing_directive_drives_layout": 0.009662874974310398, + "tests/test_parse_error_positions.py::test_lark_syntax_error_includes_line_and_column": 0.0005806249100714922, + "tests/test_parse_error_positions.py::test_lark_syntax_error_no_raw_traceback": 0.0018370430916547775, + "tests/test_parse_error_positions.py::test_missing_annotation_includes_line_number": 0.002108250977471471, + "tests/test_parse_error_positions.py::test_undeclared_line_includes_line_number": 0.003267875174060464, + "tests/test_parse_error_positions.py::test_validate_cli_clean_file_exits_zero": 0.006914542056620121, + "tests/test_parse_error_positions.py::test_validate_cli_shows_line_for_undeclared_line": 0.005001625046133995, + "tests/test_parse_error_positions.py::test_validate_graph_includes_line_for_undeclared_edge": 0.0002179162111133337, + "tests/test_parse_error_positions.py::test_validate_graph_no_line_when_source_line_absent": 0.00020429189316928387, + "tests/test_parse_error_positions.py::test_validation_issue_carries_line": 0.00015795906074345112, + "tests/test_parse_error_positions.py::test_validation_issue_format_with_line": 0.000193500192835927, + "tests/test_parse_error_positions.py::test_validation_issue_format_with_path": 0.00019258284009993076, + "tests/test_parse_error_positions.py::test_validation_issue_format_without_line": 0.00015683402307331562, + "tests/test_parse_error_positions.py::test_validation_issue_line_defaults_to_none": 0.00016470788978040218, + "tests/test_parser.py::test_center_ports_directive_default": 0.0006436260882765055, + "tests/test_parser.py::test_center_ports_directive_parsed_falsy[0]": 0.001033499836921692, + "tests/test_parser.py::test_center_ports_directive_parsed_falsy[False]": 0.0012441668659448624, + "tests/test_parser.py::test_center_ports_directive_parsed_falsy[anything]": 0.0009659577626734972, + "tests/test_parser.py::test_center_ports_directive_parsed_falsy[false]": 0.00097091612406075, + "tests/test_parser.py::test_center_ports_directive_parsed_falsy[no]": 0.0009807092137634754, + "tests/test_parser.py::test_center_ports_directive_parsed_truthy[1]": 0.001081540947780013, + "tests/test_parser.py::test_center_ports_directive_parsed_truthy[TRUE]": 0.001072001177817583, + "tests/test_parser.py::test_center_ports_directive_parsed_truthy[True]": 0.001000541029497981, + "tests/test_parser.py::test_center_ports_directive_parsed_truthy[true]": 0.0011380829382687807, + "tests/test_parser.py::test_center_ports_directive_parsed_truthy[yes]": 0.002168792998418212, + "tests/test_parser.py::test_empty_section_removed": 0.0033547081984579563, + "tests/test_parser.py::test_empty_section_removed_render": 0.012822417076677084, + "tests/test_parser.py::test_fold_threshold_directive_parsed": 0.0012039998546242714, + "tests/test_parser.py::test_fold_threshold_invalid_ignored": 0.0023392511066049337, + "tests/test_parser.py::test_fold_threshold_keeps_wide_chain_on_one_row": 0.10066404100507498, + "tests/test_parser.py::test_grid_directive_parsing": 0.0019246248994022608, + "tests/test_parser.py::test_hidden_station_auto_created_from_edge": 0.0015020419377833605, + "tests/test_parser.py::test_hidden_station_definition_before_edge": 0.007684916956350207, + "tests/test_parser.py::test_hidden_station_edge_before_definition": 0.001774375094100833, + "tests/test_parser.py::test_hidden_station_in_section": 0.00808554096147418, + "tests/test_parser.py::test_hidden_station_underscore_prefix": 0.0016871248371899128, + "tests/test_parser.py::test_ignores_comments": 0.0018459593411535025, + "tests/test_parser.py::test_inter_section_edge_rewriting": 0.0074149989522993565, + "tests/test_parser.py::test_line_stations": 0.00242170924320817, + "tests/test_parser.py::test_lr_primary_direction_does_not_warn[graph LR]": 0.0017998749390244484, + "tests/test_parser.py::test_lr_primary_direction_does_not_warn[graph LR]": 0.0020541248377412558, + "tests/test_parser.py::test_lr_primary_direction_does_not_warn[graph]": 0.0018980829045176506, + "tests/test_parser.py::test_max_station_columns_arg_overrides_fold_threshold": 0.037955207750201225, + "tests/test_parser.py::test_no_duplicate_edges_after_resolve_sections": 0.009543415857478976, + "tests/test_parser.py::test_no_edges_no_error": 0.002221832750365138, + "tests/test_parser.py::test_non_lr_primary_direction_warns[BT]": 0.006105790613219142, + "tests/test_parser.py::test_non_lr_primary_direction_warns[RL]": 0.009063290897756815, + "tests/test_parser.py::test_non_lr_primary_direction_warns[TB]": 0.0028339591808617115, + "tests/test_parser.py::test_non_lr_primary_direction_warns[TD]": 0.009299834026023746, + "tests/test_parser.py::test_parse_caption": 0.0009713750332593918, + "tests/test_parser.py::test_parse_caption_default_empty": 0.0006369580514729023, + "tests/test_parser.py::test_parse_dir_directive": 0.0048217501025646925, + "tests/test_parser.py::test_parse_edges": 0.0017005421686917543, + "tests/test_parser.py::test_parse_edges_no_label": 0.0018104990012943745, + "tests/test_parser.py::test_parse_file_icon_name_applies_to_all_comma_labels": 0.003496333956718445, + "tests/test_parser.py::test_parse_file_icon_type_default": 0.007194582838565111, + "tests/test_parser.py::test_parse_file_icon_with_name": 0.0037216253113001585, + "tests/test_parser.py::test_parse_file_icon_without_name_empty": 0.0037933329585939646, + "tests/test_parser.py::test_parse_files_comma_separated": 0.0044955420307815075, + "tests/test_parser.py::test_parse_files_directive": 0.009562249761074781, + "tests/test_parser.py::test_parse_font_scale": 0.0012082923203706741, + "tests/test_parser.py::test_parse_font_scale_default": 0.0006537502631545067, + "tests/test_parser.py::test_parse_font_scale_invalid_ignored": 0.0009938322473317385, + "tests/test_parser.py::test_parse_font_scale_nonpositive_ignored": 0.0008927511516958475, + "tests/test_parser.py::test_parse_group_directive": 0.0013962502125650644, + "tests/test_parser.py::test_parse_group_directive_bad_position_defaults_below": 0.0009258328936994076, + "tests/test_parser.py::test_parse_group_directive_invalid_ignored": 0.0010070831049233675, + "tests/test_parser.py::test_parse_group_directive_quoted_label": 0.0009584568906575441, + "tests/test_parser.py::test_parse_label_angle": 0.0009490430820733309, + "tests/test_parser.py::test_parse_label_angle_default_none": 0.0006883749738335609, + "tests/test_parser.py::test_parse_label_angle_invalid_ignored": 0.0015184157527983189, + "tests/test_parser.py::test_parse_legend_absolute_coordinates": 0.0011079157702624798, + "tests/test_parser.py::test_parse_legend_canvas_anchor": 0.0010084582027047873, + "tests/test_parser.py::test_parse_legend_keyword_defaults": 0.0009109999518841505, + "tests/test_parser.py::test_parse_legend_logo_gap": 0.0013366660568863153, + "tests/test_parser.py::test_parse_legend_logo_gap_default": 0.0006307079456746578, + "tests/test_parser.py::test_parse_legend_logo_gap_invalid_ignored": 0.0009718751534819603, + "tests/test_parser.py::test_parse_legend_logo_gap_negative_ignored": 0.0008876253850758076, + "tests/test_parser.py::test_parse_legend_min_height": 0.0026245422195643187, + "tests/test_parser.py::test_parse_legend_min_height_default": 0.001524750841781497, + "tests/test_parser.py::test_parse_legend_min_height_invalid_ignored": 0.0010613740887492895, + "tests/test_parser.py::test_parse_legend_offset": 0.0009269171860069036, + "tests/test_parser.py::test_parse_legend_offset_negative": 0.0010000430047512054, + "tests/test_parser.py::test_parse_legend_unknown_keyword_warns_and_ignores": 0.0018919589929282665, + "tests/test_parser.py::test_parse_legend_unknown_qualifier_warns": 0.0009374590590596199, + "tests/test_parser.py::test_parse_line_order": 0.0009567486122250557, + "tests/test_parser.py::test_parse_line_order_default": 0.0006300001405179501, + "tests/test_parser.py::test_parse_line_order_invalid_ignored": 0.0009567500092089176, + "tests/test_parser.py::test_parse_line_style_dashed": 0.009796123951673508, + "tests/test_parser.py::test_parse_line_style_default_solid": 0.0009373747743666172, + "tests/test_parser.py::test_parse_line_style_dotted": 0.001441126223653555, + "tests/test_parser.py::test_parse_line_style_invalid_ignored": 0.000999542186036706, + "tests/test_parser.py::test_parse_lines": 0.001275374786928296, + "tests/test_parser.py::test_parse_logo_scale": 0.000981291988864541, + "tests/test_parser.py::test_parse_logo_scale_default": 0.0006371249910444021, + "tests/test_parser.py::test_parse_logo_scale_invalid_ignored": 0.000981624936684966, + "tests/test_parser.py::test_parse_logo_scale_nonpositive_ignored": 0.0009022068697959185, + "tests/test_parser.py::test_parse_mixed_icon_types": 0.0059152510948479176, + "tests/test_parser.py::test_parse_multiline_label": 0.0010843770578503609, + "tests/test_parser.py::test_parse_multiline_label_multiple_breaks": 0.0031743748113512993, + "tests/test_parser.py::test_parse_multiple_file_directives_same_station": 0.006041456945240498, + "tests/test_parser.py::test_parse_multiple_file_icons_comma": 0.0052931238897144794, + "tests/test_parser.py::test_parse_no_file_icon_not_terminus": 0.00756837404333055, + "tests/test_parser.py::test_parse_nodes_bare": 0.0009553327690809965, + "tests/test_parser.py::test_parse_nodes_square_bracket": 0.0013025829102844, + "tests/test_parser.py::test_parse_off_track_multiple": 0.003989584045484662, + "tests/test_parser.py::test_parse_off_track_single": 0.006956622935831547, + "tests/test_parser.py::test_parse_off_track_unknown_id_ignored": 0.008630125084891915, + "tests/test_parser.py::test_parse_quoted_label_strips_quotes": 0.004402917111292481, + "tests/test_parser.py::test_parse_quoted_label_with_newline": 0.0014901249669492245, + "tests/test_parser.py::test_parse_quoted_subgraph_title_strips_quotes": 0.001732083735987544, + "tests/test_parser.py::test_parse_simple_fixture": 0.006061706924811006, + "tests/test_parser.py::test_parse_single_file_icon": 0.005146833136677742, + "tests/test_parser.py::test_parse_style": 0.0008840828668326139, + "tests/test_parser.py::test_parse_subgraph_basic": 0.010209501022472978, + "tests/test_parser.py::test_parse_title": 0.0012167077511548996, + "tests/test_parser.py::test_port_directive_parsing": 0.007216460071504116, + "tests/test_parser.py::test_section_numbering": 0.009065249236300588, + "tests/test_parser.py::test_station_lines": 0.010501000797376037, + "tests/test_parser.py::test_subgraph_section_station_ids": 0.007277542958036065, + "tests/test_parser.py::test_subgraph_station_membership": 0.007490250049158931, + "tests/test_parser.py::test_subgraph_without_display_name": 0.001787374960258603, + "tests/test_parser.py::test_unannotated_edge_error_message_includes_stations": 0.006737458985298872, + "tests/test_parser.py::test_unannotated_edge_multiple": 0.003583083162084222, + "tests/test_parser.py::test_unannotated_edge_without_sections": 0.012080500135198236, + "tests/test_parser.py::test_undeclared_line_error": 0.01434654206968844, + "tests/test_parser_grammar.py::test_arrow_variants_form_edges[---]": 0.00345491711050272, + "tests/test_parser_grammar.py::test_arrow_variants_form_edges[-->]": 0.004694707924500108, + "tests/test_parser_grammar.py::test_arrow_variants_form_edges[==>]": 0.004429292166605592, + "tests/test_parser_grammar.py::test_bare_graph_header_does_not_warn": 0.003551626345142722, + "tests/test_parser_grammar.py::test_bare_node_label_is_its_id": 0.004358374979346991, + "tests/test_parser_grammar.py::test_bare_subgraph_header_warns_and_makes_no_section": 0.002843582769855857, + "tests/test_parser_grammar.py::test_comma_separated_line_ids_split_into_edges": 0.0022211670875549316, + "tests/test_parser_grammar.py::test_directive_dispatch_is_key_exact_not_prefix": 0.0029961259569972754, + "tests/test_parser_grammar.py::test_edge_before_node_declaration_sets_label_later": 0.0018396659288555384, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[01_minimal.mmd]": 0.008680124999955297, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[02_sections.mmd]": 0.011765958275645971, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[03_fan_out.mmd]": 0.015748791862279177, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[03b_fan_in_merge.mmd]": 0.016432042233645916, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[04_directions.mmd]": 0.026579250115901232, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[05_file_icons.mmd]": 0.010874124942347407, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[05b_multi_icons.mmd]": 0.00976641708984971, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[05c_files_icon.mmd]": 0.020425915950909257, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[05d_folder_icon.mmd]": 0.02427079202607274, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[05f_banner_labels.mmd]": 0.018936708103865385, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[06a_without_hidden.mmd]": 0.015354624949395657, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[06b_with_hidden.mmd]": 0.018001876072958112, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[aligner_row_pinned_continuation.mmd]": 0.02700262377038598, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[around_below_ep_col_gt0.mmd]": 0.015476333210244775, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[around_section_below.mmd]": 0.009911958826705813, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[asymmetric_tree.mmd]": 0.01953729218803346, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[away_exit_wrap_interior_left.mmd]": 0.011139542097225785, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[away_exit_wrap_interior_right.mmd]": 0.020903251133859158, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[backward_feed_rl.mmd]": 0.01621174905449152, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bottom_row_climb_clear_corridor.mmd]": 0.03610191727057099, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[branch_fold_forward.mmd]": 0.024729748954996467, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[branch_fold_stability.mmd]": 0.029968209099024534, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bt_chain.mmd]": 0.004618040984496474, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bt_exit_top_above.mmd]": 0.008417292032390833, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bt_exit_top_above_2line.mmd]": 0.016714958008378744, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bt_fork.mmd]": 0.0135137930046767, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bt_perp_entry_below.mmd]": 0.007562833139672875, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bt_to_lr.mmd]": 0.01013875100761652, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bt_to_tb.mmd]": 0.008316332940012217, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bubble_forced_label_clears_diagonal.mmd]": 0.01866499986499548, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bubble_label_clears_diagonal.mmd]": 0.013946915976703167, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bubble_output_above.mmd]": 0.01831979095004499, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bundle_terminator_continuation.mmd]": 0.004394083051010966, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_fan_in_outer_slot.mmd]": 0.052982833003625274, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_gap2_rightward_overflow.mmd]": 0.020874541951343417, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_label_rake.mmd]": 0.012856333749368787, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_label_rake_left.mmd]": 0.015488959150388837, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_label_rake_wide.mmd]": 0.02545054187066853, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_leftward_far_side_entry.mmd]": 0.01848345808684826, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_leftward_overflow.mmd]": 0.020982916932553053, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[bypass_v_tight.mmd]": 0.01460487605072558, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[captioned_sibling_outputs.mmd]": 0.012212541885674, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[centered_tracks.mmd]": 0.019766250159591436, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[clear_channel_target_aware_push.mmd]": 0.013024248881265521, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[compact_gap_peer_conflict.mmd]": 0.02292391494847834, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[compact_hidden_passthrough.mmd]": 0.018732791300863028, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[complex_multipath.mmd]": 0.031124875182285905, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[convergence_stacked_sink.mmd]": 0.042631333926692605, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[convergent_offrow_exit_climb.mmd]": 0.40982820908538997, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[corridor_narrow_gap_fallback.mmd]": 0.01951683429069817, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[cross_col_top_entry.mmd]": 0.013352625072002411, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[cross_column_perp_drop.mmd]": 0.012866541976109147, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[cross_column_perp_drop_far_exit.mmd]": 0.01852491684257984, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[cross_column_perp_entry_overflow.mmd]": 0.5023176269605756, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[cross_row_gap_wrap.mmd]": 0.03294304106384516, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[cross_track_interchange.mmd]": 0.03971279179677367, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[da_pipeline.mmd]": 0.08701937575824559, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[deep_linear.mmd]": 0.04721162607893348, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[diagonal_labels.mmd]": 0.060438124695792794, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[diagonal_single_trunk_off_track.mmd]": 0.05360879097133875, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[differentialabundance.mmd]": 0.0756964161992073, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[differentialabundance_default.mmd]": 0.08132004109211266, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[directional_flow.mmd]": 0.019090541871264577, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[disconnected_components.mmd]": 0.02484837477095425, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[disjoint_sameline_trunks.mmd]": 0.019097417360171676, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[divergent_fanout_split.mmd]": 0.018599415896460414, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[dogleg_exempt_distinct.mmd]": 0.022933125030249357, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[dogleg_exempt_sameline.mmd]": 0.024898959090933204, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[dogleg_twoline_fanout.mmd]": 0.011239042272791266, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[duplicate_processes.mmd]": 0.0003270010929554701, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[epitopeprediction.mmd]": 0.369292207993567, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[exit_corner_offset_dogleg.mmd]": 0.025153124006465077, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[fan_bypass_nesting.mmd]": 0.03372999979183078, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[fan_in_merge.mmd]": 0.023398665944114327, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[file_icon_fanin.mmd]": 0.024167626164853573, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[file_icons.mmd]": 0.013459041947498918, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[flat_pipeline.mmd]": 0.0005188737995922565, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[fold_double.mmd]": 0.07995145907625556, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[fold_fan_across.mmd]": 0.04949112609028816, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[fold_stacked_branch.mmd]": 0.0724157087970525, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[font_scale.mmd]": 0.017485625110566616, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[funcprofiler_upstream.mmd]": 0.045805750181898475, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[genomeassembly.mmd]": 0.04827208397909999, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[genomeassembly_organellar.mmd]": 0.07345558400265872, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[genomeassembly_staggered.mmd]": 0.03997887414880097, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[genomic_pipeline.mmd]": 0.15858970792032778, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[group_labels.mmd]": 0.01727270777337253, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[header_nudge.mmd]": 0.012222041841596365, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[header_side_rotated.mmd]": 0.00957558280788362, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[hlatyping.mmd]": 0.0303396659437567, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[icon_caption_wrap.mmd]": 0.003356833942234516, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[inrow_skip_breeze.mmd]": 0.00714350095950067, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[inter_row_wrap_clearance.mmd]": 0.011895667295902967, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[interchange_lane_reorder.mmd]": 0.010390749899670482, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[junction_entry_align.mmd]": 0.03077245783060789, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[junction_entry_collision.mmd]": 0.02234187605790794, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[junction_entry_reversed_fold.mmd]": 0.021545958006754518, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[junction_fanout_convergence.mmd]": 0.016097459010779858, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[leaf_file_icon_on_trunk.mmd]": 0.02510629198513925, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[left_entry_up_wrap.mmd]": 0.020317081594839692, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[left_exit_sink_below.mmd]": 0.017626333283260465, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[legend_combo.mmd]": 0.012877208180725574, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[legend_logo_placement.mmd]": 0.023531833197921515, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[line_spread.mmd]": 0.04829891677945852, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[longread_variant_calling.mmd]": 0.10136550012975931, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_perp_bottom_exit_perp_entry.mmd]": 0.01609349879436195, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_perp_bottom_exit_side_entry.mmd]": 0.017391498666256666, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_perp_top_exit_perp_entry.mmd]": 0.022154083009809256, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_perp_top_exit_perp_entry_diverging.mmd]": 0.02396775013767183, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_perp_top_exit_side_entry.mmd]": 0.011256415862590075, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_perpendicular_ports_overflow.mmd]": 0.03307579108513892, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_to_tb_top_cross_col.mmd]": 0.01383879198692739, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_to_tb_top_drop.mmd]": 0.013868625042960048, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_to_tb_top_drop_two_lines.mmd]": 0.010196417104452848, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_to_tb_top_near_vertical.mmd]": 0.023029458010569215, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_to_tb_top_two_lines.mmd]": 0.01155366632156074, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_top_entry_cross_column.mmd]": 0.007277332944795489, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[lr_top_entry_cross_column_two_line.mmd]": 0.00725350109860301, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[marker_styles.mmd]": 0.02180024958215654, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_around_below_leftmost.mmd]": 0.012425083201378584, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_bottom_row_bypass.mmd]": 0.0145577909424901, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_leftmost_sink_branch.mmd]": 0.0459666249807924, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_offrow_continuation.mmd]": 0.018394624115899205, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_port_above_approach.mmd]": 0.02344112517312169, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_pullaway.mmd]": 0.028443458257243037, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_right_entry.mmd]": 0.06815708288922906, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_trunk_out_of_range_section.mmd]": 0.3179501660633832, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_trunk_over_low_section.mmd]": 0.01921862387098372, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[merge_trunk_rightward_source.mmd]": 0.01824004086665809, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[mismatched_tracks.mmd]": 0.028868749039247632, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[mixed_bundle_column.mmd]": 0.027219000039622188, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[mixed_entry_opposing.mmd]": 0.009617750067263842, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[mixed_entry_perpendicular.mmd]": 0.013208083109930158, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[mixed_port_sides.mmd]": 0.012590792262926698, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[multi_input_convergence.mmd]": 0.01568425027653575, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[multi_line_bundle.mmd]": 0.019731999840587378, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[multicarrier_offrow_exit_climb.mmd]": 0.02568450034596026, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[multiline_labels.mmd]": 0.02024933393113315, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[near_vertical_junction_hook.mmd]": 0.014476999640464783, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[off_track_convergence.mmd]": 0.03966500097885728, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[off_track_convergence_multiline.mmd]": 0.016669707838445902, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[off_track_input_above_consumer.mmd]": 0.06850170786492527, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[off_track_output_branched.mmd]": 0.008757416857406497, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[off_track_outputs.mmd]": 0.01568983285687864, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[off_track_outputs_along_trunk.mmd]": 0.013191084144636989, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[parallel_independent.mmd]": 0.020347541198134422, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[peeloff_extra_line_consumer.mmd]": 0.01873962488025427, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[peeloff_riser_respace.mmd]": 0.022715124767273664, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[pipeline.mmd]": 0.015070833964273334, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[post_convergence_trunk.mmd]": 0.010347415693104267, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_diagonal_labels.mmd]": 0.009514124831184745, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_inter_section.mmd]": 0.006184165831655264, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_marked_single_line.mmd]": 0.02492779097519815, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_marker_fill.mmd]": 0.011289333924651146, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_marker_subset_interchange.mmd]": 0.009941000025719404, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_mode.mmd]": 0.03821958415210247, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_offtrack_fan.mmd]": 0.0091497921384871, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_offtrack_io.mmd]": 0.013760126195847988, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_offtrack_plain_io.mmd]": 0.008492665830999613, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_pitch_vs_labels.mmd]": 0.025340206921100616, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_section.mmd]": 0.026661290787160397, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rail_single_line_callers.mmd]": 0.007922707824036479, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[reconverge_reversed_fold.mmd]": 0.06575583410449326, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[right_entry_from_above.mmd]": 0.007298958254978061, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[right_entry_from_above_far.mmd]": 0.013999876333400607, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[right_entry_gap_above_empty_row.mmd]": 0.017161457799375057, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[right_entry_wrap_no_fan.mmd]": 0.01880812388844788, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rl_entry_runway.mmd]": 0.011877792188897729, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rl_return_row_convergence.mmd]": 0.11097433371469378, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rnaseq_auto.mmd]": 0.3955045002512634, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rnaseq_branch_fold_wrap.mmd]": 0.10509520885534585, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rnaseq_lite.mmd]": 0.0410401679109782, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rnaseq_sections.mmd0]": 0.10607366706244648, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rnaseq_sections.mmd1]": 0.10599358286708593, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rnaseq_sections_manual.mmd]": 0.0872687918599695, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[rnaseq_simple.mmd]": 0.007922999793663621, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[route_around_intervening.mmd]": 0.012420500162988901, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[sarek_metro.mmd]": 0.14055708306841552, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[section_diamond.mmd]": 0.02487737499177456, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[self_crossing_bridge.mmd]": 0.02928537526167929, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[shared_sink_parallel.mmd]": 0.019042165018618107, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[simple_pipeline.mmd]": 0.012129540788009763, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[single_section.mmd]": 0.004159540869295597, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[stacked_collector_fanin.mmd]": 0.12076520803384483, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[stacked_left_exit_drop.mmd]": 0.011602126061916351, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[stacked_lr_serpentine.mmd]": 0.028427875135093927, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[symmetric_diamond_beside_wide_fan.mmd]": 0.026995958294719458, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_bottom_entry_flow_start.mmd]": 0.018805874977260828, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_bottom_exit_bundle_jog.mmd]": 0.014133708784356713, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_bottom_exit_fork_diamond.mmd]": 0.011999291833490133, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_column_continuation_two_lines.mmd]": 0.023432624991983175, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_convergence_straight_drop.mmd]": 0.008378001162782311, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_file_termini.mmd]": 0.020959331886842847, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_internal_diagonal.mmd]": 0.008213416673243046, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_left_exit_step.mmd]": 0.021688207983970642, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_lr_exit_left.mmd]": 0.012235625181347132, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_lr_exit_right.mmd]": 0.016627541044726968, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_passthrough_continuation.mmd]": 0.01587562612257898, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_passthrough_trunk.mmd]": 0.06577824894338846, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_perp_exit_side_neighbour.mmd]": 0.011293039890006185, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_right_entry_stack.mmd]": 0.014500708086416125, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_right_exit_feeder_slots.mmd]": 0.019480290124192834, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_trunk_through_fan.mmd]": 0.012865665834397078, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[tb_two_line_vert_seam.mmd]": 0.012231041211634874, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[terminal_symmetric_fan.mmd]": 0.011282416759058833, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[terminus_join.mmd]": 0.00714666792191565, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[top_entry_header_clash.mmd]": 0.02058729180134833, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[trunk_align_matching_bundle.mmd]": 0.009075792040675879, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[trunk_through_fan.mmd]": 0.031135999830439687, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[twoline_fanout_up.mmd]": 0.01680683298036456, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[u_turn_fold.mmd]": 0.0472806659527123, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[uneven_diamond.mmd0]": 0.013668543193489313, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[uneven_diamond.mmd1]": 0.019591875839978456, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[unquoted_labels.mmd]": 0.001034874003380537, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[upward_bypass.mmd]": 0.03418399998918176, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[variant_calling.mmd0]": 0.04741608304902911, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[variant_calling.mmd1]": 0.02615929185412824, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[variant_calling.mmd2]": 0.000844583148136735, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[variant_calling_tuned.mmd]": 0.020105667179450393, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[variantbenchmarking.mmd]": 0.3625707079190761, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[variantbenchmarking_auto.mmd]": 0.13972308300435543, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[variantprioritization.mmd]": 0.033023832365870476, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[wide_fan_in.mmd]": 0.02274995786137879, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[wide_fan_out.mmd]": 0.032293292228132486, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[wide_label_fan.mmd]": 0.007484500063583255, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[with_subworkflows.mmd]": 0.0014547919854521751, + "tests/test_parser_grammar.py::test_every_corpus_file_parses[wrapped_label_trunk.mmd]": 0.018718376057222486, + "tests/test_parser_grammar.py::test_icon_directive_keys_recognised": 0.0022020419128239155, + "tests/test_parser_grammar.py::test_inline_shaped_edge_endpoints_declare_their_nodes": 0.009820833103731275, + "tests/test_parser_grammar.py::test_inline_shaped_edge_mixed_with_bare_endpoint": 0.002551581710577011, + "tests/test_parser_grammar.py::test_invalid_section_direction_warns": 0.0033824583515524864, + "tests/test_parser_grammar.py::test_later_separate_declaration_overrides_inline_label": 0.0017177511472254992, + "tests/test_parser_grammar.py::test_legend_combo_single_id_warns": 0.0024150831159204245, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro compact_offsets: maybe]": 0.002260457957163453, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro file: nolabels]": 0.002164750127121806, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro fold_threshold: abc]": 0.002256125910207629, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro grid: sec | notints]": 0.0070682920049875975, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro grid: sec]": 0.003051667008548975, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro label_angle: abc]": 0.00329045788384974, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro legend_min_height: abc]": 0.0023786667734384537, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro line: b | B | #000 | wiggly]": 0.002387874759733677, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro line: onlyone]": 0.0035231260117143393, + "tests/test_parser_grammar.py::test_malformed_directive_payload_warns[%%metro line_order: sideways]": 0.007566374959424138, + "tests/test_parser_grammar.py::test_marker_legend_without_caption_warns": 0.002591666765511036, + "tests/test_parser_grammar.py::test_multiline_label_converts_backslash_n": 0.0023683339823037386, + "tests/test_parser_grammar.py::test_node_shapes_extract_label[circle]": 0.002477915957570076, + "tests/test_parser_grammar.py::test_node_shapes_extract_label[rhombus]": 0.0019372077658772469, + "tests/test_parser_grammar.py::test_node_shapes_extract_label[round]": 0.0018558751326054335, + "tests/test_parser_grammar.py::test_node_shapes_extract_label[square]": 0.0019351241644471884, + "tests/test_parser_grammar.py::test_node_shapes_extract_label[stadium]": 0.0019935830496251583, + "tests/test_parser_grammar.py::test_node_shapes_extract_label[subroutine]": 0.001876874826848507, + "tests/test_parser_grammar.py::test_non_lr_primary_direction_warns": 0.003548166947439313, + "tests/test_parser_grammar.py::test_plain_comment_is_ignored": 0.007668958976864815, + "tests/test_parser_grammar.py::test_quoted_label_with_parens_is_unquoted": 0.004747374914586544, + "tests/test_parser_grammar.py::test_section_scoped_directive_outside_subgraph_warns": 0.002183041302487254, + "tests/test_parser_grammar.py::test_underscore_node_is_hidden": 0.0020372497383505106, + "tests/test_parser_grammar.py::test_unknown_directive_warns": 0.003010665765032172, + "tests/test_parser_grammar.py::test_unrecognised_line_is_dropped_with_warning": 0.0014981243293732405, + "tests/test_perp_entry_concentric_corner.py::test_perp_entry_bundle_corner_is_concentric[lr_top_entry_cross_column_two_line]": 0.011879249941557646, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corner_radii_anchored_at_floor[lr_perp_bottom_exit_perp_entry]": 0.02121712383814156, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corner_radii_anchored_at_floor[lr_perp_bottom_exit_side_entry]": 0.02674391819164157, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corner_radii_anchored_at_floor[lr_perp_top_exit_perp_entry]": 0.023553125094622374, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corner_radii_anchored_at_floor[lr_perp_top_exit_perp_entry_diverging]": 0.01607483346015215, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corner_radii_anchored_at_floor[lr_perp_top_exit_side_entry]": 0.021022708155214787, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corners_are_concentric_and_unflipped[lr_perp_bottom_exit_perp_entry]": 0.015493915881961584, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corners_are_concentric_and_unflipped[lr_perp_bottom_exit_side_entry]": 0.03224695683456957, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corners_are_concentric_and_unflipped[lr_perp_top_exit_perp_entry]": 0.02343145781196654, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corners_are_concentric_and_unflipped[lr_perp_top_exit_perp_entry_diverging]": 0.024807333946228027, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_corners_are_concentric_and_unflipped[lr_perp_top_exit_side_entry]": 0.030508375028148293, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_routes_are_offset_baked[lr_perp_bottom_exit_perp_entry]": 0.020810291869565845, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_routes_are_offset_baked[lr_perp_bottom_exit_side_entry]": 0.021154958056285977, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_routes_are_offset_baked[lr_perp_top_exit_perp_entry]": 0.0233556239400059, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_routes_are_offset_baked[lr_perp_top_exit_perp_entry_diverging]": 0.021255083149299026, + "tests/test_perp_exit_over_centreline.py::test_perp_exit_over_routes_are_offset_baked[lr_perp_top_exit_side_entry]": 0.016999584855511785, + "tests/test_perp_exit_over_no_overdip.py::test_perp_exit_over_leadin_does_not_dip_below_far_section[cross_column_perp_drop_far_exit]": 0.020185125060379505, + "tests/test_phase_snapshots.py::test_capture_is_noop_when_disabled": 0.6294279170688242, + "tests/test_phase_snapshots.py::test_diff_localises_first_divergent_phase": 1.7222491668071598, + "tests/test_phase_snapshots.py::test_diff_reports_no_divergence_for_identical_runs[examples/rnaseq_auto.mmd]": 0.4052336250897497, + "tests/test_phase_snapshots.py::test_diff_reports_no_divergence_for_identical_runs[examples/rnaseq_sections.mmd]": 1.3853862499818206, + "tests/test_phase_snapshots.py::test_enable_flag_reads_env": 0.0008110844064503908, + "tests/test_phase_snapshots.py::test_snapshots_dont_perturb_layout[examples/rnaseq_auto.mmd]": 0.280327457934618, + "tests/test_phase_snapshots.py::test_snapshots_dont_perturb_layout[examples/rnaseq_sections.mmd]": 1.4161445000208914, + "tests/test_phase_state_registry.py::test_canonical_stage_order_matches_engine_snap_calls": 0.00040295859798789024, + "tests/test_phase_state_registry.py::test_fallback_field_never_raises": 0.00016525015234947205, + "tests/test_phase_state_registry.py::test_no_enforcement_when_validate_inactive": 0.00016279099509119987, + "tests/test_phase_state_registry.py::test_no_unregistered_cross_phase_channel": 0.05515299993567169, + "tests/test_phase_state_registry.py::test_pass_c_bisection_order_is_a_subsequence": 0.0001548738218843937, + "tests/test_phase_state_registry.py::test_read_after_writer_does_not_raise": 0.00017174892127513885, + "tests/test_phase_state_registry.py::test_read_before_writer_raises_under_validation": 0.0002195828128606081, + "tests/test_phase_state_registry.py::test_registered_field_documented_in_contract[_base_y_spacing]": 0.0005762497894465923, + "tests/test_phase_state_registry.py::test_registered_field_documented_in_contract[_consumers_grid_snapped]": 0.0002855430357158184, + "tests/test_phase_state_registry.py::test_registered_field_documented_in_contract[_placement_ref_bbox_top]": 0.0002660001628100872, + "tests/test_phase_state_registry.py::test_registered_field_documented_in_contract[_placement_ref_y]": 0.0002627910580486059, + "tests/test_phase_state_registry.py::test_registered_field_documented_in_contract[_row_y_grid_info]": 0.00027045817114412785, + "tests/test_phase_state_registry.py::test_registered_field_documented_in_contract[_struct_height_below_top]": 0.000243334099650383, + "tests/test_phase_state_registry.py::test_registered_field_documented_in_contract[half_grid_station_ids]": 0.00039725122042000294, + "tests/test_phase_state_registry.py::test_registered_field_is_a_repr_false_dataclass_field[_base_y_spacing]": 0.00023612496443092823, + "tests/test_phase_state_registry.py::test_registered_field_is_a_repr_false_dataclass_field[_consumers_grid_snapped]": 0.00020062481053173542, + "tests/test_phase_state_registry.py::test_registered_field_is_a_repr_false_dataclass_field[_placement_ref_bbox_top]": 0.00019812490791082382, + "tests/test_phase_state_registry.py::test_registered_field_is_a_repr_false_dataclass_field[_placement_ref_y]": 0.00019174907356500626, + "tests/test_phase_state_registry.py::test_registered_field_is_a_repr_false_dataclass_field[_row_y_grid_info]": 0.00019620894454419613, + "tests/test_phase_state_registry.py::test_registered_field_is_a_repr_false_dataclass_field[_struct_height_below_top]": 0.00019700010307133198, + "tests/test_phase_state_registry.py::test_registered_field_is_a_repr_false_dataclass_field[half_grid_station_ids]": 0.00019587506540119648, + "tests/test_phase_state_registry.py::test_registry_keys_match_spec_names": 0.00018658186309039593, + "tests/test_phase_state_registry.py::test_require_writer_fields_have_writer_before_readers[_base_y_spacing]": 0.0002454998902976513, + "tests/test_phase_state_registry.py::test_require_writer_fields_have_writer_before_readers[_consumers_grid_snapped]": 0.0010449986439198256, + "tests/test_phase_state_registry.py::test_require_writer_fields_have_writer_before_readers[_placement_ref_bbox_top]": 0.0002588739152997732, + "tests/test_phase_state_registry.py::test_require_writer_fields_have_writer_before_readers[_placement_ref_y]": 0.00021529081277549267, + "tests/test_phase_state_registry.py::test_require_writer_fields_have_writer_before_readers[_row_y_grid_info]": 0.00020029093138873577, + "tests/test_phase_state_registry.py::test_require_writer_fields_have_writer_before_readers[_struct_height_below_top]": 0.00020741717889904976, + "tests/test_phase_state_registry.py::test_require_writer_fields_have_writer_before_readers[half_grid_station_ids]": 0.00018837489187717438, + "tests/test_phase_state_registry.py::test_run_condition_attr_is_a_graph_field[_base_y_spacing]": 0.0004419158212840557, + "tests/test_phase_state_registry.py::test_run_condition_attr_is_a_graph_field[_consumers_grid_snapped]": 0.00023558293469250202, + "tests/test_phase_state_registry.py::test_run_condition_attr_is_a_graph_field[_placement_ref_bbox_top]": 0.00020191585645079613, + "tests/test_phase_state_registry.py::test_run_condition_attr_is_a_graph_field[_placement_ref_y]": 0.0002502079587429762, + "tests/test_phase_state_registry.py::test_run_condition_attr_is_a_graph_field[_row_y_grid_info]": 0.00020370818674564362, + "tests/test_phase_state_registry.py::test_run_condition_attr_is_a_graph_field[_struct_height_below_top]": 0.00019812374375760555, + "tests/test_phase_state_registry.py::test_run_condition_attr_is_a_graph_field[half_grid_station_ids]": 0.00019999989308416843, + "tests/test_phase_state_registry.py::test_run_condition_skips_check_when_falsy": 0.0001659600529819727, + "tests/test_phase_state_registry.py::test_writer_and_reader_stages_are_known[_base_y_spacing]": 0.0001838328316807747, + "tests/test_phase_state_registry.py::test_writer_and_reader_stages_are_known[_consumers_grid_snapped]": 0.00018699979409575462, + "tests/test_phase_state_registry.py::test_writer_and_reader_stages_are_known[_placement_ref_bbox_top]": 0.0001909160055220127, + "tests/test_phase_state_registry.py::test_writer_and_reader_stages_are_known[_placement_ref_y]": 0.00018154270946979523, + "tests/test_phase_state_registry.py::test_writer_and_reader_stages_are_known[_row_y_grid_info]": 0.0001899171620607376, + "tests/test_phase_state_registry.py::test_writer_and_reader_stages_are_known[_struct_height_below_top]": 0.006184708094224334, + "tests/test_phase_state_registry.py::test_writer_and_reader_stages_are_known[half_grid_station_ids]": 0.0003161670174449682, + "tests/test_placement_stability.py::test_branch_fold_edit_keeps_consumer_forward": 0.06919337506406009, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[aligner_row_pinned_continuation]": 0.17431725026108325, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[around_below_ep_col_gt0]": 0.09688941575586796, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[around_section_below]": 0.13493691594339907, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[asymmetric_tree]": 0.3935373758431524, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bottom_row_climb_clear_corridor]": 0.043830541893839836, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[branch_fold_forward]": 0.22201758180744946, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[branch_fold_stability]": 0.17227141582407057, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bt_chain]": 0.026567333145067096, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bt_exit_top_above]": 0.058941249968484044, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bt_exit_top_above_2line]": 0.065332958009094, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bt_fork]": 0.019652584102004766, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bt_perp_entry_below]": 0.06150962505489588, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bt_to_lr]": 0.07138379197567701, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bt_to_tb]": 0.0635013326536864, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bundle_terminator_continuation]": 0.013279292033985257, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_fan_in_outer_slot]": 0.5077722081914544, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_gap2_rightward_overflow]": 0.1763237500563264, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_label_rake]": 0.10678433207795024, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_label_rake_left]": 0.4838295839726925, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_label_rake_wide]": 0.2333550408948213, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_leftward_far_side_entry]": 0.1424587070941925, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_leftward_overflow]": 0.2487237078603357, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[bypass_v_tight]": 0.07461250107735395, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[clear_channel_target_aware_push]": 0.10479608294554055, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[compact_gap_peer_conflict]": 0.0763686248101294, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[compact_hidden_passthrough]": 0.029031833866611123, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[complex_multipath]": 0.4966471672523767, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[convergence_stacked_sink]": 0.514813750050962, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[convergent_offrow_exit_climb]": 0.8927352079190314, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[corridor_narrow_gap_fallback]": 0.11923350114375353, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[cross_col_top_entry]": 0.05302133411169052, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[cross_column_perp_drop]": 0.04116554092615843, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[cross_column_perp_drop_far_exit]": 0.043937416980043054, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[cross_row_gap_wrap]": 0.30093400087207556, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[deep_linear]": 0.6347515829838812, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[disjoint_sameline_trunks]": 0.03250849898904562, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[divergent_fanout_split]": 0.04488504282198846, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[dogleg_exempt_distinct]": 0.1645742510445416, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[dogleg_exempt_sameline]": 0.0886927091050893, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[dogleg_twoline_fanout]": 0.0976749169640243, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[exit_corner_offset_dogleg]": 0.02865524939261377, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[fan_bypass_nesting]": 0.5765192920807749, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[fan_in_merge]": 0.23387774964794517, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[fold_double]": 2.1128169160801917, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[fold_fan_across]": 1.3831329990644008, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[fold_stacked_branch]": 1.358023334061727, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[funcprofiler_upstream]": 0.45084608416073024, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[header_nudge]": 0.042859291890636086, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[header_side_rotated]": 0.0801938739605248, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[inrow_skip_breeze]": 0.04394524986855686, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[inter_row_wrap_clearance]": 0.07818345911800861, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[interchange_lane_reorder]": 0.026074042078107595, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[junction_entry_align]": 0.2577487917151302, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[junction_entry_collision]": 0.10771291702985764, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[junction_entry_reversed_fold]": 0.13961025094613433, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[junction_fanout_convergence]": 0.39778837631456554, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[left_entry_up_wrap]": 0.09800487523898482, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[left_exit_sink_below]": 0.1305649159476161, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_perp_bottom_exit_perp_entry]": 0.07424049987457693, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_perp_bottom_exit_side_entry]": 0.03146974975243211, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_perp_top_exit_perp_entry]": 0.05597045901231468, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_perp_top_exit_perp_entry_diverging]": 0.08181612519547343, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_perp_top_exit_side_entry]": 0.04574474995024502, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_to_tb_top_cross_col]": 0.2073048755992204, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_to_tb_top_drop]": 0.09411479206755757, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_to_tb_top_drop_two_lines]": 0.0615750418510288, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_to_tb_top_near_vertical]": 0.05417616595514119, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_to_tb_top_two_lines]": 0.08032062603160739, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_top_entry_cross_column]": 0.04949729307554662, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[lr_top_entry_cross_column_two_line]": 0.05452400026842952, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_around_below_leftmost]": 0.23365329182706773, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_bottom_row_bypass]": 0.18734362488612533, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_leftmost_sink_branch]": 0.22409650008194149, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_offrow_continuation]": 0.34120504069142044, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_port_above_approach]": 0.10189974983222783, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_pullaway]": 0.17110091587528586, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_right_entry]": 0.2595772920176387, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_trunk_out_of_range_section]": 0.1158176667522639, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[merge_trunk_over_low_section]": 0.14687441615387797, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[mismatched_tracks]": 0.1282572508789599, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[mixed_bundle_column]": 0.10309204086661339, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[mixed_port_sides]": 0.10013429191894829, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[multi_input_convergence]": 0.05747595918364823, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[multi_line_bundle]": 0.12549429177306592, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[multicarrier_offrow_exit_climb]": 0.4152965422254056, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[near_vertical_junction_hook]": 0.14239350077696145, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[off_track_convergence]": 0.0959787080064416, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[off_track_convergence_multiline]": 0.06266787508502603, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[off_track_input_above_consumer]": 1.3427481250837445, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[parallel_independent]": 0.09710366604849696, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[peeloff_extra_line_consumer]": 0.11155837611295283, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[peeloff_riser_respace]": 0.14080491801723838, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[post_convergence_trunk]": 0.01618137490004301, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[rail_inter_section]": 0.03648541588336229, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[rail_offtrack_fan]": 0.043423958122730255, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[rail_offtrack_io]": 0.02950549917295575, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[rail_offtrack_plain_io]": 0.03742924891412258, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[reconverge_reversed_fold]": 1.5527339577674866, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[right_entry_from_above]": 0.062328541185706854, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[right_entry_from_above_far]": 0.0833009178750217, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[right_entry_gap_above_empty_row]": 0.11037779110483825, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[right_entry_wrap_no_fan]": 0.05144416680559516, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[rl_entry_runway]": 0.09787937486544251, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[rnaseq_lite]": 0.4684860408306122, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[route_around_intervening]": 0.13472070917487144, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[section_diamond]": 0.21113879093900323, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[self_crossing_bridge]": 0.18202941678464413, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[shared_sink_parallel]": 0.6666390001773834, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[single_section]": 0.018571207066997886, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[stacked_left_exit_drop]": 0.04960562475025654, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[stacked_lr_serpentine]": 0.20890895812772214, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[symmetric_diamond_beside_wide_fan]": 0.07654254208318889, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_bottom_entry_flow_start]": 0.04512920998968184, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_bottom_exit_bundle_jog]": 0.08246829127892852, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_bottom_exit_fork_diamond]": 0.13206383306533098, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_column_continuation_two_lines]": 0.07544491603039205, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_convergence_straight_drop]": 0.027188249863684177, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_internal_diagonal]": 0.08170512388460338, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_left_exit_step]": 0.10770424990914762, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_lr_exit_left]": 0.1311700833030045, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_lr_exit_right]": 0.08663024916313589, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_passthrough_continuation]": 0.03444316703826189, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_passthrough_trunk]": 0.08510295790620148, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_perp_exit_side_neighbour]": 0.04198566800914705, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_right_entry_stack]": 0.17296645836904645, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_trunk_through_fan]": 0.03244704217649996, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[tb_two_line_vert_seam]": 0.061913750832900405, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[terminal_symmetric_fan]": 0.05364825017750263, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[terminus_join]": 0.006589875090867281, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[top_entry_header_clash]": 0.05204725009389222, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[trunk_through_fan]": 0.10043291724286973, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[u_turn_fold]": 1.341179334325716, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[uneven_diamond]": 0.008434541057795286, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[upward_bypass]": 0.0486077091190964, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[variant_calling]": 1.5045904167927802, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[wide_fan_in]": 0.22483162605203688, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[wide_fan_out]": 0.6000740840099752, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[wide_label_fan]": 0.049382083117961884, + "tests/test_placement_stability.py::test_intra_section_edit_does_not_regrid_others[wrapped_label_trunk]": 0.013723291223868728, + "tests/test_process_directive.py::test_auto_process_anchors_to_final_segment_not_scope_path": 0.0044781656470149755, + "tests/test_process_directive.py::test_auto_process_derives_id_pattern_for_every_real_station": 0.008882041089236736, + "tests/test_process_directive.py::test_auto_process_explicit_directive_overrides_default": 0.00883529195562005, + "tests/test_process_directive.py::test_auto_process_off_by_default_leaves_mapping_empty": 0.005572416121140122, + "tests/test_process_directive.py::test_process_directive_appends_repeated_patterns": 0.007983750896528363, + "tests/test_process_directive.py::test_process_directive_does_not_change_visual_render": 0.008980333106592298, + "tests/test_process_directive.py::test_process_directive_invalid_regex_warns_and_drops": 0.003294041845947504, + "tests/test_process_directive.py::test_process_directive_malformed_warns": 0.004212208092212677, + "tests/test_process_directive.py::test_process_directive_maps_station": 0.004973457893356681, + "tests/test_process_directive.py::test_process_directive_pattern_keeps_commas": 0.0053735829424113035, + "tests/test_process_directive.py::test_process_directive_unknown_station_warns_and_drops": 0.006024581845849752, + "tests/test_process_directive.py::test_process_scope_absent_keeps_regex_semantics": 0.002396667143329978, + "tests/test_process_directive.py::test_process_scope_disambiguates_same_leaf_under_two_scopes": 0.0069882499519735575, + "tests/test_process_directive.py::test_process_scope_requires_prefix_and_tail": 0.005362501135095954, + "tests/test_process_directive.py::test_process_scope_tolerates_intermediate_nesting": 0.009340584045276046, + "tests/test_process_directive.py::test_process_scope_value_is_literal_not_regex": 0.007399708032608032, + "tests/test_rail_inter_section.py::test_rail_connector_adds_no_avoidable_crossing": 0.009249207563698292, + "tests/test_rail_inter_section.py::test_rail_connector_does_not_backtrack_at_its_ports[one_line]": 0.010928749106824398, + "tests/test_rail_inter_section.py::test_rail_connector_does_not_backtrack_at_its_ports[two_line]": 0.006245125085115433, + "tests/test_rail_mode.py::test_above_rail_label_bottom_right_corner_seats_at_station": 0.02010141732171178, + "tests/test_rail_mode.py::test_angled_label_column_pitch_is_tighter_than_horizontal": 0.04827395873144269, + "tests/test_rail_mode.py::test_angled_rail_labels_do_not_rake_lower_rail_markers": 0.1362489159218967, + "tests/test_rail_mode.py::test_angled_rail_labels_render_rotated": 0.027827458921819925, + "tests/test_rail_mode.py::test_blank_terminus_renders_bar_and_icon_not_interchange": 0.040614000987261534, + "tests/test_rail_mode.py::test_coloured_spanning_interchange_has_light_outline": 0.013407708844169974, + "tests/test_rail_mode.py::test_coloured_subset_interchange_knobs_seat_on_spanned_rails": 0.014837458962574601, + "tests/test_rail_mode.py::test_combo_bundle_sublines_hug_at_one_offset_step": 0.023568582022562623, + "tests/test_rail_mode.py::test_combo_lines_share_one_rail_slot": 0.030267999973148108, + "tests/test_rail_mode.py::test_cross_track_station_knob_spans_the_bundle": 0.028621125034987926, + "tests/test_rail_mode.py::test_diagonal_rail_above_labels_share_a_common_baseline": 0.0315980426967144, + "tests/test_rail_mode.py::test_diagonal_rail_labels_top_rail_above_others_below": 0.014965709066018462, + "tests/test_rail_mode.py::test_diagonal_rail_section_packs_to_graph_pitch_not_label_width": 0.023594792000949383, + "tests/test_rail_mode.py::test_each_line_runs_on_a_single_fixed_rail": 0.03340816707350314, + "tests/test_rail_mode.py::test_flagged_section_gets_rail_spans": 0.12809312483295798, + "tests/test_rail_mode.py::test_global_rail_mode_treats_all_sections_as_rail": 0.0334049160592258, + "tests/test_rail_mode.py::test_interchange_link_uses_station_fill_not_dark_stroke": 0.3060316659975797, + "tests/test_rail_mode.py::test_knob_absent_on_a_rail_the_span_crosses_but_does_not_use": 0.047120916889980435, + "tests/test_rail_mode.py::test_label_angle_default_off_byte_identical": 0.1813635011203587, + "tests/test_rail_mode.py::test_label_angle_directive_parses": 0.029198167147114873, + "tests/test_rail_mode.py::test_legend_combo_default_off_byte_identical": 0.37808691686950624, + "tests/test_rail_mode.py::test_legend_combo_directive_parses": 0.02722041681408882, + "tests/test_rail_mode.py::test_lines_do_not_converge_to_a_point": 0.032930958084762096, + "tests/test_rail_mode.py::test_multi_line_station_span_covers_exactly_its_lines_rails": 0.034935916773974895, + "tests/test_rail_mode.py::test_no_rail_directive_default_off_byte_identical": 0.15817316505126655, + "tests/test_rail_mode.py::test_normal_section_keeps_per_line_tracks_not_rail_spans": 0.06293154181912541, + "tests/test_rail_mode.py::test_normal_section_lines_share_a_trunk": 0.07828374998643994, + "tests/test_rail_mode.py::test_off_track_bundle_feeders_do_not_merge": 0.023590500000864267, + "tests/test_rail_mode.py::test_off_track_input_feeds_in_with_clean_drop_and_elbow": 0.02542429300956428, + "tests/test_rail_mode.py::test_off_track_input_sits_above_the_rails": 0.03435366693884134, + "tests/test_rail_mode.py::test_per_section_rail_validates_and_contains": 0.08494045911356807, + "tests/test_rail_mode.py::test_rail_above_labels_do_not_overlap_section_above": 0.024497749749571085, + "tests/test_rail_mode.py::test_rail_bridge_over_interchange_validates_clean[line_spread]": 0.08160378993488848, + "tests/test_rail_mode.py::test_rail_bridge_over_interchange_validates_clean[rail_marker_subset]": 0.010898709064349532, + "tests/test_rail_mode.py::test_rail_bridge_over_interchange_validates_clean[sarek_metro]": 0.24677966674789786, + "tests/test_rail_mode.py::test_rail_convergence_segments_are_diagonal_not_square": 0.03705129213631153, + "tests/test_rail_mode.py::test_rail_fan_out_diagonal_eases_off_the_shared_input": 0.02888158429414034, + "tests/test_rail_mode.py::test_rail_labels_clear_the_whole_panel_never_beside_a_middle_rail": 0.04379212390631437, + "tests/test_rail_mode.py::test_rail_mode_labels_alternate_above_and_below": 0.03697241563349962, + "tests/test_rail_mode.py::test_rail_mode_off_by_default_leaves_graph_unchanged": 0.7021856249775738, + "tests/test_rail_mode.py::test_rail_mode_parses_directive": 0.03465487598441541, + "tests/test_rail_mode.py::test_rail_mode_stations_within_bbox": 0.036253249971196055, + "tests/test_rail_mode.py::test_rail_one_per_column_guard_catches_a_collision": 0.00027991505339741707, + "tests/test_rail_mode.py::test_rail_pitch_stays_at_base_when_labels_widen_y_spacing": 0.027133208932355046, + "tests/test_rail_mode.py::test_rail_routes_are_straight_horizontal_at_rail_y": 0.025764041813090444, + "tests/test_rail_mode.py::test_rail_section_directive_parses": 0.04819820821285248, + "tests/test_rail_mode.py::test_rail_section_internal_edges_routed_as_straight_rails": 0.10151933203451335, + "tests/test_rail_mode.py::test_rail_station_markers_seat_on_their_rails": 0.01811745809391141, + "tests/test_rail_mode.py::test_rails_are_evenly_spaced_and_distinct": 0.03410820779390633, + "tests/test_rail_mode.py::test_rails_place_one_station_per_column_on_sarek": 0.16342179104685783, + "tests/test_rail_mode.py::test_single_rail_marker_glyph_seats_on_its_rail": 0.05049683363176882, + "tests/test_rail_mode.py::test_spanning_rail_station_marker_tints_interchange": 0.011642750818282366, + "tests/test_rail_mode.py::test_spanning_station_draws_one_circle_per_used_rail_plus_connector": 0.04704691586084664, + "tests/test_rail_mode.py::test_spread_residual_drops_rail_section_overlaps": 0.01380716566927731, + "tests/test_rail_mode.py::test_stacked_rail_section_bbox_contains_hanging_labels": 0.02136770822107792, + "tests/test_rail_mode.py::test_stacked_sections_do_not_overlap": 0.04240779113024473, + "tests/test_rail_offtrack_centreline.py::test_rail_offtrack_elbow_clears_floor[rail_mode-1]": 0.025043207919225097, + "tests/test_rail_offtrack_centreline.py::test_rail_offtrack_elbow_clears_floor[rail_offtrack_fan-2]": 0.009602542035281658, + "tests/test_rail_offtrack_centreline.py::test_rail_offtrack_render_is_clean[rail_mode]": 0.22785020805895329, + "tests/test_rail_offtrack_centreline.py::test_rail_offtrack_render_is_clean[rail_offtrack_fan]": 0.021723125828430057, + "tests/test_rail_offtrack_io.py::test_offtrack_file_terminus_has_buffer_stop_nub[rail_mode-samples_csv]": 0.0636079569812864, + "tests/test_rail_offtrack_io.py::test_offtrack_file_terminus_has_buffer_stop_nub[rail_offtrack_fan-meta_csv]": 0.014510957058519125, + "tests/test_rail_offtrack_io.py::test_offtrack_file_terminus_has_buffer_stop_nub[rail_offtrack_fan-report_csv]": 0.018478374695405364, + "tests/test_rail_offtrack_io.py::test_offtrack_file_terminus_has_buffer_stop_nub[rail_offtrack_io-aux_in]": 0.016276834066957235, + "tests/test_rail_offtrack_io.py::test_offtrack_file_terminus_has_buffer_stop_nub[rail_offtrack_io-side_out]": 0.01963283191435039, + "tests/test_rail_offtrack_io.py::test_offtrack_file_terminus_nub_clears_caption": 0.019445875892415643, + "tests/test_rail_offtrack_io.py::test_plain_offtrack_input_label_does_not_overlap": 0.009286416927352548, + "tests/test_rail_offtrack_io.py::test_plain_offtrack_node_renders_marker[aux]": 0.020171792712062597, + "tests/test_rail_offtrack_io.py::test_plain_offtrack_node_renders_marker[qc]": 0.011503416113555431, + "tests/test_reconverge_reversed_fold.py::test_bottom_exit_descent_keeps_rna_atac_tight": 0.36689829104579985, + "tests/test_reconverge_reversed_fold.py::test_final_report_bundle_is_top_anchored": 0.10802016616798937, + "tests/test_reconverge_reversed_fold.py::test_integration_entry_orders_bundle_by_feeder_row": 0.1573912501335144, + "tests/test_reconverge_reversed_fold.py::test_integration_merge_in_is_concentric": 0.11792329116724432, + "tests/test_reconverge_reversed_fold.py::test_preprocessing_fanout_has_no_corner_crossing": 0.15905675012618303, + "tests/test_reconverge_reversed_fold.py::test_return_row_back_run_is_axis_aligned": 0.1378951680380851, + "tests/test_reconverge_reversed_fold.py::test_return_row_drops_off_top_slot_with_forward_order": 0.11709999991580844, + "tests/test_reconverge_reversed_fold.py::test_vertical_fan_crosses_without_peel_order": 0.1556554171256721, + "tests/test_reconverge_reversed_fold.py::test_vertical_fan_peel_order_follows_target_rows": 0.24721241602674127, + "tests/test_render.py::test_caption_font_smaller_than_label_font": 0.004892749944701791, + "tests/test_render.py::test_default_render_retains_fixed_dimensions": 0.01890325010754168, + "tests/test_render.py::test_file_icon_banner_option": 0.010765915969386697, + "tests/test_render.py::test_file_icon_no_banner_by_default": 0.0035795830190181732, + "tests/test_render.py::test_font_scale_default_is_noop": 0.022023582831025124, + "tests/test_render.py::test_font_scale_multiplies_all_text_sizes": 0.03956791711971164, + "tests/test_render.py::test_font_scale_widens_label_driven_layout": 0.028767792275175452, + "tests/test_render.py::test_icon_label_wrap_keeps_separators": 0.000196083914488554, + "tests/test_render.py::test_label_angle_default_no_rotate": 0.01989983208477497, + "tests/test_render.py::test_label_angle_emits_rotate_transform": 0.003992832964286208, + "tests/test_render.py::test_label_halo_color_honours_explicit_colour": 0.00017008441500365734, + "tests/test_render.py::test_label_halo_color_resolves_to_opaque_background": 0.0001788749359548092, + "tests/test_render.py::test_label_halo_color_resolves_to_white_on_transparent_theme": 0.00017291703261435032, + "tests/test_render.py::test_label_halo_disabled_by_none_colour": 0.00017062504775822163, + "tests/test_render.py::test_label_halo_disabled_by_zero_width": 0.00016225012950599194, + "tests/test_render.py::test_label_halo_emits_aria_hidden_backing_copy": 0.008557709865272045, + "tests/test_render.py::test_label_halo_suppressed_when_disabled": 0.005556249991059303, + "tests/test_render.py::test_legend_logo_gap_default_is_logo_gap": 0.0026798746548593044, + "tests/test_render.py::test_legend_logo_gap_widens_block": 0.004360500955954194, + "tests/test_render.py::test_legend_min_height_enlarges_legend": 0.004120498895645142, + "tests/test_render.py::test_logo_scale_default_no_change": 0.0032519169617444277, + "tests/test_render.py::test_logo_scale_enlarges_bundled_logo": 0.004052583826705813, + "tests/test_render.py::test_render_caption_appears_in_svg": 0.007132083177566528, + "tests/test_render.py::test_render_contains_line_color": 0.008073542034253478, + "tests/test_render.py::test_render_contains_station_labels": 0.004470874089747667, + "tests/test_render.py::test_render_contains_title": 0.003976417239755392, + "tests/test_render.py::test_render_dashed_line_has_dasharray": 0.0053716241382062435, + "tests/test_render.py::test_render_dotted_line_has_dasharray": 0.017902999185025692, + "tests/test_render.py::test_render_empty_graph": 0.0008932920172810555, + "tests/test_render.py::test_render_file_icon_no_name_no_caption": 0.005105748772621155, + "tests/test_render.py::test_render_file_icon_with_name_caption": 0.005140833090990782, + "tests/test_render.py::test_render_file_size": 0.015605248976498842, + "tests/test_render.py::test_render_files_icon": 0.007728666998445988, + "tests/test_render.py::test_render_first_class_sections": 0.028252748772501945, + "tests/test_render.py::test_render_folder_icon": 0.00737033411860466, + "tests/test_render.py::test_render_group_band_stays_inside_section_box": 0.0061687082052230835, + "tests/test_render.py::test_render_group_label_caption_and_underline": 0.009420292684808373, + "tests/test_render.py::test_render_icon_type_guide_fixtures": 0.09779549995437264, + "tests/test_render.py::test_render_legend": 0.005803416948765516, + "tests/test_render.py::test_render_light_theme": 0.01228420902043581, + "tests/test_render.py::test_render_mixed_icon_types": 0.009145249845460057, + "tests/test_render.py::test_render_multi_icon_fixture": 0.03292670799419284, + "tests/test_render.py::test_render_multiline_labels": 0.011256373953074217, + "tests/test_render.py::test_render_multiple_file_icons": 0.01035120920278132, + "tests/test_render.py::test_render_nfcore_theme_background": 0.0042455000802874565, + "tests/test_render.py::test_render_no_caption_by_default": 0.010322042042389512, + "tests/test_render.py::test_render_produces_valid_svg": 0.005258956924080849, + "tests/test_render.py::test_render_rnaseq_sections_example": 0.686164665967226, + "tests/test_render.py::test_render_sections_no_port_labels": 0.015792957972735167, + "tests/test_render.py::test_render_seqera_theme": 0.003417291911318898, + "tests/test_render.py::test_render_single_file_icon": 0.009532333118841052, + "tests/test_render.py::test_render_solid_line_no_dasharray": 0.013596164993941784, + "tests/test_render.py::test_render_tb_section_file_icon_below_station": 0.010447873966768384, + "tests/test_render.py::test_render_tb_terminus_pill_is_horizontal": 0.005517791956663132, + "tests/test_render.py::test_responsive_render_has_viewbox_and_aspect_ratio": 0.0035690420772880316, + "tests/test_render.py::test_responsive_render_omits_fixed_dimensions": 0.004276999970898032, + "tests/test_render.py::test_standalone_nodes_render_as_unlinked_labels": 0.006229124031960964, + "tests/test_render.py::test_terminus_icons_bt_mirror_tb": 0.0005341260693967342, + "tests/test_render.py::test_terminus_icons_lr_march_along_x": 0.00021462514996528625, + "tests/test_render.py::test_terminus_icons_rl_mirror_lr": 0.00045625120401382446, + "tests/test_render.py::test_terminus_icons_tb_march_along_y": 0.0007943748496472836, + "tests/test_render.py::test_wide_file_icon_label_wraps_within_icon_width": 0.006150625180453062, + "tests/test_render_layout_invariants.py::test_authoring_guards_are_excluded_from_chokepoint": 0.00019354070536792278, + "tests/test_render_layout_invariants.py::test_away_facing_exit_renders_without_wrap_warning[examples-variant_calling_tuned.mmd-8]": 0.08409704198129475, + "tests/test_render_layout_invariants.py::test_away_facing_exit_renders_without_wrap_warning[regressions-away_exit_wrap_interior_left.mmd-None]": 0.016988999908789992, + "tests/test_render_layout_invariants.py::test_away_facing_exit_renders_without_wrap_warning[regressions-away_exit_wrap_interior_right.mmd-None]": 0.02631808421574533, + "tests/test_render_layout_invariants.py::test_away_facing_exit_routes_around_own_section[examples-variant_calling_tuned.mmd-8]": 0.08222491806373, + "tests/test_render_layout_invariants.py::test_away_facing_exit_routes_around_own_section[regressions-away_exit_wrap_interior_left.mmd-None]": 0.018433166202157736, + "tests/test_render_layout_invariants.py::test_away_facing_exit_routes_around_own_section[regressions-away_exit_wrap_interior_right.mmd-None]": 0.01722912397235632, + "tests/test_render_layout_invariants.py::test_backtrack_guards_on_render_path[_guard_inter_section_route_clears_own_section_interior]": 0.001676000189036131, + "tests/test_render_layout_invariants.py::test_backtrack_guards_on_render_path[_guard_inter_section_route_no_backtrack]": 0.00022554094903171062, + "tests/test_render_layout_invariants.py::test_backtrack_guards_on_render_path[_guard_inter_section_route_no_full_width_backtrack]": 0.00020108278840780258, + "tests/test_render_layout_invariants.py::test_backtrack_guards_on_render_path[_guard_serpentine_no_backtrack]": 0.0012806258164346218, + "tests/test_render_layout_invariants.py::test_branch_fold_repro_lays_out_forward[rnaseq_branch_fold_wrap.mmd]": 1.2784016251098365, + "tests/test_render_layout_invariants.py::test_branch_fold_repro_renders_without_wrap[rnaseq_branch_fold_wrap.mmd]": 1.0413167078513652, + "tests/test_render_layout_invariants.py::test_chokepoint_is_observational[rnaseq_auto.mmd]": 0.09717175015248358, + "tests/test_render_layout_invariants.py::test_chokepoint_is_observational[rnaseq_sections.mmd]": 0.6240155829582363, + "tests/test_render_layout_invariants.py::test_chokepoint_is_observational[sarek_metro.mmd]": 0.1674154989887029, + "tests/test_render_layout_invariants.py::test_chokepoint_is_observational[variant_calling.mmd]": 0.038890500320121646, + "tests/test_render_layout_invariants.py::test_chokepoint_runs_the_migrated_bbox_guard": 0.00017062504775822163, + "tests/test_render_layout_invariants.py::test_clean_fixture_emits_no_layout_invariant_warning[rnaseq_auto.mmd]": 0.18748800014145672, + "tests/test_render_layout_invariants.py::test_clean_fixture_emits_no_layout_invariant_warning[rnaseq_sections.mmd]": 0.5639357499312609, + "tests/test_render_layout_invariants.py::test_clean_fixture_emits_no_layout_invariant_warning[sarek_metro.mmd]": 0.5342022909317166, + "tests/test_render_layout_invariants.py::test_clean_fixture_emits_no_layout_invariant_warning[variant_calling.mmd]": 0.06286591617390513, + "tests/test_render_layout_invariants.py::test_injected_violation_raises_under_strict[rnaseq_auto.mmd]": 0.17318854201585054, + "tests/test_render_layout_invariants.py::test_injected_violation_raises_under_strict[rnaseq_sections.mmd]": 0.6790794169064611, + "tests/test_render_layout_invariants.py::test_injected_violation_raises_under_strict[sarek_metro.mmd]": 0.5833834579680115, + "tests/test_render_layout_invariants.py::test_injected_violation_raises_under_strict[variant_calling.mmd]": 0.05033808387815952, + "tests/test_render_layout_invariants.py::test_injected_violation_warns_by_default[rnaseq_auto.mmd]": 0.17242379114031792, + "tests/test_render_layout_invariants.py::test_injected_violation_warns_by_default[rnaseq_sections.mmd]": 0.8141587502323091, + "tests/test_render_layout_invariants.py::test_injected_violation_warns_by_default[sarek_metro.mmd]": 0.32637416711077094, + "tests/test_render_layout_invariants.py::test_injected_violation_warns_by_default[variant_calling.mmd]": 0.07361541804857552, + "tests/test_render_layout_invariants.py::test_interior_wrap_guard_fires_on_an_injected_crossing": 0.022763248765841126, + "tests/test_render_layout_invariants.py::test_strict_error_is_a_phase_invariant_error": 0.00021812482737004757, + "tests/test_render_validate.py::test_carried_line_overlap_is_exempt": 0.15796304191462696, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[centered_tracks.mmd]": 0.013022250030189753, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[cross_track_interchange.mmd]": 0.011598874814808369, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[diagonal_labels.mmd]": 0.04832312511280179, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[differentialabundance.mmd]": 0.14609112520702183, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[differentialabundance_default.mmd]": 0.15865908283740282, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[directional_flow.mmd]": 0.008149624103680253, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[disconnected_components.mmd]": 0.004511082777753472, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[epitopeprediction.mmd]": 0.03703370806761086, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[file_icons.mmd]": 0.0068053752183914185, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[genomeassembly.mmd]": 0.024973333813250065, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[genomeassembly_staggered.mmd]": 0.023192290915176272, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[genomic_pipeline.mmd]": 0.3427011240273714, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[group_labels.mmd]": 0.007843249011784792, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[hlatyping.mmd]": 0.011379166971892118, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[legend_combo.mmd]": 0.004261042689904571, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[legend_logo_placement.mmd]": 0.009368249913677573, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[line_spread.mmd]": 0.01315016602165997, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[longread_variant_calling.mmd]": 0.05614412506110966, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[marker_styles.mmd]": 0.0038206251338124275, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[off_track_outputs.mmd]": 0.004666124936193228, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[rail_mode.mmd]": 0.011537209153175354, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[rail_section.mmd]": 0.01663925009779632, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[rnaseq_auto.mmd]": 0.0473378743045032, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[rnaseq_sections.mmd]": 0.2087882508058101, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[rnaseq_sections_manual.mmd]": 0.20157308294437826, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[sarek_metro.mmd]": 0.09429495898075402, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[simple_pipeline.mmd]": 0.006480416981503367, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[tb_file_termini.mmd]": 0.008352667093276978, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/aligner_row_pinned_continuation.mmd]": 0.014745415886864066, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/around_below_ep_col_gt0.mmd]": 0.018183582928031683, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/around_section_below.mmd]": 0.0101211650762707, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/asymmetric_tree.mmd]": 0.012667999370023608, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bottom_row_climb_clear_corridor.mmd]": 0.005586917046457529, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/branch_fold_forward.mmd]": 0.01023408304899931, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/branch_fold_stability.mmd]": 0.004902332788333297, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bt_chain.mmd]": 0.0040377911645919085, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bt_exit_top_above.mmd]": 0.003312832908704877, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bt_exit_top_above_2line.mmd]": 0.0052401660941541195, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bt_fork.mmd]": 0.0018239160999655724, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bt_perp_entry_below.mmd]": 0.004141834797337651, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bt_to_lr.mmd]": 0.0045559999998658895, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bt_to_tb.mmd]": 0.00246045901440084, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bundle_terminator_continuation.mmd]": 0.0018092510290443897, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_fan_in_outer_slot.mmd]": 0.06767095811665058, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_gap2_rightward_overflow.mmd]": 0.03150725062005222, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_label_rake.mmd]": 0.008655584184452891, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_label_rake_left.mmd]": 0.013410499785095453, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_label_rake_wide.mmd]": 0.005099916132166982, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_leftward_far_side_entry.mmd]": 0.008132500108331442, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_leftward_overflow.mmd]": 0.014485793188214302, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/bypass_v_tight.mmd]": 0.007610416039824486, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/clear_channel_target_aware_push.mmd]": 0.009531751042231917, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/compact_gap_peer_conflict.mmd]": 0.009699583984911442, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/compact_hidden_passthrough.mmd]": 0.010121332947164774, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/complex_multipath.mmd]": 0.023774125147610903, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/convergence_stacked_sink.mmd]": 0.008854125160723925, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/convergent_offrow_exit_climb.mmd]": 0.057703373953700066, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/corridor_narrow_gap_fallback.mmd]": 0.009458375861868262, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/cross_col_top_entry.mmd]": 0.0022696249652653933, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/cross_column_perp_drop.mmd]": 0.0022552083246409893, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0020928746089339256, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/cross_row_gap_wrap.mmd]": 0.0139575838111341, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/deep_linear.mmd]": 0.015355082228779793, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/disjoint_sameline_trunks.mmd]": 0.005598708987236023, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/divergent_fanout_split.mmd]": 0.008500625379383564, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/dogleg_exempt_distinct.mmd]": 0.004357125144451857, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/dogleg_exempt_sameline.mmd]": 0.010560625931248069, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/dogleg_twoline_fanout.mmd]": 0.0035107091534882784, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/exit_corner_offset_dogleg.mmd]": 0.012430750066414475, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/fan_bypass_nesting.mmd]": 0.015299957944080234, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/fan_in_merge.mmd]": 0.013769373763352633, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/fold_double.mmd]": 0.12268570833839476, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/fold_fan_across.mmd]": 0.0686145001091063, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/fold_stacked_branch.mmd]": 0.05882399925030768, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/funcprofiler_upstream.mmd]": 0.039180542109534144, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/header_nudge.mmd]": 0.0021900010760873556, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/header_side_rotated.mmd]": 0.007572918199002743, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/inrow_skip_breeze.mmd]": 0.001780166756361723, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/inter_row_wrap_clearance.mmd]": 0.005035292822867632, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/interchange_lane_reorder.mmd]": 0.003292832989245653, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/junction_entry_align.mmd]": 0.007419168017804623, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/junction_entry_collision.mmd]": 0.01734066614881158, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/junction_entry_reversed_fold.mmd]": 0.010434916010126472, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/junction_fanout_convergence.mmd]": 0.0036615009885281324, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/left_entry_up_wrap.mmd]": 0.005897209281101823, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/left_exit_sink_below.mmd]": 0.008160832803696394, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.006250875070691109, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.004481791984289885, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.007269707042723894, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.0034051239490509033, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0028397501446306705, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_to_tb_top_cross_col.mmd]": 0.0031345831230282784, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_to_tb_top_drop.mmd]": 0.0051226248033344746, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.002798707690089941, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0019469591788947582, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_to_tb_top_two_lines.mmd]": 0.004691125126555562, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_top_entry_cross_column.mmd]": 0.005654333624988794, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.004162000259384513, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_around_below_leftmost.mmd]": 0.005680917063727975, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_bottom_row_bypass.mmd]": 0.007031749933958054, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_leftmost_sink_branch.mmd]": 0.006015875143930316, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_offrow_continuation.mmd]": 0.006425541127100587, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_port_above_approach.mmd]": 0.00731708318926394, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_pullaway.mmd]": 0.009940750198438764, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_right_entry.mmd]": 0.0052984587382525206, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_trunk_out_of_range_section.mmd]": 0.007464749971404672, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/merge_trunk_over_low_section.mmd]": 0.007573667215183377, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/mismatched_tracks.mmd]": 0.01765783317387104, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/mixed_bundle_column.mmd]": 0.03147570905275643, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/mixed_port_sides.mmd]": 0.003826373955234885, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/multi_input_convergence.mmd]": 0.004061291925609112, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/multi_line_bundle.mmd]": 0.01084183412604034, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/multicarrier_offrow_exit_climb.mmd]": 0.0186900831758976, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/near_vertical_junction_hook.mmd]": 0.010885998839512467, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/off_track_convergence.mmd]": 0.011145042022690177, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/off_track_convergence_multiline.mmd]": 0.02312379190698266, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/off_track_input_above_consumer.mmd]": 0.03164104092866182, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/parallel_independent.mmd]": 0.0034207080025225878, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/peeloff_extra_line_consumer.mmd]": 0.009973833337426186, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/peeloff_riser_respace.mmd]": 0.010120167164131999, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/post_convergence_trunk.mmd]": 0.010503958212211728, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/rail_inter_section.mmd]": 0.0037483759224414825, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/rail_offtrack_fan.mmd]": 0.0041856239549815655, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/rail_offtrack_io.mmd]": 0.0033798750955611467, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/rail_offtrack_plain_io.mmd]": 0.00339120882563293, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/reconverge_reversed_fold.mmd]": 0.06642762571573257, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/right_entry_from_above.mmd]": 0.0021073338575661182, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/right_entry_from_above_far.mmd]": 0.00616166484542191, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/right_entry_gap_above_empty_row.mmd]": 0.0028103331569582224, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/right_entry_wrap_no_fan.mmd]": 0.0020014590118080378, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/rl_entry_runway.mmd]": 0.0031438751611858606, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/rnaseq_lite.mmd]": 0.04283220786601305, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/route_around_intervening.mmd]": 0.07054783380590379, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/section_diamond.mmd]": 0.03181916614994407, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/self_crossing_bridge.mmd]": 0.0075220821890980005, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/shared_sink_parallel.mmd]": 0.02359529212117195, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/single_section.mmd]": 0.0015359579119831324, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/stacked_left_exit_drop.mmd]": 0.005692541832104325, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/stacked_lr_serpentine.mmd]": 0.008810958126559854, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.02658245782367885, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_bottom_entry_flow_start.mmd]": 0.0021749569568783045, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.0038625418674200773, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.004229249898344278, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_column_continuation_two_lines.mmd]": 0.003862374695017934, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_convergence_straight_drop.mmd]": 0.0021348330192267895, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_internal_diagonal.mmd]": 0.022310292115435004, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_left_exit_step.mmd]": 0.010096207028254867, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_lr_exit_left.mmd]": 0.0056104580871760845, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_lr_exit_right.mmd]": 0.006475082831457257, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_passthrough_continuation.mmd]": 0.002033251104876399, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_passthrough_trunk.mmd]": 0.0035236249677836895, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0016687489114701748, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_right_entry_stack.mmd]": 0.0037519182078540325, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_trunk_through_fan.mmd]": 0.007343709003180265, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/tb_two_line_vert_seam.mmd]": 0.0026877911295741796, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/terminal_symmetric_fan.mmd]": 0.0038498740177601576, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/terminus_join.mmd]": 0.0014251251704990864, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/top_entry_header_clash.mmd]": 0.0024856659583747387, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/trunk_through_fan.mmd]": 0.004478583112359047, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/u_turn_fold.mmd]": 0.045240625040605664, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/uneven_diamond.mmd]": 0.004839667351916432, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/upward_bypass.mmd]": 0.022547418018803, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/variant_calling.mmd]": 0.09243550011888146, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/wide_fan_in.mmd]": 0.009996209060773253, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/wide_fan_out.mmd]": 0.006969916867092252, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/wide_label_fan.mmd]": 0.0023902487009763718, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[topologies/wrapped_label_trunk.mmd]": 0.0038133321795612574, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[variant_calling.mmd]": 0.011139874113723636, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[variant_calling_tuned.mmd]": 0.01654558372683823, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[variantbenchmarking.mmd]": 0.10049366601742804, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[variantbenchmarking_auto.mmd]": 0.10768533311784267, + "tests/test_render_validate.py::test_clean_corpus_has_no_label_strike[variantprioritization.mmd]": 0.015214957995340228, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[centered_tracks.mmd]": 0.004567124880850315, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[cross_track_interchange.mmd]": 0.00815899996086955, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[diagonal_labels.mmd]": 0.01584345893934369, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[differentialabundance.mmd]": 0.14323479193262756, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[differentialabundance_default.mmd]": 0.09713754244148731, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[directional_flow.mmd]": 0.005551167298108339, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[disconnected_components.mmd]": 0.012535958085209131, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[epitopeprediction.mmd]": 0.028677250258624554, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[file_icons.mmd]": 0.007381250150501728, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[genomeassembly.mmd]": 0.020903166150674224, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[genomeassembly_staggered.mmd]": 0.023537375032901764, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[genomic_pipeline.mmd]": 0.4102495419792831, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[group_labels.mmd]": 0.0032118752133101225, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[hlatyping.mmd]": 0.008127916138619184, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[legend_combo.mmd]": 0.0027555408887565136, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[legend_logo_placement.mmd]": 0.03602745896205306, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[line_spread.mmd]": 0.017320998944342136, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[longread_variant_calling.mmd]": 0.048761208076030016, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[marker_styles.mmd]": 0.008725999156013131, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[off_track_outputs.mmd]": 0.00856079114601016, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[rail_mode.mmd]": 0.016079833963885903, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[rail_section.mmd]": 0.015305082080885768, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[rnaseq_auto.mmd]": 0.09065641602501273, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[rnaseq_sections.mmd]": 0.4818948341999203, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[rnaseq_sections_manual.mmd]": 0.114290667232126, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[sarek_metro.mmd]": 0.058648375095799565, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[simple_pipeline.mmd]": 0.0043447487987577915, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[tb_file_termini.mmd]": 0.006774249952286482, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/aligner_row_pinned_continuation.mmd]": 0.018992333905771375, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/around_below_ep_col_gt0.mmd]": 0.005384875927120447, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/around_section_below.mmd]": 0.003828624030575156, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/asymmetric_tree.mmd]": 0.018030458129942417, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bottom_row_climb_clear_corridor.mmd]": 0.004273749887943268, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/branch_fold_forward.mmd]": 0.00645008310675621, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/branch_fold_stability.mmd]": 0.01670608320273459, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bt_chain.mmd]": 0.0015382091514766216, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bt_exit_top_above.mmd]": 0.0018526259809732437, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bt_exit_top_above_2line.mmd]": 0.002169917104765773, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bt_fork.mmd]": 0.01417687488719821, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bt_perp_entry_below.mmd]": 0.005268292035907507, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bt_to_lr.mmd]": 0.00254212599247694, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bt_to_tb.mmd]": 0.0022171258460730314, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bundle_terminator_continuation.mmd]": 0.0014271647669374943, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_fan_in_outer_slot.mmd]": 0.035222374834120274, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_gap2_rightward_overflow.mmd]": 0.024667583173140883, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_label_rake.mmd]": 0.005110082915052772, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_label_rake_left.mmd]": 0.009203166235238314, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_label_rake_wide.mmd]": 0.004989584209397435, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_leftward_far_side_entry.mmd]": 0.02078316593542695, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_leftward_overflow.mmd]": 0.012029248988255858, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/bypass_v_tight.mmd]": 0.002917625941336155, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/clear_channel_target_aware_push.mmd]": 0.011791917262598872, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/compact_gap_peer_conflict.mmd]": 0.006793248932808638, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/compact_hidden_passthrough.mmd]": 0.0031922082416713238, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/complex_multipath.mmd]": 0.027735666139051318, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/convergence_stacked_sink.mmd]": 0.02008350007236004, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/convergent_offrow_exit_climb.mmd]": 0.11762829078361392, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/corridor_narrow_gap_fallback.mmd]": 0.011188582982867956, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/cross_col_top_entry.mmd]": 0.002474624663591385, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/cross_column_perp_drop.mmd]": 0.025060457875952125, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0038166246376931667, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/cross_row_gap_wrap.mmd]": 0.011924167163670063, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/deep_linear.mmd]": 0.029560790862888098, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/disjoint_sameline_trunks.mmd]": 0.005952040897682309, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/divergent_fanout_split.mmd]": 0.002642417326569557, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/dogleg_exempt_distinct.mmd]": 0.007389416918158531, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/dogleg_exempt_sameline.mmd]": 0.0031805422622710466, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/dogleg_twoline_fanout.mmd]": 0.003599083051085472, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/exit_corner_offset_dogleg.mmd]": 0.0037503333296626806, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/fan_bypass_nesting.mmd]": 0.033194666262716055, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/fan_in_merge.mmd]": 0.01217079209163785, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/fold_double.mmd]": 0.11700683296658099, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/fold_fan_across.mmd]": 0.04503649938851595, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/fold_stacked_branch.mmd]": 0.054278416093438864, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/funcprofiler_upstream.mmd]": 0.0499109155498445, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/header_nudge.mmd]": 0.005684040952473879, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/header_side_rotated.mmd]": 0.0027349572628736496, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/inrow_skip_breeze.mmd]": 0.005809708032757044, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/inter_row_wrap_clearance.mmd]": 0.0076979591976851225, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/interchange_lane_reorder.mmd]": 0.0023583751171827316, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/junction_entry_align.mmd]": 0.011190333403646946, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/junction_entry_collision.mmd]": 0.016843041172251105, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/junction_entry_reversed_fold.mmd]": 0.011035417206585407, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/junction_fanout_convergence.mmd]": 0.00525233312509954, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/left_entry_up_wrap.mmd]": 0.0047880420461297035, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/left_exit_sink_below.mmd]": 0.010758416261523962, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.006671166978776455, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.016224623657763004, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.04545775009319186, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.005842123180627823, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_perp_top_exit_side_entry.mmd]": 0.013121749041602015, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_to_tb_top_cross_col.mmd]": 0.007606499828398228, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_to_tb_top_drop.mmd]": 0.003376750275492668, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0024740411899983883, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_to_tb_top_near_vertical.mmd]": 0.004290333017706871, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_to_tb_top_two_lines.mmd]": 0.007137376349419355, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_top_entry_cross_column.mmd]": 0.0025281261187046766, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.002856374951079488, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_around_below_leftmost.mmd]": 0.07511912588961422, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_bottom_row_bypass.mmd]": 0.025759709300473332, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_leftmost_sink_branch.mmd]": 0.013418291928246617, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_offrow_continuation.mmd]": 0.003868834115564823, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_port_above_approach.mmd]": 0.007201918167993426, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_pullaway.mmd]": 0.005298292264342308, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_right_entry.mmd]": 0.011769793462008238, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_trunk_out_of_range_section.mmd]": 0.017168167047202587, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/merge_trunk_over_low_section.mmd]": 0.01365354098379612, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/mismatched_tracks.mmd]": 0.0064046247862279415, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/mixed_bundle_column.mmd]": 0.00821779202669859, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/mixed_port_sides.mmd]": 0.003071208018809557, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/multi_input_convergence.mmd]": 0.019133833004161716, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/multi_line_bundle.mmd]": 0.011602208251133561, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/multicarrier_offrow_exit_climb.mmd]": 0.009366374695673585, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/near_vertical_junction_hook.mmd]": 0.005897793220356107, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/off_track_convergence.mmd]": 0.00404745782725513, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/off_track_convergence_multiline.mmd]": 0.014718957711011171, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/off_track_input_above_consumer.mmd]": 0.05846625007688999, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/parallel_independent.mmd]": 0.00710024987347424, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/peeloff_extra_line_consumer.mmd]": 0.012914416147395968, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/peeloff_riser_respace.mmd]": 0.010982041945680976, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/post_convergence_trunk.mmd]": 0.003301916178315878, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/rail_inter_section.mmd]": 0.0026626246981322765, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/rail_offtrack_fan.mmd]": 0.004005917115136981, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/rail_offtrack_io.mmd]": 0.002700624754652381, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/rail_offtrack_plain_io.mmd]": 0.002949874848127365, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/reconverge_reversed_fold.mmd]": 0.07179708406329155, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/right_entry_from_above.mmd]": 0.002225042087957263, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/right_entry_from_above_far.mmd]": 0.006344332825392485, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/right_entry_gap_above_empty_row.mmd]": 0.00420179171487689, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/right_entry_wrap_no_fan.mmd]": 0.001990668009966612, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/rl_entry_runway.mmd]": 0.003209874965250492, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/rnaseq_lite.mmd]": 0.028927167179062963, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/route_around_intervening.mmd]": 0.007634791312739253, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/section_diamond.mmd]": 0.006326250033453107, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/self_crossing_bridge.mmd]": 0.003331082873046398, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/shared_sink_parallel.mmd]": 0.024082374991849065, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/single_section.mmd]": 0.006237874971702695, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/stacked_left_exit_drop.mmd]": 0.0037780001293867826, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/stacked_lr_serpentine.mmd]": 0.013178500114008784, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.03380391816608608, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_bottom_entry_flow_start.mmd]": 0.0074982920195907354, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.00915370904840529, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.006537665845826268, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_column_continuation_two_lines.mmd]": 0.002307209186255932, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_convergence_straight_drop.mmd]": 0.00142858293838799, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_internal_diagonal.mmd]": 0.008964332984760404, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_left_exit_step.mmd]": 0.005907958140596747, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_lr_exit_left.mmd]": 0.003816956887021661, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_lr_exit_right.mmd]": 0.0034716674126684666, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_passthrough_continuation.mmd]": 0.0018928330391645432, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_passthrough_trunk.mmd]": 0.0034045421052724123, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0023548731114715338, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_right_entry_stack.mmd]": 0.0060231240931898355, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_trunk_through_fan.mmd]": 0.001908332109451294, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/tb_two_line_vert_seam.mmd]": 0.004803373944014311, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/terminal_symmetric_fan.mmd]": 0.010936082107946277, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/terminus_join.mmd]": 0.002743375953286886, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/top_entry_header_clash.mmd]": 0.0019724576268345118, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/trunk_through_fan.mmd]": 0.006179291056469083, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/u_turn_fold.mmd]": 0.030506416922435164, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/uneven_diamond.mmd]": 0.0024861241690814495, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/upward_bypass.mmd]": 0.018771124072372913, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/variant_calling.mmd]": 0.03368012490682304, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/wide_fan_in.mmd]": 0.0058016253169626, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/wide_fan_out.mmd]": 0.007039791205897927, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/wide_label_fan.mmd]": 0.005060875089839101, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[topologies/wrapped_label_trunk.mmd]": 0.0031117082107812166, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[variant_calling.mmd]": 0.006132832961156964, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[variant_calling_tuned.mmd]": 0.012032709084451199, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[variantbenchmarking.mmd]": 0.06846658326685429, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[variantbenchmarking_auto.mmd]": 0.1229591250885278, + "tests/test_render_validate.py::test_clean_corpus_has_no_marker_cross[variantprioritization.mmd]": 0.026036125607788563, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[centered_tracks.mmd]": 0.00522308424115181, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[cross_track_interchange.mmd]": 0.015710291219875216, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[diagonal_labels.mmd]": 0.01540937484242022, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[differentialabundance.mmd]": 0.35685620782896876, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[differentialabundance_default.mmd]": 0.15970241790637374, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[directional_flow.mmd]": 0.006617750274017453, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[disconnected_components.mmd]": 0.009298167191445827, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[epitopeprediction.mmd]": 0.02174904220737517, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[file_icons.mmd]": 0.0051778750494122505, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[genomeassembly.mmd]": 0.037189293187111616, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[genomeassembly_staggered.mmd]": 0.039174375822767615, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[genomic_pipeline.mmd]": 0.4255677091423422, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[group_labels.mmd]": 0.00339470780454576, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[hlatyping.mmd]": 0.01944666588678956, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[legend_combo.mmd]": 0.008271874161437154, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[legend_logo_placement.mmd]": 0.015279834158718586, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[line_spread.mmd]": 0.014005125034600496, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[longread_variant_calling.mmd]": 0.07364925066940486, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[marker_styles.mmd]": 0.007290583103895187, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[off_track_outputs.mmd]": 0.010011376114562154, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[rail_mode.mmd]": 0.013290125178173184, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[rail_section.mmd]": 0.01209133374504745, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[rnaseq_auto.mmd]": 0.10206191684119403, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[rnaseq_sections.mmd]": 0.20381583413109183, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[rnaseq_sections_manual.mmd]": 0.18515874911099672, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[sarek_metro.mmd]": 0.08296262472867966, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[simple_pipeline.mmd]": 0.007703833281993866, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[tb_file_termini.mmd]": 0.013017875142395496, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/aligner_row_pinned_continuation.mmd]": 0.009827083209529519, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/around_below_ep_col_gt0.mmd]": 0.00421750103123486, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/around_section_below.mmd]": 0.006303332978859544, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/asymmetric_tree.mmd]": 0.015605749795213342, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bottom_row_climb_clear_corridor.mmd]": 0.007256998913362622, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/branch_fold_forward.mmd]": 0.006937250029295683, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/branch_fold_stability.mmd]": 0.005217624828219414, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bt_chain.mmd]": 0.006058084079995751, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bt_exit_top_above.mmd]": 0.0035943330731242895, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bt_exit_top_above_2line.mmd]": 0.002639290876686573, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bt_fork.mmd]": 0.0033337080385535955, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bt_perp_entry_below.mmd]": 0.00271312496624887, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bt_to_lr.mmd]": 0.0050307079218328, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bt_to_tb.mmd]": 0.019546751165762544, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bundle_terminator_continuation.mmd]": 0.0018881249707192183, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_fan_in_outer_slot.mmd]": 0.03458174876868725, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_gap2_rightward_overflow.mmd]": 0.018291626125574112, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_label_rake.mmd]": 0.008862541988492012, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_label_rake_left.mmd]": 0.01008283393457532, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_label_rake_wide.mmd]": 0.012155875097960234, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_leftward_far_side_entry.mmd]": 0.021834541112184525, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_leftward_overflow.mmd]": 0.0265514578204602, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/bypass_v_tight.mmd]": 0.013369958149269223, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/clear_channel_target_aware_push.mmd]": 0.008043834008276463, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/compact_gap_peer_conflict.mmd]": 0.007550498936325312, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/compact_hidden_passthrough.mmd]": 0.005243249936029315, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/complex_multipath.mmd]": 0.03364841709844768, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/convergence_stacked_sink.mmd]": 0.019070958951488137, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/convergent_offrow_exit_climb.mmd]": 0.06998400017619133, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/corridor_narrow_gap_fallback.mmd]": 0.007326208986341953, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/cross_col_top_entry.mmd]": 0.003361083334311843, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/cross_column_perp_drop.mmd]": 0.0034492078702896833, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/cross_column_perp_drop_far_exit.mmd]": 0.0024238750338554382, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/cross_row_gap_wrap.mmd]": 0.017717083916068077, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/deep_linear.mmd]": 0.018007874954491854, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/disjoint_sameline_trunks.mmd]": 0.012316917767748237, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/divergent_fanout_split.mmd]": 0.0070595829747617245, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/dogleg_exempt_distinct.mmd]": 0.011581124039366841, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/dogleg_exempt_sameline.mmd]": 0.004212000174447894, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/dogleg_twoline_fanout.mmd]": 0.00384608400054276, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/exit_corner_offset_dogleg.mmd]": 0.0039909170009195805, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/fan_bypass_nesting.mmd]": 0.017391417175531387, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/fan_in_merge.mmd]": 0.013789374846965075, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/fold_double.mmd]": 0.12974174809642136, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/fold_fan_across.mmd]": 0.1143715837970376, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/fold_stacked_branch.mmd]": 0.05736104119569063, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/funcprofiler_upstream.mmd]": 0.06349945929832757, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/header_nudge.mmd]": 0.003918709000572562, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/header_side_rotated.mmd]": 0.002321583218872547, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/inrow_skip_breeze.mmd]": 0.0017575419042259455, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/inter_row_wrap_clearance.mmd]": 0.004504084121435881, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/interchange_lane_reorder.mmd]": 0.0021466240286827087, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/junction_entry_align.mmd]": 0.010238623945042491, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/junction_entry_collision.mmd]": 0.008659583050757647, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/junction_entry_reversed_fold.mmd]": 0.0051990419160574675, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/junction_fanout_convergence.mmd]": 0.008710042107850313, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/left_entry_up_wrap.mmd]": 0.004740249132737517, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/left_exit_sink_below.mmd]": 0.011283791158348322, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.003724499139934778, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.0032982919365167618, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_perp_top_exit_perp_entry.mmd]": 0.005389916943386197, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.005943831987679005, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_perp_top_exit_side_entry.mmd]": 0.0035112090408802032, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_to_tb_top_cross_col.mmd]": 0.014302207622677088, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_to_tb_top_drop.mmd]": 0.0037047930527478456, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.0029047077987343073, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_to_tb_top_near_vertical.mmd]": 0.0022500420454889536, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_to_tb_top_two_lines.mmd]": 0.0026900421362370253, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_top_entry_cross_column.mmd]": 0.0020135839004069567, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/lr_top_entry_cross_column_two_line.mmd]": 0.0026574579533189535, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_around_below_leftmost.mmd]": 0.005791167030110955, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_bottom_row_bypass.mmd]": 0.016686582705006003, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_leftmost_sink_branch.mmd]": 0.00715383212082088, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_offrow_continuation.mmd]": 0.006171292159706354, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_port_above_approach.mmd]": 0.008499542251229286, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_pullaway.mmd]": 0.005473083117976785, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_right_entry.mmd]": 0.014513792004436255, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_trunk_out_of_range_section.mmd]": 0.006827500183135271, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/merge_trunk_over_low_section.mmd]": 0.013279875740408897, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/mismatched_tracks.mmd]": 0.0130242093000561, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/mixed_bundle_column.mmd]": 0.011698374757543206, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/mixed_port_sides.mmd]": 0.054097541840747, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/multi_input_convergence.mmd]": 0.01853766618296504, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/multi_line_bundle.mmd]": 0.01924333325587213, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/multicarrier_offrow_exit_climb.mmd]": 0.015699999872595072, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/near_vertical_junction_hook.mmd]": 0.005259209079667926, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/off_track_convergence.mmd]": 0.007303832797333598, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/off_track_convergence_multiline.mmd]": 0.006154292030259967, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/off_track_input_above_consumer.mmd]": 0.16702154115773737, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/parallel_independent.mmd]": 0.00724787381477654, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/peeloff_extra_line_consumer.mmd]": 0.020952416816726327, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/peeloff_riser_respace.mmd]": 0.0090162493288517, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/post_convergence_trunk.mmd]": 0.004034124314785004, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/rail_inter_section.mmd]": 0.0035350839607417583, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/rail_offtrack_fan.mmd]": 0.007421667221933603, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/rail_offtrack_io.mmd]": 0.011479457840323448, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/rail_offtrack_plain_io.mmd]": 0.006539916153997183, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/reconverge_reversed_fold.mmd]": 0.0816842089407146, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/right_entry_from_above.mmd]": 0.0024085419718176126, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/right_entry_from_above_far.mmd]": 0.0021171248517930508, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/right_entry_gap_above_empty_row.mmd]": 0.0027246661484241486, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/right_entry_wrap_no_fan.mmd]": 0.0020842922385782003, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/rl_entry_runway.mmd]": 0.0038470830768346786, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/rnaseq_lite.mmd]": 0.03201508382335305, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/route_around_intervening.mmd]": 0.005700500216335058, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/section_diamond.mmd]": 0.0073505002073943615, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/self_crossing_bridge.mmd]": 0.007698958041146398, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/shared_sink_parallel.mmd]": 0.029388207010924816, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/single_section.mmd]": 0.004144249018281698, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/stacked_left_exit_drop.mmd]": 0.005249334033578634, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/stacked_lr_serpentine.mmd]": 0.004249791149049997, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.04002266679890454, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_bottom_entry_flow_start.mmd]": 0.0033932498190551996, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_bottom_exit_bundle_jog.mmd]": 0.012696873862296343, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_bottom_exit_fork_diamond.mmd]": 0.005904833087697625, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_column_continuation_two_lines.mmd]": 0.009278166806325316, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_convergence_straight_drop.mmd]": 0.0016257921233773232, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_internal_diagonal.mmd]": 0.005617415998131037, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_left_exit_step.mmd]": 0.006937748985365033, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_lr_exit_left.mmd]": 0.0037196241319179535, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_lr_exit_right.mmd]": 0.0055403332225978374, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_passthrough_continuation.mmd]": 0.0019900843035429716, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_passthrough_trunk.mmd]": 0.003943039802834392, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_perp_exit_side_neighbour.mmd]": 0.0027950420044362545, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_right_entry_stack.mmd]": 0.014979042112827301, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_trunk_through_fan.mmd]": 0.0030172921251505613, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/tb_two_line_vert_seam.mmd]": 0.003100041067227721, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/terminal_symmetric_fan.mmd]": 0.0031312918290495872, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/terminus_join.mmd]": 0.0013884168583899736, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/top_entry_header_clash.mmd]": 0.0019250838086009026, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/trunk_through_fan.mmd]": 0.009679416893050075, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/u_turn_fold.mmd]": 0.026186374947428703, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/uneven_diamond.mmd]": 0.002615915844216943, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/upward_bypass.mmd]": 0.024216333171352744, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/variant_calling.mmd]": 0.06863970728591084, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/wide_fan_in.mmd]": 0.012081666151061654, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/wide_fan_out.mmd]": 0.007198000093922019, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/wide_label_fan.mmd]": 0.0029915429186075926, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[topologies/wrapped_label_trunk.mmd]": 0.014760792255401611, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[variant_calling.mmd]": 0.009844291722401977, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[variant_calling_tuned.mmd]": 0.019363417057320476, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[variantbenchmarking.mmd]": 0.10315770911984146, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[variantbenchmarking_auto.mmd]": 0.11838487512432039, + "tests/test_render_validate.py::test_clean_corpus_has_no_offset_collapse[variantprioritization.mmd]": 0.019023918081074953, + "tests/test_render_validate.py::test_corpus_is_nonempty": 0.00017541693523526192, + "tests/test_render_validate.py::test_directional_chevrons_are_not_parsed_as_routes": 0.00017604208551347256, + "tests/test_render_validate.py::test_injected_marker_cross_through_non_consumer_is_caught": 0.22089195903390646, + "tests/test_render_validate.py::test_no_manifest_yields_no_findings": 0.0003782908897846937, + "tests/test_render_validate.py::test_offset_collapse_caught_when_spread_pair_drawn_flush": 0.5585241657681763, + "tests/test_render_validate.py::test_parser_breaks_at_bridge_hop_gap": 0.0002117070835083723, + "tests/test_render_validate.py::test_parser_collapses_smoothing_curve_to_its_corner": 0.00021629221737384796, + "tests/test_render_validate.py::test_rail_interchange_crossing_is_exempt_yet_detectable[line_spread.mmd]": 0.008743000216782093, + "tests/test_render_validate.py::test_rail_interchange_crossing_is_exempt_yet_detectable[sarek_metro.mmd]": 0.06689350004307926, + "tests/test_render_validate.py::test_real_render_routes_split_on_bridge_gaps[differentialabundance_default.mmd]": 0.1326282499358058, + "tests/test_render_validate.py::test_real_render_routes_split_on_bridge_gaps[genomic_pipeline.mmd]": 0.42251733411103487, + "tests/test_render_validate.py::test_same_slot_bundle_is_not_offset_collapse": 0.06673166807740927, + "tests/test_render_validate.py::test_validate_render_flags_injected_strike": 0.2171779158525169, + "tests/test_right_entry_over_top.py::test_707_lays_out_under_validation": 0.05504541611298919, + "tests/test_right_entry_over_top.py::test_707_over_top_loop_has_no_curve_defect": 0.025856124935671687, + "tests/test_right_entry_over_top.py::test_707_right_entry_approached_from_its_outward_side": 0.01598970708437264, + "tests/test_right_entry_over_top.py::test_build_concentric_bundle_corners_are_concentric": 0.00019024894572794437, + "tests/test_right_entry_over_top.py::test_build_concentric_bundle_never_flips_over_a_u_turn": 0.0002849581651389599, + "tests/test_right_entry_over_top.py::test_build_concentric_bundle_rejects_diagonal_centerline": 0.00024183397181332111, + "tests/test_right_entry_over_top.py::test_render_guard_accepts_the_clean_fixture": 0.06010633381083608, + "tests/test_right_entry_over_top.py::test_render_guard_rejects_a_flipped_bundle": 0.02645895816385746, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/centered_tracks]": 0.0978163331747055, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/cross_track_interchange]": 0.04025570908561349, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/diagonal_labels]": 0.04995249933563173, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/differentialabundance]": 0.15453562489710748, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/differentialabundance_default]": 0.19530237512663007, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/directional_flow]": 0.02227708324790001, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/disconnected_components]": 0.04483174975030124, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/epitopeprediction]": 0.06834191805683076, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/file_icons]": 0.028052791953086853, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/genomeassembly]": 0.10073408274911344, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/genomeassembly_staggered]": 0.09012575005181134, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/genomic_pipeline]": 0.5950183749664575, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/group_labels]": 0.018082916969433427, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/hlatyping]": 0.04774275003001094, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/legend_combo]": 0.021796083077788353, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/legend_logo_placement]": 0.07227366627193987, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/longread_variant_calling]": 0.12558395904488862, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/marker_styles]": 0.04204691690392792, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/off_track_outputs]": 0.03318645991384983, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/rnaseq_auto]": 0.12054370809346437, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/rnaseq_sections]": 0.5033471251372248, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/rnaseq_sections_manual]": 0.5364106670022011, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/simple_pipeline]": 0.02143774996511638, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/tb_file_termini]": 0.03366974974051118, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/variant_calling]": 0.06543674995191395, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/variant_calling_tuned]": 0.04650270799174905, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/variantbenchmarking]": 0.5648580826818943, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/variantbenchmarking_auto]": 0.3467501658014953, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[examples/variantprioritization]": 0.054913624888285995, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/01_minimal]": 0.019720833748579025, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/02_sections]": 0.02204212499782443, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/03_fan_out]": 0.055185876321047544, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/03b_fan_in_merge]": 0.02718429104425013, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/04_directions]": 0.06368191679939628, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/05_file_icons]": 0.026898917043581605, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/05b_multi_icons]": 0.035730499774217606, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/05c_files_icon]": 0.02537437598221004, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/05d_folder_icon]": 0.025517416885122657, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/05f_banner_labels]": 0.032833082834258676, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/06a_without_hidden]": 0.037061542039737105, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[guide/06b_with_hidden]": 0.03195079299621284, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[nextflow/duplicate_processes]": 0.02554833423346281, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[nextflow/flat_pipeline]": 0.025384207954630256, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[nextflow/unquoted_labels]": 0.021688126027584076, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[nextflow/variant_calling]": 0.035622666124254465, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[nextflow/with_subworkflows]": 0.03190716612152755, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/bubble_forced_label_clears_diagonal]": 0.016192374285310507, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/bubble_label_clears_diagonal]": 0.01654729200527072, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/bubble_output_above]": 0.013287584064528346, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/captioned_sibling_outputs]": 0.029873207909986377, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/da_pipeline]": 0.19037641608156264, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/diagonal_single_trunk_off_track]": 0.3541236249729991, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/file_icon_fanin]": 0.03478666697628796, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/font_scale]": 0.013870124937966466, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/genomeassembly_organellar]": 0.09405945800244808, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/icon_caption_wrap]": 0.006047667004168034, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/leaf_file_icon_on_trunk]": 0.02978183305822313, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/multiline_labels]": 0.026256126118823886, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/off_track_output_branched]": 0.017227499280124903, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/off_track_outputs_along_trunk]": 0.02007124898955226, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/rnaseq_sections]": 0.5311449158471078, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/rnaseq_simple]": 0.00787345739081502, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/tb_right_exit_feeder_slots]": 0.03053645812906325, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/trunk_align_matching_bundle]": 0.017388456966727972, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[tests/uneven_diamond]": 0.02185954200103879, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/aligner_row_pinned_continuation]": 0.06964437384158373, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/around_below_ep_col_gt0]": 0.042725750245153904, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/around_section_below]": 0.04273520829156041, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/asymmetric_tree]": 0.03637054190039635, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bottom_row_climb_clear_corridor]": 0.030607623979449272, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/branch_fold_forward]": 0.04562262399122119, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/branch_fold_stability]": 0.03729954129084945, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bt_chain]": 0.01315591693855822, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bt_exit_top_above]": 0.016077625332400203, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bt_exit_top_above_2line]": 0.016696374863386154, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bt_fork]": 0.020829292247071862, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bt_perp_entry_below]": 0.020207541063427925, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bt_to_lr]": 0.010511292144656181, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bt_to_tb]": 0.018290873849764466, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bundle_terminator_continuation]": 0.007631249958649278, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_fan_in_outer_slot]": 0.07806608313694596, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_gap2_rightward_overflow]": 0.05912045808508992, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_label_rake]": 0.04205770883709192, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_label_rake_left]": 0.04588533309288323, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_label_rake_wide]": 0.08860366605222225, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_leftward_far_side_entry]": 0.03704037400893867, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_leftward_overflow]": 0.024665792006999254, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/bypass_v_tight]": 0.037909333826974034, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/clear_channel_target_aware_push]": 0.02434624871239066, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/compact_gap_peer_conflict]": 0.0361269167624414, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/compact_hidden_passthrough]": 0.031560458010062575, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/complex_multipath]": 0.04313520900905132, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/convergence_stacked_sink]": 0.0406122081913054, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/convergent_offrow_exit_climb]": 0.13911874988116324, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/corridor_narrow_gap_fallback]": 0.02030033292248845, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/cross_col_top_entry]": 0.013049917062744498, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/cross_column_perp_drop]": 0.009878376265987754, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/cross_column_perp_drop_far_exit]": 0.0212249590549618, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/cross_row_gap_wrap]": 0.02628012397326529, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/deep_linear]": 0.05521445907652378, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/disjoint_sameline_trunks]": 0.3603227499406785, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/divergent_fanout_split]": 0.027901916299015284, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/dogleg_exempt_distinct]": 0.03407362615689635, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/dogleg_exempt_sameline]": 0.017027166904881597, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/dogleg_twoline_fanout]": 0.023262915899977088, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/exit_corner_offset_dogleg]": 0.037168375914916396, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/fan_bypass_nesting]": 0.05193120799958706, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/fan_in_merge]": 0.027386000147089362, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/fold_double]": 0.13090558419935405, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/fold_fan_across]": 0.10431979224085808, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/fold_stacked_branch]": 0.09811887517571449, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/funcprofiler_upstream]": 0.26065337588079274, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/header_nudge]": 0.023988917004317045, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/header_side_rotated]": 0.04113291692920029, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/inrow_skip_breeze]": 0.013571458170190454, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/inter_row_wrap_clearance]": 0.03397749993018806, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/interchange_lane_reorder]": 0.02237795782275498, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/junction_entry_align]": 0.07253195811063051, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/junction_entry_collision]": 0.053493708139285445, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/junction_entry_reversed_fold]": 0.049389917170628905, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/junction_fanout_convergence]": 0.050467375898733735, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/left_entry_up_wrap]": 0.011051916982978582, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/left_exit_sink_below]": 0.050500917015597224, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_perp_bottom_exit_perp_entry]": 0.030730332946404815, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_perp_bottom_exit_side_entry]": 0.018367416923865676, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_perp_top_exit_perp_entry]": 0.03127454197965562, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.02527224994264543, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_perp_top_exit_side_entry]": 0.02203062502667308, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_to_tb_top_cross_col]": 0.021764500066637993, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_to_tb_top_drop]": 0.010259290924295783, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_to_tb_top_drop_two_lines]": 0.02724958281032741, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_to_tb_top_near_vertical]": 0.025717249838635325, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_to_tb_top_two_lines]": 0.022460250183939934, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_top_entry_cross_column]": 0.023699124110862613, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/lr_top_entry_cross_column_two_line]": 0.011984250275418162, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_around_below_leftmost]": 0.03770524985156953, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_bottom_row_bypass]": 0.03530141687951982, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_leftmost_sink_branch]": 0.040023916866630316, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_offrow_continuation]": 0.01871570898219943, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_port_above_approach]": 0.03705504187382758, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_pullaway]": 0.035459125181660056, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_right_entry]": 0.05090479180216789, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_trunk_out_of_range_section]": 0.05186820775270462, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/merge_trunk_over_low_section]": 0.054300084011629224, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/mismatched_tracks]": 0.04734166688285768, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/mixed_bundle_column]": 0.050435541896149516, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/mixed_port_sides]": 0.024838457815349102, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/multi_input_convergence]": 0.022132334066554904, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/multi_line_bundle]": 0.027787165949121118, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/multicarrier_offrow_exit_climb]": 0.06172370887361467, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/near_vertical_junction_hook]": 0.019954748917371035, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/off_track_convergence]": 0.01964654098264873, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/off_track_convergence_multiline]": 0.039436375023797154, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/off_track_input_above_consumer]": 0.1920175408013165, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/parallel_independent]": 0.02347137499600649, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/peeloff_extra_line_consumer]": 0.039591458858922124, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/peeloff_riser_respace]": 0.032015249133110046, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/post_convergence_trunk]": 0.014993791934102774, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/reconverge_reversed_fold]": 0.10504420869983733, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/right_entry_from_above]": 0.013633000198751688, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/right_entry_from_above_far]": 0.008624957874417305, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/right_entry_gap_above_empty_row]": 0.029998291051015258, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/right_entry_wrap_no_fan]": 0.014186499873176217, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/rl_entry_runway]": 0.029092082986608148, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/rnaseq_lite]": 0.10859149997122586, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/route_around_intervening]": 0.025519292103126645, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/section_diamond]": 0.41780100017786026, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/self_crossing_bridge]": 0.026236833771690726, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/shared_sink_parallel]": 0.05959450011141598, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/single_section]": 0.009106208104640245, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/stacked_left_exit_drop]": 0.01858687517233193, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/stacked_lr_serpentine]": 0.025922917062416673, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/symmetric_diamond_beside_wide_fan]": 0.051747584249824286, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_bottom_entry_flow_start]": 0.013885832857340574, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_bottom_exit_bundle_jog]": 0.02218179078772664, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_bottom_exit_fork_diamond]": 0.02095729229040444, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_column_continuation_two_lines]": 0.027927082031965256, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_convergence_straight_drop]": 0.03901412524282932, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_internal_diagonal]": 0.016597791807726026, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_left_exit_step]": 0.0407942917663604, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_lr_exit_left]": 0.026034542359411716, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_lr_exit_right]": 0.03213620791211724, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_passthrough_continuation]": 0.07197741558775306, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_passthrough_trunk]": 0.03949258383363485, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_perp_exit_side_neighbour]": 0.012055000057443976, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_right_entry_stack]": 0.028313000919297338, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_trunk_through_fan]": 0.021198291797190905, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/tb_two_line_vert_seam]": 0.045041250763460994, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/terminal_symmetric_fan]": 0.08524937531910837, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/terminus_join]": 0.009089584229514003, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/top_entry_header_clash]": 0.014336083317175508, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/trunk_through_fan]": 0.023691832553595304, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/u_turn_fold]": 0.058355001732707024, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/uneven_diamond]": 0.01158220786601305, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/upward_bypass]": 0.06235133204609156, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/variant_calling]": 0.17703970801085234, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/wide_fan_in]": 0.031102791894227266, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/wide_fan_out]": 0.038645334308966994, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/wide_label_fan]": 0.015564874978736043, + "tests/test_route_edges_placement_pure.py::test_route_edges_does_not_move_stations[topologies/wrapped_label_trunk]": 0.013672291999682784, + "tests/test_route_edges_placement_pure.py::test_route_edges_splits_variant_calling_column_only_in_routes": 0.03492970811203122, + "tests/test_routing.py::test_around_and_corridor_routes_built_from_centreline[around_below_ep_col_gt0.mmd-_route_around_section_below]": 0.03764283307828009, + "tests/test_routing.py::test_around_and_corridor_routes_built_from_centreline[around_section_below.mmd-_route_around_section_below]": 0.016576708061620593, + "tests/test_routing.py::test_around_and_corridor_routes_built_from_centreline[corridor_narrow_gap_fallback.mmd-_route_around_section_below]": 0.045616958755999804, + "tests/test_routing.py::test_around_and_corridor_routes_built_from_centreline[genomic_pipeline.mmd-_route_inter_row_gap_corridor]": 0.35320349992252886, + "tests/test_routing.py::test_around_and_corridor_routes_built_from_centreline[self_crossing_bridge.mmd-_route_around_section_below]": 0.01589525118470192, + "tests/test_routing.py::test_around_section_below_dispatched_for_cross_row_left_entry": 0.04039141722023487, + "tests/test_routing.py::test_bypass_routing_around_intervening_sections": 0.02206854079850018, + "tests/test_routing.py::test_diagonal_route": 0.004269165685400367, + "tests/test_routing.py::test_exit_only_line_reordered_above": 0.04682054207660258, + "tests/test_routing.py::test_inter_section_routing": 0.012903333408758044, + "tests/test_routing.py::test_l_shape_route_quadrant_symmetry": 0.03085941611789167, + "tests/test_routing.py::test_merge_branch_lands_on_trunk_y": 0.12059429101645947, + "tests/test_routing.py::test_section_routes_have_valid_points": 0.01548204105347395, + "tests/test_routing.py::test_station_offsets_multiple_lines": 0.004832415608689189, + "tests/test_routing.py::test_station_offsets_single_line": 0.0020210829097777605, + "tests/test_routing.py::test_straight_route": 0.004243873991072178, + "tests/test_routing_gate_coverage.py::test_gate_coverage_baseline_in_sync": 0.00024679210036993027, + "tests/test_routing_gate_coverage.py::test_genuine_dead_arm_not_masked_as_covered": 0.0001315828412771225, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[common.py::for edge in graph.edges:::#1]": 0.0001531657762825489, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[context.py::if (::#1]": 0.00017666583880782127, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[context.py::if (::#2]": 0.00016433303244411945, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[context.py::if (::#3]": 0.00014724908396601677, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[corners.py::if i < len(points) - 2:::#1]": 0.00017079198732972145, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[corners.py::if i > 1:::#1]": 0.00014554103836417198, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[tb_handlers.py::if not (::#1]": 0.00013933307491242886, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[tb_handlers.py::if not (::#2]": 0.0001373740378767252, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[tb_handlers.py::if not (::#3]": 0.00012937490828335285, + "tests/test_routing_gate_coverage.py::test_multiline_displaced_gate_is_fully_covered[tb_handlers.py::if not (::#4]": 0.00012329197488725185, + "tests/test_routing_gate_coverage.py::test_no_new_un_exercised_routing_gate_arm": 0.23617962491698563, + "tests/test_routing_gate_coverage.py::test_phantom_boolean_gate_expands_to_operand_arms[inter_section_handlers.py::and src_sec is not None::#1]": 0.00013800011947751045, + "tests/test_routing_gate_coverage.py::test_phantom_boolean_gate_expands_to_operand_arms[normalize.py::go is not None::#1]": 0.00012416602112352848, + "tests/test_routing_gate_coverage.py::test_phantom_boolean_gate_expands_to_operand_arms[offsets.py::sec is None::#1]": 0.00015541608445346355, + "tests/test_routing_gate_coverage.py::test_phantom_boolean_gate_expands_to_operand_arms[reversal.py::or (sec_id, succ_id) in horizontal_succ_pairs::#1]": 0.0001325418706983328, + "tests/test_routing_gate_coverage.py::test_reversal_fallthrough_gap_not_masked_by_collapsed_gate": 0.31161929084919393, + "tests/test_routing_gate_coverage.py::test_triage_sidecar_references_open_gaps": 0.00017645815387368202, + "tests/test_routing_no_bottom_loop.py::test_downward_feeder_does_not_dip_below_consumer[qc_col2_of_3]": 0.04299533204175532, + "tests/test_routing_no_bottom_loop.py::test_downward_feeder_does_not_dip_below_consumer[qc_col3_of_4]": 0.038505582604557276, + "tests/test_same_line_parallel_run_invariant.py::test_checker_fires_without_coincidence_pass[variantbenchmarking.mmd]": 0.22700904193334281, + "tests/test_same_line_parallel_run_invariant.py::test_checker_fires_without_coincidence_pass[variantbenchmarking_auto.mmd]": 0.2028957917355001, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/centered_tracks.mmd]": 0.022983958013355732, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/cross_track_interchange.mmd]": 0.043437457643449306, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/diagonal_labels.mmd]": 0.06302491691894829, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/differentialabundance.mmd]": 0.26127454289235175, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/differentialabundance_default.mmd]": 0.18338424991816282, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/directional_flow.mmd]": 0.024020876036956906, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/disconnected_components.mmd]": 0.04562820796854794, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/epitopeprediction.mmd]": 0.07779441773891449, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/file_icons.mmd]": 0.021409875014796853, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/genomeassembly.mmd]": 0.08240658300928771, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/genomeassembly_staggered.mmd]": 0.10335129220038652, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/genomic_pipeline.mmd]": 0.5454692919738591, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/group_labels.mmd]": 0.03231816622428596, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/hlatyping.mmd]": 0.05164733296260238, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/legend_combo.mmd]": 0.03509445698000491, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/legend_logo_placement.mmd]": 0.03230099915526807, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/line_spread.mmd]": 0.04659495805390179, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/longread_variant_calling.mmd]": 0.1418378751259297, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/marker_styles.mmd]": 0.031826167833060026, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/off_track_outputs.mmd]": 0.021568708820268512, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/rail_mode.mmd]": 0.026823041029274464, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/rail_section.mmd]": 0.03262791782617569, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/rnaseq_auto.mmd]": 0.07211895799264312, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/rnaseq_sections.mmd]": 0.44815887487493455, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.789366333046928, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/sarek_metro.mmd]": 0.2536627920344472, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/simple_pipeline.mmd]": 0.013035541865974665, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/tb_file_termini.mmd]": 0.025320792105048895, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/variant_calling.mmd]": 0.049239249201491475, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/variant_calling_tuned.mmd]": 0.0718811668921262, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/variantbenchmarking.mmd]": 0.28369895787909627, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.3018861669115722, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[examples/variantprioritization.mmd]": 0.05677483440376818, + "tests/test_same_line_parallel_run_invariant.py::test_no_same_line_parallel_descents_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.023382876068353653, + "tests/test_same_line_parallel_run_invariant.py::test_variantbenchmarking_fans_are_single_trunks[variantbenchmarking.mmd]": 0.44396716682240367, + "tests/test_same_line_parallel_run_invariant.py::test_variantbenchmarking_fans_are_single_trunks[variantbenchmarking_auto.mmd]": 0.23467616783455014, + "tests/test_scoped_sections.py::test_grid_rows_top_to_bottom_groups_and_orders": 0.00018075108528137207, + "tests/test_scoped_sections.py::test_grid_rows_top_to_bottom_skips_empty_and_unassigned": 0.00018437393009662628, + "tests/test_scoped_sections.py::test_scoped_sections_ignores_unknown_ids": 0.00017954222857952118, + "tests/test_scoped_sections.py::test_scoped_sections_restores_on_exception": 0.0002713759895414114, + "tests/test_scoped_sections.py::test_scoped_sections_restricts_then_restores": 0.0002201239112764597, + "tests/test_seam_lane_x.py::test_lane_x_collinear_continuation_keeps_lane[BT]": 0.00029170792549848557, + "tests/test_seam_lane_x.py::test_lane_x_collinear_continuation_keeps_lane[LR]": 0.0028622508980333805, + "tests/test_seam_lane_x.py::test_lane_x_collinear_continuation_keeps_lane[RL]": 0.0003845838364213705, + "tests/test_seam_lane_x.py::test_lane_x_collinear_continuation_keeps_lane[TB]": 0.00030812365002930164, + "tests/test_seam_lane_x.py::test_lane_x_order_matches_arrival_order[BT]": 0.0002877491060644388, + "tests/test_seam_lane_x.py::test_lane_x_order_matches_arrival_order[LR]": 0.00028083333745598793, + "tests/test_seam_lane_x.py::test_lane_x_order_matches_arrival_order[RL]": 0.000253249891102314, + "tests/test_seam_lane_x.py::test_lane_x_order_matches_arrival_order[TB]": 0.0002463336568325758, + "tests/test_seam_lane_x.py::test_lane_x_rotates_with_section_direction": 0.0002659168094396591, + "tests/test_seam_lane_x.py::test_port_arrival_order_breaks_ties_on_line_id": 0.0002155010588467121, + "tests/test_seam_lane_x.py::test_rotated_tb_output_connects_to_bundle[examples/rnaseq_auto.mmd]": 0.13701824913732708, + "tests/test_seam_lane_x.py::test_rotated_tb_output_connects_to_bundle[examples/topologies/fold_fan_across.mmd]": 0.11239600111730397, + "tests/test_seam_lane_x.py::test_rotated_tb_output_connects_to_bundle[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.022408499149605632, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[aligner_row_pinned_continuation]": 0.03662037570029497, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[around_below_ep_col_gt0]": 0.034939499804750085, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[around_section_below]": 0.03402599995024502, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[asymmetric_tree]": 0.06145312520675361, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bottom_row_climb_clear_corridor]": 0.02411558316089213, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[branch_fold_forward]": 0.027736333198845387, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[branch_fold_stability]": 0.0560248747933656, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bt_chain]": 0.010462749982252717, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bt_exit_top_above]": 0.015896999975666404, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bt_exit_top_above_2line]": 0.022453709039837122, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bt_fork]": 0.008143458049744368, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bt_perp_entry_below]": 0.24656033306382596, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bt_to_lr]": 0.012375626247376204, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bt_to_tb]": 0.021947708912193775, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bundle_terminator_continuation]": 0.0158137499820441, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_fan_in_outer_slot]": 0.06326158298179507, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_gap2_rightward_overflow]": 0.04326600092463195, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_label_rake]": 0.03618079191073775, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_label_rake_left]": 0.041035707807168365, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_label_rake_wide]": 0.07535008317790926, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_leftward_far_side_entry]": 0.024350999854505062, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_leftward_overflow]": 0.058405666844919324, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[bypass_v_tight]": 0.03484808187931776, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[clear_channel_target_aware_push]": 0.04208641778677702, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[compact_gap_peer_conflict]": 0.022272916976362467, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[compact_hidden_passthrough]": 0.01909762597642839, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[complex_multipath]": 0.04312870791181922, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[convergence_stacked_sink]": 0.06809449894353747, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[convergent_offrow_exit_climb]": 0.12794349994510412, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[corridor_narrow_gap_fallback]": 0.025877125095576048, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[cross_col_top_entry]": 0.01874837512150407, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[cross_column_perp_drop]": 0.01668500085361302, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[cross_column_perp_drop_far_exit]": 0.023305623792111874, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[cross_row_gap_wrap]": 0.03250729199498892, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[deep_linear]": 0.04341929196380079, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[disjoint_sameline_trunks]": 0.034035834250971675, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[divergent_fanout_split]": 0.023322499822825193, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[dogleg_exempt_distinct]": 0.033359667751938105, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[dogleg_exempt_sameline]": 0.0333558761049062, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[dogleg_twoline_fanout]": 0.030247041722759604, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[exit_corner_offset_dogleg]": 0.021221000934019685, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[fan_bypass_nesting]": 0.07055995822884142, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[fan_in_merge]": 0.025048626121133566, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[fold_double]": 0.11183987511321902, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[fold_fan_across]": 0.11982362484559417, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[fold_stacked_branch]": 0.38342133327387273, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[funcprofiler_upstream]": 0.24000991601496935, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[header_nudge]": 0.021006290800869465, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[header_side_rotated]": 0.023046748945489526, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[inrow_skip_breeze]": 0.009644749108701944, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[inter_row_wrap_clearance]": 0.021721416618674994, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[interchange_lane_reorder]": 0.01066462486051023, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[junction_entry_align]": 0.03318329225294292, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[junction_entry_collision]": 0.0344892917200923, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[junction_entry_reversed_fold]": 0.030333833070471883, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[junction_fanout_convergence]": 0.0764450419228524, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[left_entry_up_wrap]": 0.032578415935859084, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[left_exit_sink_below]": 0.018636707914993167, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_perp_bottom_exit_perp_entry]": 0.05777312605641782, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_perp_bottom_exit_side_entry]": 0.027954582823440433, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_perp_top_exit_perp_entry]": 0.055377251002937555, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_perp_top_exit_perp_entry_diverging]": 0.060808791080489755, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_perp_top_exit_side_entry]": 0.023408833891153336, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_to_tb_top_cross_col]": 0.03972195880487561, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_to_tb_top_drop]": 0.027469292283058167, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_to_tb_top_drop_two_lines]": 0.02593962475657463, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_to_tb_top_near_vertical]": 0.02042512595653534, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_to_tb_top_two_lines]": 0.01965604186989367, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_top_entry_cross_column]": 0.010676083154976368, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[lr_top_entry_cross_column_two_line]": 0.031279792077839375, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_around_below_leftmost]": 0.03750624996609986, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_bottom_row_bypass]": 0.04317070706747472, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_leftmost_sink_branch]": 0.05643587536178529, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_offrow_continuation]": 0.027296248823404312, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_port_above_approach]": 0.025550541002303362, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_pullaway]": 0.024740168126299977, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_right_entry]": 0.04989645816385746, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_trunk_out_of_range_section]": 0.04184520896524191, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[merge_trunk_over_low_section]": 0.06699674995616078, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[mismatched_tracks]": 0.03641408495604992, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[mixed_bundle_column]": 0.03177950088866055, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[mixed_port_sides]": 0.012707250891253352, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[multi_input_convergence]": 0.026777666760608554, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[multi_line_bundle]": 0.040529708145186305, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[multicarrier_offrow_exit_climb]": 0.045591542264446616, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[near_vertical_junction_hook]": 0.04402358387596905, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[off_track_convergence]": 0.03447208320721984, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[off_track_convergence_multiline]": 0.03996233409270644, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[off_track_input_above_consumer]": 0.3166087931022048, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[parallel_independent]": 0.023940958082675934, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[peeloff_extra_line_consumer]": 0.0414103320799768, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[peeloff_riser_respace]": 0.028491042088717222, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[post_convergence_trunk]": 0.014310373924672604, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[rail_inter_section]": 0.008503957884386182, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[rail_offtrack_fan]": 0.01597112393938005, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[rail_offtrack_io]": 0.023607041919603944, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[rail_offtrack_plain_io]": 0.013914081966504455, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[reconverge_reversed_fold]": 0.1014223750680685, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[right_entry_from_above]": 0.012198999058455229, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[right_entry_from_above_far]": 0.008434749906882644, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[right_entry_gap_above_empty_row]": 0.029184792190790176, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[right_entry_wrap_no_fan]": 0.012421749299392104, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[rl_entry_runway]": 0.050652500009164214, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[rnaseq_lite]": 0.1409069588407874, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[route_around_intervening]": 0.022186501184478402, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[section_diamond]": 0.0235036660451442, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[self_crossing_bridge]": 0.027607209281995893, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[shared_sink_parallel]": 0.038953125244006515, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[single_section]": 0.005569291999563575, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[stacked_left_exit_drop]": 0.013498208951205015, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[stacked_lr_serpentine]": 0.040504375007003546, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[symmetric_diamond_beside_wide_fan]": 0.049751418409869075, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_bottom_entry_flow_start]": 0.008145707892253995, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_bottom_exit_bundle_jog]": 0.02585662598721683, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_bottom_exit_fork_diamond]": 0.019781540846452117, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_column_continuation_two_lines]": 0.019426167011260986, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_convergence_straight_drop]": 0.010208084248006344, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_internal_diagonal]": 0.019497208762913942, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_left_exit_step]": 0.023969792760908604, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_lr_exit_left]": 0.02054608310572803, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_lr_exit_right]": 0.020664833253249526, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_passthrough_continuation]": 0.024214667035266757, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_passthrough_trunk]": 0.04273762507364154, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_perp_exit_side_neighbour]": 0.03453783271834254, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_right_entry_stack]": 0.08741725073195994, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_trunk_through_fan]": 0.02348249964416027, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[tb_two_line_vert_seam]": 0.02024416602216661, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[terminal_symmetric_fan]": 0.0181182068772614, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[terminus_join]": 0.01760441716760397, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[top_entry_header_clash]": 0.010099750244989991, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[trunk_through_fan]": 0.03200937528163195, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[u_turn_fold]": 0.06165404221974313, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[uneven_diamond]": 0.008482792181894183, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[upward_bypass]": 0.044671000679954886, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[variant_calling]": 0.22321650106459856, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[wide_fan_in]": 0.04042999888770282, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[wide_fan_out]": 0.047043790807947516, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[wide_label_fan]": 0.02547900122590363, + "tests/test_seam_lane_x.py::test_seam_approach_equals_departure[wrapped_label_trunk]": 0.012930999975651503, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[aligner_row_pinned_continuation]": 0.047643916914239526, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[around_below_ep_col_gt0]": 0.02552145905792713, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[around_section_below]": 0.04437320795841515, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[asymmetric_tree]": 0.08442891691811383, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bottom_row_climb_clear_corridor]": 0.01982612512074411, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[branch_fold_forward]": 0.06933766696602106, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[branch_fold_stability]": 0.04010304203256965, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bt_chain]": 0.012451334157958627, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bt_exit_top_above]": 0.2611939590424299, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bt_exit_top_above_2line]": 0.010173209244385362, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bt_fork]": 0.014692958910018206, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bt_perp_entry_below]": 0.018743541091680527, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bt_to_lr]": 0.01658000098541379, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bt_to_tb]": 0.03311679186299443, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bundle_terminator_continuation]": 0.007908376166597009, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_fan_in_outer_slot]": 0.06784083181992173, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_gap2_rightward_overflow]": 0.04401870886795223, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_label_rake]": 0.04802666697651148, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_label_rake_left]": 0.020261500030755997, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_label_rake_wide]": 0.13267062418162823, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_leftward_far_side_entry]": 0.03722391603514552, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_leftward_overflow]": 0.03660362586379051, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[bypass_v_tight]": 0.050796749303117394, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[clear_channel_target_aware_push]": 0.06289425119757652, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[compact_gap_peer_conflict]": 0.03015487501397729, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[compact_hidden_passthrough]": 0.017808748874813318, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[complex_multipath]": 0.08935812604613602, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[convergence_stacked_sink]": 0.03944712411612272, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[convergent_offrow_exit_climb]": 0.18483895901590586, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[corridor_narrow_gap_fallback]": 0.05821299902163446, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[cross_col_top_entry]": 0.030298917088657618, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[cross_column_perp_drop]": 0.02832733397372067, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[cross_column_perp_drop_far_exit]": 0.029012582963332534, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[cross_row_gap_wrap]": 0.046765875071287155, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[deep_linear]": 0.07806195714510977, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[disjoint_sameline_trunks]": 0.04465608298778534, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[divergent_fanout_split]": 0.02819258300587535, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[dogleg_exempt_distinct]": 0.049237001221627, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[dogleg_exempt_sameline]": 0.028318706899881363, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[dogleg_twoline_fanout]": 0.029466541949659586, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[exit_corner_offset_dogleg]": 0.047180499881505966, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[fan_bypass_nesting]": 0.0482649989426136, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[fan_in_merge]": 0.05786008317954838, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[fold_double]": 0.13885550014674664, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[fold_fan_across]": 0.12838816596195102, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[fold_stacked_branch]": 0.4246509578078985, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[funcprofiler_upstream]": 0.3970516659319401, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[header_nudge]": 0.02118412428535521, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[header_side_rotated]": 0.018198082922026515, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[inrow_skip_breeze]": 0.017224082024767995, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[inter_row_wrap_clearance]": 0.03982770908623934, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[interchange_lane_reorder]": 0.011268875328823924, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[junction_entry_align]": 0.06087300111539662, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[junction_entry_collision]": 0.03426087484695017, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[junction_entry_reversed_fold]": 0.06176499999128282, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[junction_fanout_convergence]": 0.019308582181110978, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[left_entry_up_wrap]": 0.015154166147112846, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[left_exit_sink_below]": 0.039625790901482105, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_perp_bottom_exit_perp_entry]": 0.027960248989984393, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_perp_bottom_exit_side_entry]": 0.014106916962191463, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_perp_top_exit_perp_entry]": 0.03537420695647597, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_perp_top_exit_perp_entry_diverging]": 0.022007084218785167, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_perp_top_exit_side_entry]": 0.0407586672808975, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_to_tb_top_cross_col]": 0.018700415967032313, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_to_tb_top_drop]": 0.03852195921353996, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_to_tb_top_drop_two_lines]": 0.013268289854750037, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_to_tb_top_near_vertical]": 0.01780366711318493, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_to_tb_top_two_lines]": 0.014411374926567078, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_top_entry_cross_column]": 0.019997166004031897, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[lr_top_entry_cross_column_two_line]": 0.010117582743987441, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_around_below_leftmost]": 0.022160331951454282, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_bottom_row_bypass]": 0.041464332956820726, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_leftmost_sink_branch]": 0.025774332927539945, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_offrow_continuation]": 0.02278891671448946, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_port_above_approach]": 0.03942241705954075, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_pullaway]": 0.02475958247669041, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_right_entry]": 0.0348797501064837, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_trunk_out_of_range_section]": 0.04421029193326831, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[merge_trunk_over_low_section]": 0.03729995689354837, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[mismatched_tracks]": 0.035812248941510916, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[mixed_bundle_column]": 0.06507608294487, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[mixed_port_sides]": 0.012206501327455044, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[multi_input_convergence]": 0.042305625043809414, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[multi_line_bundle]": 0.024659124901518226, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[multicarrier_offrow_exit_climb]": 0.024252540897578, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[near_vertical_junction_hook]": 0.02924862504005432, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[off_track_convergence]": 0.02863999898545444, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[off_track_convergence_multiline]": 0.0387085834518075, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[off_track_input_above_consumer]": 0.11262470879592001, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[parallel_independent]": 0.025553083047270775, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[peeloff_extra_line_consumer]": 0.05614720890298486, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[peeloff_riser_respace]": 0.03316900064237416, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[post_convergence_trunk]": 0.007677833782508969, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[rail_inter_section]": 0.011622750898823142, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[rail_offtrack_fan]": 0.011557541089132428, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[rail_offtrack_io]": 0.01134495809674263, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[rail_offtrack_plain_io]": 0.022605248959735036, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[reconverge_reversed_fold]": 0.12352658296003938, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[right_entry_from_above]": 0.018505293177440763, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[right_entry_from_above_far]": 0.01852595806121826, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[right_entry_gap_above_empty_row]": 0.03243816667236388, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[right_entry_wrap_no_fan]": 0.016397709026932716, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[rl_entry_runway]": 0.04552008374594152, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[rnaseq_lite]": 0.09046966675668955, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[route_around_intervening]": 0.02090604230761528, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[section_diamond]": 0.05506641580723226, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[self_crossing_bridge]": 0.023645082721486688, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[shared_sink_parallel]": 0.059966875007376075, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[single_section]": 0.005519707920029759, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[stacked_left_exit_drop]": 0.013296041637659073, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[stacked_lr_serpentine]": 0.025287624914199114, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[symmetric_diamond_beside_wide_fan]": 0.03352850000374019, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_bottom_entry_flow_start]": 0.01522758393548429, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_bottom_exit_bundle_jog]": 0.017520707100629807, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_bottom_exit_fork_diamond]": 0.03426041640341282, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_column_continuation_two_lines]": 0.01570620806887746, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_convergence_straight_drop]": 0.014668958960101008, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_internal_diagonal]": 0.06309791677631438, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_left_exit_step]": 0.05842737411148846, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_lr_exit_left]": 0.02763454127125442, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_lr_exit_right]": 0.06356020807288587, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_passthrough_continuation]": 0.05225958302617073, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_passthrough_trunk]": 0.034366540843620896, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_perp_exit_side_neighbour]": 0.043548916932195425, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_right_entry_stack]": 0.0217911247164011, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_trunk_through_fan]": 0.01933424873277545, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[tb_two_line_vert_seam]": 0.048492749920114875, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[terminal_symmetric_fan]": 0.01871420769020915, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[terminus_join]": 0.006101124919950962, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[top_entry_header_clash]": 0.38610920775681734, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[trunk_through_fan]": 0.024412167724221945, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[u_turn_fold]": 0.0820337908808142, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[uneven_diamond]": 0.006757418159395456, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[upward_bypass]": 0.07984841684810817, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[variant_calling]": 0.20154941594228148, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[wide_fan_in]": 0.03661595890298486, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[wide_fan_out]": 0.05232487409375608, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[wide_label_fan]": 0.0126755409874022, + "tests/test_seam_lane_x.py::test_seam_segments_meet_at_port[wrapped_label_trunk]": 0.010002791183069348, + "tests/test_seam_orientation.py::test_classifier_agrees_on_the_bulk_of_reversals": 0.0010130000300705433, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[centered_tracks]": 0.024751208955422044, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[cross_track_interchange]": 0.022654041880741715, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[diagonal_labels]": 0.07813033298589289, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[differentialabundance]": 0.20955837494693696, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[differentialabundance_default]": 0.26203245809301734, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[directional_flow]": 0.014576999936252832, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[disconnected_components]": 0.03521324973553419, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[epitopeprediction]": 0.06994770793244243, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[file_icons]": 0.015417085029184818, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[genomeassembly]": 0.07694725040346384, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[genomeassembly_staggered]": 0.0881984590087086, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[genomic_pipeline]": 0.5216487080324441, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[group_labels]": 0.027605375042185187, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[hlatyping]": 0.07417241693474352, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[legend_combo]": 0.029092999873682857, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[legend_logo_placement]": 0.03993020812049508, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[line_spread]": 0.08762487513013184, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[longread_variant_calling]": 0.18422466702759266, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[marker_styles]": 0.03210337506607175, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[off_track_outputs]": 0.04184054187498987, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[rail_mode]": 0.06266824994236231, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[rail_section]": 0.052975542144849896, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[rnaseq_auto]": 0.15484025003388524, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[rnaseq_sections]": 0.5626971668098122, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[rnaseq_sections_manual]": 0.5752235420513898, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[sarek_metro]": 0.6154395008925349, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[simple_pipeline]": 0.01201041485182941, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[tb_file_termini]": 0.017103665973991156, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/aligner_row_pinned_continuation]": 0.10316200111992657, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/around_below_ep_col_gt0]": 0.02374804113060236, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/around_section_below]": 0.027694207848981023, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/asymmetric_tree]": 0.05882204184308648, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bottom_row_climb_clear_corridor]": 0.03635120764374733, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/branch_fold_forward]": 0.04274691687896848, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/branch_fold_stability]": 0.04491666588000953, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bt_chain]": 0.006479375064373016, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bt_exit_top_above]": 0.027423707768321037, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bt_exit_top_above_2line]": 0.029806208098307252, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bt_fork]": 0.006794417044147849, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bt_perp_entry_below]": 0.02821845794096589, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bt_to_lr]": 0.011199041036888957, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bt_to_tb]": 0.013403832912445068, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bundle_terminator_continuation]": 0.02234441670589149, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_fan_in_outer_slot]": 0.09918750007636845, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_gap2_rightward_overflow]": 0.04857358289882541, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_label_rake]": 0.04027721006423235, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_label_rake_left]": 0.03896729089319706, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_label_rake_wide]": 0.06354233413003385, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_leftward_far_side_entry]": 0.03700629202648997, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_leftward_overflow]": 0.03207941702567041, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/bypass_v_tight]": 0.0239975000731647, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/clear_channel_target_aware_push]": 0.047285708133131266, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/compact_gap_peer_conflict]": 0.024185500107705593, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/compact_hidden_passthrough]": 0.03142733313143253, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/complex_multipath]": 0.07365029188804328, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/convergence_stacked_sink]": 0.2711779996752739, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/convergent_offrow_exit_climb]": 0.14009266486391425, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/corridor_narrow_gap_fallback]": 0.023888124153017998, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/cross_col_top_entry]": 0.008303582901135087, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/cross_column_perp_drop]": 0.009159833658486605, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/cross_column_perp_drop_far_exit]": 0.012854001019150019, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/cross_row_gap_wrap]": 0.039429166819900274, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/deep_linear]": 0.04842924978584051, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/disjoint_sameline_trunks]": 0.02603654097765684, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/divergent_fanout_split]": 0.03316716640256345, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/dogleg_exempt_distinct]": 0.04053408303298056, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/dogleg_exempt_sameline]": 0.029283917043358088, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/dogleg_twoline_fanout]": 0.03371849888935685, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/exit_corner_offset_dogleg]": 0.0180564159527421, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/fan_bypass_nesting]": 0.059228665893897414, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/fan_in_merge]": 0.048425333108752966, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/fold_double]": 0.12418341590091586, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/fold_fan_across]": 0.11422416707500815, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/fold_stacked_branch]": 0.10748025006614625, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/funcprofiler_upstream]": 0.33221016824245453, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/header_nudge]": 0.016485542291775346, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/header_side_rotated]": 0.01953987590968609, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/inrow_skip_breeze]": 0.008645499357953668, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/inter_row_wrap_clearance]": 0.02699062367901206, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/interchange_lane_reorder]": 0.01679666619747877, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/junction_entry_align]": 0.026849167188629508, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/junction_entry_collision]": 0.05849208193831146, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/junction_entry_reversed_fold]": 0.030897874850779772, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/junction_fanout_convergence]": 0.030210167868062854, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/left_entry_up_wrap]": 0.021826458163559437, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/left_exit_sink_below]": 0.03204495715908706, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_perp_bottom_exit_perp_entry]": 0.019370125140994787, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_perp_bottom_exit_side_entry]": 0.015124708181247115, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_perp_top_exit_perp_entry]": 0.012985708890482783, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.05967308301478624, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_perp_top_exit_side_entry]": 0.04236758407205343, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_to_tb_top_cross_col]": 0.04895679070614278, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_to_tb_top_drop]": 0.01996283372864127, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_to_tb_top_drop_two_lines]": 0.03194541670382023, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_to_tb_top_near_vertical]": 0.06838120892643929, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_to_tb_top_two_lines]": 0.023919458035379648, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_top_entry_cross_column]": 0.012363251065835357, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/lr_top_entry_cross_column_two_line]": 0.010083625791594386, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_around_below_leftmost]": 0.3122906251810491, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_bottom_row_bypass]": 0.034789165714755654, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_leftmost_sink_branch]": 0.0280302909668535, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_offrow_continuation]": 0.025448873871937394, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_port_above_approach]": 0.046999541111290455, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_pullaway]": 0.03112337412312627, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_right_entry]": 0.022602875949814916, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_trunk_out_of_range_section]": 0.08462429093196988, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/merge_trunk_over_low_section]": 0.06571524986065924, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/mismatched_tracks]": 0.02957020909525454, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/mixed_bundle_column]": 0.026190124917775393, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/mixed_port_sides]": 0.019614415941759944, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/multi_input_convergence]": 0.015233708545565605, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/multi_line_bundle]": 0.018355332082137465, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/multicarrier_offrow_exit_climb]": 0.02418725029565394, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/near_vertical_junction_hook]": 0.017194584012031555, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/off_track_convergence]": 0.023419041885063052, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/off_track_convergence_multiline]": 0.0238842093385756, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/off_track_input_above_consumer]": 0.09248491702601314, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/parallel_independent]": 0.03219000087119639, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/peeloff_extra_line_consumer]": 0.03711812710389495, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/peeloff_riser_respace]": 0.037819334072992206, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/post_convergence_trunk]": 0.020408957730978727, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/rail_inter_section]": 0.008301707915961742, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/rail_offtrack_fan]": 0.02034224895760417, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/rail_offtrack_io]": 0.015220582950860262, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/rail_offtrack_plain_io]": 0.01296179206110537, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/reconverge_reversed_fold]": 0.10498695797286928, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/right_entry_from_above]": 0.015807207906618714, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/right_entry_from_above_far]": 0.0110123329795897, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/right_entry_gap_above_empty_row]": 0.020491459174081683, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/right_entry_wrap_no_fan]": 0.024817333789542317, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/rl_entry_runway]": 0.017973790876567364, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/rnaseq_lite]": 0.08628745912574232, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/route_around_intervening]": 0.025661457795649767, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/section_diamond]": 0.03944220906123519, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/self_crossing_bridge]": 0.02110283193178475, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/shared_sink_parallel]": 0.0470515419729054, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/single_section]": 0.008980626240372658, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/stacked_left_exit_drop]": 0.016495334217324853, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/stacked_lr_serpentine]": 0.027928999857977033, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/symmetric_diamond_beside_wide_fan]": 0.04362279083579779, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_bottom_entry_flow_start]": 0.018369125900790095, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_bottom_exit_bundle_jog]": 0.030985998921096325, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_bottom_exit_fork_diamond]": 0.03084266697987914, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_column_continuation_two_lines]": 0.02169158309698105, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_convergence_straight_drop]": 0.007144666742533445, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_internal_diagonal]": 0.01168758305720985, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_left_exit_step]": 0.031583167146891356, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_lr_exit_left]": 0.021161668002605438, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_lr_exit_right]": 0.02515370794571936, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_passthrough_continuation]": 0.022619291907176375, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_passthrough_trunk]": 0.02635670779272914, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_perp_exit_side_neighbour]": 0.007857791846618056, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_right_entry_stack]": 0.2966983746737242, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_trunk_through_fan]": 0.014287333004176617, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/tb_two_line_vert_seam]": 0.018441458232700825, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/terminal_symmetric_fan]": 0.018771665636450052, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/terminus_join]": 0.008050833828747272, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/top_entry_header_clash]": 0.018157376209273934, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/trunk_through_fan]": 0.024612874258309603, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/u_turn_fold]": 0.07539566815830767, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/uneven_diamond]": 0.007230750052258372, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/upward_bypass]": 0.056884667137637734, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/variant_calling]": 0.17925720917992294, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/wide_fan_in]": 0.03562995791435242, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/wide_fan_out]": 0.03090741694904864, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/wide_label_fan]": 0.010553959058597684, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[topologies/wrapped_label_trunk]": 0.019587416434660554, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[variant_calling]": 0.027697375044226646, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[variant_calling_tuned]": 0.04563862504437566, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[variantbenchmarking]": 0.31356566678732634, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[variantbenchmarking_auto]": 0.3379970418754965, + "tests/test_seam_orientation.py::test_classifier_never_reverses_a_kept_seam[variantprioritization]": 0.06391379260458052, + "tests/test_seam_orientation.py::test_each_reversing_idiom_fires[bypass_leftward_far_side_entry-src_sec-tgt_sec]": 0.000808249693363905, + "tests/test_seam_orientation.py::test_each_reversing_idiom_fires[fold_double-calling-hard_filter]": 0.001045416807755828, + "tests/test_seam_orientation.py::test_each_reversing_idiom_fires[fold_stacked_branch-integration-bio_interp]": 0.0002846249844878912, + "tests/test_seam_orientation.py::test_each_reversing_idiom_fires[rnaseq_sections-postprocessing-qc_report]": 0.00031341705471277237, + "tests/test_seam_orientation.py::test_each_reversing_idiom_fires[tb_right_entry_stack-source-upper]": 0.00037262518890202045, + "tests/test_seam_orientation.py::test_residual_set_matches_documented_divergences": 6.221117040840909, + "tests/test_seam_orientation.py::test_straight_continuation_preserves": 0.0009644583333283663, + "tests/test_section_arranger.py::test_determining_lines_absent_from_present_are_ignored": 0.00021908292546868324, + "tests/test_section_arranger.py::test_determining_order_takes_the_front_lanes": 0.00019291695207357407, + "tests/test_section_arranger.py::test_fanout_source_section_leaves_in_peel_order[clear_channel_target_aware_push.mmd-src-expected1]": 0.058662124909460545, + "tests/test_section_arranger.py::test_fanout_source_section_leaves_in_peel_order[dogleg_twoline_fanout.mmd-left_tgt-expected0]": 0.06133183278143406, + "tests/test_section_arranger.py::test_fanout_source_section_leaves_in_peel_order[reconverge_reversed_fold.mmd-integration-expected3]": 0.3984825839288533, + "tests/test_section_arranger.py::test_fanout_source_section_leaves_in_peel_order[reconverge_reversed_fold.mmd-preprocessing-expected2]": 0.14875620789825916, + "tests/test_section_arranger.py::test_missing_priority_defaults_to_zero": 0.0006422929000109434, + "tests/test_section_arranger.py::test_returns_none_when_already_priority_order": 0.0006683752872049809, + "tests/test_section_arranger.py::test_unconstrained_lines_fall_to_the_back_in_priority_order": 0.0002423750702291727, + "tests/test_section_boundary_routing.py::test_boundary_fixtures_pass_runtime_guards[merge_around_below_leftmost]": 0.076064791996032, + "tests/test_section_boundary_routing.py::test_boundary_fixtures_pass_runtime_guards[merge_leftmost_sink_branch]": 0.06780087598599494, + "tests/test_section_boundary_routing.py::test_boundary_fixtures_pass_runtime_guards[right_entry_from_above]": 0.031047666678205132, + "tests/test_section_boundary_routing.py::test_boundary_fixtures_pass_runtime_guards[stacked_left_exit_drop]": 0.02340370765887201, + "tests/test_section_boundary_routing.py::test_entry_ports_approached_from_outward_side[around_below_ep_col_gt0]": 0.02184983273036778, + "tests/test_section_boundary_routing.py::test_entry_ports_approached_from_outward_side[merge_around_below_leftmost]": 0.030031749978661537, + "tests/test_section_boundary_routing.py::test_entry_ports_approached_from_outward_side[merge_leftmost_sink_branch]": 0.035323750926181674, + "tests/test_section_boundary_routing.py::test_entry_ports_approached_from_outward_side[right_entry_from_above]": 0.014235292794182897, + "tests/test_section_boundary_routing.py::test_entry_ports_approached_from_outward_side[right_entry_gap_above_empty_row]": 0.013623750070109963, + "tests/test_section_boundary_routing.py::test_entry_ports_approached_from_outward_side[right_entry_wrap_no_fan]": 0.014871582854539156, + "tests/test_section_boundary_routing.py::test_entry_ports_approached_from_outward_side[stacked_left_exit_drop]": 0.017691083252429962, + "tests/test_section_boundary_routing.py::test_right_entry_from_above_drops_in_without_diving_below[right_entry_from_above]": 0.01700395834632218, + "tests/test_section_boundary_routing.py::test_right_entry_from_above_drops_in_without_diving_below[right_entry_from_above_far]": 0.03642437420785427, + "tests/test_section_boundary_routing.py::test_routes_do_not_cross_unrelated_section_interiors[around_below_ep_col_gt0]": 0.02906808420084417, + "tests/test_section_boundary_routing.py::test_routes_do_not_cross_unrelated_section_interiors[merge_around_below_leftmost]": 0.020849167136475444, + "tests/test_section_boundary_routing.py::test_routes_do_not_cross_unrelated_section_interiors[merge_leftmost_sink_branch]": 0.04753162479028106, + "tests/test_section_boundary_routing.py::test_routes_do_not_cross_unrelated_section_interiors[right_entry_from_above]": 0.0469837908167392, + "tests/test_section_boundary_routing.py::test_routes_do_not_cross_unrelated_section_interiors[right_entry_gap_above_empty_row]": 0.022028709296137094, + "tests/test_section_boundary_routing.py::test_routes_do_not_cross_unrelated_section_interiors[right_entry_wrap_no_fan]": 0.010968416929244995, + "tests/test_section_boundary_routing.py::test_routes_do_not_cross_unrelated_section_interiors[stacked_left_exit_drop]": 0.03239658335223794, + "tests/test_section_header_placement.py::test_default_above_placement_would_clash[header_nudge]": 0.014915499836206436, + "tests/test_section_header_placement.py::test_default_above_placement_would_clash[header_side_rotated]": 0.012391959317028522, + "tests/test_section_header_placement.py::test_default_above_placement_would_clash[top_entry_header_clash]": 0.01411300036124885, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/centered_tracks.mmd]": 0.034705873811617494, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/cross_track_interchange.mmd]": 0.05371925118379295, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/diagonal_labels.mmd]": 0.09575316682457924, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/differentialabundance.mmd]": 0.23280737409368157, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/differentialabundance_default.mmd]": 0.5800049172248691, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/directional_flow.mmd]": 0.02530529093928635, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/disconnected_components.mmd]": 0.04484916687943041, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/epitopeprediction.mmd]": 0.08950925106182694, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/file_icons.mmd]": 0.06626166612841189, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/genomeassembly.mmd]": 0.12778795813210309, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/genomeassembly_staggered.mmd]": 0.0888396657537669, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/genomic_pipeline.mmd]": 0.372450000140816, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/group_labels.mmd]": 0.013789207907393575, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/hlatyping.mmd]": 0.04786316677927971, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/legend_combo.mmd]": 0.03941058274358511, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/legend_logo_placement.mmd]": 0.06299237487837672, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/line_spread.mmd]": 0.08068829099647701, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/longread_variant_calling.mmd]": 0.16667229309678078, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/marker_styles.mmd]": 0.046730709029361606, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/off_track_outputs.mmd]": 0.014858874958008528, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/rail_mode.mmd]": 0.08327516564168036, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/rail_section.mmd]": 0.05931679182685912, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/rnaseq_auto.mmd]": 0.19257645891048014, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/rnaseq_sections.mmd]": 0.9679272079374641, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.5192078331019729, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/sarek_metro.mmd]": 0.21976270666345954, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/simple_pipeline.mmd]": 0.010109041118994355, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/tb_file_termini.mmd]": 0.03159208316355944, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.04992716806009412, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.019147457787767053, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/around_section_below.mmd]": 0.023735000053420663, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.039881417294964194, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.041762917302548885, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.07080841599963605, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.030436707893386483, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bt_chain.mmd]": 0.01031508413143456, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.014528959291055799, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.01732783392071724, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bt_fork.mmd]": 0.006344998953863978, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.009212167002260685, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.016941083827987313, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.01873737503774464, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.008605499984696507, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.05612237495370209, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.03710345923900604, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.04307395708747208, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.040720249991863966, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.0637310422025621, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.03669058391824365, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.04459633305668831, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.05304729216732085, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.03422512370161712, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.022557543125003576, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.029891541926190257, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/complex_multipath.mmd]": 0.10908233397640288, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.04618516587652266, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.15278862603008747, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.019335749093443155, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.009379249066114426, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.015224749688059092, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.013709458988159895, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.023793958127498627, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/deep_linear.mmd]": 0.07355879177339375, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.026416126172989607, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.014540791045874357, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.022078790934756398, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.012905291048809886, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.017925249878317118, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.02559845708310604, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.06042054085992277, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03542804182507098, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/fold_double.mmd]": 0.10090262489393353, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.29531695786863565, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.15468345792032778, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.29022112605161965, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/header_nudge.mmd]": 0.018534875009208918, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.01276045897975564, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.06571633298881352, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.032096583396196365, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.016061250120401382, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.03667454072274268, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.03647633385844529, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.03592429286800325, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.030935999006032944, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.021002208814024925, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.02031408273614943, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.018507001223042607, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.021327333990484476, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.01441912492737174, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.01590979122556746, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.010414415039122105, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.016355416039004922, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.03309108316898346, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.02417466603219509, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.02145312400534749, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.01660620770417154, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.01649920898489654, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.011257583973929286, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.030881916405633092, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.04117333376780152, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.03267654194496572, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.01964187528938055, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.026144541800022125, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.036922625033184886, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.04287400096654892, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.04231783514842391, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.0474998343270272, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.03213350102305412, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.030771041987463832, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.01520024985074997, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.02758883312344551, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.025126165943220258, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.04506650078110397, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.018902749987319112, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.016651249956339598, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.03235604288056493, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.11929549905471504, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/parallel_independent.mmd]": 0.022866041865199804, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.035564541118219495, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.03487279172986746, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.010718626203015447, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.008409291738644242, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.07173645682632923, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.021663541672751307, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.016069165896624327, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.10664391703903675, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.016031376086175442, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.010759415803477168, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.014756332850083709, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.011050041997805238, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.022357875015586615, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.07010866724886, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.02384020877070725, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/section_diamond.mmd]": 0.025080834049731493, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.02056224993430078, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.05035725003108382, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/single_section.mmd]": 0.01684200018644333, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.025768791092559695, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.020515500102192163, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.04348720773123205, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.017173874890431762, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.021560666849836707, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.02294712606817484, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.021380832884460688, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.009736417094245553, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.02738670795224607, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.027447791770100594, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.02215045806951821, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.027638375060632825, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.025355041958391666, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.029141749953851104, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.009018125012516975, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.02110445825383067, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.010023291688412428, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.018377041211351752, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.018901792354881763, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/terminus_join.mmd]": 0.017810833640396595, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.03349637403152883, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.03291837521828711, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.07313050027005374, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.015262667089700699, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/upward_bypass.mmd]": 0.038208665791898966, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/variant_calling.mmd]": 0.11887624976225197, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.019014540826901793, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.025079498765990138, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.011223125271499157, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.008759957971051335, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/variant_calling.mmd]": 0.0522923341486603, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/variant_calling_tuned.mmd]": 0.044755125883966684, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/variantbenchmarking.mmd]": 0.26840470894239843, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.29415249987505376, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[examples/variantprioritization.mmd]": 0.4357745419256389, + "tests/test_section_header_placement.py::test_no_section_header_route_clashes_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.013861415907740593, + "tests/test_section_numbering.py::TestSectionNumberingOrder::test_all_examples_sequential": 4.922744708135724, + "tests/test_section_numbering.py::TestSectionNumberingOrder::test_asymmetric_top_row_sequential": 0.05147908395156264, + "tests/test_section_numbering.py::TestSectionNumberingOrder::test_fold_return_row_numbered_after_forward_row": 0.00027425005100667477, + "tests/test_section_numbering.py::TestSectionNumberingOrder::test_numbers_are_sequential": 0.03280862490646541, + "tests/test_section_numbering.py::TestSectionNumberingOrder::test_within_sweep_columns_increase": 0.3406190408859402, + "tests/test_serpentine_foldback_bundle.py::test_fold_keeps_genome_ahead_of_postprocessing[10]": 0.15399833372794092, + "tests/test_serpentine_foldback_bundle.py::test_fold_keeps_genome_ahead_of_postprocessing[1]": 0.1521422080695629, + "tests/test_serpentine_foldback_bundle.py::test_fold_keeps_genome_ahead_of_postprocessing[2]": 0.18091383296996355, + "tests/test_serpentine_foldback_bundle.py::test_fold_keeps_genome_ahead_of_postprocessing[3]": 0.16875679115764797, + "tests/test_serpentine_foldback_bundle.py::test_fold_keeps_genome_ahead_of_postprocessing[6]": 0.1312032078858465, + "tests/test_serpentine_foldback_bundle.py::test_folded_render_has_no_curve_defect[10]": 0.18010066612623632, + "tests/test_serpentine_foldback_bundle.py::test_folded_render_has_no_curve_defect[1]": 0.1211696658283472, + "tests/test_serpentine_foldback_bundle.py::test_folded_render_has_no_curve_defect[2]": 0.15313679189421237, + "tests/test_serpentine_foldback_bundle.py::test_folded_render_has_no_curve_defect[3]": 0.5392226669937372, + "tests/test_serpentine_foldback_bundle.py::test_folded_render_has_no_curve_defect[6]": 0.19160500075668097, + "tests/test_split_fanout_descent_invariant.py::test_checker_fires_without_fuse_pass": 0.03831770922988653, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/centered_tracks.mmd]": 0.020661333110183477, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/cross_track_interchange.mmd]": 0.051902541192248464, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/diagonal_labels.mmd]": 0.05546825076453388, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/differentialabundance.mmd]": 0.2607513749971986, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/differentialabundance_default.mmd]": 0.2531035840511322, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/directional_flow.mmd]": 0.035905624041333795, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/disconnected_components.mmd]": 0.03628395893611014, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/epitopeprediction.mmd]": 0.0859601660631597, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/file_icons.mmd]": 0.027792626060545444, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/genomeassembly.mmd]": 0.08574112597852945, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/genomeassembly_staggered.mmd]": 0.11032787500880659, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/genomic_pipeline.mmd]": 0.4753471661824733, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/group_labels.mmd]": 0.036198625108227134, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/hlatyping.mmd]": 0.4393441660795361, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/legend_combo.mmd]": 0.02049154113046825, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/legend_logo_placement.mmd]": 0.05902908300049603, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/line_spread.mmd]": 0.038856833009049296, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/longread_variant_calling.mmd]": 0.16671354207210243, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/marker_styles.mmd]": 0.04188820696435869, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/off_track_outputs.mmd]": 0.023201290983706713, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/rail_mode.mmd]": 0.030041416874155402, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/rail_section.mmd]": 0.04728983296081424, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/rnaseq_auto.mmd]": 0.1259728770237416, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/rnaseq_sections.mmd]": 0.5369717499706894, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.6520812083035707, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/sarek_metro.mmd]": 0.22719762497581542, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/simple_pipeline.mmd]": 0.012238998897373676, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/tb_file_termini.mmd]": 0.03355491580441594, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.04950995906256139, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.04666491691023111, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/around_section_below.mmd]": 0.03740216698497534, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.10886091506108642, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.03739324980415404, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.07352183386683464, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.06136199994944036, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bt_chain.mmd]": 0.013312458992004395, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.014349207980558276, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.013168749865144491, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bt_fork.mmd]": 0.01091737486422062, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.015607374021783471, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.016796708572655916, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.019833541940897703, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.03686983231455088, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.10127895884215832, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.03436854085884988, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.039384081959724426, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.03384349984116852, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.049407499842345715, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.025711832800880075, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.026232125936076045, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.022208748618140817, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.028100125025957823, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.022412999998778105, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.013342165853828192, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/complex_multipath.mmd]": 0.3282462079077959, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.05040945811197162, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.16621433407999575, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.0348260838072747, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.014602167066186666, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.0095871661324054, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.01884087617509067, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.03745224978774786, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/deep_linear.mmd]": 0.06612637499347329, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.05219366727396846, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.018057000124827027, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.047495373990386724, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.03583362465724349, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.03280566702596843, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.04478374985046685, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.06174720823764801, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03544683358632028, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/fold_double.mmd]": 0.12234270689077675, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.08420850080437958, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.06970350025221705, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.22004120680503547, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/header_nudge.mmd]": 0.05853833304718137, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.31710741692222655, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.009230751311406493, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.03573845885694027, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.013932917034253478, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.04243695898912847, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.042913374956697226, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.0284062079153955, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.03474587411619723, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.01826174999587238, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.03812420810572803, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.014076083898544312, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.01237995782867074, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.01603741804137826, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.021520667942240834, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.0155734580475837, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.020264166872948408, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.010747415712103248, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.014663415728136897, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.019281082786619663, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.01667570904828608, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.013233083067461848, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.013384707039222121, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.0491123350802809, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.03205849998630583, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.02480220887809992, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.01840800093486905, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.029845750657841563, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.04459958407096565, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.04614479187875986, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.03611891600303352, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.04388224892318249, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.029040666995570064, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.054764000000432134, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.032426875084638596, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.030315749812871218, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.030831418000161648, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.05196170904673636, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.04989762511104345, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.03857687511481345, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.027544249780476093, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.16530483309179544, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/parallel_independent.mmd]": 0.016501123551279306, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.04420345788821578, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.03401737497188151, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.015750708058476448, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.021091250237077475, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.021949166664853692, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.012355458457022905, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.008899875218048692, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.1788691240362823, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.009310001973062754, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.2548769998829812, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.03280766704119742, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.0118410000577569, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.013911084039136767, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.11712104105390608, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.022524833912029862, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/section_diamond.mmd]": 0.06143204099498689, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.02722858334891498, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.04636254208162427, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/single_section.mmd]": 0.015690624015405774, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.019559916108846664, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.05298012401908636, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.041046249214559793, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.011497457278892398, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.020641291281208396, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.024976249784231186, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.009895083028823137, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.007047583116218448, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.030074499314650893, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.03139808285050094, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.04644091660156846, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.02598170912824571, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.03326158272102475, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.031094750156626105, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.01293062511831522, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.04387075128033757, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.01585183199495077, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.04986866703256965, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.021744291996583343, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/terminus_join.mmd]": 0.017017583129927516, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.016703040804713964, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.04943487583659589, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.058588249841704965, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.021035542245954275, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/upward_bypass.mmd]": 0.09031183295883238, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/variant_calling.mmd]": 0.2148842909373343, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.029024791903793812, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.03719170903787017, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.024076125118881464, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.020959375891834497, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/variant_calling.mmd]": 0.04505187482573092, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/variant_calling_tuned.mmd]": 0.31341908290050924, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/variantbenchmarking.mmd]": 0.2056615820620209, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.18654041551053524, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[examples/variantprioritization.mmd]": 0.056859750067815185, + "tests/test_split_fanout_descent_invariant.py::test_no_split_same_line_fanout_descents_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.02054916601628065, + "tests/test_struct_extent_predictor.py::test_off_track_lift_not_under_predicted": 0.015346084022894502, + "tests/test_struct_extent_predictor.py::test_predictor_matches_shrink_rule": 0.36235554120503366, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[01_minimal.mmd]": 0.01818320923484862, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[02_sections.mmd]": 0.027389708906412125, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[03_fan_out.mmd]": 0.03899220726452768, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[03b_fan_in_merge.mmd]": 0.03625666699372232, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[04_directions.mmd]": 0.2858668330591172, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[05_file_icons.mmd]": 0.01959854317829013, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[05b_multi_icons.mmd]": 0.016562124947085977, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[05c_files_icon.mmd]": 0.02845533424988389, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[05d_folder_icon.mmd]": 0.03528850106522441, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[05f_banner_labels.mmd]": 0.036147375125437975, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[06a_without_hidden.mmd]": 0.027260875096544623, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[06b_with_hidden.mmd]": 0.025444416794925928, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[aligner_row_pinned_continuation.mmd]": 0.059512375155463815, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[around_below_ep_col_gt0.mmd]": 0.027148874010890722, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[around_section_below.mmd]": 0.025296542095020413, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[asymmetric_tree.mmd]": 0.04718495788984001, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bottom_row_climb_clear_corridor.mmd]": 0.08724079211242497, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[branch_fold_forward.mmd]": 0.04244516580365598, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[branch_fold_stability.mmd]": 0.028408082900568843, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bt_chain.mmd]": 0.00622349907644093, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bt_exit_top_above.mmd]": 0.010834085056558251, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bt_exit_top_above_2line.mmd]": 0.019435792928561568, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bt_fork.mmd]": 0.015614918433129787, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bt_perp_entry_below.mmd]": 0.04571795789524913, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bt_to_lr.mmd]": 0.03372795809991658, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bt_to_tb.mmd]": 0.010600040899589658, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bundle_terminator_continuation.mmd]": 0.009846624918282032, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_fan_in_outer_slot.mmd]": 0.06105050025507808, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_gap2_rightward_overflow.mmd]": 0.029221666045486927, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_label_rake.mmd]": 0.09367833333089948, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_label_rake_left.mmd]": 0.047613331815227866, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_label_rake_wide.mmd]": 0.06347970711067319, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_leftward_far_side_entry.mmd]": 0.02133304113522172, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_leftward_overflow.mmd]": 0.04206412588246167, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[bypass_v_tight.mmd]": 0.02457091584801674, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[centered_tracks.mmd]": 0.03112445934675634, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[clear_channel_target_aware_push.mmd]": 0.02873375010676682, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[compact_gap_peer_conflict.mmd]": 0.025351249147206545, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[compact_hidden_passthrough.mmd]": 0.01986475009471178, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[complex_multipath.mmd]": 0.05489904130809009, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[convergence_stacked_sink.mmd]": 0.04769929172471166, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[convergent_offrow_exit_climb.mmd]": 0.11362025002017617, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[corridor_narrow_gap_fallback.mmd]": 0.02584274997934699, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[cross_col_top_entry.mmd]": 0.015260874759405851, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[cross_column_perp_drop.mmd]": 0.01296370686031878, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[cross_column_perp_drop_far_exit.mmd]": 0.011684208177030087, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[cross_row_gap_wrap.mmd]": 0.024225291796028614, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[cross_track_interchange.mmd]": 0.06717137503437698, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[deep_linear.mmd]": 0.05769691686145961, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[diagonal_labels.mmd]": 0.05934808379970491, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[differentialabundance.mmd]": 0.3466437919996679, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[differentialabundance_default.mmd]": 0.35753812501206994, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[directional_flow.mmd]": 0.022548125125467777, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[disconnected_components.mmd]": 0.04542833426967263, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[disjoint_sameline_trunks.mmd]": 0.323093542130664, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[divergent_fanout_split.mmd]": 0.03968645911663771, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[dogleg_exempt_distinct.mmd]": 0.033170374343171716, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[dogleg_exempt_sameline.mmd]": 0.012184459250420332, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[dogleg_twoline_fanout.mmd]": 0.0680959583260119, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[epitopeprediction.mmd]": 0.09705891576595604, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[exit_corner_offset_dogleg.mmd]": 0.03940725000575185, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[fan_bypass_nesting.mmd]": 0.049514499958604574, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[fan_in_merge.mmd]": 0.02059062523767352, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[file_icons.mmd]": 0.05275587481446564, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[fold_double.mmd]": 0.10147233423776925, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[fold_fan_across.mmd]": 0.10362154175527394, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[fold_stacked_branch.mmd]": 0.09830037388019264, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[funcprofiler_upstream.mmd]": 0.25588600104674697, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[genomeassembly.mmd]": 0.07164616603404284, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[genomeassembly_staggered.mmd]": 0.09852962498553097, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[genomic_pipeline.mmd]": 0.3947748336941004, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[group_labels.mmd]": 0.016353458166122437, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[header_nudge.mmd]": 0.027182332705706358, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[header_side_rotated.mmd]": 0.015476208878681064, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[hlatyping.mmd]": 0.06163708306849003, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[inrow_skip_breeze.mmd]": 0.014588251011446118, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[inter_row_wrap_clearance.mmd]": 0.028105166973546147, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[interchange_lane_reorder.mmd]": 0.016568833263590932, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[junction_entry_align.mmd]": 0.04380312468856573, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[junction_entry_collision.mmd]": 0.029216707916930318, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[junction_entry_reversed_fold.mmd]": 0.026202165987342596, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[junction_fanout_convergence.mmd]": 0.014857874950394034, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[left_entry_up_wrap.mmd]": 0.016923582879826427, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[left_exit_sink_below.mmd]": 0.02410987508483231, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[legend_combo.mmd]": 0.022216750774532557, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[legend_logo_placement.mmd]": 0.03384345839731395, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[line_spread.mmd]": 0.04580600094050169, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[longread_variant_calling.mmd]": 0.130010791355744, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_perp_bottom_exit_perp_entry.mmd]": 0.015896541764959693, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_perp_bottom_exit_side_entry.mmd]": 0.012989334994927049, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_perp_top_exit_perp_entry.mmd]": 0.01949387416243553, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_perp_top_exit_perp_entry_diverging.mmd]": 0.016660957830026746, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_perp_top_exit_side_entry.mmd]": 0.020058584166690707, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_to_tb_top_cross_col.mmd]": 0.021396041847765446, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_to_tb_top_drop.mmd]": 0.010961707914248109, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_to_tb_top_drop_two_lines.mmd]": 0.010121791157871485, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_to_tb_top_near_vertical.mmd]": 0.009953916072845459, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_to_tb_top_two_lines.mmd]": 0.017367248656228185, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_top_entry_cross_column.mmd]": 0.008330541895702481, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[lr_top_entry_cross_column_two_line.mmd]": 0.009358623763546348, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[marker_styles.mmd]": 0.04615387530066073, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_around_below_leftmost.mmd]": 0.023437291849404573, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_bottom_row_bypass.mmd]": 0.02338999998755753, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_leftmost_sink_branch.mmd]": 0.02400800003670156, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_offrow_continuation.mmd]": 0.018554124049842358, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_port_above_approach.mmd]": 0.020478916121646762, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_pullaway.mmd]": 0.0798908737488091, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_right_entry.mmd]": 0.039926292141899467, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_trunk_out_of_range_section.mmd]": 0.03467295900918543, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[merge_trunk_over_low_section.mmd]": 0.03056550119072199, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[mismatched_tracks.mmd]": 0.04651816585101187, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[mixed_bundle_column.mmd]": 0.04698650003410876, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[mixed_port_sides.mmd]": 0.011946540791541338, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[multi_input_convergence.mmd]": 0.03391420794650912, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[multi_line_bundle.mmd]": 0.037856541108340025, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[multicarrier_offrow_exit_climb.mmd]": 0.039852708112448454, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[near_vertical_junction_hook.mmd]": 0.01732529210858047, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[off_track_convergence.mmd]": 0.026960458839312196, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[off_track_convergence_multiline.mmd]": 0.029968499671667814, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[off_track_input_above_consumer.mmd]": 0.0815654587931931, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[off_track_outputs.mmd]": 0.036663665901869535, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[parallel_independent.mmd]": 0.03945483407005668, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[peeloff_extra_line_consumer.mmd]": 0.05307654105126858, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[peeloff_riser_respace.mmd]": 0.05653279204852879, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[pipeline.mmd]": 0.03053154214285314, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[post_convergence_trunk.mmd]": 0.01380745810456574, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rail_inter_section.mmd]": 0.013012333773076534, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rail_mode.mmd]": 0.022587666986510158, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rail_offtrack_fan.mmd]": 0.026182624977082014, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rail_offtrack_io.mmd]": 0.4149586237035692, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rail_offtrack_plain_io.mmd]": 0.012971832882612944, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rail_section.mmd]": 0.054344499949365854, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[reconverge_reversed_fold.mmd]": 0.10350558417849243, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[right_entry_from_above.mmd]": 0.018749460112303495, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[right_entry_from_above_far.mmd]": 0.015656333649531007, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[right_entry_gap_above_empty_row.mmd]": 0.016369707882404327, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[right_entry_wrap_no_fan.mmd]": 0.01193062518723309, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rl_entry_runway.mmd]": 0.014385249931365252, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rnaseq_auto.mmd]": 0.12866133311763406, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rnaseq_lite.mmd]": 0.08326854137703776, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rnaseq_sections.mmd]": 0.6027017896994948, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[rnaseq_sections_manual.mmd]": 0.785088042030111, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[route_around_intervening.mmd]": 0.02590779308229685, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[sarek_metro.mmd]": 0.1437730418983847, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[section_diamond.mmd]": 0.022696376079693437, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[self_crossing_bridge.mmd]": 0.014765041880309582, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[shared_sink_parallel.mmd]": 0.05316512519493699, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[simple_pipeline.mmd]": 0.008447208907455206, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[single_section.mmd]": 0.005826665787026286, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[stacked_left_exit_drop.mmd]": 0.013128167018294334, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[stacked_lr_serpentine.mmd]": 0.03747633402235806, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[symmetric_diamond_beside_wide_fan.mmd]": 0.036040584091097116, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_bottom_entry_flow_start.mmd]": 0.01606762409210205, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_bottom_exit_bundle_jog.mmd]": 0.021438749972730875, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_bottom_exit_fork_diamond.mmd]": 0.024575792253017426, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_column_continuation_two_lines.mmd]": 0.03276687511242926, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_convergence_straight_drop.mmd]": 0.008281206712126732, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_file_termini.mmd]": 0.022982750087976456, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_internal_diagonal.mmd]": 0.02382462564855814, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_left_exit_step.mmd]": 0.02965237363241613, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_lr_exit_left.mmd]": 0.016633166233077645, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_lr_exit_right.mmd]": 0.028018000070005655, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_passthrough_continuation.mmd]": 0.008509874111041427, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_passthrough_trunk.mmd]": 0.018568208208307624, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_perp_exit_side_neighbour.mmd]": 0.01867941697128117, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_right_entry_stack.mmd]": 0.04115904099307954, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_trunk_through_fan.mmd]": 0.008756915805861354, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[tb_two_line_vert_seam.mmd]": 0.014696584083139896, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[terminal_symmetric_fan.mmd]": 0.013289917027577758, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[terminus_join.mmd]": 0.005599084077402949, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[top_entry_header_clash.mmd]": 0.008860458619892597, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[trunk_through_fan.mmd]": 0.01955070812255144, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[u_turn_fold.mmd]": 0.0578968757763505, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[uneven_diamond.mmd]": 0.014859583927318454, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[upward_bypass.mmd]": 0.05072479113005102, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[variant_calling.mmd0]": 0.2672694169450551, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[variant_calling.mmd1]": 0.052853625267744064, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[variant_calling_tuned.mmd]": 0.05558450007811189, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[variantbenchmarking.mmd]": 0.19381808256730437, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[variantbenchmarking_auto.mmd]": 0.5094460428226739, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[variantprioritization.mmd]": 0.08731666696257889, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[wide_fan_in.mmd]": 0.03935262397862971, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[wide_fan_out.mmd]": 0.05062779225409031, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[wide_label_fan.mmd]": 0.02855899976566434, + "tests/test_struct_extent_predictor.py::test_structural_extent_matches_settled_within_tolerance[wrapped_label_trunk.mmd]": 0.020465373992919922, + "tests/test_svg_namespace.py::test_dark_mode_css_absent_for_opaque_theme": 0.011355000082403421, + "tests/test_svg_namespace.py::test_dark_mode_css_present_for_transparent_theme_by_default": 0.00643083406612277, + "tests/test_svg_namespace.py::test_default_render_uses_unprefixed_classes": 0.016807541949674487, + "tests/test_svg_namespace.py::test_empty_prefix_is_identical_to_no_prefix": 0.0067192919086664915, + "tests/test_svg_namespace.py::test_inject_dark_mode_css_false_suppresses_block": 0.00570512586273253, + "tests/test_svg_namespace.py::test_inject_dark_mode_css_true_matches_default": 0.015293875010684133, + "tests/test_svg_namespace.py::test_manifest_ids_and_data_attrs_not_prefixed": 0.005623333854600787, + "tests/test_svg_namespace.py::test_svg_class_prefix_applied_to_all_classes": 0.010987667134031653, + "tests/test_svg_namespace.py::test_svg_class_prefix_applied_to_dark_mode_css_selectors": 0.01494025089778006, + "tests/test_svg_namespace.py::test_svg_class_prefix_applied_to_metro_line_class": 0.0056354987900704145, + "tests/test_svg_namespace.py::test_two_renders_with_different_prefixes_dont_share_presentation_classes": 0.010870791971683502, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_stacked_collector_corridor": 0.5992975009139627, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[aligner_row_pinned_continuation]": 0.045298916986212134, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[around_below_ep_col_gt0]": 0.02915641712024808, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[around_section_below]": 0.031688249902799726, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[asymmetric_tree]": 0.24706558184698224, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.02012312482111156, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[branch_fold_forward]": 0.040430332999676466, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[branch_fold_stability]": 0.038494833977892995, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bt_chain]": 0.007741292240098119, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bt_exit_top_above]": 0.017660000128671527, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bt_exit_top_above_2line]": 0.012746583204716444, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bt_fork]": 0.015921750105917454, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bt_perp_entry_below]": 0.012520334217697382, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bt_to_lr]": 0.015971458051353693, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bt_to_tb]": 0.027276333421468735, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bundle_terminator_continuation]": 0.012635624967515469, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.09474654099904001, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.04254670697264373, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_label_rake]": 0.03576404205523431, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_label_rake_left]": 0.03581716609187424, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_label_rake_wide]": 0.06325399992056191, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.27383412467315793, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_leftward_overflow]": 0.04231533291749656, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[bypass_v_tight]": 0.0460536670871079, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[clear_channel_target_aware_push]": 0.039835832081735134, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[compact_gap_peer_conflict]": 0.036292291013523936, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[compact_hidden_passthrough]": 0.01721408311277628, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[complex_multipath]": 0.08617666573263705, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[convergence_stacked_sink]": 0.06950591690838337, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[convergent_offrow_exit_climb]": 0.2578444997780025, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.04531516693532467, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[cross_col_top_entry]": 0.022901458898559213, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[cross_column_perp_drop]": 0.018983084009960294, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.016170875867828727, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[cross_row_gap_wrap]": 0.06398287508636713, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[deep_linear]": 0.06732958415523171, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[disjoint_sameline_trunks]": 0.04147045919671655, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[divergent_fanout_split]": 0.024140166584402323, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[dogleg_exempt_distinct]": 0.039327416801825166, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[dogleg_exempt_sameline]": 0.020614958833903074, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[dogleg_twoline_fanout]": 0.03925633290782571, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[exit_corner_offset_dogleg]": 0.038902875036001205, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[fan_bypass_nesting]": 0.08000679221004248, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[fan_in_merge]": 0.05795120797120035, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[fold_double]": 0.285796248819679, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[fold_fan_across]": 0.1423447490669787, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[fold_stacked_branch]": 0.1393343759700656, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[funcprofiler_upstream]": 0.4625894578639418, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[header_nudge]": 0.019240416819229722, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[header_side_rotated]": 0.015174959320574999, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[inrow_skip_breeze]": 0.009392540669068694, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[inter_row_wrap_clearance]": 0.02641933294944465, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[interchange_lane_reorder]": 0.019688582979142666, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[junction_entry_align]": 0.058035540860146284, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[junction_entry_collision]": 0.04058066592551768, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[junction_entry_reversed_fold]": 0.03968120785430074, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[junction_fanout_convergence]": 0.023062750231474638, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[left_entry_up_wrap]": 0.011725333984941244, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[left_exit_sink_below]": 0.0406313322018832, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.04043945763260126, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.01367820706218481, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.022794334217905998, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.02399624977260828, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.024114292114973068, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.028146789874881506, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_to_tb_top_drop]": 0.016680250875651836, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.01833054213784635, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.017493957886472344, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.01531091658398509, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_top_entry_cross_column]": 0.01595729193650186, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.023224123986437917, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_around_below_leftmost]": 0.03575549996457994, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_bottom_row_bypass]": 0.05512020783498883, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_leftmost_sink_branch]": 0.04190362384542823, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_offrow_continuation]": 0.08527100016362965, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_port_above_approach]": 0.047460457077249885, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_pullaway]": 0.03785516717471182, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_right_entry]": 0.054953459184616804, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.03989691683091223, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[merge_trunk_over_low_section]": 0.06442800001241267, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[mismatched_tracks]": 0.06442804215475917, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[mixed_bundle_column]": 0.10048637422733009, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[mixed_port_sides]": 0.016788042848929763, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[multi_input_convergence]": 0.03220720775425434, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[multi_line_bundle]": 0.05704612471163273, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.05120429187081754, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[near_vertical_junction_hook]": 0.06067870813421905, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[off_track_convergence]": 0.04214287525974214, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[off_track_convergence_multiline]": 0.0277752501424402, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[off_track_input_above_consumer]": 0.13783150003291667, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[parallel_independent]": 0.04784937365911901, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[peeloff_extra_line_consumer]": 0.06998400017619133, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[peeloff_riser_respace]": 0.04683500085957348, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[post_convergence_trunk]": 0.021682873833924532, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[rail_inter_section]": 0.04715816583484411, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[rail_offtrack_fan]": 0.041978583903983235, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[rail_offtrack_io]": 0.0288741672411561, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[rail_offtrack_plain_io]": 0.021619250066578388, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[reconverge_reversed_fold]": 0.49211029103025794, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[right_entry_from_above]": 0.024980832589790225, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[right_entry_from_above_far]": 0.03045991831459105, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.022014582762494683, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[right_entry_wrap_no_fan]": 0.01648312364704907, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[rl_entry_runway]": 0.018672248814255, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[rnaseq_lite]": 0.10629191691987216, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[route_around_intervening]": 0.01775412610732019, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[section_diamond]": 0.021751041989773512, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[self_crossing_bridge]": 0.059058499755337834, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[shared_sink_parallel]": 0.07837791624478996, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[single_section]": 0.015424333047121763, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[stacked_left_exit_drop]": 0.023791709216311574, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[stacked_lr_serpentine]": 0.24714833311736584, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.042468210216611624, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.009502082131803036, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.016501083970069885, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.024130291305482388, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_column_continuation_two_lines]": 0.018701540073379874, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_convergence_straight_drop]": 0.007106791948899627, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_internal_diagonal]": 0.014039248693734407, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_left_exit_step]": 0.022344165947288275, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_lr_exit_left]": 0.015848916256800294, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_lr_exit_right]": 0.015422583790495992, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_passthrough_continuation]": 0.011646084021776915, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_passthrough_trunk]": 0.016862290911376476, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.010455874959006906, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_right_entry_stack]": 0.039845708059147, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_trunk_through_fan]": 0.019543166970834136, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[tb_two_line_vert_seam]": 0.027435708325356245, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[terminal_symmetric_fan]": 0.021400874247774482, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[terminus_join]": 0.008252748986706138, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[top_entry_header_clash]": 0.013624499784782529, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[trunk_through_fan]": 0.03739508311264217, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[u_turn_fold]": 0.12110295775346458, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[uneven_diamond]": 0.011359208961948752, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[upward_bypass]": 0.08773237583227456, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[variant_calling]": 0.3340375837869942, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[wide_fan_in]": 0.03859950019977987, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[wide_fan_out]": 0.03632991807535291, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[wide_label_fan]": 0.013051249785348773, + "tests/test_svg_paths.py::TestConcentricArcCenters::test_topology_fixtures[wrapped_label_trunk]": 0.019690249813720584, + "tests/test_svg_paths.py::TestConcentricBundles::test_multi_line_bundle": 0.018076333682984114, + "tests/test_svg_paths.py::TestConcentricBundles::test_multi_line_bundle_fixture": 0.0299839589279145, + "tests/test_svg_paths.py::TestCurveContinuity::test_simple": 0.013169625075533986, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[aligner_row_pinned_continuation]": 0.07405399973504245, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[around_below_ep_col_gt0]": 0.03520745877176523, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[around_section_below]": 0.030208291951566935, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[asymmetric_tree]": 0.07233566511422396, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.3824727921746671, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[branch_fold_forward]": 0.05837150011211634, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[branch_fold_stability]": 0.0316625009290874, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bt_chain]": 0.013126956997439265, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bt_exit_top_above]": 0.014876166125759482, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bt_exit_top_above_2line]": 0.01794425118714571, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bt_fork]": 0.03163550002500415, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bt_perp_entry_below]": 0.025362543063238263, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bt_to_lr]": 0.01697262516245246, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bt_to_tb]": 0.012197166914120317, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bundle_terminator_continuation]": 0.00813520816154778, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.10650500003248453, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.0458791668061167, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_label_rake]": 0.0787312921602279, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_label_rake_left]": 0.039725582813844085, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_label_rake_wide]": 0.08183408272452652, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.04180716699920595, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_leftward_overflow]": 0.04622758296318352, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[bypass_v_tight]": 0.04721924988552928, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[clear_channel_target_aware_push]": 0.04127458273433149, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[compact_gap_peer_conflict]": 0.049031584057956934, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[compact_hidden_passthrough]": 0.022619500057771802, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[complex_multipath]": 0.08209462487138808, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[convergence_stacked_sink]": 0.0782003328204155, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[convergent_offrow_exit_climb]": 0.23873970797285438, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.025041208136826754, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[cross_col_top_entry]": 0.014403082896023989, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[cross_column_perp_drop]": 0.028789125150069594, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.017097500152885914, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[cross_row_gap_wrap]": 0.05190887488424778, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[deep_linear]": 0.09700774890370667, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[disjoint_sameline_trunks]": 0.06553058279678226, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[divergent_fanout_split]": 0.04405433405190706, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[dogleg_exempt_distinct]": 0.05243258271366358, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[dogleg_exempt_sameline]": 0.0505942921154201, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[dogleg_twoline_fanout]": 0.021798416739329696, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[exit_corner_offset_dogleg]": 0.03693391685374081, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[fan_bypass_nesting]": 0.08201654301956296, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[fan_in_merge]": 0.06892316718585789, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[fold_double]": 0.22104845894500613, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[fold_fan_across]": 0.3743085826281458, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[fold_stacked_branch]": 0.13629608391784132, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[funcprofiler_upstream]": 0.23499258304946125, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[header_nudge]": 0.017237959196791053, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[header_side_rotated]": 0.015709541039541364, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[inrow_skip_breeze]": 0.019008876057341695, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[inter_row_wrap_clearance]": 0.042790209176018834, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[interchange_lane_reorder]": 0.027170917252078652, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[junction_entry_align]": 0.04935100115835667, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[junction_entry_collision]": 0.04690120788291097, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[junction_entry_reversed_fold]": 0.03691204194910824, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[junction_fanout_convergence]": 0.023220874834805727, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[left_entry_up_wrap]": 0.03221737500280142, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[left_exit_sink_below]": 0.04453241592273116, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.02951820893213153, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.014331541024148464, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.029610541881993413, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.03317066840827465, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.016732666874304414, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.01816050079651177, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_to_tb_top_drop]": 0.010964458109810948, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.06889470922760665, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.025370541960000992, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.024954624939709902, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_top_entry_cross_column]": 0.015951832989230752, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.0262087092269212, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_around_below_leftmost]": 0.027027333853766322, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_bottom_row_bypass]": 0.05076562613248825, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_leftmost_sink_branch]": 0.05701008392497897, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_offrow_continuation]": 0.02836612518876791, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_port_above_approach]": 0.03169620898552239, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_pullaway]": 0.07500612502917647, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_right_entry]": 0.05504279304295778, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.049787667114287615, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[merge_trunk_over_low_section]": 0.08216645894572139, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[mismatched_tracks]": 0.03988483385182917, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[mixed_bundle_column]": 0.07088500028476119, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[mixed_port_sides]": 0.03578075091354549, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[multi_input_convergence]": 0.016419666120782495, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[multi_line_bundle]": 0.04609495913609862, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.09320429107174277, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[near_vertical_junction_hook]": 0.058356748893857, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[off_track_convergence]": 0.05416004080325365, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[off_track_convergence_multiline]": 0.09058733400888741, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[off_track_input_above_consumer]": 0.19454079237766564, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[parallel_independent]": 0.03007895895279944, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[peeloff_extra_line_consumer]": 0.06847129203379154, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[peeloff_riser_respace]": 0.03249120921827853, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[post_convergence_trunk]": 0.02706133294850588, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[rail_inter_section]": 0.012572458013892174, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[rail_offtrack_fan]": 0.2881732920650393, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[rail_offtrack_io]": 0.03623341605998576, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[rail_offtrack_plain_io]": 0.029767748899757862, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[reconverge_reversed_fold]": 0.14841320808045566, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[right_entry_from_above]": 0.034033000003546476, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[right_entry_from_above_far]": 0.010687709087505937, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.02394108404405415, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[right_entry_wrap_no_fan]": 0.022669876227155328, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[rl_entry_runway]": 0.024760708212852478, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[rnaseq_lite]": 0.12490958394482732, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[route_around_intervening]": 0.05643704137764871, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[section_diamond]": 0.048946750117465854, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[self_crossing_bridge]": 0.025400832062587142, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[shared_sink_parallel]": 0.0684232919011265, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[single_section]": 0.009891249937936664, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[stacked_left_exit_drop]": 0.016566833946853876, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[stacked_lr_serpentine]": 0.0298810841049999, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.05836433474905789, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.02059283386915922, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.031181750120595098, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.019269292009994388, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_column_continuation_two_lines]": 0.032036043237894773, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_convergence_straight_drop]": 0.009795582620427012, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_internal_diagonal]": 0.0235707089304924, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_left_exit_step]": 0.046442667255178094, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_lr_exit_left]": 0.026037332136183977, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_lr_exit_right]": 0.024990333011373878, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_passthrough_continuation]": 0.026525209192186594, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_passthrough_trunk]": 0.02519600000232458, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.019060415914282203, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_right_entry_stack]": 0.05038862535730004, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_trunk_through_fan]": 0.022008542204275727, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[tb_two_line_vert_seam]": 0.016781708924099803, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[terminal_symmetric_fan]": 0.02515295776538551, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[terminus_join]": 0.006806083023548126, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[top_entry_header_clash]": 0.034000751096755266, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[trunk_through_fan]": 0.03133529191836715, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[u_turn_fold]": 0.10935362381860614, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[uneven_diamond]": 0.00831966707482934, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[upward_bypass]": 0.08452699892222881, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[variant_calling]": 0.2893603746779263, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[wide_fan_in]": 0.05056320806033909, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[wide_fan_out]": 0.04249966726638377, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[wide_label_fan]": 0.023613874102011323, + "tests/test_svg_paths.py::TestCurveContinuity::test_topology_fixtures[wrapped_label_trunk]": 0.017925583058968186, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_rnaseq_sections": 0.6503552501089871, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_simple_diamond": 0.01032329211011529, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[aligner_row_pinned_continuation]": 0.05340783414430916, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[around_below_ep_col_gt0]": 0.017311292001977563, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[around_section_below]": 0.025247707962989807, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[asymmetric_tree]": 0.06107033300213516, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.024290415924042463, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[branch_fold_forward]": 0.052139207953587174, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[branch_fold_stability]": 0.039749207906425, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bt_chain]": 0.013215957907959819, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bt_exit_top_above]": 0.016947166994214058, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bt_exit_top_above_2line]": 0.017379541881382465, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bt_fork]": 0.011486751260235906, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bt_perp_entry_below]": 0.04054108285345137, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bt_to_lr]": 0.030495249899104238, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bt_to_tb]": 0.016144624911248684, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bundle_terminator_continuation]": 0.006966291926801205, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.06351591693237424, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.05599058396182954, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_label_rake]": 0.022179957944899797, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_label_rake_left]": 0.032112125074490905, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_label_rake_wide]": 0.05526016699150205, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.048452041344717145, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_leftward_overflow]": 0.030625165905803442, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[bypass_v_tight]": 0.038786207558587193, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[clear_channel_target_aware_push]": 0.027273875894024968, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[compact_gap_peer_conflict]": 0.026589292101562023, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[compact_hidden_passthrough]": 0.015747498953714967, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[complex_multipath]": 0.0470624181907624, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[convergence_stacked_sink]": 0.035222167149186134, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[convergent_offrow_exit_climb]": 0.13689791620709002, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.03737233392894268, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[cross_col_top_entry]": 0.009251957992091775, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[cross_column_perp_drop]": 0.011759666027501225, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.01619345904327929, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[cross_row_gap_wrap]": 0.05725145828910172, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[deep_linear]": 0.05622629215940833, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[disjoint_sameline_trunks]": 0.030152501072734594, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[divergent_fanout_split]": 0.01661070785485208, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[dogleg_exempt_distinct]": 0.025895416969433427, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[dogleg_exempt_sameline]": 0.04603283409960568, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[dogleg_twoline_fanout]": 0.033644750248640776, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[exit_corner_offset_dogleg]": 0.03829024895094335, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[fan_bypass_nesting]": 0.09154450101777911, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[fan_in_merge]": 0.03660387615673244, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[fold_double]": 0.142279249150306, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[fold_fan_across]": 0.11439154203981161, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[fold_stacked_branch]": 0.11127329105511308, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[funcprofiler_upstream]": 0.2768319167662412, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[header_nudge]": 0.016047000885009766, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[header_side_rotated]": 0.016625917050987482, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[inrow_skip_breeze]": 0.016535291681066155, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[inter_row_wrap_clearance]": 0.02788333292119205, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[interchange_lane_reorder]": 0.01570337568409741, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[junction_entry_align]": 0.04852004209533334, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[junction_entry_collision]": 0.03610458318144083, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[junction_entry_reversed_fold]": 0.02480762405321002, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[junction_fanout_convergence]": 0.02277104090899229, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[left_entry_up_wrap]": 0.009965583216398954, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[left_exit_sink_below]": 0.019294583005830646, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.018313584150746465, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.017987166764214635, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.016164125176146626, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.03399804211221635, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.017973623936995864, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.030502958921715617, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_to_tb_top_drop]": 0.015454166801646352, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.021502583986148238, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.021343749715015292, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.02628041710704565, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_top_entry_cross_column]": 0.01091416785493493, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.010197332827374339, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_around_below_leftmost]": 0.029423042200505733, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_bottom_row_bypass]": 0.33147120801731944, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_leftmost_sink_branch]": 0.03676195768639445, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_offrow_continuation]": 0.02974008396267891, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_port_above_approach]": 0.01740124891512096, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_pullaway]": 0.0288274590857327, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_right_entry]": 0.02116912486962974, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.04227504110895097, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[merge_trunk_over_low_section]": 0.04248583409935236, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[mismatched_tracks]": 0.035270665772259235, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[mixed_bundle_column]": 0.04014995903708041, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[mixed_port_sides]": 0.017718332819640636, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[multi_input_convergence]": 0.024146708194166422, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[multi_line_bundle]": 0.030028874520212412, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.025416791904717684, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[near_vertical_junction_hook]": 0.02333858422935009, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[off_track_convergence]": 0.020602709148079157, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[off_track_convergence_multiline]": 0.025156875839456916, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[off_track_input_above_consumer]": 0.07562858308665454, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[parallel_independent]": 0.02718349825590849, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[peeloff_extra_line_consumer]": 0.03093304205685854, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[peeloff_riser_respace]": 0.038207874866202474, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[post_convergence_trunk]": 0.015331542119383812, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[rail_inter_section]": 0.00953837507404387, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[rail_offtrack_fan]": 0.01879825070500374, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[rail_offtrack_io]": 0.021497999085113406, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[rail_offtrack_plain_io]": 0.0270240418612957, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[reconverge_reversed_fold]": 0.1287141682114452, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[right_entry_from_above]": 0.0179346667136997, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[right_entry_from_above_far]": 0.020446041133254766, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.019422499928623438, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[right_entry_wrap_no_fan]": 0.02666829200461507, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[rl_entry_runway]": 0.018973124912008643, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[rnaseq_lite]": 0.10375837609171867, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[route_around_intervening]": 0.029480582801625133, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[section_diamond]": 0.07402020809240639, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[self_crossing_bridge]": 0.05810745805501938, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[shared_sink_parallel]": 0.054263416677713394, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[single_section]": 0.005498291924595833, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[stacked_left_exit_drop]": 0.009505874942988157, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[stacked_lr_serpentine]": 0.04644745821133256, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.03277820674702525, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.014269083272665739, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.021237165899947286, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.03264579316601157, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_column_continuation_two_lines]": 0.012548875762149692, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_convergence_straight_drop]": 0.008065375033766031, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_internal_diagonal]": 0.016449210001155734, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_left_exit_step]": 0.05669595883227885, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_lr_exit_left]": 0.01398120797239244, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_lr_exit_right]": 0.02757075009867549, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_passthrough_continuation]": 0.01892616623081267, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_passthrough_trunk]": 0.036826167022809386, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.01205137511715293, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_right_entry_stack]": 0.01880566729232669, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_trunk_through_fan]": 0.014188541797921062, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[tb_two_line_vert_seam]": 0.24918079189956188, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[terminal_symmetric_fan]": 0.017219167202711105, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[terminus_join]": 0.006216582842171192, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[top_entry_header_clash]": 0.01211329223588109, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[trunk_through_fan]": 0.054080666275694966, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[u_turn_fold]": 0.11929662409238517, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[uneven_diamond]": 0.02450337470509112, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[upward_bypass]": 0.0762068738695234, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[variant_calling]": 0.24208958423696458, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[wide_fan_in]": 0.02606837567873299, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[wide_fan_out]": 0.045408125035464764, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[wide_label_fan]": 0.032277375692501664, + "tests/test_svg_paths.py::TestCurveRadiiLength::test_topology_fixtures[wrapped_label_trunk]": 0.01376687502488494, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_rnaseq_sections": 0.5864532510749996, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_simple_bundle": 0.013322833692654967, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[aligner_row_pinned_continuation]": 0.07277287496253848, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[around_below_ep_col_gt0]": 0.033834584057331085, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[around_section_below]": 0.027111792005598545, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[asymmetric_tree]": 0.06752391601912677, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.030052999267354608, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[branch_fold_forward]": 0.06500608287751675, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[branch_fold_stability]": 0.12708958401344717, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bt_chain]": 0.006565209245309234, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bt_exit_top_above]": 0.017310459166765213, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bt_exit_top_above_2line]": 0.02054520696401596, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bt_fork]": 0.021359873935580254, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bt_perp_entry_below]": 0.027794249122962356, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bt_to_lr]": 0.03729316685348749, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bt_to_tb]": 0.03049779194407165, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bundle_terminator_continuation]": 0.013108792016282678, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.09970233333297074, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.0406973329372704, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_label_rake]": 0.03297420893795788, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_label_rake_left]": 0.044249792117625475, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_label_rake_wide]": 0.050538623705506325, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.04137541609816253, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_leftward_overflow]": 0.02767149987630546, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[bypass_v_tight]": 0.023416749900206923, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[clear_channel_target_aware_push]": 0.041495833080261946, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[compact_gap_peer_conflict]": 0.02870879229158163, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[compact_hidden_passthrough]": 0.034361916128546, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[complex_multipath]": 0.08098175004124641, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[convergence_stacked_sink]": 0.06225995812565088, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[convergent_offrow_exit_climb]": 0.47079924889840186, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.05387920793145895, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[cross_col_top_entry]": 0.035214917035773396, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[cross_column_perp_drop]": 0.029088251059874892, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.020022499840706587, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[cross_row_gap_wrap]": 0.06545987515710294, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[deep_linear]": 0.07451712526381016, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[disjoint_sameline_trunks]": 0.028623624704778194, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[divergent_fanout_split]": 0.030526416143402457, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[dogleg_exempt_distinct]": 0.04783833306282759, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[dogleg_exempt_sameline]": 0.026808666763827205, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[dogleg_twoline_fanout]": 0.0396252921782434, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[exit_corner_offset_dogleg]": 0.03592191683128476, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[fan_bypass_nesting]": 0.07108479202724993, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[fan_in_merge]": 0.06561337574385107, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[fold_double]": 0.2984728750307113, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[fold_fan_across]": 0.15238674986176193, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[fold_stacked_branch]": 0.15157137508504093, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[funcprofiler_upstream]": 0.28760700090788305, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[header_nudge]": 0.018109499011188745, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[header_side_rotated]": 0.025403583655133843, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[inrow_skip_breeze]": 0.019248625030741096, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[inter_row_wrap_clearance]": 0.036210082937031984, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[interchange_lane_reorder]": 0.018362751230597496, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[junction_entry_align]": 0.05211762385442853, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[junction_entry_collision]": 0.035359875997528434, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[junction_entry_reversed_fold]": 0.04191754315979779, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[junction_fanout_convergence]": 0.024154792074114084, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[left_entry_up_wrap]": 0.011304875835776329, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[left_exit_sink_below]": 0.03469733311794698, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.0323037919588387, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.023501000832766294, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.03749991673976183, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.0268519576638937, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.04957129084505141, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.0807329579256475, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_to_tb_top_drop]": 0.015145999612286687, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.030218708096072078, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.022034832974895835, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.017393999733030796, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_top_entry_cross_column]": 0.013633540831506252, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.014053706778213382, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_around_below_leftmost]": 0.040130583103746176, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_bottom_row_bypass]": 0.04158129193820059, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_leftmost_sink_branch]": 0.0408420842140913, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_offrow_continuation]": 0.05428087501786649, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_port_above_approach]": 0.023828331846743822, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_pullaway]": 0.031738832127302885, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_right_entry]": 0.03471916588023305, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.045591084053739905, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[merge_trunk_over_low_section]": 0.049807833041995764, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[mismatched_tracks]": 0.04600929236039519, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[mixed_bundle_column]": 0.05095983389765024, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[mixed_port_sides]": 0.02668133284896612, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[multi_input_convergence]": 0.030909165972843766, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[multi_line_bundle]": 0.05830649891868234, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.05208995705470443, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[near_vertical_junction_hook]": 0.032005458138883114, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[off_track_convergence]": 0.02730820723809302, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[off_track_convergence_multiline]": 0.03008529217913747, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[off_track_input_above_consumer]": 0.11533670919016004, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[parallel_independent]": 0.025195166934281588, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[peeloff_extra_line_consumer]": 0.041877540992572904, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[peeloff_riser_respace]": 0.04481233307160437, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[post_convergence_trunk]": 0.012739541009068489, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[rail_inter_section]": 0.009726583026349545, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[rail_offtrack_fan]": 0.031092084012925625, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[rail_offtrack_io]": 0.023627915885299444, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[rail_offtrack_plain_io]": 0.02119508385658264, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[reconverge_reversed_fold]": 0.2589216672349721, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[right_entry_from_above]": 0.27291812491603196, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[right_entry_from_above_far]": 0.017902332823723555, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.018404667964205146, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[right_entry_wrap_no_fan]": 0.015373791800811887, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[rl_entry_runway]": 0.02094045910052955, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[rnaseq_lite]": 0.104975416790694, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[route_around_intervening]": 0.017680957913398743, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[section_diamond]": 0.05493899993598461, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[self_crossing_bridge]": 0.046678208047524095, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[shared_sink_parallel]": 0.06637174868956208, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[single_section]": 0.014854165958240628, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[stacked_left_exit_drop]": 0.020906125893816352, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[stacked_lr_serpentine]": 0.03208037395961583, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.07627300103195012, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.012152832932770252, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.027945001143962145, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.04319162620231509, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_column_continuation_two_lines]": 0.02312891581095755, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_convergence_straight_drop]": 0.014377084327861667, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_internal_diagonal]": 0.025163667043671012, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_left_exit_step]": 0.04738466814160347, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_lr_exit_left]": 0.028293833136558533, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_lr_exit_right]": 0.029860748909413815, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_passthrough_continuation]": 0.03201895789243281, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_passthrough_trunk]": 0.031013292027637362, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.04015308292582631, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_right_entry_stack]": 0.07509462395682931, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_trunk_through_fan]": 0.021106333704665303, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[tb_two_line_vert_seam]": 0.015921666752547026, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[terminal_symmetric_fan]": 0.025549541926011443, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[terminus_join]": 0.005975374719128013, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[top_entry_header_clash]": 0.02407679194584489, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[trunk_through_fan]": 0.03441654169000685, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[u_turn_fold]": 0.08468283293768764, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[uneven_diamond]": 0.013199123786762357, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[upward_bypass]": 0.05589437414892018, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[variant_calling]": 0.2351849579717964, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[wide_fan_in]": 0.048115042271092534, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[wide_fan_out]": 0.04316149977967143, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[wide_label_fan]": 0.021844208939000964, + "tests/test_svg_paths.py::TestLineZOrderConsistent::test_topology_fixtures[wrapped_label_trunk]": 0.017284167231991887, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_simple": 0.008783165831118822, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[aligner_row_pinned_continuation]": 0.0614056249614805, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[around_below_ep_col_gt0]": 0.02494083414785564, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[around_section_below]": 0.01860012370161712, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[asymmetric_tree]": 0.06487220781855285, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.035682749934494495, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[branch_fold_forward]": 0.09550874982960522, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[branch_fold_stability]": 0.036543250316753983, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bt_chain]": 0.007198250852525234, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bt_exit_top_above]": 0.019644248764961958, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bt_exit_top_above_2line]": 0.029547624988481402, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bt_fork]": 0.014593791915103793, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bt_perp_entry_below]": 0.014670457690954208, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bt_to_lr]": 0.012469375971704721, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bt_to_tb]": 0.021084249950945377, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bundle_terminator_continuation]": 0.02030016714707017, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.08905833307653666, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.07908741687424481, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_label_rake]": 0.03156312392093241, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_label_rake_left]": 0.03492462425492704, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_label_rake_wide]": 0.09585524979047477, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.04888029093854129, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_leftward_overflow]": 0.05017383280210197, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[bypass_v_tight]": 0.051110458094626665, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[clear_channel_target_aware_push]": 0.05775045696645975, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[compact_gap_peer_conflict]": 0.039826749823987484, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[compact_hidden_passthrough]": 0.02407616702839732, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[complex_multipath]": 0.07106691598892212, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[convergence_stacked_sink]": 0.06255841697566211, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[convergent_offrow_exit_climb]": 0.4377556249964982, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.030359250260517, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[cross_col_top_entry]": 0.01928441715426743, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[cross_column_perp_drop]": 0.019697499927133322, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.013479291927069426, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[cross_row_gap_wrap]": 0.05078404163941741, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[deep_linear]": 0.08493183320388198, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[disjoint_sameline_trunks]": 0.0530694997869432, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[divergent_fanout_split]": 0.028782458044588566, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[dogleg_exempt_distinct]": 0.05187429208308458, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[dogleg_exempt_sameline]": 0.05176783283241093, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[dogleg_twoline_fanout]": 0.038480624789372087, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[exit_corner_offset_dogleg]": 0.0273439169395715, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[fan_bypass_nesting]": 0.05900320806540549, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[fan_in_merge]": 0.03739724913612008, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[fold_double]": 0.19667516695335507, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[fold_fan_across]": 0.18831449979916215, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[fold_stacked_branch]": 0.2274857920128852, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[funcprofiler_upstream]": 0.38031666609458625, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[header_nudge]": 0.022412291960790753, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[header_side_rotated]": 0.013186207972466946, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[inrow_skip_breeze]": 0.01899329200387001, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[inter_row_wrap_clearance]": 0.03073241701349616, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[interchange_lane_reorder]": 0.032711501233279705, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[junction_entry_align]": 0.05763666704297066, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[junction_entry_collision]": 0.03193462383933365, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[junction_entry_reversed_fold]": 0.02490179194137454, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[junction_fanout_convergence]": 0.03259862423874438, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[left_entry_up_wrap]": 0.028113041073083878, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[left_exit_sink_below]": 0.02213745890185237, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.015863040927797556, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.03095116699114442, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.02963758329860866, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.028619500109925866, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.02397179091349244, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.032419624738395214, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_to_tb_top_drop]": 0.02198612503707409, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.2981191258877516, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.032132749212905765, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.027354542165994644, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_top_entry_cross_column]": 0.015687499893829226, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.026334417052567005, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_around_below_leftmost]": 0.04379429202526808, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_bottom_row_bypass]": 0.04986070794984698, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_leftmost_sink_branch]": 0.05380487535148859, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_offrow_continuation]": 0.07122133299708366, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_port_above_approach]": 0.040745623875409365, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_pullaway]": 0.029674582881852984, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_right_entry]": 0.029874459141865373, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.04342520795762539, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[merge_trunk_over_low_section]": 0.056142125045880675, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[mismatched_tracks]": 0.04230108321644366, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[mixed_bundle_column]": 0.06879041669890285, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[mixed_port_sides]": 0.015373499132692814, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[multi_input_convergence]": 0.0247767495457083, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[multi_line_bundle]": 0.032337583834305406, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.035065332893282175, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[near_vertical_junction_hook]": 0.026223582914099097, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[off_track_convergence]": 0.025262248935177922, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[off_track_convergence_multiline]": 0.03841304196976125, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[off_track_input_above_consumer]": 0.16354720783419907, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[parallel_independent]": 0.03613925096578896, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[peeloff_extra_line_consumer]": 0.03377887513488531, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[peeloff_riser_respace]": 0.04870429215952754, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[post_convergence_trunk]": 0.00874579232186079, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[rail_inter_section]": 0.008840958354994655, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[rail_offtrack_fan]": 0.011547707952558994, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[rail_offtrack_io]": 0.016038332832977176, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[rail_offtrack_plain_io]": 0.010158956749364734, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[reconverge_reversed_fold]": 0.2538553327322006, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[right_entry_from_above]": 0.015245083952322602, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[right_entry_from_above_far]": 0.024219042854383588, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.041324709076434374, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[right_entry_wrap_no_fan]": 0.015911834314465523, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[rl_entry_runway]": 0.12132362416014075, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[rnaseq_lite]": 0.11043729190714657, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[route_around_intervening]": 0.04760379181243479, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[section_diamond]": 0.06361278984695673, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[self_crossing_bridge]": 0.049953832756727934, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[shared_sink_parallel]": 0.07070420798845589, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[single_section]": 0.037278666626662016, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[stacked_left_exit_drop]": 0.039746916852891445, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[stacked_lr_serpentine]": 0.03592074871994555, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.04780750093050301, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.01928341668099165, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.07925166608765721, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.04348729131743312, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_column_continuation_two_lines]": 0.018272707937285304, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_convergence_straight_drop]": 0.017818041145801544, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_internal_diagonal]": 0.02992091723717749, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_left_exit_step]": 0.0318897080142051, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_lr_exit_left]": 0.015627459157258272, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_lr_exit_right]": 0.15543629182502627, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_passthrough_continuation]": 0.018513540970161557, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_passthrough_trunk]": 0.04067979287356138, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.020754582714289427, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_right_entry_stack]": 0.021117791067808867, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_trunk_through_fan]": 0.016836667200550437, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[tb_two_line_vert_seam]": 0.022600376280024648, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[terminal_symmetric_fan]": 0.02129591698758304, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[terminus_join]": 0.006542168091982603, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[top_entry_header_clash]": 0.012157500255852938, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[trunk_through_fan]": 0.03204700001515448, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[u_turn_fold]": 0.1130624171346426, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[uneven_diamond]": 0.02790991705842316, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[upward_bypass]": 0.3979500401765108, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[variant_calling]": 0.2740881657227874, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[wide_fan_in]": 0.03981108288280666, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[wide_fan_out]": 0.03560700034722686, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[wide_label_fan]": 0.02247275016270578, + "tests/test_svg_paths.py::TestQCountMatchesCorners::test_topology_fixtures[wrapped_label_trunk]": 0.02553512412123382, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[aligner_row_pinned_continuation]": 0.03767154202796519, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[around_below_ep_col_gt0]": 0.0187822503503412, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[around_section_below]": 0.015502916183322668, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[asymmetric_tree]": 0.0360618329141289, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.027249123668298125, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[branch_fold_forward]": 0.03741279081441462, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[branch_fold_stability]": 0.24202487478032708, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bt_chain]": 0.005318291950970888, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bt_exit_top_above]": 0.01888987421989441, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bt_exit_top_above_2line]": 0.0195618758443743, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bt_fork]": 0.025086000096052885, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bt_perp_entry_below]": 0.01034912490285933, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bt_to_lr]": 0.013942749937996268, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bt_to_tb]": 0.01562616671435535, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bundle_terminator_continuation]": 0.017637833952903748, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.08314925082959235, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.025932832853868604, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_label_rake]": 0.027478666743263602, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_label_rake_left]": 0.0320891251321882, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_label_rake_wide]": 0.05975858401507139, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.030061540892347693, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_leftward_overflow]": 0.0373578320723027, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[bypass_v_tight]": 0.04784024995751679, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[clear_channel_target_aware_push]": 0.028990417253226042, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[compact_gap_peer_conflict]": 0.026521250372752547, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[compact_hidden_passthrough]": 0.027838706970214844, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[complex_multipath]": 0.043319708202034235, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[convergence_stacked_sink]": 0.05086616682820022, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[convergent_offrow_exit_climb]": 0.22085829102434218, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.03279366600327194, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[cross_col_top_entry]": 0.01908979215659201, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[cross_column_perp_drop]": 0.011133125051856041, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.015317500103265047, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[cross_row_gap_wrap]": 0.06447404203936458, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[deep_linear]": 0.06978674908168614, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[disjoint_sameline_trunks]": 0.03959916508756578, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[divergent_fanout_split]": 0.025519251124933362, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[dogleg_exempt_distinct]": 0.08012508391402662, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[dogleg_exempt_sameline]": 0.0516094584017992, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[dogleg_twoline_fanout]": 0.02268620813265443, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[exit_corner_offset_dogleg]": 0.029341915855184197, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[fan_bypass_nesting]": 0.04590054112486541, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[fan_in_merge]": 0.02703791670501232, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[fold_double]": 0.10538224969059229, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[fold_fan_across]": 0.2827042923308909, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[fold_stacked_branch]": 0.10344212525524199, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[funcprofiler_upstream]": 0.2989269997924566, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[header_nudge]": 0.013381749857217073, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[header_side_rotated]": 0.011800291249528527, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[inrow_skip_breeze]": 0.018112082965672016, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[inter_row_wrap_clearance]": 0.03866045828908682, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[interchange_lane_reorder]": 0.03311241720803082, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[junction_entry_align]": 0.05732191703282297, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[junction_entry_collision]": 0.08681129175238311, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[junction_entry_reversed_fold]": 0.02940179081633687, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[junction_fanout_convergence]": 0.02773845801129937, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[left_entry_up_wrap]": 0.037109667202457786, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[left_exit_sink_below]": 0.33220737474039197, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.016757582779973745, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.03574604168534279, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.014755333075299859, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.028034084243699908, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.030422708950936794, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.027610208839178085, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_to_tb_top_drop]": 0.009130542865023017, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.018160291947424412, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.013602209044620395, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.02774308412335813, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_top_entry_cross_column]": 0.022509166039526463, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.022910542087629437, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_around_below_leftmost]": 0.02921004220843315, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_bottom_row_bypass]": 0.03822516603395343, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_leftmost_sink_branch]": 0.029877332039177418, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_offrow_continuation]": 0.03207333292812109, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_port_above_approach]": 0.045929916203022, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_pullaway]": 0.02786408388055861, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_right_entry]": 0.031817334005609155, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.043814499862492085, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[merge_trunk_over_low_section]": 0.046870957827195525, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[mismatched_tracks]": 0.03417408303357661, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[mixed_bundle_column]": 0.044113541254773736, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[mixed_port_sides]": 0.022594708018004894, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[multi_input_convergence]": 0.013736167224124074, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[multi_line_bundle]": 0.04595920699648559, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.038019207771867514, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[near_vertical_junction_hook]": 0.03952824883162975, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[off_track_convergence]": 0.015735791064798832, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[off_track_convergence_multiline]": 0.026196875143796206, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[off_track_input_above_consumer]": 0.10283562610857189, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[parallel_independent]": 0.04569941689260304, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[peeloff_extra_line_consumer]": 0.023520207963883877, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[peeloff_riser_respace]": 0.047371207969263196, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[post_convergence_trunk]": 0.013407584745436907, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[rail_inter_section]": 0.011046792147681117, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[rail_offtrack_fan]": 0.014992959098890424, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[rail_offtrack_io]": 0.02587654208764434, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[rail_offtrack_plain_io]": 0.008751832880079746, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[reconverge_reversed_fold]": 0.1244856680277735, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[right_entry_from_above]": 0.009588916786015034, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[right_entry_from_above_far]": 0.011072749737650156, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.03396937530487776, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[right_entry_wrap_no_fan]": 0.01580004207789898, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[rl_entry_runway]": 0.03373387502506375, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[rnaseq_lite]": 0.08094362472184002, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[route_around_intervening]": 0.025877708103507757, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[section_diamond]": 0.02448754175566137, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[self_crossing_bridge]": 0.015143625205382705, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[shared_sink_parallel]": 0.3748723757453263, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[single_section]": 0.00566445873118937, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[stacked_left_exit_drop]": 0.019512626342475414, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[stacked_lr_serpentine]": 0.023347998736426234, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.03601079201325774, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.012551707914099097, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.022446833783760667, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.022931749932467937, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_column_continuation_two_lines]": 0.012093750992789865, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_convergence_straight_drop]": 0.010953041957691312, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_internal_diagonal]": 0.018063042080029845, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_left_exit_step]": 0.021863124100491405, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_lr_exit_left]": 0.025438542012125254, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_lr_exit_right]": 0.01886845799162984, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_passthrough_continuation]": 0.01305354107171297, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_passthrough_trunk]": 0.028544583823531866, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.008854209212586284, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_right_entry_stack]": 0.022173332050442696, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_trunk_through_fan]": 0.011602000799030066, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[tb_two_line_vert_seam]": 0.023797041969373822, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[terminal_symmetric_fan]": 0.022851290879771113, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[terminus_join]": 0.005842040991410613, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[top_entry_header_clash]": 0.023481874726712704, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[trunk_through_fan]": 0.04500695923343301, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[u_turn_fold]": 0.0901533761061728, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[uneven_diamond]": 0.007124124793335795, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[upward_bypass]": 0.05800433293916285, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[variant_calling]": 0.16498929099179804, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[wide_fan_in]": 0.04021220817230642, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[wide_fan_out]": 0.03449441585689783, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[wide_label_fan]": 0.012587916804477572, + "tests/test_svg_paths.py::TestRadiusClamping::test_topology_fixtures[wrapped_label_trunk]": 0.012090625008568168, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_animation_corners_match_shared_helper[degenerate_leg]": 0.00034220912493765354, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_animation_corners_match_shared_helper[l_shape]": 0.00028504221700131893, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_animation_corners_match_shared_helper[staircase]": 0.0002474577631801367, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_animation_corners_match_shared_helper[u_shape]": 0.00023858179338276386, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[aligner_row_pinned_continuation]": 0.059194625820964575, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[around_below_ep_col_gt0]": 0.016851834254339337, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[around_section_below]": 0.027895958861336112, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[asymmetric_tree]": 0.05002924986183643, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bottom_row_climb_clear_corridor]": 0.032105499878525734, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[branch_fold_forward]": 0.03845704114064574, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[branch_fold_stability]": 0.040270626079291105, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bt_chain]": 0.007571374997496605, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bt_exit_top_above]": 0.0126095418818295, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bt_exit_top_above_2line]": 0.0263411239720881, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bt_fork]": 0.009727583965286613, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bt_perp_entry_below]": 0.05358283407986164, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bt_to_lr]": 0.03803766705095768, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bt_to_tb]": 0.01727300020866096, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bundle_terminator_continuation]": 0.012743750121444464, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_fan_in_outer_slot]": 0.10901458305306733, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_gap2_rightward_overflow]": 0.05500054219737649, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_label_rake]": 0.05724933440797031, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_label_rake_left]": 0.04072225093841553, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_label_rake_wide]": 0.07283479301258922, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_leftward_far_side_entry]": 0.04454062436707318, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_leftward_overflow]": 0.03798637492582202, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[bypass_v_tight]": 0.0314028759021312, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[clear_channel_target_aware_push]": 0.03229079092852771, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[compact_gap_peer_conflict]": 0.022282624151557684, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[compact_hidden_passthrough]": 0.01576216798275709, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[complex_multipath]": 0.07144791726022959, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[convergence_stacked_sink]": 0.2738421668764204, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[convergent_offrow_exit_climb]": 0.1847529171500355, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[corridor_narrow_gap_fallback]": 0.02193758310750127, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[cross_col_top_entry]": 0.022539458004757762, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[cross_column_perp_drop]": 0.030027500120922923, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[cross_column_perp_drop_far_exit]": 0.015099416952580214, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[cross_row_gap_wrap]": 0.03711024974472821, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[deep_linear]": 0.08360033202916384, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[disjoint_sameline_trunks]": 0.05548216588795185, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[divergent_fanout_split]": 0.024216915713623166, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[dogleg_exempt_distinct]": 0.05655487417243421, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[dogleg_exempt_sameline]": 0.0279794589150697, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[dogleg_twoline_fanout]": 0.027758375043049455, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[exit_corner_offset_dogleg]": 0.032197334337979555, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[fan_bypass_nesting]": 0.061813958222046494, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[fan_in_merge]": 0.04084083414636552, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[fold_double]": 0.30319841601885855, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[fold_fan_across]": 0.18046354199759662, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[fold_stacked_branch]": 0.22866370785050094, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[funcprofiler_upstream]": 0.31324950070120394, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[header_nudge]": 0.03536920784972608, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[header_side_rotated]": 0.03692941600456834, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[inrow_skip_breeze]": 0.020831166999414563, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[inter_row_wrap_clearance]": 0.0265542920678854, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[interchange_lane_reorder]": 0.018098250962793827, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[junction_entry_align]": 0.13102183304727077, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[junction_entry_collision]": 0.05887137423269451, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[junction_entry_reversed_fold]": 0.04537041764706373, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[junction_fanout_convergence]": 0.02409854205325246, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[left_entry_up_wrap]": 0.01655475003644824, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[left_exit_sink_below]": 0.028202666202560067, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_perp_bottom_exit_perp_entry]": 0.021619457053020597, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_perp_bottom_exit_side_entry]": 0.018913750536739826, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_perp_top_exit_perp_entry]": 0.02831829199567437, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_perp_top_exit_perp_entry_diverging]": 0.02078737481497228, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_perp_top_exit_side_entry]": 0.012806749204173684, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_to_tb_top_cross_col]": 0.029285167111083865, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_to_tb_top_drop]": 0.029176416574046016, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_to_tb_top_drop_two_lines]": 0.016348290955647826, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_to_tb_top_near_vertical]": 0.029130250914022326, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_to_tb_top_two_lines]": 0.02044433308765292, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_top_entry_cross_column]": 0.01105445809662342, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[lr_top_entry_cross_column_two_line]": 0.030741832917556167, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_around_below_leftmost]": 0.02712516626343131, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_bottom_row_bypass]": 0.06146483402699232, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_leftmost_sink_branch]": 0.04003666713833809, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_offrow_continuation]": 0.05367504106834531, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_port_above_approach]": 0.047612373949959874, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_pullaway]": 0.05623729107901454, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_right_entry]": 0.04010629095137119, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_trunk_out_of_range_section]": 0.04299808316864073, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[merge_trunk_over_low_section]": 0.30693391687236726, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[mismatched_tracks]": 0.043474500300362706, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[mixed_bundle_column]": 0.04864604212343693, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[mixed_port_sides]": 0.026321165962144732, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[multi_input_convergence]": 0.023779126117005944, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[multi_line_bundle]": 0.04446866689249873, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[multicarrier_offrow_exit_climb]": 0.03810912533663213, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[near_vertical_junction_hook]": 0.04544912604615092, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[off_track_convergence]": 0.038698374992236495, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[off_track_convergence_multiline]": 0.03450879221782088, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[off_track_input_above_consumer]": 0.13272104086354375, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[parallel_independent]": 0.03677883488126099, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[peeloff_extra_line_consumer]": 0.038746540900319815, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[peeloff_riser_respace]": 0.049685917096212506, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[post_convergence_trunk]": 0.01585070719011128, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[rail_inter_section]": 0.013022624887526035, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[rail_offtrack_fan]": 0.022083792136982083, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[rail_offtrack_io]": 0.027224334189668298, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[rail_offtrack_plain_io]": 0.017016416881233454, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[reconverge_reversed_fold]": 0.1524067078717053, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[right_entry_from_above]": 0.017896833131089807, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[right_entry_from_above_far]": 0.014184291241690516, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[right_entry_gap_above_empty_row]": 0.016599125927314162, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[right_entry_wrap_no_fan]": 0.01081612496636808, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[rl_entry_runway]": 0.024643500102683902, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[rnaseq_lite]": 0.12374700093641877, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[route_around_intervening]": 0.0331142907962203, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[section_diamond]": 0.03321225009858608, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[self_crossing_bridge]": 0.036748875165358186, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[shared_sink_parallel]": 0.1496485830284655, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[single_section]": 0.007953958120197058, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[stacked_left_exit_drop]": 0.029787833336740732, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[stacked_lr_serpentine]": 0.03713883273303509, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[symmetric_diamond_beside_wide_fan]": 0.0733766658231616, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_bottom_entry_flow_start]": 0.01322029298171401, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_bottom_exit_bundle_jog]": 0.026413248851895332, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_bottom_exit_fork_diamond]": 0.04787045810371637, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_column_continuation_two_lines]": 0.021849708165973425, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_convergence_straight_drop]": 0.009888416156172752, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_internal_diagonal]": 0.05196387507021427, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_left_exit_step]": 0.040495917201042175, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_lr_exit_left]": 0.0291282101534307, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_lr_exit_right]": 0.053026875015348196, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_passthrough_continuation]": 0.04038141784258187, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_passthrough_trunk]": 0.03214337397366762, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_perp_exit_side_neighbour]": 0.03309683292172849, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_right_entry_stack]": 0.028654457768425345, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_trunk_through_fan]": 0.013434416148811579, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[tb_two_line_vert_seam]": 0.018229166278615594, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[terminal_symmetric_fan]": 0.021711165783926845, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[terminus_join]": 0.012460583122447133, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[top_entry_header_clash]": 0.03478624997660518, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[trunk_through_fan]": 0.04500250006094575, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[u_turn_fold]": 0.13530033268034458, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[uneven_diamond]": 0.03986845910549164, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[upward_bypass]": 0.09802137617953122, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[variant_calling]": 0.2953808759339154, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[wide_fan_in]": 0.048833874287083745, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[wide_fan_out]": 0.3488962498959154, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[wide_label_fan]": 0.1011322089470923, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_real_routes_agree_across_renderers[wrapped_label_trunk]": 0.38880750024691224, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_svg_adapter_matches_shared_helper[degenerate_leg]": 0.0002559581771492958, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_svg_adapter_matches_shared_helper[l_shape]": 0.00021691597066819668, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_svg_adapter_matches_shared_helper[staircase]": 0.00021783262491226196, + "tests/test_svg_paths.py::TestSharedCornerTangents::test_svg_adapter_matches_shared_helper[u_shape]": 0.0002122910227626562, + "tests/test_svg_paths.py::TestSvgPathStructure::test_rnaseq_sections": 0.6240216251462698, + "tests/test_svg_paths.py::TestSvgPathStructure::test_simple_diagonal": 0.008074958808720112, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[aligner_row_pinned_continuation]": 0.06817479222081602, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[around_below_ep_col_gt0]": 0.042878707172349095, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[around_section_below]": 0.028532333904877305, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[asymmetric_tree]": 0.06525391736067832, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bottom_row_climb_clear_corridor]": 0.07338845892809331, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[branch_fold_forward]": 0.08040125016123056, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[branch_fold_stability]": 0.03618258307687938, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bt_chain]": 0.007874623872339725, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bt_exit_top_above]": 0.04409591504372656, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bt_exit_top_above_2line]": 0.014804915757849813, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bt_fork]": 0.008133499883115292, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bt_perp_entry_below]": 0.03455912624485791, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bt_to_lr]": 0.0268967910669744, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bt_to_tb]": 0.015451834071427584, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bundle_terminator_continuation]": 0.008465291000902653, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_fan_in_outer_slot]": 0.12448320793919265, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_gap2_rightward_overflow]": 0.04763512476347387, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_label_rake]": 0.03359004110097885, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_label_rake_left]": 0.039991583209484816, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_label_rake_wide]": 0.1658624173142016, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_leftward_far_side_entry]": 0.06928508309647441, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_leftward_overflow]": 0.04337304178625345, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[bypass_v_tight]": 0.037494001211598516, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[clear_channel_target_aware_push]": 0.03171770693734288, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[compact_gap_peer_conflict]": 0.027825915720313787, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[compact_hidden_passthrough]": 0.017878833692520857, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[complex_multipath]": 0.07025387394241989, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[convergence_stacked_sink]": 0.04995170817710459, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[convergent_offrow_exit_climb]": 0.18871595803648233, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[corridor_narrow_gap_fallback]": 0.039230749011039734, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[cross_col_top_entry]": 0.03538095881231129, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[cross_column_perp_drop]": 0.01704000006429851, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[cross_column_perp_drop_far_exit]": 0.012317874003201723, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[cross_row_gap_wrap]": 0.06726116593927145, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[deep_linear]": 0.0670139582362026, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[disjoint_sameline_trunks]": 0.03722591698169708, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[divergent_fanout_split]": 0.01955420896410942, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[dogleg_exempt_distinct]": 0.04239287483505905, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[dogleg_exempt_sameline]": 0.021895541111007333, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[dogleg_twoline_fanout]": 0.04230470769107342, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[exit_corner_offset_dogleg]": 0.0342640841845423, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[fan_bypass_nesting]": 0.4001049166545272, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[fan_in_merge]": 0.044115873984992504, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[fold_double]": 0.24460462480783463, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[fold_fan_across]": 0.20861495682038367, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[fold_stacked_branch]": 0.13350645871832967, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[funcprofiler_upstream]": 0.3578037917613983, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[header_nudge]": 0.030795583967119455, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[header_side_rotated]": 0.03792950138449669, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[inrow_skip_breeze]": 0.009695250075310469, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[inter_row_wrap_clearance]": 0.07520637474954128, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[interchange_lane_reorder]": 0.028340415796265006, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[junction_entry_align]": 0.05711520998738706, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[junction_entry_collision]": 0.08048208290711045, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[junction_entry_reversed_fold]": 0.0690429168753326, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[junction_fanout_convergence]": 0.030283625004813075, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[left_entry_up_wrap]": 0.01268358202651143, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[left_exit_sink_below]": 0.028244083980098367, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_perp_bottom_exit_perp_entry]": 0.0690808326471597, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_perp_bottom_exit_side_entry]": 0.04717333405278623, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_perp_top_exit_perp_entry]": 0.024582959013059735, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.029772042063996196, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_perp_top_exit_side_entry]": 0.01825412572361529, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_to_tb_top_cross_col]": 0.03481912589631975, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_to_tb_top_drop]": 0.021790250902995467, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_to_tb_top_drop_two_lines]": 0.021140459226444364, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_to_tb_top_near_vertical]": 0.02006695792078972, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_to_tb_top_two_lines]": 0.01808375120162964, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_top_entry_cross_column]": 0.029370582895353436, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[lr_top_entry_cross_column_two_line]": 0.025191793218255043, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_around_below_leftmost]": 0.03398433397524059, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_bottom_row_bypass]": 0.046880125999450684, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_leftmost_sink_branch]": 0.02623133291490376, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_offrow_continuation]": 0.03369787591509521, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_port_above_approach]": 0.0454514161683619, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_pullaway]": 0.037727874936535954, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_right_entry]": 0.042165415827184916, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_trunk_out_of_range_section]": 0.05510691809467971, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[merge_trunk_over_low_section]": 0.04513083281926811, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[mismatched_tracks]": 0.049041748978197575, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[mixed_bundle_column]": 0.0629517906345427, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[mixed_port_sides]": 0.021963583072647452, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[multi_input_convergence]": 0.02360929106362164, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[multi_line_bundle]": 0.04209804069250822, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[multicarrier_offrow_exit_climb]": 0.21363624976947904, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[near_vertical_junction_hook]": 0.018448999850079417, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[off_track_convergence]": 0.01790604111738503, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[off_track_convergence_multiline]": 0.02004629117436707, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[off_track_input_above_consumer]": 0.1058550828602165, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[parallel_independent]": 0.10669058235362172, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[peeloff_extra_line_consumer]": 0.05320054292678833, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[peeloff_riser_respace]": 0.03305333387106657, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[post_convergence_trunk]": 0.024052708875387907, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[rail_inter_section]": 0.018931126222014427, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[rail_offtrack_fan]": 0.040851292200386524, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[rail_offtrack_io]": 0.013111165957525373, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[rail_offtrack_plain_io]": 0.046336833853274584, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[reconverge_reversed_fold]": 0.14077679184265435, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[right_entry_from_above]": 0.01859199907630682, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[right_entry_from_above_far]": 0.03491520811803639, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[right_entry_gap_above_empty_row]": 0.026221917010843754, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[right_entry_wrap_no_fan]": 0.02902995888143778, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[rl_entry_runway]": 0.03858354198746383, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[rnaseq_lite]": 0.12673216592520475, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[route_around_intervening]": 0.026480417232960463, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[section_diamond]": 0.05238083307631314, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[self_crossing_bridge]": 0.01892229192890227, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[shared_sink_parallel]": 0.0816103748511523, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[single_section]": 0.007308958098292351, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[stacked_left_exit_drop]": 0.021736667025834322, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[stacked_lr_serpentine]": 0.03759212396107614, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[symmetric_diamond_beside_wide_fan]": 0.08186233299784362, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_bottom_entry_flow_start]": 0.017628668108955026, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_bottom_exit_bundle_jog]": 0.034624248975887895, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_bottom_exit_fork_diamond]": 0.02959570800885558, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_column_continuation_two_lines]": 0.030617458978667855, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_convergence_straight_drop]": 0.021293040830641985, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_internal_diagonal]": 0.025259249843657017, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_left_exit_step]": 0.03385645803064108, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_lr_exit_left]": 0.026203540852293372, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_lr_exit_right]": 0.017514332896098495, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_passthrough_continuation]": 0.026405333075672388, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_passthrough_trunk]": 0.02205516630783677, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_perp_exit_side_neighbour]": 0.06411025021225214, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_right_entry_stack]": 0.04820529231801629, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_trunk_through_fan]": 0.013414541026577353, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[tb_two_line_vert_seam]": 0.02412758395075798, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[terminal_symmetric_fan]": 0.03209566604346037, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[terminus_join]": 0.00999587494879961, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[top_entry_header_clash]": 0.03715224890038371, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[trunk_through_fan]": 0.034384791972115636, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[u_turn_fold]": 0.11689362488687038, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[uneven_diamond]": 0.010447749868035316, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[upward_bypass]": 0.13136754231527448, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[variant_calling]": 0.21058375015854836, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[wide_fan_in]": 0.03526266687549651, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[wide_fan_out]": 0.040592582896351814, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[wide_label_fan]": 0.03154945792630315, + "tests/test_svg_paths.py::TestSvgPathStructure::test_topology_fixtures[wrapped_label_trunk]": 0.01919429120607674, + "tests/test_tall_anchor_stack.py::test_guard_rejects_reoriented_tail_section": 0.11609137593768537, + "tests/test_tall_anchor_stack.py::test_guard_rejects_tail_section_off_anchor_span": 0.23774433322250843, + "tests/test_tall_anchor_stack.py::test_tall_anchor_auto_matches_or_beats_pinned_width": 1.3744593751616776, + "tests/test_tall_anchor_stack.py::test_tall_anchor_chain_stacks_into_two_columns": 0.10492637497372925, + "tests/test_tall_anchor_stack.py::test_tall_anchor_detected_on_genomic_pipeline": 0.15233174921013415, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[differentialabundance.mmd]": 0.07313650008291006, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[epitopeprediction.mmd]": 0.05457525094971061, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[genomeassembly.mmd]": 0.29998912406153977, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[hlatyping.mmd]": 0.050894333980977535, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[longread_variant_calling.mmd]": 0.0703041241504252, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[rnaseq_auto.mmd]": 0.06821062369272113, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[variant_calling.mmd]": 0.01610212540253997, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[variant_calling_tuned.mmd]": 0.05036354111507535, + "tests/test_tall_anchor_stack.py::test_tall_anchor_does_not_fire_on_ordinary_pipelines[variantbenchmarking.mmd]": 0.11296345805749297, + "tests/test_tapered_bundle.py::test_complex_multipath_taper_present": 6.940987541573122, + "tests/test_tapered_bundle.py::test_tapered_lands_on_both_offsets": 0.001112750032916665, + "tests/test_tapered_bundle.py::test_tapered_rigid_matches_concentric": 0.001487499801442027, + "tests/test_tapered_bundle.py::test_tapering_lshape_preserves_both_spreads[complex_multipath]": 0.05052504129707813, + "tests/test_tapered_bundle.py::test_tapering_lshape_preserves_both_spreads[funcprofiler_upstream]": 0.2863965407013893, + "tests/test_tapered_bundle.py::test_tapering_lshape_preserves_both_spreads[junction_entry_collision]": 0.05760554224252701, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[aligner_row_pinned_continuation]": 0.06267358316108584, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[around_below_ep_col_gt0]": 0.020109124947339296, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[around_section_below]": 0.014556665904819965, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[asymmetric_tree]": 0.05025016702711582, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bottom_row_climb_clear_corridor]": 0.033367624739184976, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[branch_fold_forward]": 0.41069399984553456, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[branch_fold_stability]": 0.03685237397439778, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bt_chain]": 0.005871873814612627, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bt_exit_top_above]": 0.009896749863401055, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bt_exit_top_above_2line]": 0.022265333915129304, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bt_fork]": 0.014694458106532693, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bt_perp_entry_below]": 0.013264124048873782, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bt_to_lr]": 0.03977208398282528, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bt_to_tb]": 0.01662404090166092, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bundle_terminator_continuation]": 0.01264808396808803, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_fan_in_outer_slot]": 0.055609125178307295, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_gap2_rightward_overflow]": 0.033049833262339234, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_label_rake]": 0.04715254227630794, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_label_rake_left]": 0.048596999142318964, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_label_rake_wide]": 0.06499816686846316, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_leftward_far_side_entry]": 0.02224762481637299, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_leftward_overflow]": 0.026030959095805883, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[bypass_v_tight]": 0.038228458957746625, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[clear_channel_target_aware_push]": 0.04980220925062895, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[compact_gap_peer_conflict]": 0.021701748948544264, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[compact_hidden_passthrough]": 0.0251822080463171, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[complex_multipath]": 0.051693499088287354, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[convergence_stacked_sink]": 0.03537125117145479, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[convergent_offrow_exit_climb]": 0.14699308294802904, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[corridor_narrow_gap_fallback]": 0.03886787570081651, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[cross_col_top_entry]": 0.02034612512215972, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[cross_column_perp_drop]": 0.020370291313156486, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[cross_column_perp_drop_far_exit]": 0.02705183415673673, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[cross_row_gap_wrap]": 0.04009924968704581, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[deep_linear]": 0.12576462421566248, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[disjoint_sameline_trunks]": 0.045110957929864526, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[divergent_fanout_split]": 0.027338709216564894, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[dogleg_exempt_distinct]": 0.04626791691407561, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[dogleg_exempt_sameline]": 0.019855458056554198, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[dogleg_twoline_fanout]": 0.042096625082194805, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[exit_corner_offset_dogleg]": 0.032807332929223776, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[fan_bypass_nesting]": 0.06590329203754663, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[fan_in_merge]": 0.054622624069452286, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[fold_double]": 0.14681258285418153, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[fold_fan_across]": 0.10022312426008284, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[fold_stacked_branch]": 0.11143287480808794, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[funcprofiler_upstream]": 0.5295721248257905, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[header_nudge]": 0.018571083899587393, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[header_side_rotated]": 0.01292695919983089, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[inrow_skip_breeze]": 0.01681516715325415, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[inter_row_wrap_clearance]": 0.019658498698845506, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[interchange_lane_reorder]": 0.011102666147053242, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[junction_entry_align]": 0.04386924998834729, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[junction_entry_collision]": 0.029247957980260253, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[junction_entry_reversed_fold]": 0.08106874907389283, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[junction_fanout_convergence]": 0.017486958066001534, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[left_entry_up_wrap]": 0.017262040870264173, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[left_exit_sink_below]": 0.038497333182021976, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_perp_bottom_exit_perp_entry]": 0.022380208130925894, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_perp_bottom_exit_side_entry]": 0.025539999827742577, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_perp_top_exit_perp_entry]": 0.029623083071783185, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_perp_top_exit_perp_entry_diverging]": 0.02925620716996491, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_perp_top_exit_side_entry]": 0.0190978751052171, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_to_tb_top_cross_col]": 0.02937320712953806, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_to_tb_top_drop]": 0.013495959108695388, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_to_tb_top_drop_two_lines]": 0.017226167023181915, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_to_tb_top_near_vertical]": 0.022902042139321566, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_to_tb_top_two_lines]": 0.021690416149795055, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_top_entry_cross_column]": 0.01563728996552527, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[lr_top_entry_cross_column_two_line]": 0.011125959223136306, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_around_below_leftmost]": 0.02891899971291423, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_bottom_row_bypass]": 0.025560250040143728, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_leftmost_sink_branch]": 0.3154075408820063, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_offrow_continuation]": 0.023839706787839532, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_port_above_approach]": 0.030649418011307716, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_pullaway]": 0.02227987488731742, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_right_entry]": 0.04944091662764549, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_trunk_out_of_range_section]": 0.039505126187577844, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[merge_trunk_over_low_section]": 0.048301834147423506, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[mismatched_tracks]": 0.06490816711448133, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[mixed_bundle_column]": 0.07570862513966858, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[mixed_port_sides]": 0.027235541958361864, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[multi_input_convergence]": 0.03107633301988244, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[multi_line_bundle]": 0.050497832940891385, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[multicarrier_offrow_exit_climb]": 0.05009850091300905, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[near_vertical_junction_hook]": 0.020984250120818615, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[off_track_convergence]": 0.049233999103307724, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[off_track_convergence_multiline]": 0.023392457980662584, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[off_track_input_above_consumer]": 0.11517191724851727, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[parallel_independent]": 0.02129637380130589, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[peeloff_extra_line_consumer]": 0.03935920796357095, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[peeloff_riser_respace]": 0.05151658412069082, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[post_convergence_trunk]": 0.007350374944508076, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[rail_inter_section]": 0.022214457858353853, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[rail_offtrack_fan]": 0.01619029208086431, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[rail_offtrack_io]": 0.010429040994495153, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[rail_offtrack_plain_io]": 0.0478454171679914, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[reconverge_reversed_fold]": 0.1453657508827746, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[right_entry_from_above]": 0.030986624769866467, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[right_entry_from_above_far]": 0.017233834136277437, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[right_entry_gap_above_empty_row]": 0.0570509999524802, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[right_entry_wrap_no_fan]": 0.028736999724060297, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[rl_entry_runway]": 0.023262707982212305, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[rnaseq_lite]": 0.1068555002566427, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[route_around_intervening]": 0.029978249920532107, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[section_diamond]": 0.03908537491224706, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[self_crossing_bridge]": 0.021175917237997055, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[shared_sink_parallel]": 0.07220175024122, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[single_section]": 0.006329375319182873, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[stacked_left_exit_drop]": 0.01333641610108316, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[stacked_lr_serpentine]": 0.03649174980819225, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[symmetric_diamond_beside_wide_fan]": 0.03534091683104634, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_bottom_entry_flow_start]": 0.008719585137441754, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_bottom_exit_bundle_jog]": 0.024159251246601343, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_bottom_exit_fork_diamond]": 0.037478333339095116, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_column_continuation_two_lines]": 0.01184150017797947, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_convergence_straight_drop]": 0.008213082095608115, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_internal_diagonal]": 0.016210249857977033, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_left_exit_step]": 0.034777916967868805, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_lr_exit_left]": 0.03182608401402831, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_lr_exit_right]": 0.03164000017568469, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_passthrough_continuation]": 0.015287499874830246, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_passthrough_trunk]": 0.015260291984304786, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_perp_exit_side_neighbour]": 0.018967541866004467, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_right_entry_stack]": 0.01606637518852949, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_trunk_through_fan]": 0.04059575009159744, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[tb_two_line_vert_seam]": 0.025616874219849706, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[terminal_symmetric_fan]": 0.24698737519793212, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[terminus_join]": 0.01454316615127027, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[top_entry_header_clash]": 0.020467043155804276, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[trunk_through_fan]": 0.019795540953055024, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[u_turn_fold]": 0.0967876659706235, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[uneven_diamond]": 0.019671499961987138, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[upward_bypass]": 0.07863300084136426, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[variant_calling]": 0.20906516583636403, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[wide_fan_in]": 0.06022620922885835, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[wide_fan_out]": 0.05050887539982796, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[wide_label_fan]": 0.034514292143285275, + "tests/test_tb_bottom_exit_fork_diamond.py::test_perp_entry_boundary_consistent_across_fixtures[wrapped_label_trunk]": 0.02736587473191321, + "tests/test_tb_bottom_exit_fork_diamond.py::test_tb_bottom_exit_fork_diamond_renders": 0.07804870791733265, + "tests/test_tb_bottom_exit_fork_diamond.py::test_tb_bottom_exit_fork_leg_drops_straight": 0.022423792397603393, + "tests/test_tb_bottom_exit_spacing_invariant.py::test_tb_bottom_exit_section_gap[lr_top_entry_cross_column]": 0.009999083820730448, + "tests/test_tb_bottom_exit_spacing_invariant.py::test_tb_bottom_exit_section_gap[tb_column_continuation_two_lines]": 0.032574416138231754, + "tests/test_tb_branch_ratchet.py::test_baseline_is_current": 0.7652657078579068, + "tests/test_tb_branch_ratchet.py::test_no_new_tb_branches": 0.7027800418436527, + "tests/test_tb_fixture_coverage.py::test_lr_exit_sides_are_distinct_fixtures": 0.04143679095432162, + "tests/test_tb_fixture_coverage.py::test_tb_fixture_exercises_its_branch[tb_internal_diagonal-internal:diagonal]": 0.01998512400314212, + "tests/test_tb_fixture_coverage.py::test_tb_fixture_exercises_its_branch[tb_lr_exit_left-lr_exit:LEFT]": 0.013699457747861743, + "tests/test_tb_fixture_coverage.py::test_tb_fixture_exercises_its_branch[tb_lr_exit_right-lr_exit:RIGHT]": 0.01524349907413125, + "tests/test_tb_handler_centreline.py::test_collapsed_perp_fan_routes_as_l_shape_not_staircase": 0.028939457843080163, + "tests/test_tb_handler_centreline.py::test_perp_entry_l_corner_clears_floor_when_fanned[cross_row_gap_wrap]": 0.027689332840964198, + "tests/test_tb_handler_centreline.py::test_perp_entry_l_corner_clears_floor_when_fanned[fold_fan_across]": 0.08373137516900897, + "tests/test_tb_handler_centreline.py::test_perp_entry_l_corner_clears_floor_when_fanned[rnaseq_auto]": 0.12311395909637213, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[corridor-lr_perp_bottom_exit_perp_entry]": 0.022401208756491542, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[corridor-lr_perp_top_exit_perp_entry]": 0.01498562516644597, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[entry-04_directions]": 0.026351082837209105, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[entry-fold_double]": 0.15642824908718467, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[entry-rnaseq_auto]": 0.14243866712786257, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[exit-04_directions]": 0.026060083881020546, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[exit-fold_double]": 0.18640679237432778, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[exit-u_turn_fold]": 0.09570541698485613, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[perp-lr_to_tb_top_two_lines]": 0.03741000057198107, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[perp-rnaseq_auto]": 0.40695400000549853, + "tests/test_tb_handler_centreline.py::test_tb_corner_natural_render_is_clean[perp-tb_right_entry_stack]": 0.04437554068863392, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/centered_tracks.mmd]": 0.03195908269844949, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/cross_track_interchange.mmd]": 0.03789491578936577, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/diagonal_labels.mmd]": 0.11812000116333365, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/differentialabundance.mmd]": 0.2797839578706771, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/differentialabundance_default.mmd]": 0.22628095815889537, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/directional_flow.mmd]": 0.02038154099136591, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/disconnected_components.mmd]": 0.019679541932418942, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/epitopeprediction.mmd]": 0.10377587401308119, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/file_icons.mmd]": 0.028271210147067904, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/genomeassembly.mmd]": 0.10000833310186863, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/genomeassembly_staggered.mmd]": 0.08350579300895333, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/genomic_pipeline.mmd]": 0.33843929250724614, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/group_labels.mmd]": 0.020910416264086962, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/hlatyping.mmd]": 0.3279367070645094, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/legend_combo.mmd]": 0.0428703329525888, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/legend_logo_placement.mmd]": 0.08589579188264906, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/line_spread.mmd]": 0.07415083306841552, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/longread_variant_calling.mmd]": 0.18607374979183078, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/marker_styles.mmd]": 0.03358641709201038, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/off_track_outputs.mmd]": 0.03449979308061302, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/rail_mode.mmd]": 0.026066458085551858, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/rail_section.mmd]": 0.038307165959849954, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/rnaseq_auto.mmd]": 0.1367445820942521, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/rnaseq_sections.mmd]": 0.5389338741078973, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/rnaseq_sections_manual.mmd]": 0.6728011255618185, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/sarek_metro.mmd]": 0.47383383195847273, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/simple_pipeline.mmd]": 0.02586174989119172, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/tb_file_termini.mmd]": 0.02420691680163145, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.06041249888949096, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/around_below_ep_col_gt0.mmd]": 0.02973966603167355, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/around_section_below.mmd]": 0.031047123949974775, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/asymmetric_tree.mmd]": 0.044091123854741454, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.03304408211261034, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/branch_fold_forward.mmd]": 0.06579745700582862, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/branch_fold_stability.mmd]": 0.024177916115149856, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bt_chain.mmd]": 0.008223751094192266, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bt_exit_top_above.mmd]": 0.009218541905283928, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bt_exit_top_above_2line.mmd]": 0.046705542132258415, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bt_fork.mmd]": 0.025272250175476074, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bt_perp_entry_below.mmd]": 0.01779045700095594, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bt_to_lr.mmd]": 0.0199194997549057, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bt_to_tb.mmd]": 0.013427041005343199, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bundle_terminator_continuation.mmd]": 0.008204667130485177, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.07413391582667828, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.021668374305590987, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_label_rake.mmd]": 0.06326874904334545, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_label_rake_left.mmd]": 0.03590279119089246, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_label_rake_wide.mmd]": 0.08935587503947318, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.032621916150674224, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_leftward_overflow.mmd]": 0.02238708292134106, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/bypass_v_tight.mmd]": 0.055664624786004424, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/clear_channel_target_aware_push.mmd]": 0.3920665830373764, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/compact_gap_peer_conflict.mmd]": 0.032191500067710876, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/compact_hidden_passthrough.mmd]": 0.017215416068211198, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/complex_multipath.mmd]": 0.06337125063873827, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/convergence_stacked_sink.mmd]": 0.05204179114662111, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.154488667845726, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.02990895789116621, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/cross_col_top_entry.mmd]": 0.01381062506698072, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/cross_column_perp_drop.mmd]": 0.016330958576872945, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.019011126132681966, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/cross_row_gap_wrap.mmd]": 0.02716887602582574, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/deep_linear.mmd]": 0.05306112580001354, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/disjoint_sameline_trunks.mmd]": 0.32060666708275676, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/divergent_fanout_split.mmd]": 0.0219482087995857, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/dogleg_exempt_distinct.mmd]": 0.047349834349006414, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/dogleg_exempt_sameline.mmd]": 0.012553456937894225, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/dogleg_twoline_fanout.mmd]": 0.019499792018905282, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.02926741703413427, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/fan_bypass_nesting.mmd]": 0.0347377909347415, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/fan_in_merge.mmd]": 0.03695604088716209, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/fold_double.mmd]": 0.17763429111801088, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/fold_fan_across.mmd]": 0.11621691775508225, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/fold_stacked_branch.mmd]": 0.11528441589325666, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/funcprofiler_upstream.mmd]": 0.3277874158229679, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/header_nudge.mmd]": 0.04434083215892315, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/header_side_rotated.mmd]": 0.018948583165183663, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/inrow_skip_breeze.mmd]": 0.008030208991840482, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/inter_row_wrap_clearance.mmd]": 0.02170158294029534, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/interchange_lane_reorder.mmd]": 0.03266829112544656, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/junction_entry_align.mmd]": 0.0775527919176966, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/junction_entry_collision.mmd]": 0.03365591703914106, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/junction_entry_reversed_fold.mmd]": 0.04006904177367687, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/junction_fanout_convergence.mmd]": 0.025229292223230004, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/left_entry_up_wrap.mmd]": 0.040415833005681634, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/left_exit_sink_below.mmd]": 0.032541291089728475, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.017251708079129457, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.029983456945046782, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.0506894588470459, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.03224116610363126, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.019254749873653054, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.026511124102398753, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_to_tb_top_drop.mmd]": 0.02337795915082097, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.02507370919920504, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.015849415911361575, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.04103920818306506, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_top_entry_cross_column.mmd]": 0.02190387505106628, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.02149437484331429, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_around_below_leftmost.mmd]": 0.0425370829179883, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_bottom_row_bypass.mmd]": 0.05343270790763199, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.04007004224695265, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_offrow_continuation.mmd]": 0.03170616598799825, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_port_above_approach.mmd]": 0.0356289588380605, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_pullaway.mmd]": 0.030783207854256034, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_right_entry.mmd]": 0.040010082768276334, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.03523295815102756, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/merge_trunk_over_low_section.mmd]": 0.04529212508350611, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/mismatched_tracks.mmd]": 0.030961000127717853, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/mixed_bundle_column.mmd]": 0.03168779192492366, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/mixed_port_sides.mmd]": 0.03776812506839633, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/multi_input_convergence.mmd]": 0.02239749999716878, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/multi_line_bundle.mmd]": 0.0175798328127712, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.05759533424861729, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/near_vertical_junction_hook.mmd]": 0.030233165249228477, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/off_track_convergence.mmd]": 0.023757832823321223, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/off_track_convergence_multiline.mmd]": 0.44312012498266995, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/off_track_input_above_consumer.mmd]": 0.10752970911562443, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/parallel_independent.mmd]": 0.04248641710728407, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.04732725000940263, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/peeloff_riser_respace.mmd]": 0.024725999915972352, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/post_convergence_trunk.mmd]": 0.030316957738250494, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/rail_inter_section.mmd]": 0.02172558382153511, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/rail_offtrack_fan.mmd]": 0.010405709268525243, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/rail_offtrack_io.mmd]": 0.022740124957636, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/rail_offtrack_plain_io.mmd]": 0.009225498884916306, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/reconverge_reversed_fold.mmd]": 0.141331666149199, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/right_entry_from_above.mmd]": 0.04203441715799272, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/right_entry_from_above_far.mmd]": 0.01743704196996987, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.022938374895602465, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.018239584052935243, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/rl_entry_runway.mmd]": 0.02273016795516014, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/rnaseq_lite.mmd]": 0.09324916591867805, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/route_around_intervening.mmd]": 0.030817541992291808, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/section_diamond.mmd]": 0.0307418757583946, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/self_crossing_bridge.mmd]": 0.03840266587212682, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/shared_sink_parallel.mmd]": 0.05674608307890594, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/single_section.mmd]": 0.010577292181551456, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/stacked_left_exit_drop.mmd]": 0.00973404198884964, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/stacked_lr_serpentine.mmd]": 0.0313527078833431, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.05896604200825095, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.02062883321195841, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.02603899990208447, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.0470829161349684, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.03707029111683369, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_convergence_straight_drop.mmd]": 0.018268543062731624, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_internal_diagonal.mmd]": 0.015407501021400094, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_left_exit_step.mmd]": 0.04108058521524072, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_lr_exit_left.mmd]": 0.021232292288914323, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_lr_exit_right.mmd]": 0.06136958301067352, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_passthrough_continuation.mmd]": 0.03292695828713477, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_passthrough_trunk.mmd]": 0.01449058298021555, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.031742499908432364, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_right_entry_stack.mmd]": 0.2977721670176834, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_trunk_through_fan.mmd]": 0.015859001083299518, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/tb_two_line_vert_seam.mmd]": 0.017683957936242223, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/terminal_symmetric_fan.mmd]": 0.039247874869033694, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/terminus_join.mmd]": 0.007746374933049083, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/top_entry_header_clash.mmd]": 0.009533832781016827, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/trunk_through_fan.mmd]": 0.027804874815046787, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/u_turn_fold.mmd]": 0.08887445810250938, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/uneven_diamond.mmd]": 0.006551041966304183, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/upward_bypass.mmd]": 0.055303374072536826, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/variant_calling.mmd]": 0.20387308322824538, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/wide_fan_in.mmd]": 0.03225862514227629, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/wide_fan_out.mmd]": 0.033357375068590045, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/wide_label_fan.mmd]": 0.033651874866336584, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/topologies/wrapped_label_trunk.mmd]": 0.012339166132733226, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/variant_calling.mmd]": 0.058881541015580297, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/variant_calling_tuned.mmd]": 0.0451452499255538, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/variantbenchmarking.mmd]": 0.43582495814189315, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/variantbenchmarking_auto.mmd]": 0.3746212492696941, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[examples/variantprioritization.mmd]": 0.09549562493339181, + "tests/test_tb_marker_on_track.py::test_tb_marker_centred_on_drawn_lines[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.033343748888000846, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[aligner_row_pinned_continuation]": 0.06753925024531782, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[around_below_ep_col_gt0]": 0.032204541843384504, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[around_section_below]": 0.03536187601275742, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[asymmetric_tree]": 0.05270649981684983, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bottom_row_climb_clear_corridor]": 0.03876783302985132, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[branch_fold_forward]": 0.0769205829128623, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[branch_fold_stability]": 0.02881612512283027, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bt_chain]": 0.0060697500593960285, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bt_exit_top_above]": 0.01353174983523786, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bt_exit_top_above_2line]": 0.024348999839276075, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bt_fork]": 0.010420791804790497, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bt_perp_entry_below]": 0.01796291582286358, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bt_to_lr]": 0.016364083159714937, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bt_to_tb]": 0.010175999719649553, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bundle_terminator_continuation]": 0.008479833137243986, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_fan_in_outer_slot]": 0.09443537518382072, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_gap2_rightward_overflow]": 0.044581541791558266, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_label_rake]": 0.050724875181913376, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_label_rake_left]": 0.051811917219311, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_label_rake_wide]": 0.08224174985662103, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_leftward_far_side_entry]": 0.03607995714992285, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_leftward_overflow]": 0.03072008304297924, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[bypass_v_tight]": 0.03653079201467335, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[clear_channel_target_aware_push]": 0.038048459216952324, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[compact_gap_peer_conflict]": 0.029761041048914194, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[compact_hidden_passthrough]": 0.030465499265119433, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[complex_multipath]": 0.05938349920324981, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[convergence_stacked_sink]": 0.038428875152021646, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[convergent_offrow_exit_climb]": 0.42862120899371803, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[corridor_narrow_gap_fallback]": 0.04271754086948931, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[cross_col_top_entry]": 0.011750834062695503, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[cross_column_perp_drop]": 0.028903374914079905, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[cross_column_perp_drop_far_exit]": 0.01261379080824554, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[cross_row_gap_wrap]": 0.05112154199741781, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[deep_linear]": 0.0524406258482486, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[disjoint_sameline_trunks]": 0.042684707092121243, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[divergent_fanout_split]": 0.044601500034332275, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[dogleg_exempt_distinct]": 0.035051999846473336, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[dogleg_exempt_sameline]": 0.016420667758211493, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[dogleg_twoline_fanout]": 0.047178416047245264, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[exit_corner_offset_dogleg]": 0.03603445878252387, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[fan_bypass_nesting]": 0.09012266714125872, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[fan_in_merge]": 0.05134312598966062, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[fold_double]": 0.13621204206719995, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[fold_fan_across]": 0.16687645902857184, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[fold_stacked_branch]": 0.460511167999357, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[funcprofiler_upstream]": 0.2317494167946279, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[header_nudge]": 0.027612459147349, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[header_side_rotated]": 0.02878870815038681, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[inrow_skip_breeze]": 0.008210582891479135, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[inter_row_wrap_clearance]": 0.01850120793096721, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[interchange_lane_reorder]": 0.0196106662042439, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[junction_entry_align]": 0.08176783402450383, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[junction_entry_collision]": 0.03408845770172775, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[junction_entry_reversed_fold]": 0.03076545801013708, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[junction_fanout_convergence]": 0.038968250155448914, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[left_entry_up_wrap]": 0.02394545916467905, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[left_exit_sink_below]": 0.05370641709305346, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_perp_bottom_exit_perp_entry]": 0.014084834139794111, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_perp_bottom_exit_side_entry]": 0.02439308282919228, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_perp_top_exit_perp_entry]": 0.025979584082961082, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_perp_top_exit_perp_entry_diverging]": 0.027784207835793495, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_perp_top_exit_side_entry]": 0.030139625072479248, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_to_tb_top_cross_col]": 0.018517499789595604, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_to_tb_top_drop]": 0.02150225080549717, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_to_tb_top_drop_two_lines]": 0.01246012607589364, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_to_tb_top_near_vertical]": 0.024699624627828598, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_to_tb_top_two_lines]": 0.013787208357825875, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_top_entry_cross_column]": 0.01090208301320672, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[lr_top_entry_cross_column_two_line]": 0.012792583787813783, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_around_below_leftmost]": 0.038042707834392786, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_bottom_row_bypass]": 0.044743833132088184, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_leftmost_sink_branch]": 0.04759287484921515, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_offrow_continuation]": 0.0529019171372056, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_port_above_approach]": 0.022092000115662813, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_pullaway]": 0.02477287594228983, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_right_entry]": 0.025979584082961082, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_trunk_out_of_range_section]": 0.06103679118677974, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[merge_trunk_over_low_section]": 0.07666116580367088, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[mismatched_tracks]": 0.052821542136371136, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[mixed_bundle_column]": 0.04093912523239851, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[mixed_port_sides]": 0.04682149877771735, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[multi_input_convergence]": 0.017531831981614232, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[multi_line_bundle]": 0.03113416605629027, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[multicarrier_offrow_exit_climb]": 0.05311966594308615, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[near_vertical_junction_hook]": 0.030627584317699075, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[off_track_convergence]": 0.03577120928093791, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[off_track_convergence_multiline]": 0.05427954066544771, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[off_track_input_above_consumer]": 0.09748220769688487, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[parallel_independent]": 0.018217207631096244, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[peeloff_extra_line_consumer]": 0.045086291152983904, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[peeloff_riser_respace]": 0.029929500073194504, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[post_convergence_trunk]": 0.014917084015905857, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[rail_inter_section]": 0.007249206770211458, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[rail_offtrack_fan]": 0.014046707889065146, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[rail_offtrack_io]": 0.015051374910399318, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[rail_offtrack_plain_io]": 0.015153167070820928, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[reconverge_reversed_fold]": 0.36915879184380174, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[right_entry_from_above]": 0.026567791122943163, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[right_entry_from_above_far]": 0.009042290970683098, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[right_entry_gap_above_empty_row]": 0.029554874170571566, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[right_entry_wrap_no_fan]": 0.019495792221277952, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[rl_entry_runway]": 0.032330708811059594, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[rnaseq_lite]": 0.11923666601069272, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[route_around_intervening]": 0.027571623912081122, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[section_diamond]": 0.03730858373455703, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[self_crossing_bridge]": 0.03960387618280947, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[shared_sink_parallel]": 0.05879937601275742, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[single_section]": 0.017216332023963332, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[stacked_left_exit_drop]": 0.01665429212152958, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[stacked_lr_serpentine]": 0.058444540947675705, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[symmetric_diamond_beside_wide_fan]": 0.04006654187105596, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_bottom_entry_flow_start]": 0.010577791137620807, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_bottom_exit_bundle_jog]": 0.030567708192393184, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_bottom_exit_fork_diamond]": 0.03959562396630645, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_column_continuation_two_lines]": 0.018573664827272296, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_convergence_straight_drop]": 0.0063981241546571255, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_internal_diagonal]": 0.034484499134123325, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_left_exit_step]": 0.027224708115682006, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_lr_exit_left]": 0.027499417075887322, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_lr_exit_right]": 0.03271674970164895, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_passthrough_continuation]": 0.009878084063529968, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_passthrough_trunk]": 0.040575999999418855, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_perp_exit_side_neighbour]": 0.008842666167765856, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_right_entry_stack]": 0.02715570875443518, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_trunk_through_fan]": 0.027412583818659186, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[tb_two_line_vert_seam]": 0.027132209157571197, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[terminal_symmetric_fan]": 0.026735000079497695, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[terminus_join]": 0.007066583959385753, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[top_entry_header_clash]": 0.0345258351881057, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[trunk_through_fan]": 0.027749042958021164, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[u_turn_fold]": 0.06861629080958664, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[uneven_diamond]": 0.007560041034594178, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[upward_bypass]": 0.09102783305570483, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[variant_calling]": 0.14814462489448488, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[wide_fan_in]": 0.054966083727777004, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[wide_fan_out]": 0.05723600089550018, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[wide_label_fan]": 0.050705583998933434, + "tests/test_tb_perp_exit_side_neighbour.py::test_bottom_exit_routes_leave_port_downward[wrapped_label_trunk]": 0.015419709263369441, + "tests/test_tb_perp_exit_side_neighbour.py::test_tb_perp_exit_side_entry_aligns_with_consumer": 0.020255334209650755, + "tests/test_tb_perp_exit_side_neighbour.py::test_tb_perp_exit_side_neighbour_enters_at_ports": 0.01686858292669058, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[aligner_row_pinned_continuation]": 0.08220704179257154, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[around_below_ep_col_gt0]": 0.022734624799340963, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[around_section_below]": 0.014236623886972666, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[asymmetric_tree]": 0.04221591609530151, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bottom_row_climb_clear_corridor]": 0.04878700012341142, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[branch_fold_forward]": 0.04559862380847335, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[branch_fold_stability]": 0.038922291016206145, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bt_chain]": 0.008297665975987911, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bt_exit_top_above]": 0.015860416926443577, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bt_exit_top_above_2line]": 0.016736667603254318, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bt_fork]": 0.019071833230555058, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bt_perp_entry_below]": 0.016935250023379922, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bt_to_lr]": 0.024973374791443348, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bt_to_tb]": 0.02169908327050507, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bundle_terminator_continuation]": 0.007496540900319815, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_fan_in_outer_slot]": 0.06387324933893979, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_gap2_rightward_overflow]": 0.02595699904486537, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_label_rake]": 0.05299566709436476, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_label_rake_left]": 0.05902758310548961, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_label_rake_wide]": 0.0776907498948276, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_leftward_far_side_entry]": 0.028431958984583616, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_leftward_overflow]": 0.274115206906572, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[bypass_v_tight]": 0.0584477090742439, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[clear_channel_target_aware_push]": 0.049278083024546504, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[compact_gap_peer_conflict]": 0.020162626169621944, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[compact_hidden_passthrough]": 0.03185245906934142, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[complex_multipath]": 0.06962399883195758, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[convergence_stacked_sink]": 0.06623995816335082, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[convergent_offrow_exit_climb]": 0.2132962087634951, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[corridor_narrow_gap_fallback]": 0.01651575113646686, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[cross_col_top_entry]": 0.017658749129623175, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[cross_column_perp_drop]": 0.009117749985307455, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[cross_column_perp_drop_far_exit]": 0.00867399899289012, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[cross_row_gap_wrap]": 0.062054000329226255, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[deep_linear]": 0.07569133257493377, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[disjoint_sameline_trunks]": 0.04629562608897686, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[divergent_fanout_split]": 0.02514320774935186, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[dogleg_exempt_distinct]": 0.017618415877223015, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[dogleg_exempt_sameline]": 0.02663608407601714, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[dogleg_twoline_fanout]": 0.019041334046050906, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[exit_corner_offset_dogleg]": 0.02993629197590053, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[fan_bypass_nesting]": 0.06697479216381907, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[fan_in_merge]": 0.04236791795119643, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[fold_double]": 0.1373487908858806, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[fold_fan_across]": 0.11892200005240738, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[fold_stacked_branch]": 0.1419281659182161, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[funcprofiler_upstream]": 0.5389002091251314, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[header_nudge]": 0.011916666990146041, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[header_side_rotated]": 0.02450224943459034, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[inrow_skip_breeze]": 0.01862354204058647, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[inter_row_wrap_clearance]": 0.022798041813075542, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[interchange_lane_reorder]": 0.036882166750729084, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[junction_entry_align]": 0.04188616597093642, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[junction_entry_collision]": 0.045514709083363414, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[junction_entry_reversed_fold]": 0.03214433370158076, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[junction_fanout_convergence]": 0.024515958037227392, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[left_entry_up_wrap]": 0.015138124115765095, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[left_exit_sink_below]": 0.05917895818129182, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_perp_bottom_exit_perp_entry]": 0.015621832106262445, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_perp_bottom_exit_side_entry]": 0.015282542677596211, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_perp_top_exit_perp_entry]": 0.03272420912981033, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_perp_top_exit_perp_entry_diverging]": 0.03045158297754824, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_perp_top_exit_side_entry]": 0.03643983299843967, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_to_tb_top_cross_col]": 0.04369416693225503, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_to_tb_top_drop]": 0.015340793179348111, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_to_tb_top_drop_two_lines]": 0.018946751253679395, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_to_tb_top_near_vertical]": 0.017173834145069122, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_to_tb_top_two_lines]": 0.022663459880277514, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_top_entry_cross_column]": 0.017140249954536557, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[lr_top_entry_cross_column_two_line]": 0.015899042831733823, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_around_below_leftmost]": 0.026886832900345325, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_bottom_row_bypass]": 0.02394816605374217, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_leftmost_sink_branch]": 0.05329445796087384, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_offrow_continuation]": 0.02892425120808184, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_port_above_approach]": 0.038841416127979755, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_pullaway]": 0.056884916964918375, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_right_entry]": 0.03565691690891981, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_trunk_out_of_range_section]": 0.05443075019866228, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[merge_trunk_over_low_section]": 0.04043745808303356, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[mismatched_tracks]": 0.025852082995697856, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[mixed_bundle_column]": 0.04761591600254178, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[mixed_port_sides]": 0.02784233377315104, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[multi_input_convergence]": 0.0335060846991837, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[multi_line_bundle]": 0.06426012492738664, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[multicarrier_offrow_exit_climb]": 0.042732708156108856, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[near_vertical_junction_hook]": 0.048979626037180424, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[off_track_convergence]": 0.021220457972958684, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[off_track_convergence_multiline]": 0.024443041998893023, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[off_track_input_above_consumer]": 0.1256671657320112, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[parallel_independent]": 0.0361310001462698, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[peeloff_extra_line_consumer]": 0.06021358398720622, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[peeloff_riser_respace]": 0.01874687592498958, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[post_convergence_trunk]": 0.018097539898008108, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[rail_inter_section]": 0.009862167062237859, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[rail_offtrack_fan]": 0.028284875908866525, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[rail_offtrack_io]": 0.013379751006141305, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[rail_offtrack_plain_io]": 0.014152833027765155, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[reconverge_reversed_fold]": 0.11897170916199684, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[right_entry_from_above]": 0.016270041931420565, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[right_entry_from_above_far]": 0.028649917105212808, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[right_entry_gap_above_empty_row]": 0.019638208206743002, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[right_entry_wrap_no_fan]": 0.010237082839012146, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[rl_entry_runway]": 0.013748874887824059, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[rnaseq_lite]": 0.40659766597673297, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[route_around_intervening]": 0.02253312594257295, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[section_diamond]": 0.0171462909784168, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[self_crossing_bridge]": 0.02355979080311954, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[shared_sink_parallel]": 0.06822283286601305, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[single_section]": 0.00763087416999042, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[stacked_left_exit_drop]": 0.01865766616538167, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[stacked_lr_serpentine]": 0.02350429235957563, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[symmetric_diamond_beside_wide_fan]": 0.05652974988333881, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_bottom_entry_flow_start]": 0.009516333928331733, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_bottom_exit_bundle_jog]": 0.040731708286330104, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_bottom_exit_fork_diamond]": 0.03848158218897879, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_column_continuation_two_lines]": 0.02904687589034438, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_convergence_straight_drop]": 0.00856308313086629, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_internal_diagonal]": 0.010537833906710148, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_left_exit_step]": 0.03938279114663601, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_lr_exit_left]": 0.05022462480701506, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_lr_exit_right]": 0.024513958021998405, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_passthrough_continuation]": 0.00841508386656642, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_passthrough_trunk]": 0.028954624198377132, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_perp_exit_side_neighbour]": 0.016885708086192608, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_right_entry_stack]": 0.023652625968679786, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_trunk_through_fan]": 0.012065582675859332, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[tb_two_line_vert_seam]": 0.019772915868088603, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[terminal_symmetric_fan]": 0.016114206984639168, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[terminus_join]": 0.007541959173977375, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[top_entry_header_clash]": 0.014226166997104883, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[trunk_through_fan]": 0.024508291156962514, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[u_turn_fold]": 0.08513404079712927, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[uneven_diamond]": 0.017351249931380153, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[upward_bypass]": 0.04170829220674932, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[variant_calling]": 0.1851354162208736, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[wide_fan_in]": 0.03162645781412721, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[wide_fan_out]": 0.03929716581478715, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[wide_label_fan]": 0.014431499876081944, + "tests/test_tb_two_line_vert_seam.py::test_perp_entry_into_vertical_section_clears_trunk_head[wrapped_label_trunk]": 0.01526329223997891, + "tests/test_tb_two_line_vert_seam.py::test_two_line_vert_seam_enters_level_then_drops": 0.012947916751727462, + "tests/test_tighten_bypass_column_filter.py::test_bypass_span_aggregated_over_intervening_section": 0.03603904182091355, + "tests/test_tighten_bypass_column_filter.py::test_tighten_ignores_bypass_over_non_overlapping_column": 0.022724209120497108, + "tests/test_tighten_bypass_column_filter.py::test_tighten_keeps_bypass_clearance_for_overlapping_column": 0.03496995894238353, + "tests/test_top_entry_staircase.py::test_top_entry_routes_are_builder_fanned[cross_col_top_entry.mmd]": 0.022493834141641855, + "tests/test_top_entry_staircase.py::test_top_entry_routes_are_builder_fanned[cross_row_gap_wrap.mmd]": 0.05859641684219241, + "tests/test_top_entry_staircase.py::test_top_entry_routes_are_builder_fanned[lr_to_tb_top_cross_col.mmd]": 0.0237526660785079, + "tests/test_top_entry_staircase.py::test_top_entry_routes_are_builder_fanned[lr_to_tb_top_near_vertical.mmd]": 0.0285248348955065, + "tests/test_top_entry_staircase.py::test_top_entry_routes_are_builder_fanned[lr_to_tb_top_two_lines.mmd]": 0.01692920969799161, + "tests/test_top_entry_staircase.py::test_top_entry_routes_are_builder_fanned[merge_trunk_out_of_range_section.mmd]": 0.054676501313224435, + "tests/test_top_entry_staircase.py::test_top_entry_routes_are_builder_fanned[variantbenchmarking.mmd]": 0.5764584173448384, + "tests/test_top_entry_staircase.py::test_top_entry_staircase_is_concentric_and_unflipped[cross_col_top_entry.mmd]": 0.022258542012423277, + "tests/test_top_entry_staircase.py::test_top_entry_staircase_is_concentric_and_unflipped[cross_row_gap_wrap.mmd]": 0.030102041317149997, + "tests/test_top_entry_staircase.py::test_top_entry_staircase_is_concentric_and_unflipped[lr_to_tb_top_cross_col.mmd]": 0.014025415992364287, + "tests/test_top_entry_staircase.py::test_top_entry_staircase_is_concentric_and_unflipped[lr_to_tb_top_near_vertical.mmd]": 0.010588249890133739, + "tests/test_top_entry_staircase.py::test_top_entry_staircase_is_concentric_and_unflipped[lr_to_tb_top_two_lines.mmd]": 0.01913199992850423, + "tests/test_top_entry_staircase.py::test_top_entry_staircase_is_concentric_and_unflipped[merge_trunk_out_of_range_section.mmd]": 0.02497120713815093, + "tests/test_top_entry_staircase.py::test_top_entry_staircase_is_concentric_and_unflipped[variantbenchmarking.mmd]": 0.2322977480944246, + "tests/test_topology_validation.py::TestAlmostHorizontalEdges::test_genomeassembly_no_slope": 0.08005162514746189, + "tests/test_topology_validation.py::TestAlmostHorizontalEdges::test_variant_calling_no_slope": 0.042616207618266344, + "tests/test_topology_validation.py::TestAlmostHorizontalEdges::test_with_subworkflows_no_slope": 0.03816933394409716, + "tests/test_topology_validation.py::TestEpitopepredictionRegression::test_all_sections_placed": 0.058006752049550414, + "tests/test_topology_validation.py::TestEpitopepredictionRegression::test_coordinate_sanity": 0.09129920904524624, + "tests/test_topology_validation.py::TestEpitopepredictionRegression::test_edge_waypoints": 0.07561337435618043, + "tests/test_topology_validation.py::TestEpitopepredictionRegression::test_no_section_overlap": 0.3619762510061264, + "tests/test_topology_validation.py::TestEpitopepredictionRegression::test_station_containment": 0.059486625250428915, + "tests/test_topology_validation.py::TestFuncprofilerUpstreamDefects::test_validator_detects_single_segment_diagonals": 0.2127144169062376, + "tests/test_topology_validation.py::TestHlatypingRegression::test_all_sections_placed": 0.05460245907306671, + "tests/test_topology_validation.py::TestHlatypingRegression::test_coordinate_sanity": 0.030727998819202185, + "tests/test_topology_validation.py::TestHlatypingRegression::test_edge_waypoints": 0.04595762491226196, + "tests/test_topology_validation.py::TestHlatypingRegression::test_no_section_overlap": 0.04766404093243182, + "tests/test_topology_validation.py::TestHlatypingRegression::test_station_containment": 0.04692554287612438, + "tests/test_topology_validation.py::TestMergeJunctions::test_genomeassembly_passes_validation": 0.4238158748485148, + "tests/test_topology_validation.py::TestMergeJunctions::test_merge_junction_connectivity": 0.08540029195137322, + "tests/test_topology_validation.py::TestMergeJunctions::test_merge_junction_count": 0.07232758379541337, + "tests/test_topology_validation.py::TestMergeJunctions::test_merge_junction_has_correct_section": 0.08218420925550163, + "tests/test_topology_validation.py::TestMergeJunctions::test_merge_junction_positioned_near_entry": 0.07678645988926291, + "tests/test_topology_validation.py::TestMergeJunctions::test_merge_junctions_created": 0.07882158271968365, + "tests/test_topology_validation.py::TestMergeRouting::test_branch_is_4_point_descent": 0.07633787603117526, + "tests/test_topology_validation.py::TestMergeRouting::test_bypass_bundle_uses_offset_step": 0.08794174902141094, + "tests/test_topology_validation.py::TestMergeRouting::test_no_backward_segments": 0.06654274999164045, + "tests/test_topology_validation.py::TestMergeRouting::test_trunk_reaches_entry_port": 0.0775099997408688, + "tests/test_topology_validation.py::TestReflowStructure::test_deep_linear_narrow_has_tb_fold": 0.06419870932586491, + "tests/test_topology_validation.py::TestReflowStructure::test_deep_linear_reflow_adds_folds": 0.08791583287529647, + "tests/test_topology_validation.py::TestReflowStructure::test_fold_double_more_folds_at_narrow_width": 0.20772070810198784, + "tests/test_topology_validation.py::TestReflowValidation::test_coordinate_sanity[deep_linear_cols10]": 0.07665795809589326, + "tests/test_topology_validation.py::TestReflowValidation::test_coordinate_sanity[deep_linear_cols6]": 0.3160215832758695, + "tests/test_topology_validation.py::TestReflowValidation::test_coordinate_sanity[deep_linear_cols8]": 0.045019458048045635, + "tests/test_topology_validation.py::TestReflowValidation::test_coordinate_sanity[fold_double_cols10]": 0.11357320821844041, + "tests/test_topology_validation.py::TestReflowValidation::test_coordinate_sanity[fold_double_cols6]": 0.11847008322365582, + "tests/test_topology_validation.py::TestReflowValidation::test_coordinate_sanity[fold_double_cols8]": 0.13008804200217128, + "tests/test_topology_validation.py::TestReflowValidation::test_edge_waypoints[deep_linear_cols10]": 0.03971075010485947, + "tests/test_topology_validation.py::TestReflowValidation::test_edge_waypoints[deep_linear_cols6]": 0.05680287512950599, + "tests/test_topology_validation.py::TestReflowValidation::test_edge_waypoints[deep_linear_cols8]": 0.04365854081697762, + "tests/test_topology_validation.py::TestReflowValidation::test_edge_waypoints[fold_double_cols10]": 0.1506736248265952, + "tests/test_topology_validation.py::TestReflowValidation::test_edge_waypoints[fold_double_cols6]": 0.12276387494057417, + "tests/test_topology_validation.py::TestReflowValidation::test_edge_waypoints[fold_double_cols8]": 0.29224133398383856, + "tests/test_topology_validation.py::TestReflowValidation::test_no_section_overlap[deep_linear_cols10]": 0.045280042104423046, + "tests/test_topology_validation.py::TestReflowValidation::test_no_section_overlap[deep_linear_cols6]": 0.05281745898537338, + "tests/test_topology_validation.py::TestReflowValidation::test_no_section_overlap[deep_linear_cols8]": 0.053286041133105755, + "tests/test_topology_validation.py::TestReflowValidation::test_no_section_overlap[fold_double_cols10]": 0.14002229063771665, + "tests/test_topology_validation.py::TestReflowValidation::test_no_section_overlap[fold_double_cols6]": 0.11653108196333051, + "tests/test_topology_validation.py::TestReflowValidation::test_no_section_overlap[fold_double_cols8]": 0.11231070826761425, + "tests/test_topology_validation.py::TestReflowValidation::test_station_containment[deep_linear_cols10]": 0.05373312486335635, + "tests/test_topology_validation.py::TestReflowValidation::test_station_containment[deep_linear_cols6]": 0.043833541218191385, + "tests/test_topology_validation.py::TestReflowValidation::test_station_containment[deep_linear_cols8]": 0.04759583342820406, + "tests/test_topology_validation.py::TestReflowValidation::test_station_containment[fold_double_cols10]": 0.09836629289202392, + "tests/test_topology_validation.py::TestReflowValidation::test_station_containment[fold_double_cols6]": 0.1819757919292897, + "tests/test_topology_validation.py::TestReflowValidation::test_station_containment[fold_double_cols8]": 0.1531020828988403, + "tests/test_topology_validation.py::TestRnaseqRegression::test_all_sections_placed": 0.6200005828868598, + "tests/test_topology_validation.py::TestRnaseqRegression::test_coordinate_sanity": 0.45766325015574694, + "tests/test_topology_validation.py::TestRnaseqRegression::test_edge_waypoints": 0.4927232500631362, + "tests/test_topology_validation.py::TestRnaseqRegression::test_no_section_overlap": 0.43484849971719086, + "tests/test_topology_validation.py::TestRnaseqRegression::test_station_containment": 0.4471272090449929, + "tests/test_topology_validation.py::TestTbFileTerminiRegression::test_coordinate_sanity": 0.02964324993081391, + "tests/test_topology_validation.py::TestTbFileTerminiRegression::test_entry_port_aligned_with_feeder_no_kink": 0.026383833028376102, + "tests/test_topology_validation.py::TestTbFileTerminiRegression::test_no_section_overlap": 0.03237058292143047, + "tests/test_topology_validation.py::TestTbFileTerminiRegression::test_reporting_section_is_tb_with_termini": 0.02518774988129735, + "tests/test_topology_validation.py::TestTbFileTerminiRegression::test_station_containment": 0.02140316693112254, + "tests/test_topology_validation.py::TestTbFileTerminiRegression::test_termini_icons_reserved_below_in_bbox": 0.025504792109131813, + "tests/test_topology_validation.py::TestTbFileTerminiRegression::test_validate_guards_pass": 0.10367662459611893, + "tests/test_topology_validation.py::TestTopologySpecific::test_asymmetric_tree_sections": 0.05220675026066601, + "tests/test_topology_validation.py::TestTopologySpecific::test_complex_multipath_structure": 0.0646119590383023, + "tests/test_topology_validation.py::TestTopologySpecific::test_deep_linear_has_7_sections": 0.2646500829141587, + "tests/test_topology_validation.py::TestTopologySpecific::test_diamond_branches_different_rows": 0.03869479103013873, + "tests/test_topology_validation.py::TestTopologySpecific::test_diamond_grid_structure": 0.030862373998388648, + "tests/test_topology_validation.py::TestTopologySpecific::test_fan_in_has_5_sections": 0.026722624897956848, + "tests/test_topology_validation.py::TestTopologySpecific::test_fan_out_creates_junction": 0.02894645812921226, + "tests/test_topology_validation.py::TestTopologySpecific::test_fan_out_has_5_sections": 0.030774790793657303, + "tests/test_topology_validation.py::TestTopologySpecific::test_fold_double_structure": 0.11286429176107049, + "tests/test_topology_validation.py::TestTopologySpecific::test_fold_fan_across_structure": 0.11799691687338054, + "tests/test_topology_validation.py::TestTopologySpecific::test_fold_stacked_branch_structure": 0.32152479188516736, + "tests/test_topology_validation.py::TestTopologySpecific::test_mixed_port_sides_structure": 0.018380041234195232, + "tests/test_topology_validation.py::TestTopologySpecific::test_multi_line_bundle_all_6_lines": 0.04078529076650739, + "tests/test_topology_validation.py::TestTopologySpecific::test_parallel_independent_separate_rows": 0.022156041115522385, + "tests/test_topology_validation.py::TestTopologySpecific::test_rnaseq_lite_structure": 0.08160220785066485, + "tests/test_topology_validation.py::TestTopologySpecific::test_rnaseq_lite_top_alignment": 0.05705137620680034, + "tests/test_topology_validation.py::TestTopologySpecific::test_single_section_no_ports": 0.005859625060111284, + "tests/test_topology_validation.py::TestTopologySpecific::test_single_section_valid": 0.006311458069831133, + "tests/test_topology_validation.py::TestTopologySpecific::test_variant_calling_structure": 0.19601412513293326, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[aligner_row_pinned_continuation]": 0.04266712395474315, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[around_below_ep_col_gt0]": 0.016184834064915776, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[around_section_below]": 0.0194287090562284, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[asymmetric_tree]": 0.059618083061650395, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bottom_row_climb_clear_corridor]": 0.03819504170678556, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[branch_fold_forward]": 0.05844458332285285, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[branch_fold_stability]": 0.028464667964726686, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bt_chain]": 0.005945582874119282, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bt_exit_top_above]": 0.013959457166492939, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bt_exit_top_above_2line]": 0.02492599980905652, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bt_fork]": 0.011997542111203074, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bt_perp_entry_below]": 0.04357087519019842, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bt_to_lr]": 0.013868584064766765, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bt_to_tb]": 0.01846962491981685, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bundle_terminator_continuation]": 0.013311541173607111, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_fan_in_outer_slot]": 0.056634041015058756, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_gap2_rightward_overflow]": 0.040517790941521525, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_label_rake]": 0.03520458284765482, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_label_rake_left]": 0.03450220916420221, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_label_rake_wide]": 0.052925876108929515, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_leftward_far_side_entry]": 0.02778004133142531, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_leftward_overflow]": 0.02415295783430338, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[bypass_v_tight]": 0.02400637394748628, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[clear_channel_target_aware_push]": 0.030537999933585525, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[compact_gap_peer_conflict]": 0.03493612399324775, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[compact_hidden_passthrough]": 0.02980054193176329, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[complex_multipath]": 0.08401979180052876, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[convergence_stacked_sink]": 0.041713417042046785, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[convergent_offrow_exit_climb]": 0.16301945899613202, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[corridor_narrow_gap_fallback]": 0.03167166607454419, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[cross_col_top_entry]": 0.019081249833106995, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[cross_column_perp_drop]": 0.012339208042249084, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[cross_column_perp_drop_far_exit]": 0.009889750275760889, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[cross_row_gap_wrap]": 0.022812209092080593, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[deep_linear]": 0.046574417036026716, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[disjoint_sameline_trunks]": 0.056538000237196684, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[divergent_fanout_split]": 0.019348708912730217, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[dogleg_exempt_distinct]": 0.03034137492068112, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[dogleg_exempt_sameline]": 0.017474875785410404, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[dogleg_twoline_fanout]": 0.050099041080102324, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[exit_corner_offset_dogleg]": 0.032529916847124696, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[fan_bypass_nesting]": 0.059049834264442325, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[fan_in_merge]": 0.027796541806310415, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[fold_double]": 0.12862945906817913, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[fold_fan_across]": 0.0988789580296725, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[fold_stacked_branch]": 0.09431254118680954, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[funcprofiler_upstream]": 0.22044962388463318, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[header_nudge]": 0.01820112601853907, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[header_side_rotated]": 0.022933374857529998, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[inrow_skip_breeze]": 0.007880790857598186, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[inter_row_wrap_clearance]": 0.022194832796230912, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[interchange_lane_reorder]": 0.010189584223553538, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[junction_entry_align]": 0.05459537613205612, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[junction_entry_collision]": 0.04316491587087512, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[junction_entry_reversed_fold]": 0.034775375155732036, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[junction_fanout_convergence]": 0.02290016715414822, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[left_entry_up_wrap]": 0.010624166810885072, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[left_exit_sink_below]": 0.01511958404444158, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_perp_bottom_exit_perp_entry]": 0.022088124882429838, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_perp_bottom_exit_side_entry]": 0.020369209116324782, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_perp_top_exit_perp_entry]": 0.032754791900515556, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_perp_top_exit_perp_entry_diverging]": 0.01402754127047956, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_perp_top_exit_side_entry]": 0.017572916112840176, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_to_tb_top_cross_col]": 0.03717054193839431, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_to_tb_top_drop]": 0.02296099904924631, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_to_tb_top_drop_two_lines]": 0.0223450418561697, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_to_tb_top_near_vertical]": 0.010545831872150302, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_to_tb_top_two_lines]": 0.03348970809020102, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_top_entry_cross_column]": 0.023016207851469517, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[lr_top_entry_cross_column_two_line]": 0.021171958185732365, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_around_below_leftmost]": 0.04179533291608095, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_bottom_row_bypass]": 0.02544533321633935, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_leftmost_sink_branch]": 0.05884558521211147, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_offrow_continuation]": 0.016815958078950644, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_port_above_approach]": 0.027044542133808136, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_pullaway]": 0.03267679223790765, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_right_entry]": 0.03621783293783665, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_trunk_out_of_range_section]": 0.031396667240187526, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[merge_trunk_over_low_section]": 0.044989166082814336, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[mismatched_tracks]": 0.021574874874204397, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[mixed_bundle_column]": 0.03369525005109608, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[mixed_port_sides]": 0.022980500012636185, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[multi_input_convergence]": 0.027123000007122755, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[multi_line_bundle]": 0.020303333643823862, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[multicarrier_offrow_exit_climb]": 0.05545104085467756, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[near_vertical_junction_hook]": 0.0343542923219502, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[off_track_convergence]": 0.0399548327550292, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[off_track_convergence_multiline]": 0.021639999700710177, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[off_track_input_above_consumer]": 0.10174970794469118, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[parallel_independent]": 0.013990416890010238, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[peeloff_extra_line_consumer]": 0.06105354195460677, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[peeloff_riser_respace]": 0.06003249925561249, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[post_convergence_trunk]": 0.0072518333327025175, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[rail_inter_section]": 0.021553499158471823, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[rail_offtrack_fan]": 0.009941791882738471, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[rail_offtrack_io]": 0.018402833957225084, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[rail_offtrack_plain_io]": 0.009079125942662358, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[reconverge_reversed_fold]": 0.10604187496937811, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[right_entry_from_above]": 0.021939623868092895, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[right_entry_from_above_far]": 0.010658625047653913, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[right_entry_gap_above_empty_row]": 0.020899958908557892, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[right_entry_wrap_no_fan]": 0.016185582848265767, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[rl_entry_runway]": 0.031144542386755347, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[rnaseq_lite]": 0.07604900118894875, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[route_around_intervening]": 0.02263533417135477, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[section_diamond]": 0.03675416670739651, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[self_crossing_bridge]": 0.016677875071763992, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[shared_sink_parallel]": 0.03715695906430483, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[single_section]": 0.005462458124384284, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[stacked_left_exit_drop]": 0.0352572500705719, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[stacked_lr_serpentine]": 0.024309665895998478, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[symmetric_diamond_beside_wide_fan]": 0.049592000897973776, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_bottom_entry_flow_start]": 0.013689375016838312, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_bottom_exit_bundle_jog]": 0.02409783424809575, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_bottom_exit_fork_diamond]": 0.03998274868354201, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_column_continuation_two_lines]": 0.0207674999255687, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_convergence_straight_drop]": 0.007561790756881237, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_internal_diagonal]": 0.019868792733177543, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_left_exit_step]": 0.02843612595461309, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_lr_exit_left]": 0.019788917154073715, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_lr_exit_right]": 0.03027866594493389, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_passthrough_continuation]": 0.008411167189478874, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_passthrough_trunk]": 0.018540666438639164, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_perp_exit_side_neighbour]": 0.01733620697632432, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_right_entry_stack]": 0.020602667005732656, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_trunk_through_fan]": 0.012855709064751863, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[tb_two_line_vert_seam]": 0.013655791990458965, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[terminal_symmetric_fan]": 0.031051666010171175, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[terminus_join]": 0.005997334141284227, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[top_entry_header_clash]": 0.012394707882776856, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[trunk_through_fan]": 0.017178041860461235, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[u_turn_fold]": 0.055225167889148, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[uneven_diamond]": 0.00704266713000834, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[upward_bypass]": 0.04920041700825095, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[variant_calling]": 0.17933399975299835, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[wide_fan_in]": 0.038461541989818215, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[wide_fan_out]": 0.04583924985490739, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[wide_label_fan]": 0.02423108392395079, + "tests/test_topology_validation.py::TestTopologyValidation::test_all_stations_have_coordinates[wrapped_label_trunk]": 0.013146917102858424, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[aligner_row_pinned_continuation]": 0.06146729085594416, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[around_below_ep_col_gt0]": 0.03507404099218547, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[around_section_below]": 0.023330249823629856, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[asymmetric_tree]": 0.06673325086012483, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bottom_row_climb_clear_corridor]": 0.03223050106316805, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[branch_fold_forward]": 0.2719102909322828, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[branch_fold_stability]": 0.038947751047089696, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bt_chain]": 0.014217292191460729, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bt_exit_top_above]": 0.017355750082060695, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bt_exit_top_above_2line]": 0.025736625771969557, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bt_fork]": 0.007894125999882817, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bt_perp_entry_below]": 0.01716904272325337, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bt_to_lr]": 0.030843375250697136, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bt_to_tb]": 0.009748582961037755, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bundle_terminator_continuation]": 0.014963041059672832, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_fan_in_outer_slot]": 0.09071579109877348, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_gap2_rightward_overflow]": 0.03250054060481489, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_label_rake]": 0.026538665173575282, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_label_rake_left]": 0.035424083936959505, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_label_rake_wide]": 0.09614637610502541, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_leftward_far_side_entry]": 0.04500475013628602, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_leftward_overflow]": 0.029803166165947914, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[bypass_v_tight]": 0.040614166762679815, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[clear_channel_target_aware_push]": 0.04124037502333522, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[compact_gap_peer_conflict]": 0.06395979155786335, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[compact_hidden_passthrough]": 0.02343491674400866, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[complex_multipath]": 0.07825204310938716, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[convergence_stacked_sink]": 0.037710292963311076, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[convergent_offrow_exit_climb]": 0.16594233317300677, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[corridor_narrow_gap_fallback]": 0.031944209011271596, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[cross_col_top_entry]": 0.012844332959502935, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[cross_column_perp_drop]": 0.016202582279220223, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[cross_column_perp_drop_far_exit]": 0.01259537530131638, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[cross_row_gap_wrap]": 0.053112376015633345, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[deep_linear]": 0.0690257498063147, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[disjoint_sameline_trunks]": 0.03097837488166988, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[divergent_fanout_split]": 0.030024750856682658, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[dogleg_exempt_distinct]": 0.03149483189918101, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[dogleg_exempt_sameline]": 0.035923250019550323, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[dogleg_twoline_fanout]": 0.026249375194311142, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[exit_corner_offset_dogleg]": 0.05528508289717138, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[fan_bypass_nesting]": 0.06511408276855946, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[fan_in_merge]": 0.04832604085095227, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[fold_double]": 0.1305489158257842, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[fold_fan_across]": 0.10085537587292492, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[fold_stacked_branch]": 0.27466245787218213, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[funcprofiler_upstream]": 0.3063009169418365, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[header_nudge]": 0.036377707961946726, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[header_side_rotated]": 0.026135707972571254, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[inrow_skip_breeze]": 0.010667582973837852, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[inter_row_wrap_clearance]": 0.03000649972818792, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[interchange_lane_reorder]": 0.01406725007109344, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[junction_entry_align]": 0.07359116687439382, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[junction_entry_collision]": 0.03913208283483982, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[junction_entry_reversed_fold]": 0.03682612371630967, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[junction_fanout_convergence]": 0.028336624847725034, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[left_entry_up_wrap]": 0.013253832934424281, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[left_exit_sink_below]": 0.024858917109668255, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_perp_bottom_exit_perp_entry]": 0.017322832951322198, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_perp_bottom_exit_side_entry]": 0.011149374069646, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_perp_top_exit_perp_entry]": 0.019179209135472775, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_perp_top_exit_perp_entry_diverging]": 0.05322599899955094, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_perp_top_exit_side_entry]": 0.025015749968588352, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_to_tb_top_cross_col]": 0.016417624661698937, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_to_tb_top_drop]": 0.025046834954991937, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_to_tb_top_drop_two_lines]": 0.023738167015835643, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_to_tb_top_near_vertical]": 0.017254750011488795, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_to_tb_top_two_lines]": 0.02513424982316792, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_top_entry_cross_column]": 0.00972608313895762, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[lr_top_entry_cross_column_two_line]": 0.02948349923826754, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_around_below_leftmost]": 0.02855929220095277, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_bottom_row_bypass]": 0.0611192078795284, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_leftmost_sink_branch]": 0.05047633312642574, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_offrow_continuation]": 0.047666875179857016, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_port_above_approach]": 0.03940416709519923, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_pullaway]": 0.022850166773423553, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_right_entry]": 0.04177412507124245, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_trunk_out_of_range_section]": 0.04213004210032523, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[merge_trunk_over_low_section]": 0.06222974928095937, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[mismatched_tracks]": 0.06106766685843468, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[mixed_bundle_column]": 0.03466316685080528, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[mixed_port_sides]": 0.03715504193678498, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[multi_input_convergence]": 0.027821416966617107, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[multi_line_bundle]": 0.02672566589899361, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[multicarrier_offrow_exit_climb]": 0.049119834089651704, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[near_vertical_junction_hook]": 0.02272491715848446, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[off_track_convergence]": 0.03667375002987683, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[off_track_convergence_multiline]": 0.033190625021234155, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[off_track_input_above_consumer]": 0.1195660000666976, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[parallel_independent]": 0.0360363747458905, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[peeloff_extra_line_consumer]": 0.03693933296017349, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[peeloff_riser_respace]": 0.02392387529835105, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[post_convergence_trunk]": 0.009966833051294088, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[rail_inter_section]": 0.007359583163633943, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[rail_offtrack_fan]": 0.01468129106797278, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[rail_offtrack_io]": 0.010716500924900174, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[rail_offtrack_plain_io]": 0.010657416889443994, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[reconverge_reversed_fold]": 0.41015354194678366, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[right_entry_from_above]": 0.011637415736913681, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[right_entry_from_above_far]": 0.014957665000110865, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[right_entry_gap_above_empty_row]": 0.011482791975140572, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[right_entry_wrap_no_fan]": 0.012370249954983592, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[rl_entry_runway]": 0.036492499988526106, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[rnaseq_lite]": 0.06395324878394604, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[route_around_intervening]": 0.019457583082839847, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[section_diamond]": 0.024537459015846252, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[self_crossing_bridge]": 0.028356165857985616, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[shared_sink_parallel]": 0.037812542635947466, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[single_section]": 0.009659749921411276, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[stacked_left_exit_drop]": 0.011664540972560644, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[stacked_lr_serpentine]": 0.03427333408035338, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[symmetric_diamond_beside_wide_fan]": 0.06307741603814065, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_bottom_entry_flow_start]": 0.018774042138829827, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_bottom_exit_bundle_jog]": 0.016768708126619458, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_bottom_exit_fork_diamond]": 0.041753457859158516, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_column_continuation_two_lines]": 0.038058415753766894, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_convergence_straight_drop]": 0.009674708126112819, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_internal_diagonal]": 0.02533829095773399, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_left_exit_step]": 0.025658249855041504, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_lr_exit_left]": 0.029454416129738092, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_lr_exit_right]": 0.03672495810315013, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_passthrough_continuation]": 0.009075749898329377, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_passthrough_trunk]": 0.02987191593274474, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_perp_exit_side_neighbour]": 0.01989974989555776, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_right_entry_stack]": 0.0354916260112077, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_trunk_through_fan]": 0.01807479211129248, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[tb_two_line_vert_seam]": 0.018500084057450294, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[terminal_symmetric_fan]": 0.015764751005917788, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[terminus_join]": 0.011622416088357568, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[top_entry_header_clash]": 0.01364274974912405, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[trunk_through_fan]": 0.3007077919319272, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[u_turn_fold]": 0.06428929208777845, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[uneven_diamond]": 0.014382166089490056, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[upward_bypass]": 0.044689540984109044, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[variant_calling]": 0.17911591683514416, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[wide_fan_in]": 0.035269665997475386, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[wide_fan_out]": 0.024891248904168606, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[wide_label_fan]": 0.013384124962612987, + "tests/test_topology_validation.py::TestTopologyValidation::test_coordinate_sanity[wrapped_label_trunk]": 0.01178899989463389, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[aligner_row_pinned_continuation]": 0.04098350089043379, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[around_below_ep_col_gt0]": 0.0319426660425961, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[around_section_below]": 0.019736707909032702, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[asymmetric_tree]": 0.05854266695678234, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bottom_row_climb_clear_corridor]": 0.03389662387780845, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[branch_fold_forward]": 0.044631082797423005, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[branch_fold_stability]": 0.03351491689682007, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bt_chain]": 0.011376000009477139, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bt_exit_top_above]": 0.02547083212994039, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bt_exit_top_above_2line]": 0.016301833325996995, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bt_fork]": 0.010321374051272869, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bt_perp_entry_below]": 0.014055542182177305, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bt_to_lr]": 0.018979209009557962, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bt_to_tb]": 0.03408825024962425, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bundle_terminator_continuation]": 0.006070583593100309, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_fan_in_outer_slot]": 0.06449345895089209, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_gap2_rightward_overflow]": 0.04286391707137227, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_label_rake]": 0.04722208227030933, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_label_rake_left]": 0.04399591707624495, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_label_rake_wide]": 0.14493833296000957, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_leftward_far_side_entry]": 0.034333207877352834, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_leftward_overflow]": 0.04113575001247227, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[bypass_v_tight]": 0.05013458407483995, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[clear_channel_target_aware_push]": 0.041172666708007455, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[compact_gap_peer_conflict]": 0.023718001088127494, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[compact_hidden_passthrough]": 0.03785041603259742, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[complex_multipath]": 0.06953087472356856, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[convergence_stacked_sink]": 0.04777083406224847, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[convergent_offrow_exit_climb]": 0.45437375106848776, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[corridor_narrow_gap_fallback]": 0.04973712586797774, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[cross_col_top_entry]": 0.019608167000114918, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[cross_column_perp_drop]": 0.009691790910437703, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[cross_column_perp_drop_far_exit]": 0.021797832800075412, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[cross_row_gap_wrap]": 0.03408945817500353, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[deep_linear]": 0.04190520825795829, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[disjoint_sameline_trunks]": 0.038894124794751406, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[divergent_fanout_split]": 0.017269958974793553, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[dogleg_exempt_distinct]": 0.027070167241618037, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[dogleg_exempt_sameline]": 0.0173897088970989, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[dogleg_twoline_fanout]": 0.02144912607036531, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[exit_corner_offset_dogleg]": 0.04297299892641604, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[fan_bypass_nesting]": 0.03817775007337332, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[fan_in_merge]": 0.030535751022398472, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[fold_double]": 0.1189745010342449, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[fold_fan_across]": 0.12790583283640444, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[fold_stacked_branch]": 0.12381308316253126, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[funcprofiler_upstream]": 0.2608224987052381, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[header_nudge]": 0.02187600010074675, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[header_side_rotated]": 0.025495166890323162, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[inrow_skip_breeze]": 0.00834691571071744, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[inter_row_wrap_clearance]": 0.021894166711717844, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[interchange_lane_reorder]": 0.016925373813137412, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[junction_entry_align]": 0.04786495887674391, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[junction_entry_collision]": 0.03875991702079773, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[junction_entry_reversed_fold]": 0.027212832821533084, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[junction_fanout_convergence]": 0.021023874869570136, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[left_entry_up_wrap]": 0.0153807089664042, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[left_exit_sink_below]": 0.033578043105080724, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_perp_bottom_exit_perp_entry]": 0.03217170899733901, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_perp_bottom_exit_side_entry]": 0.013528624782338738, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_perp_top_exit_perp_entry]": 0.016932083293795586, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_perp_top_exit_perp_entry_diverging]": 0.016173043055459857, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_perp_top_exit_side_entry]": 0.01941887615248561, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_to_tb_top_cross_col]": 0.026380582945421338, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_to_tb_top_drop]": 0.028743624920025468, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_to_tb_top_drop_two_lines]": 0.02278521005064249, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_to_tb_top_near_vertical]": 0.020805833162739873, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_to_tb_top_two_lines]": 0.020437209168449044, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_top_entry_cross_column]": 0.020032124826684594, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[lr_top_entry_cross_column_two_line]": 0.07047024997882545, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_around_below_leftmost]": 0.036713290959596634, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_bottom_row_bypass]": 0.05290149990469217, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_leftmost_sink_branch]": 0.046831333078444004, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_offrow_continuation]": 0.03547862614504993, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_port_above_approach]": 0.028037498937919736, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_pullaway]": 0.03627262427471578, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_right_entry]": 0.04593037487939, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_trunk_out_of_range_section]": 0.04521566699258983, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[merge_trunk_over_low_section]": 0.06395050114952028, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[mismatched_tracks]": 0.052402582950890064, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[mixed_bundle_column]": 0.0483302497304976, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[mixed_port_sides]": 0.01875129179097712, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[multi_input_convergence]": 0.02134433318860829, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[multi_line_bundle]": 0.04163291584700346, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[multicarrier_offrow_exit_climb]": 0.33448183396831155, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[near_vertical_junction_hook]": 0.034654208924621344, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[off_track_convergence]": 0.03395650093443692, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[off_track_convergence_multiline]": 0.02714154194109142, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[off_track_input_above_consumer]": 0.10128133418038487, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[parallel_independent]": 0.020244373939931393, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[peeloff_extra_line_consumer]": 0.02825266611762345, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[peeloff_riser_respace]": 0.03460087510757148, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[post_convergence_trunk]": 0.017096000956371427, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[rail_inter_section]": 0.006876374362036586, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[rail_offtrack_fan]": 0.010859000263735652, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[rail_offtrack_io]": 0.015372708206996322, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[rail_offtrack_plain_io]": 0.010869583813473582, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[reconverge_reversed_fold]": 0.10410537500865757, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[right_entry_from_above]": 0.015248458134010434, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[right_entry_from_above_far]": 0.02831629221327603, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[right_entry_gap_above_empty_row]": 0.015561665641143918, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[right_entry_wrap_no_fan]": 0.03053675009869039, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[rl_entry_runway]": 0.02747558383271098, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[rnaseq_lite]": 0.0908893330488354, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[route_around_intervening]": 0.033353707985952497, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[section_diamond]": 0.03246824978850782, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[self_crossing_bridge]": 0.03253533411771059, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[shared_sink_parallel]": 0.04862587479874492, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[single_section]": 0.006797457812353969, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[stacked_left_exit_drop]": 0.02330733323469758, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[stacked_lr_serpentine]": 0.036110624903813004, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[symmetric_diamond_beside_wide_fan]": 0.03621974913403392, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_bottom_entry_flow_start]": 0.012293583014979959, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_bottom_exit_bundle_jog]": 0.019693499663844705, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_bottom_exit_fork_diamond]": 0.028290292946621776, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_column_continuation_two_lines]": 0.009604876162484288, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_convergence_straight_drop]": 0.015265167923644185, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_internal_diagonal]": 0.023687540786340833, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_left_exit_step]": 0.022639625007286668, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_lr_exit_left]": 0.020294083980843425, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_lr_exit_right]": 0.025994000025093555, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_passthrough_continuation]": 0.01343662478029728, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_passthrough_trunk]": 0.017729083076119423, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_perp_exit_side_neighbour]": 0.0107028738129884, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_right_entry_stack]": 0.023577499203383923, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_trunk_through_fan]": 0.01777070784009993, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[tb_two_line_vert_seam]": 0.009566082153469324, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[terminal_symmetric_fan]": 0.012471250025555491, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[terminus_join]": 0.004776248708367348, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[top_entry_header_clash]": 0.01859412482008338, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[trunk_through_fan]": 0.019691708032041788, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[u_turn_fold]": 0.06473545893095434, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[uneven_diamond]": 0.012995333643630147, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[upward_bypass]": 0.05993841681629419, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[variant_calling]": 0.4791815001517534, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[wide_fan_in]": 0.030161666916683316, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[wide_fan_out]": 0.030538709135726094, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[wide_label_fan]": 0.01440266682766378, + "tests/test_topology_validation.py::TestTopologyValidation::test_edge_waypoints[wrapped_label_trunk]": 0.015564666129648685, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[aligner_row_pinned_continuation]": 0.0642431655433029, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[around_below_ep_col_gt0]": 0.026794791920110583, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[around_section_below]": 0.03342358279041946, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[asymmetric_tree]": 0.04014087514951825, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bottom_row_climb_clear_corridor]": 0.03400337416678667, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[branch_fold_forward]": 0.038072498980909586, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[branch_fold_stability]": 0.03676624991931021, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bt_chain]": 0.011953082866966724, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bt_exit_top_above]": 0.010344375157728791, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bt_exit_top_above_2line]": 0.01601662510074675, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bt_fork]": 0.015263666864484549, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bt_perp_entry_below]": 0.019964416977018118, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bt_to_lr]": 0.012884499039500952, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bt_to_tb]": 0.014932832913473248, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bundle_terminator_continuation]": 0.025155916577205062, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_fan_in_outer_slot]": 0.05320995906367898, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_gap2_rightward_overflow]": 0.03439379180781543, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_label_rake]": 0.034035082906484604, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_label_rake_left]": 0.29081866703927517, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_label_rake_wide]": 0.06534295785240829, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_leftward_far_side_entry]": 0.02031345898285508, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_leftward_overflow]": 0.039230874041095376, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[bypass_v_tight]": 0.023536167107522488, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[clear_channel_target_aware_push]": 0.01666354201734066, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[compact_gap_peer_conflict]": 0.019645999185740948, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[compact_hidden_passthrough]": 0.01970700011588633, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[complex_multipath]": 0.048179500037804246, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[convergence_stacked_sink]": 0.03727299906313419, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[convergent_offrow_exit_climb]": 0.41703595919534564, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[corridor_narrow_gap_fallback]": 0.0493305001873523, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[cross_col_top_entry]": 0.009008459281176329, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[cross_column_perp_drop]": 0.020628915866836905, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[cross_column_perp_drop_far_exit]": 0.01166079193353653, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[cross_row_gap_wrap]": 0.03688758332282305, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[deep_linear]": 0.03458816697821021, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[disjoint_sameline_trunks]": 0.036396874813362956, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[divergent_fanout_split]": 0.031273665837943554, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[dogleg_exempt_distinct]": 0.019579665968194604, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[dogleg_exempt_sameline]": 0.019096291158348322, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[dogleg_twoline_fanout]": 0.028383916011080146, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[exit_corner_offset_dogleg]": 0.031272875843569636, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[fan_bypass_nesting]": 0.04820654192008078, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[fan_in_merge]": 0.03684316691942513, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[fold_double]": 0.14161604084074497, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[fold_fan_across]": 0.08950541680678725, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[fold_stacked_branch]": 0.1403093331027776, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[funcprofiler_upstream]": 0.19931804086081684, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[header_nudge]": 0.020432707155123353, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[header_side_rotated]": 0.014268957311287522, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[inrow_skip_breeze]": 0.01631024992093444, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[inter_row_wrap_clearance]": 0.025928582763299346, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[interchange_lane_reorder]": 0.01395537587814033, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[junction_entry_align]": 0.04165633185766637, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[junction_entry_collision]": 0.0391223740298301, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[junction_entry_reversed_fold]": 0.024858125019818544, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[junction_fanout_convergence]": 0.03282687393948436, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[left_entry_up_wrap]": 0.010398500133305788, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[left_exit_sink_below]": 0.020853042136877775, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_perp_bottom_exit_perp_entry]": 0.02951474883593619, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_perp_bottom_exit_side_entry]": 0.018242041813209653, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_perp_top_exit_perp_entry]": 0.02196012600325048, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_perp_top_exit_perp_entry_diverging]": 0.019322456791996956, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_perp_top_exit_side_entry]": 0.013528374955058098, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_to_tb_top_cross_col]": 0.03243108396418393, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_to_tb_top_drop]": 0.020986666902899742, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_to_tb_top_drop_two_lines]": 0.019727290840819478, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_to_tb_top_near_vertical]": 0.044036917155608535, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_to_tb_top_two_lines]": 0.020246542058885098, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_top_entry_cross_column]": 0.02019016700796783, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[lr_top_entry_cross_column_two_line]": 0.010661791078746319, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_around_below_leftmost]": 0.02455050009302795, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_bottom_row_bypass]": 0.030489832628518343, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_leftmost_sink_branch]": 0.03704995755106211, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_offrow_continuation]": 0.022948251105844975, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_port_above_approach]": 0.030473542166873813, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_pullaway]": 0.029837291920557618, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_right_entry]": 0.03854912519454956, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_trunk_out_of_range_section]": 0.02513508195988834, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[merge_trunk_over_low_section]": 0.04256320814602077, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[mismatched_tracks]": 0.038339833030477166, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[mixed_bundle_column]": 0.03546937624923885, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[mixed_port_sides]": 0.017557875253260136, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[multi_input_convergence]": 0.02394145866855979, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[multi_line_bundle]": 0.027205249993130565, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[multicarrier_offrow_exit_climb]": 0.044060542015358806, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[near_vertical_junction_hook]": 0.03751470916904509, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[off_track_convergence]": 0.05416620895266533, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[off_track_convergence_multiline]": 0.02736379182897508, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[off_track_input_above_consumer]": 0.09477283293381333, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[parallel_independent]": 0.024522083112969995, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[peeloff_extra_line_consumer]": 0.0425358759239316, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[peeloff_riser_respace]": 0.03696791618131101, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[post_convergence_trunk]": 0.011604959145188332, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[rail_inter_section]": 0.030380374984815717, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[rail_offtrack_fan]": 0.017375124851241708, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[rail_offtrack_io]": 0.01558774895966053, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[rail_offtrack_plain_io]": 0.01259166607633233, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[reconverge_reversed_fold]": 0.3456365840975195, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[right_entry_from_above]": 0.02044412516988814, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[right_entry_from_above_far]": 0.008167666150256991, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[right_entry_gap_above_empty_row]": 0.017723875818774104, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[right_entry_wrap_no_fan]": 0.008869583252817392, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[rl_entry_runway]": 0.023986416636034846, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[rnaseq_lite]": 0.07414945913478732, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[route_around_intervening]": 0.014763375045731664, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[section_diamond]": 0.02698341617360711, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[self_crossing_bridge]": 0.026560042053461075, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[shared_sink_parallel]": 0.03508779196999967, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[single_section]": 0.011541208950802684, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[stacked_left_exit_drop]": 0.011315915966406465, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[stacked_lr_serpentine]": 0.02761916583403945, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[symmetric_diamond_beside_wide_fan]": 0.03984287497587502, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_bottom_entry_flow_start]": 0.01826258422806859, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_bottom_exit_bundle_jog]": 0.0220214172732085, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_bottom_exit_fork_diamond]": 0.028265459230169654, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_column_continuation_two_lines]": 0.022155208745971322, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_convergence_straight_drop]": 0.010764626087620854, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_internal_diagonal]": 0.02631387603469193, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_left_exit_step]": 0.03493812610395253, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_lr_exit_left]": 0.029882999835535884, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_lr_exit_right]": 0.02505304221995175, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_passthrough_continuation]": 0.03321933303959668, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_passthrough_trunk]": 0.01400545984506607, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_perp_exit_side_neighbour]": 0.013966707745566964, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_right_entry_stack]": 0.027395582990720868, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_trunk_through_fan]": 0.014446540968492627, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[tb_two_line_vert_seam]": 0.021930960239842534, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[terminal_symmetric_fan]": 0.01916545699350536, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[terminus_join]": 0.01960341609083116, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[top_entry_header_clash]": 0.010854542022570968, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[trunk_through_fan]": 0.028925040969625115, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[u_turn_fold]": 0.0792433328460902, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[uneven_diamond]": 0.00870441715233028, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[upward_bypass]": 0.03952570911496878, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[variant_calling]": 0.19442641595378518, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[wide_fan_in]": 0.029956917045637965, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[wide_fan_out]": 0.2357383316848427, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[wide_label_fan]": 0.014108667150139809, + "tests/test_topology_validation.py::TestTopologyValidation::test_exit_port_feeder_alignment_no_errors[wrapped_label_trunk]": 0.014450334245339036, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[aligner_row_pinned_continuation]": 0.335980333853513, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[around_below_ep_col_gt0]": 0.015678873984143138, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[around_section_below]": 0.019290833035483956, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[asymmetric_tree]": 0.0519161659758538, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bottom_row_climb_clear_corridor]": 0.016532333102077246, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[branch_fold_forward]": 0.22898220783099532, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[branch_fold_stability]": 0.026213124860078096, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bt_chain]": 0.0073446668684482574, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bt_exit_top_above]": 0.018927749013528228, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bt_exit_top_above_2line]": 0.011010166956111789, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bt_fork]": 0.011364792240783572, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bt_perp_entry_below]": 0.020686832023784518, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bt_to_lr]": 0.014682458713650703, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bt_to_tb]": 0.014305791351944208, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bundle_terminator_continuation]": 0.00808966695331037, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_fan_in_outer_slot]": 0.07771095796488225, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_gap2_rightward_overflow]": 0.036792583065107465, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_label_rake]": 0.029593999264761806, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_label_rake_left]": 0.03317900002002716, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_label_rake_wide]": 0.07872279197908938, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_leftward_far_side_entry]": 0.05476241698488593, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_leftward_overflow]": 0.044698042096570134, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[bypass_v_tight]": 0.048414832912385464, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[clear_channel_target_aware_push]": 0.05003524920903146, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[compact_gap_peer_conflict]": 0.02483287500217557, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[compact_hidden_passthrough]": 0.01704479195177555, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[complex_multipath]": 0.06286825123243034, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[convergence_stacked_sink]": 0.04826675006188452, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[convergent_offrow_exit_climb]": 0.2322141679469496, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[corridor_narrow_gap_fallback]": 0.030690415995195508, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[cross_col_top_entry]": 0.020357207162305713, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[cross_column_perp_drop]": 0.01319199986755848, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[cross_column_perp_drop_far_exit]": 0.010223917895928025, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[cross_row_gap_wrap]": 0.030265665845945477, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[deep_linear]": 0.049826792906969786, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[disjoint_sameline_trunks]": 0.03067745827138424, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[divergent_fanout_split]": 0.013264501001685858, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[dogleg_exempt_distinct]": 0.032524083042517304, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[dogleg_exempt_sameline]": 0.020976582542061806, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[dogleg_twoline_fanout]": 0.031156207667663693, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[exit_corner_offset_dogleg]": 0.02200062619522214, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[fan_bypass_nesting]": 0.061793040949851274, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[fan_in_merge]": 0.04854987491853535, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[fold_double]": 0.13667958416044712, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[fold_fan_across]": 0.13849133322946727, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[fold_stacked_branch]": 0.11895762523636222, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[funcprofiler_upstream]": 0.27667929185554385, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[header_nudge]": 0.01387762394733727, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[header_side_rotated]": 0.01763462508097291, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[inrow_skip_breeze]": 0.019024166744202375, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[inter_row_wrap_clearance]": 0.016166206914931536, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[interchange_lane_reorder]": 0.026228750124573708, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[junction_entry_align]": 0.06162762618623674, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[junction_entry_collision]": 0.05319516593590379, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[junction_entry_reversed_fold]": 0.07868320890702307, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[junction_fanout_convergence]": 0.0238282501231879, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[left_entry_up_wrap]": 0.019661125261336565, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[left_exit_sink_below]": 0.029057957930490375, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_perp_bottom_exit_perp_entry]": 0.025421959115192294, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_perp_bottom_exit_side_entry]": 0.010673292214050889, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_perp_top_exit_perp_entry]": 0.022244874853640795, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_perp_top_exit_perp_entry_diverging]": 0.021437792107462883, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_perp_top_exit_side_entry]": 0.014773917151615024, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_to_tb_top_cross_col]": 0.029499625088647008, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_to_tb_top_drop]": 0.02482791617512703, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_to_tb_top_drop_two_lines]": 0.013497875072062016, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_to_tb_top_near_vertical]": 0.034381625009700656, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_to_tb_top_two_lines]": 0.025187582708895206, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_top_entry_cross_column]": 0.012561583891510963, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[lr_top_entry_cross_column_two_line]": 0.017279667081311345, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_around_below_leftmost]": 0.03251429181545973, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_bottom_row_bypass]": 0.2669694162905216, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_leftmost_sink_branch]": 0.034465749049559236, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_offrow_continuation]": 0.03312429180368781, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_port_above_approach]": 0.03585958178155124, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_pullaway]": 0.029253998771309853, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_right_entry]": 0.03625354217365384, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_trunk_out_of_range_section]": 0.022242042003199458, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[merge_trunk_over_low_section]": 0.05117950076237321, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[mismatched_tracks]": 0.03436341695487499, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[mixed_bundle_column]": 0.037668790901079774, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[mixed_port_sides]": 0.01907462510280311, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[multi_input_convergence]": 0.026202582055702806, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[multi_line_bundle]": 0.034927625209093094, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[multicarrier_offrow_exit_climb]": 0.030145582975819707, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[near_vertical_junction_hook]": 0.03611066588200629, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[off_track_convergence]": 0.03284870903007686, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[off_track_convergence_multiline]": 0.04380445694550872, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[off_track_input_above_consumer]": 0.10964287514798343, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[parallel_independent]": 0.049612166127189994, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[peeloff_extra_line_consumer]": 0.05616287374868989, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[peeloff_riser_respace]": 0.03220912627875805, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[post_convergence_trunk]": 0.01966333296149969, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[rail_inter_section]": 0.008363165892660618, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[rail_offtrack_fan]": 0.016265415819361806, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[rail_offtrack_io]": 0.024630459723994136, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[rail_offtrack_plain_io]": 0.009972165804356337, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[reconverge_reversed_fold]": 0.10492879222147167, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[right_entry_from_above]": 0.013231999706476927, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[right_entry_from_above_far]": 0.012502206955105066, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[right_entry_gap_above_empty_row]": 0.020030956715345383, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[right_entry_wrap_no_fan]": 0.011449625017121434, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[rl_entry_runway]": 0.01653591590002179, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[rnaseq_lite]": 0.2987137921154499, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[route_around_intervening]": 0.03520883317105472, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[section_diamond]": 0.046023792354390025, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[self_crossing_bridge]": 0.024606167105957866, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[shared_sink_parallel]": 0.03451020899228752, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[single_section]": 0.005200457759201527, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[stacked_left_exit_drop]": 0.01337358308956027, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[stacked_lr_serpentine]": 0.031849749153479934, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[symmetric_diamond_beside_wide_fan]": 0.04891674919053912, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_bottom_entry_flow_start]": 0.008263041032478213, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_bottom_exit_bundle_jog]": 0.028517084196209908, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_bottom_exit_fork_diamond]": 0.018623042851686478, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_column_continuation_two_lines]": 0.01899637538008392, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_convergence_straight_drop]": 0.011469125049188733, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_internal_diagonal]": 0.030737125081941485, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_left_exit_step]": 0.018514082999899983, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_lr_exit_left]": 0.02420700015500188, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_lr_exit_right]": 0.028515959158539772, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_passthrough_continuation]": 0.031395543133839965, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_passthrough_trunk]": 0.039137082640081644, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_perp_exit_side_neighbour]": 0.012271335115656257, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_right_entry_stack]": 0.07463395781815052, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_trunk_through_fan]": 0.014955167192965746, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[tb_two_line_vert_seam]": 0.010074290912598372, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[terminal_symmetric_fan]": 0.02330679097212851, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[terminus_join]": 0.006744332844391465, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[top_entry_header_clash]": 0.022468250012025237, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[trunk_through_fan]": 0.024922415846958756, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[u_turn_fold]": 0.058630374958738685, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[uneven_diamond]": 0.008627666160464287, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[upward_bypass]": 0.05055029201321304, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[variant_calling]": 0.1913716250564903, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[wide_fan_in]": 0.040311750024557114, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[wide_fan_out]": 0.039760374929755926, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[wide_label_fan]": 0.012461874866858125, + "tests/test_topology_validation.py::TestTopologyValidation::test_intra_section_chain_alignment_no_errors[wrapped_label_trunk]": 0.011960042174905539, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[aligner_row_pinned_continuation]": 0.370601125061512, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[around_below_ep_col_gt0]": 0.018221833975985646, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[around_section_below]": 0.015951749868690968, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[asymmetric_tree]": 0.04687045910395682, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bottom_row_climb_clear_corridor]": 0.04533266695216298, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[branch_fold_forward]": 0.03224604204297066, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[branch_fold_stability]": 0.04482604213990271, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bt_chain]": 0.008682125248014927, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bt_exit_top_above]": 0.010157542070373893, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bt_exit_top_above_2line]": 0.01840408332645893, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bt_fork]": 0.010390999726951122, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bt_perp_entry_below]": 0.021066582994535565, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bt_to_lr]": 0.022420707857236266, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bt_to_tb]": 0.022407707758247852, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bundle_terminator_continuation]": 0.011548916809260845, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_fan_in_outer_slot]": 0.058684124844148755, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_gap2_rightward_overflow]": 0.04016833403147757, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_label_rake]": 0.03210158203728497, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_label_rake_left]": 0.02093483228236437, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_label_rake_wide]": 0.0777600419241935, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_leftward_far_side_entry]": 0.06620675092563033, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_leftward_overflow]": 0.030550374882295728, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[bypass_v_tight]": 0.0319668750744313, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[clear_channel_target_aware_push]": 0.021940667182207108, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[compact_gap_peer_conflict]": 0.03216029214672744, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[compact_hidden_passthrough]": 0.02057204209268093, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[complex_multipath]": 0.06187279196456075, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[convergence_stacked_sink]": 0.05260695912875235, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[convergent_offrow_exit_climb]": 0.14868174982257187, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[corridor_narrow_gap_fallback]": 0.023045125184580684, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[cross_col_top_entry]": 0.020639416994526982, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[cross_column_perp_drop]": 0.012853374937549233, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[cross_column_perp_drop_far_exit]": 0.011931790970265865, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[cross_row_gap_wrap]": 0.04265362489968538, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[deep_linear]": 0.056952333310619, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[disjoint_sameline_trunks]": 0.052999207051470876, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[divergent_fanout_split]": 0.020382000133395195, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[dogleg_exempt_distinct]": 0.3478826670907438, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[dogleg_exempt_sameline]": 0.029082166031003, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[dogleg_twoline_fanout]": 0.03602166683413088, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[exit_corner_offset_dogleg]": 0.036609831964597106, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[fan_bypass_nesting]": 0.08117816736921668, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[fan_in_merge]": 0.03594970912672579, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[fold_double]": 0.15896750008687377, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[fold_fan_across]": 0.16835979209281504, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[fold_stacked_branch]": 0.10171329230070114, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[funcprofiler_upstream]": 0.2604439156129956, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[header_nudge]": 0.018742625834420323, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[header_side_rotated]": 0.023287791991606355, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[inrow_skip_breeze]": 0.027284958167001605, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[inter_row_wrap_clearance]": 0.020718293031677604, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[interchange_lane_reorder]": 0.01640712469816208, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[junction_entry_align]": 0.04706299910321832, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[junction_entry_collision]": 0.028219084022566676, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[junction_entry_reversed_fold]": 0.02559570805169642, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[junction_fanout_convergence]": 0.042949208756908774, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[left_entry_up_wrap]": 0.012291875202208757, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[left_exit_sink_below]": 0.037431582575663924, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_perp_bottom_exit_perp_entry]": 0.03807129175402224, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_perp_bottom_exit_side_entry]": 0.02063425094820559, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_perp_top_exit_perp_entry]": 0.025685958098620176, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_perp_top_exit_perp_entry_diverging]": 0.021280416985973716, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_perp_top_exit_side_entry]": 0.025750459171831608, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_to_tb_top_cross_col]": 0.024843125138431787, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_to_tb_top_drop]": 0.010335040744394064, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_to_tb_top_drop_two_lines]": 0.011953251203522086, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_to_tb_top_near_vertical]": 0.03166095889173448, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_to_tb_top_two_lines]": 0.03240387514233589, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_top_entry_cross_column]": 0.024153917096555233, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[lr_top_entry_cross_column_two_line]": 0.02488116594031453, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_around_below_leftmost]": 0.024205499794334173, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_bottom_row_bypass]": 0.031348624965175986, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_leftmost_sink_branch]": 0.03452212503179908, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_offrow_continuation]": 0.023934416007250547, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_port_above_approach]": 0.03551429114304483, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_pullaway]": 0.02907608519308269, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_right_entry]": 0.024499625898897648, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_trunk_out_of_range_section]": 0.04448333312757313, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[merge_trunk_over_low_section]": 0.05228345887735486, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[mismatched_tracks]": 0.032724374905228615, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[mixed_bundle_column]": 0.04136199993081391, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[mixed_port_sides]": 0.25321483169682324, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[multi_input_convergence]": 0.018345416989177465, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[multi_line_bundle]": 0.041869041975587606, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[multicarrier_offrow_exit_climb]": 0.040908708004280925, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[near_vertical_junction_hook]": 0.027552125044167042, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[off_track_convergence]": 0.02441483293659985, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[off_track_convergence_multiline]": 0.02513829176314175, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[off_track_input_above_consumer]": 0.13269258313812315, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[parallel_independent]": 0.01951874908991158, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[peeloff_extra_line_consumer]": 0.08161191619001329, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[peeloff_riser_respace]": 0.03292308305390179, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[post_convergence_trunk]": 0.020492457784712315, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[rail_inter_section]": 0.015583583852276206, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[rail_offtrack_fan]": 0.019805916817858815, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[rail_offtrack_io]": 0.01501245703548193, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[rail_offtrack_plain_io]": 0.008755166782066226, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[reconverge_reversed_fold]": 0.11871283408254385, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[right_entry_from_above]": 0.022794667165726423, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[right_entry_from_above_far]": 0.030224500922486186, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[right_entry_gap_above_empty_row]": 0.03455700073391199, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[right_entry_wrap_no_fan]": 0.012793792178854346, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[rl_entry_runway]": 0.04290016693994403, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[rnaseq_lite]": 0.09009133279323578, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[route_around_intervening]": 0.03546045906841755, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[section_diamond]": 0.032572459196671844, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[self_crossing_bridge]": 0.03355674911290407, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[shared_sink_parallel]": 0.05095754191279411, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[single_section]": 0.011002875166013837, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[stacked_left_exit_drop]": 0.03165775001980364, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[stacked_lr_serpentine]": 0.0364787089638412, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[symmetric_diamond_beside_wide_fan]": 0.05247079092077911, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_bottom_entry_flow_start]": 0.016364333918318152, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_bottom_exit_bundle_jog]": 0.023360084043815732, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_bottom_exit_fork_diamond]": 0.0721175828948617, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_column_continuation_two_lines]": 0.011305333813652396, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_convergence_straight_drop]": 0.0065027091186493635, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_internal_diagonal]": 0.02111629187129438, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_left_exit_step]": 0.03584795887582004, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_lr_exit_left]": 0.0262339583132416, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_lr_exit_right]": 0.019473875174298882, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_passthrough_continuation]": 0.008749707834795117, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_passthrough_trunk]": 0.029631708282977343, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_perp_exit_side_neighbour]": 0.026152207981795073, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_right_entry_stack]": 0.014246542938053608, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_trunk_through_fan]": 0.012035541934892535, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[tb_two_line_vert_seam]": 0.02562054106965661, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[terminal_symmetric_fan]": 0.01628287509083748, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[terminus_join]": 0.004830749938264489, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[top_entry_header_clash]": 0.013548207934945822, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[trunk_through_fan]": 0.022207667119801044, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[u_turn_fold]": 0.07050820905715227, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[uneven_diamond]": 0.017201917013153434, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[upward_bypass]": 0.058492206735536456, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[variant_calling]": 0.1934085409156978, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[wide_fan_in]": 0.04627441638149321, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[wide_fan_out]": 0.03530804207548499, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[wide_label_fan]": 0.022528416709974408, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_almost_horizontal_edges[wrapped_label_trunk]": 0.01242612604983151, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[aligner_row_pinned_continuation]": 0.05452720797620714, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[around_below_ep_col_gt0]": 0.025105916196480393, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[around_section_below]": 0.020776834106072783, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[asymmetric_tree]": 0.050725667271763086, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bottom_row_climb_clear_corridor]": 0.030635585309937596, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[branch_fold_forward]": 0.03763083415105939, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[branch_fold_stability]": 0.03810608386993408, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bt_chain]": 0.011780917178839445, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bt_exit_top_above]": 0.01407845807261765, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bt_exit_top_above_2line]": 0.013404708821326494, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bt_fork]": 0.019188791047781706, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bt_perp_entry_below]": 0.02158495783805847, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bt_to_lr]": 0.018357750261202455, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bt_to_tb]": 0.02678841701708734, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bundle_terminator_continuation]": 0.01458479231223464, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_fan_in_outer_slot]": 0.08893508394248784, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_gap2_rightward_overflow]": 0.038553417194634676, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_label_rake]": 0.02457533311098814, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_label_rake_left]": 0.06469887495040894, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_label_rake_wide]": 0.07762291794642806, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_leftward_far_side_entry]": 0.034951666137203574, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_leftward_overflow]": 0.0304344582837075, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[bypass_v_tight]": 0.03779675019904971, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[clear_channel_target_aware_push]": 0.026678125839680433, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[compact_gap_peer_conflict]": 0.027813125867396593, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[compact_hidden_passthrough]": 0.03552304208278656, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[complex_multipath]": 0.13040554081089795, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[convergence_stacked_sink]": 0.036382000893354416, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[convergent_offrow_exit_climb]": 0.13248170912265778, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[corridor_narrow_gap_fallback]": 0.017032291274517775, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[cross_col_top_entry]": 0.016205084044486284, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[cross_column_perp_drop]": 0.018797499127686024, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[cross_column_perp_drop_far_exit]": 0.024951291037723422, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[cross_row_gap_wrap]": 0.025169708067551255, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[deep_linear]": 0.057511167135089636, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[disjoint_sameline_trunks]": 0.03838066617026925, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[divergent_fanout_split]": 0.03803733200766146, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[dogleg_exempt_distinct]": 0.046259041875600815, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[dogleg_exempt_sameline]": 0.02387849916703999, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[dogleg_twoline_fanout]": 0.014454582007601857, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[exit_corner_offset_dogleg]": 0.018562458222731948, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[fan_bypass_nesting]": 0.040834207786247134, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[fan_in_merge]": 0.03895837371237576, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[fold_double]": 0.11606379132717848, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[fold_fan_across]": 0.11752500012516975, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[fold_stacked_branch]": 0.23895691591314971, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[funcprofiler_upstream]": 0.5940364999696612, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[header_nudge]": 0.027421332895755768, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[header_side_rotated]": 0.0317717504221946, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[inrow_skip_breeze]": 0.011366208083927631, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[inter_row_wrap_clearance]": 0.025611959164962173, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[interchange_lane_reorder]": 0.010604000184684992, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[junction_entry_align]": 0.07153416704386473, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[junction_entry_collision]": 0.053527416195720434, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[junction_entry_reversed_fold]": 0.04099600110203028, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[junction_fanout_convergence]": 0.030505874194204807, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[left_entry_up_wrap]": 0.021350373746827245, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[left_exit_sink_below]": 0.04361262498423457, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_perp_bottom_exit_perp_entry]": 0.022344083059579134, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_perp_bottom_exit_side_entry]": 0.02156962500885129, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_perp_top_exit_perp_entry]": 0.02576595894061029, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_perp_top_exit_perp_entry_diverging]": 0.02347141783684492, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_perp_top_exit_side_entry]": 0.0173073741607368, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_to_tb_top_cross_col]": 0.031576459063217044, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_to_tb_top_drop]": 0.013185582822188735, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_to_tb_top_drop_two_lines]": 0.03579279198311269, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_to_tb_top_near_vertical]": 0.02077537472359836, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_to_tb_top_two_lines]": 0.01373333390802145, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_top_entry_cross_column]": 0.014351251069456339, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[lr_top_entry_cross_column_two_line]": 0.018197501078248024, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_around_below_leftmost]": 0.03771708416752517, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_bottom_row_bypass]": 0.04462845786474645, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_leftmost_sink_branch]": 0.035265584010630846, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_offrow_continuation]": 0.0370965008623898, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_port_above_approach]": 0.023015873739495873, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_pullaway]": 0.04431304195895791, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_right_entry]": 0.02109995810315013, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_trunk_out_of_range_section]": 0.025882082991302013, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[merge_trunk_over_low_section]": 0.03856329177506268, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[mismatched_tracks]": 0.0320909155998379, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[mixed_bundle_column]": 0.030311998911201954, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[mixed_port_sides]": 0.025828041834756732, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[multi_input_convergence]": 0.016558374976739287, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[multi_line_bundle]": 0.027810250176116824, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[multicarrier_offrow_exit_climb]": 0.04368795896880329, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[near_vertical_junction_hook]": 0.028697584057226777, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[off_track_convergence]": 0.044764001155272126, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[off_track_convergence_multiline]": 0.03892095806077123, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[off_track_input_above_consumer]": 0.10015920922160149, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[parallel_independent]": 0.02666649897582829, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[peeloff_extra_line_consumer]": 0.03052312508225441, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[peeloff_riser_respace]": 0.030141250230371952, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[post_convergence_trunk]": 0.011634499067440629, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[rail_inter_section]": 0.01341516594402492, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[rail_offtrack_fan]": 0.014719124883413315, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[rail_offtrack_io]": 0.01872279099188745, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[rail_offtrack_plain_io]": 0.015939542092382908, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[reconverge_reversed_fold]": 0.10664125042967498, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[right_entry_from_above]": 0.016095584025606513, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[right_entry_from_above_far]": 0.01569987484253943, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[right_entry_gap_above_empty_row]": 0.011929626110941172, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[right_entry_wrap_no_fan]": 0.01931733195669949, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[rl_entry_runway]": 0.040177625603973866, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[rnaseq_lite]": 0.06711795809678733, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[route_around_intervening]": 0.025535750202834606, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[section_diamond]": 0.026858625002205372, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[self_crossing_bridge]": 0.0313935000449419, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[shared_sink_parallel]": 0.04523237491957843, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[single_section]": 0.008994625881314278, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[stacked_left_exit_drop]": 0.00987662491388619, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[stacked_lr_serpentine]": 0.2931772079318762, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[symmetric_diamond_beside_wide_fan]": 0.06184200011193752, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_bottom_entry_flow_start]": 0.013710292289033532, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_bottom_exit_bundle_jog]": 0.025520624592900276, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_bottom_exit_fork_diamond]": 0.036949916975572705, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_column_continuation_two_lines]": 0.02242845995351672, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_convergence_straight_drop]": 0.008677875390276313, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_internal_diagonal]": 0.017390874214470387, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_left_exit_step]": 0.05409233411774039, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_lr_exit_left]": 0.01887162495404482, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_lr_exit_right]": 0.017600459279492497, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_passthrough_continuation]": 0.013272833777591586, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_passthrough_trunk]": 0.03797391685657203, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_perp_exit_side_neighbour]": 0.025090999202802777, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_right_entry_stack]": 0.046627209056168795, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_trunk_through_fan]": 0.019136748742312193, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[tb_two_line_vert_seam]": 0.012743541970849037, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[terminal_symmetric_fan]": 0.023154292022809386, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[terminus_join]": 0.009659249102696776, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[top_entry_header_clash]": 0.014597458066418767, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[trunk_through_fan]": 0.031207707012072206, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[u_turn_fold]": 0.07843533414416015, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[uneven_diamond]": 0.01013541710563004, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[upward_bypass]": 0.062145791947841644, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[variant_calling]": 0.21474795904941857, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[wide_fan_in]": 0.03758954210206866, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[wide_fan_out]": 0.027990082977339625, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[wide_label_fan]": 0.019766875077039003, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_coincident_stations[wrapped_label_trunk]": 0.016577625181525946, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[aligner_row_pinned_continuation]": 0.04586779186502099, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[around_below_ep_col_gt0]": 0.01468533300794661, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[around_section_below]": 0.026731875957921147, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[asymmetric_tree]": 0.05579658295027912, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bottom_row_climb_clear_corridor]": 0.031274250941351056, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[branch_fold_forward]": 0.04042624984867871, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[branch_fold_stability]": 0.03153429110534489, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bt_chain]": 0.01908204215578735, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bt_exit_top_above]": 0.019785125739872456, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bt_exit_top_above_2line]": 0.011937167029827833, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bt_fork]": 0.006760959047824144, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bt_perp_entry_below]": 0.016026667086407542, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bt_to_lr]": 0.013879665872082114, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bt_to_tb]": 0.010764957871288061, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bundle_terminator_continuation]": 0.012458583107218146, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_fan_in_outer_slot]": 0.09037200012244284, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_gap2_rightward_overflow]": 0.028965041041374207, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_label_rake]": 0.029139874037355185, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_label_rake_left]": 0.05932154110632837, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_label_rake_wide]": 0.07530891569331288, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_leftward_far_side_entry]": 0.03426224994473159, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_leftward_overflow]": 0.026097208028659225, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[bypass_v_tight]": 0.04189129313454032, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[clear_channel_target_aware_push]": 0.030416501220315695, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[compact_gap_peer_conflict]": 0.02979045733809471, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[compact_hidden_passthrough]": 0.012574541848152876, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[complex_multipath]": 0.06179045815952122, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[convergence_stacked_sink]": 0.0390809157397598, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[convergent_offrow_exit_climb]": 0.1649823752231896, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[corridor_narrow_gap_fallback]": 0.02502341684885323, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[cross_col_top_entry]": 0.017953249160200357, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[cross_column_perp_drop]": 0.025186124024912715, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[cross_column_perp_drop_far_exit]": 0.017147292150184512, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[cross_row_gap_wrap]": 0.03464541584253311, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[deep_linear]": 0.05017037387005985, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[disjoint_sameline_trunks]": 0.03004283318296075, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[divergent_fanout_split]": 0.017332292394712567, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[dogleg_exempt_distinct]": 0.04299337510019541, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[dogleg_exempt_sameline]": 0.035400499822571874, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[dogleg_twoline_fanout]": 0.017013916047289968, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[exit_corner_offset_dogleg]": 0.028408708050847054, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[fan_bypass_nesting]": 0.043607542058452964, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[fan_in_merge]": 0.04040570883080363, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[fold_double]": 0.5136712091043591, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[fold_fan_across]": 0.08990570902824402, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[fold_stacked_branch]": 0.10885208193212748, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[funcprofiler_upstream]": 0.200420250184834, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[header_nudge]": 0.025850666919723153, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[header_side_rotated]": 0.023468709085136652, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[inrow_skip_breeze]": 0.016280376352369785, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[inter_row_wrap_clearance]": 0.03733008308336139, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[interchange_lane_reorder]": 0.02652783296070993, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[junction_entry_align]": 0.045871041947975755, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[junction_entry_collision]": 0.04723899904638529, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[junction_entry_reversed_fold]": 0.04400433297269046, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[junction_fanout_convergence]": 0.041080333990976214, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[left_entry_up_wrap]": 0.013118375092744827, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[left_exit_sink_below]": 0.03557474911212921, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_perp_bottom_exit_perp_entry]": 0.02559941611252725, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_perp_bottom_exit_side_entry]": 0.02152983285486698, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_perp_top_exit_perp_entry]": 0.028077333001419902, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_perp_top_exit_perp_entry_diverging]": 0.016318459063768387, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_perp_top_exit_side_entry]": 0.02574795880354941, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_to_tb_top_cross_col]": 0.02283275010995567, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_to_tb_top_drop]": 0.012188376160338521, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_to_tb_top_drop_two_lines]": 0.01267124991863966, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_to_tb_top_near_vertical]": 0.016428958624601364, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_to_tb_top_two_lines]": 0.018015708308666945, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_top_entry_cross_column]": 0.014919000212103128, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[lr_top_entry_cross_column_two_line]": 0.015268292045220733, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_around_below_leftmost]": 0.029059833846986294, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_bottom_row_bypass]": 0.04161700000986457, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_leftmost_sink_branch]": 0.0364447922911495, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_offrow_continuation]": 0.02651458396576345, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_port_above_approach]": 0.03303170786239207, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_pullaway]": 0.05297045782208443, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_right_entry]": 0.03526395792141557, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_trunk_out_of_range_section]": 0.03630754095502198, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[merge_trunk_over_low_section]": 0.04346737475134432, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[mismatched_tracks]": 0.03550683311186731, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[mixed_bundle_column]": 0.041345126228407025, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[mixed_port_sides]": 0.017787333112210035, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[multi_input_convergence]": 0.28758912486955523, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[multi_line_bundle]": 0.03326616599224508, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[multicarrier_offrow_exit_climb]": 0.05074725137092173, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[near_vertical_junction_hook]": 0.03154670796357095, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[off_track_convergence]": 0.030424750177189708, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[off_track_convergence_multiline]": 0.01840479183010757, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[off_track_input_above_consumer]": 0.2036874161567539, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[parallel_independent]": 0.06502083386294544, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[peeloff_extra_line_consumer]": 0.03286395687609911, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[peeloff_riser_respace]": 0.042856791988015175, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[post_convergence_trunk]": 0.017227291129529476, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[rail_inter_section]": 0.013322125421836972, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[rail_offtrack_fan]": 0.010231374762952328, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[rail_offtrack_io]": 0.02403866802342236, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[rail_offtrack_plain_io]": 0.012566750170663, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[reconverge_reversed_fold]": 0.12500737397931516, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[right_entry_from_above]": 0.009904750157147646, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[right_entry_from_above_far]": 0.03480183379724622, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[right_entry_gap_above_empty_row]": 0.021955375792458653, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[right_entry_wrap_no_fan]": 0.02234162436798215, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[rl_entry_runway]": 0.04214800102636218, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[rnaseq_lite]": 0.08690470783039927, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[route_around_intervening]": 0.04444954125210643, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[section_diamond]": 0.01972929108887911, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[self_crossing_bridge]": 0.03008975088596344, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[shared_sink_parallel]": 0.04443241702392697, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[single_section]": 0.006087124114856124, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[stacked_left_exit_drop]": 0.021420208038762212, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[stacked_lr_serpentine]": 0.023096874356269836, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[symmetric_diamond_beside_wide_fan]": 0.05061129084788263, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_bottom_entry_flow_start]": 0.031816584058105946, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_bottom_exit_bundle_jog]": 0.023664958076551557, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_bottom_exit_fork_diamond]": 0.024888375774025917, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_column_continuation_two_lines]": 0.0094955840613693, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_convergence_straight_drop]": 0.006549707148224115, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_internal_diagonal]": 0.012345332885161042, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_left_exit_step]": 0.025939290644600987, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_lr_exit_left]": 0.02611524984240532, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_lr_exit_right]": 0.017856167163699865, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_passthrough_continuation]": 0.010030456818640232, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_passthrough_trunk]": 0.02502237493172288, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_perp_exit_side_neighbour]": 0.019931206945329905, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_right_entry_stack]": 0.01955037610605359, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_trunk_through_fan]": 0.009688332909718156, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[tb_two_line_vert_seam]": 0.02803695877082646, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[terminal_symmetric_fan]": 0.02102550002746284, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[terminus_join]": 0.008697374956682324, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[top_entry_header_clash]": 0.011141291353851557, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[trunk_through_fan]": 0.03968641581013799, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[u_turn_fold]": 0.06176720908842981, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[uneven_diamond]": 0.010941583896055818, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[upward_bypass]": 0.04150154069066048, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[variant_calling]": 0.24003566708415747, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[wide_fan_in]": 0.04401933425106108, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[wide_fan_out]": 0.04206429165787995, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[wide_label_fan]": 0.031038167187944055, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_edge_section_crossing[wrapped_label_trunk]": 0.01720083341933787, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[aligner_row_pinned_continuation]": 0.04607520787976682, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[around_below_ep_col_gt0]": 0.019617417128756642, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[around_section_below]": 0.03330125007778406, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[asymmetric_tree]": 0.039565291022881866, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bottom_row_climb_clear_corridor]": 0.028773500118404627, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[branch_fold_forward]": 0.049994292203336954, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[branch_fold_stability]": 0.027730543166399002, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bt_chain]": 0.006586875068023801, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bt_exit_top_above]": 0.010949207935482264, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bt_exit_top_above_2line]": 0.020377582870423794, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bt_fork]": 0.007013540714979172, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bt_perp_entry_below]": 0.018995790975168347, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bt_to_lr]": 0.01984991692006588, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bt_to_tb]": 0.020519499201327562, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bundle_terminator_continuation]": 0.008978334022685885, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_fan_in_outer_slot]": 0.07141629210673273, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_gap2_rightward_overflow]": 0.04260166687890887, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_label_rake]": 0.028385373996570706, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_label_rake_left]": 0.03904599905945361, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_label_rake_wide]": 0.0614916670601815, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_leftward_far_side_entry]": 0.0456856656819582, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_leftward_overflow]": 0.03615508275106549, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[bypass_v_tight]": 0.031227082945406437, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[clear_channel_target_aware_push]": 0.018529459834098816, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[compact_gap_peer_conflict]": 0.01789266592822969, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[compact_hidden_passthrough]": 0.021476375171914697, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[complex_multipath]": 0.04446566826663911, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[convergence_stacked_sink]": 0.053304334403946996, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[convergent_offrow_exit_climb]": 0.14424433396197855, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[corridor_narrow_gap_fallback]": 0.047746248776093125, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[cross_col_top_entry]": 0.01879195822402835, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[cross_column_perp_drop]": 0.014001667965203524, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[cross_column_perp_drop_far_exit]": 0.022119626170024276, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[cross_row_gap_wrap]": 0.03550066705793142, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[deep_linear]": 0.059276624815538526, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[disjoint_sameline_trunks]": 0.04777970910072327, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[divergent_fanout_split]": 0.01392208319157362, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[dogleg_exempt_distinct]": 0.025778125738725066, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[dogleg_exempt_sameline]": 0.048296750290319324, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[dogleg_twoline_fanout]": 0.022252207854762673, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[exit_corner_offset_dogleg]": 0.017326875356957316, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[fan_bypass_nesting]": 0.0823768749833107, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[fan_in_merge]": 0.22473908308893442, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[fold_double]": 0.11325079225935042, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[fold_fan_across]": 0.09978229319676757, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[fold_stacked_branch]": 0.1099820421077311, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[funcprofiler_upstream]": 0.45749366702511907, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[header_nudge]": 0.03377583296969533, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[header_side_rotated]": 0.10613749991171062, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[inrow_skip_breeze]": 0.0250452917534858, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[inter_row_wrap_clearance]": 0.025119249941781163, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[interchange_lane_reorder]": 0.017721499782055616, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[junction_entry_align]": 0.06756241712719202, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[junction_entry_collision]": 0.04607379110530019, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[junction_entry_reversed_fold]": 0.05140450014732778, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[junction_fanout_convergence]": 0.02731908275745809, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[left_entry_up_wrap]": 0.01305020833387971, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[left_exit_sink_below]": 0.04616741510108113, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_perp_bottom_exit_perp_entry]": 0.02656883397139609, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_perp_bottom_exit_side_entry]": 0.017597415018826723, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_perp_top_exit_perp_entry]": 0.02566950093023479, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_perp_top_exit_perp_entry_diverging]": 0.020399791188538074, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_perp_top_exit_side_entry]": 0.024794999044388533, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_to_tb_top_cross_col]": 0.018858000170439482, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_to_tb_top_drop]": 0.01980358292348683, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_to_tb_top_drop_two_lines]": 0.023869876051321626, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_to_tb_top_near_vertical]": 0.02499258308671415, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_to_tb_top_two_lines]": 0.016775248805060983, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_top_entry_cross_column]": 0.014227916020900011, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[lr_top_entry_cross_column_two_line]": 0.009069957071915269, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_around_below_leftmost]": 0.045510249910876155, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_bottom_row_bypass]": 0.05811970797367394, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_leftmost_sink_branch]": 0.03589745867066085, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_offrow_continuation]": 0.051405500154942274, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_port_above_approach]": 0.030508333817124367, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_pullaway]": 0.0383520838804543, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_right_entry]": 0.03867600089870393, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_trunk_out_of_range_section]": 0.04605670808814466, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[merge_trunk_over_low_section]": 0.04920220794156194, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[mismatched_tracks]": 0.027860041009262204, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[mixed_bundle_column]": 0.057991583133116364, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[mixed_port_sides]": 0.011885249987244606, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[multi_input_convergence]": 0.01804754207842052, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[multi_line_bundle]": 0.04879875015467405, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[multicarrier_offrow_exit_climb]": 0.342523458879441, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[near_vertical_junction_hook]": 0.020188792143017054, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[off_track_convergence]": 0.0361349992454052, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[off_track_convergence_multiline]": 0.043920583091676235, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[off_track_input_above_consumer]": 0.10105483396910131, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[parallel_independent]": 0.018177376128733158, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[peeloff_extra_line_consumer]": 0.035454291151836514, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[peeloff_riser_respace]": 0.031591166043654084, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[post_convergence_trunk]": 0.013431126018986106, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[rail_inter_section]": 0.0071432499680668116, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[rail_offtrack_fan]": 0.016753500094637275, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[rail_offtrack_io]": 0.02849141671322286, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[rail_offtrack_plain_io]": 0.019701957935467362, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[reconverge_reversed_fold]": 0.10480841575190425, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[right_entry_from_above]": 0.01697429222986102, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[right_entry_from_above_far]": 0.013313625240698457, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[right_entry_gap_above_empty_row]": 0.01842037495225668, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[right_entry_wrap_no_fan]": 0.01129099982790649, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[rl_entry_runway]": 0.025367958238348365, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[rnaseq_lite]": 0.09629829204641283, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[route_around_intervening]": 0.01767537626437843, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[section_diamond]": 0.03629470895975828, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[self_crossing_bridge]": 0.03106570802628994, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[shared_sink_parallel]": 0.03803804190829396, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[single_section]": 0.009116624714806676, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[stacked_left_exit_drop]": 0.023870791774243116, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[stacked_lr_serpentine]": 0.04480466712266207, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[symmetric_diamond_beside_wide_fan]": 0.04467783309519291, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_bottom_entry_flow_start]": 0.013691915897652507, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_bottom_exit_bundle_jog]": 0.03879216616041958, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_bottom_exit_fork_diamond]": 0.047422916861251, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_column_continuation_two_lines]": 0.022668251069262624, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_convergence_straight_drop]": 0.027632415760308504, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_internal_diagonal]": 0.015493459068238735, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_left_exit_step]": 0.03831904288381338, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_lr_exit_left]": 0.017109499080106616, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_lr_exit_right]": 0.01851241593249142, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_passthrough_continuation]": 0.022751167183741927, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_passthrough_trunk]": 0.03005150123499334, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_perp_exit_side_neighbour]": 0.008923707995563745, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_right_entry_stack]": 0.02357679116539657, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_trunk_through_fan]": 0.023399250116199255, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[tb_two_line_vert_seam]": 0.02694262587465346, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[terminal_symmetric_fan]": 0.016826915787532926, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[terminus_join]": 0.01845654216594994, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[top_entry_header_clash]": 0.009791166987270117, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[trunk_through_fan]": 0.030096666887402534, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[u_turn_fold]": 0.1076283329166472, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[uneven_diamond]": 0.016139457933604717, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[upward_bypass]": 0.06458074995316565, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[variant_calling]": 0.22090033302083611, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[wide_fan_in]": 0.05452062515541911, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[wide_fan_out]": 0.030964000150561333, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[wide_label_fan]": 0.02857679291628301, + "tests/test_topology_validation.py::TestTopologyValidation::test_no_section_overlap[wrapped_label_trunk]": 0.01641770894639194, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[aligner_row_pinned_continuation]": 0.046430665999650955, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[around_below_ep_col_gt0]": 0.037093707360327244, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[around_section_below]": 0.020159207982942462, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[asymmetric_tree]": 0.03672604216262698, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bottom_row_climb_clear_corridor]": 0.0370970421936363, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[branch_fold_forward]": 0.06057258299551904, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[branch_fold_stability]": 0.03479191637597978, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bt_chain]": 0.010534417117014527, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bt_exit_top_above]": 0.026584750041365623, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bt_exit_top_above_2line]": 0.01926879188977182, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bt_fork]": 0.005901708034798503, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bt_perp_entry_below]": 0.014532208209857345, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bt_to_lr]": 0.02422320912592113, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bt_to_tb]": 0.013131583109498024, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bundle_terminator_continuation]": 0.03704924997873604, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_fan_in_outer_slot]": 0.10363070899620652, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_gap2_rightward_overflow]": 0.038191416999325156, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_label_rake]": 0.04718495695851743, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_label_rake_left]": 0.033833374036476016, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_label_rake_wide]": 0.08168683317489922, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_leftward_far_side_entry]": 0.04956875019706786, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_leftward_overflow]": 0.02154162502847612, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[bypass_v_tight]": 0.05587116698734462, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[clear_channel_target_aware_push]": 0.0499137919396162, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[compact_gap_peer_conflict]": 0.041527916211634874, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[compact_hidden_passthrough]": 0.011942875105887651, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[complex_multipath]": 0.056877249386161566, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[convergence_stacked_sink]": 0.06330291694030166, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[convergent_offrow_exit_climb]": 0.1422560417558998, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[corridor_narrow_gap_fallback]": 0.01984820794314146, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[cross_col_top_entry]": 0.0269531668163836, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[cross_column_perp_drop]": 0.019973957911133766, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[cross_column_perp_drop_far_exit]": 0.0287189157679677, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[cross_row_gap_wrap]": 0.0357206251937896, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[deep_linear]": 0.04977304209023714, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[disjoint_sameline_trunks]": 0.0539344591088593, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[divergent_fanout_split]": 0.02711649890989065, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[dogleg_exempt_distinct]": 0.028130332939326763, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[dogleg_exempt_sameline]": 0.01439858297817409, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[dogleg_twoline_fanout]": 0.10060662589967251, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[exit_corner_offset_dogleg]": 0.08318804111331701, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[fan_bypass_nesting]": 0.08239945792593062, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[fan_in_merge]": 0.06293637491762638, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[fold_double]": 0.23541720700450242, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[fold_fan_across]": 0.14463349990546703, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[fold_stacked_branch]": 0.1497694158460945, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[funcprofiler_upstream]": 0.24532120674848557, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[header_nudge]": 0.027481165947392583, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[header_side_rotated]": 0.05893625016324222, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[inrow_skip_breeze]": 0.01706424984149635, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[inter_row_wrap_clearance]": 0.019936166936531663, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[interchange_lane_reorder]": 0.020255791023373604, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[junction_entry_align]": 0.35615041689015925, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[junction_entry_collision]": 0.04701695800758898, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[junction_entry_reversed_fold]": 0.08052904182113707, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[junction_fanout_convergence]": 0.017581500113010406, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[left_entry_up_wrap]": 0.020234292140230536, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[left_exit_sink_below]": 0.024532041978091, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_perp_bottom_exit_perp_entry]": 0.016940750880166888, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_perp_bottom_exit_side_entry]": 0.022878748830407858, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_perp_top_exit_perp_entry]": 0.03253674996085465, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_perp_top_exit_perp_entry_diverging]": 0.023790332954376936, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_perp_top_exit_side_entry]": 0.021051540737971663, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_to_tb_top_cross_col]": 0.03449966572225094, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_to_tb_top_drop]": 0.01715633412823081, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_to_tb_top_drop_two_lines]": 0.019960499834269285, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_to_tb_top_near_vertical]": 0.013195709092542529, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_to_tb_top_two_lines]": 0.029377833241596818, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_top_entry_cross_column]": 0.014596707886084914, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[lr_top_entry_cross_column_two_line]": 0.03752166614867747, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_around_below_leftmost]": 0.035689915996044874, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_bottom_row_bypass]": 0.03714741603471339, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_leftmost_sink_branch]": 0.024458042345941067, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_offrow_continuation]": 0.03503662487491965, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_port_above_approach]": 0.0306665007956326, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_pullaway]": 0.040955498814582825, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_right_entry]": 0.03013683296740055, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_trunk_out_of_range_section]": 0.03265795926563442, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[merge_trunk_over_low_section]": 0.03595216735266149, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[mismatched_tracks]": 0.032244499772787094, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[mixed_bundle_column]": 0.022334375651553273, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[mixed_port_sides]": 0.01154824998229742, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[multi_input_convergence]": 0.05775070795789361, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[multi_line_bundle]": 0.030394625151529908, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[multicarrier_offrow_exit_climb]": 0.046776668168604374, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[near_vertical_junction_hook]": 0.027345126261934638, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[off_track_convergence]": 0.01658545807003975, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[off_track_convergence_multiline]": 0.046699626138433814, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[off_track_input_above_consumer]": 0.10061833309009671, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[parallel_independent]": 0.013517333660274744, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[peeloff_extra_line_consumer]": 0.06800591689534485, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[peeloff_riser_respace]": 0.03225929196923971, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[post_convergence_trunk]": 0.014260250143706799, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[rail_inter_section]": 0.0070460818242281675, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[rail_offtrack_fan]": 0.02058862429112196, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[rail_offtrack_io]": 0.016002292977645993, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[rail_offtrack_plain_io]": 0.018599499948322773, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[reconverge_reversed_fold]": 0.1476907911710441, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[right_entry_from_above]": 0.016041042283177376, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[right_entry_from_above_far]": 0.015994124813005328, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[right_entry_gap_above_empty_row]": 0.08823433378711343, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[right_entry_wrap_no_fan]": 0.03405174985527992, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[rl_entry_runway]": 0.06274683377705514, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[rnaseq_lite]": 0.1251006240490824, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[route_around_intervening]": 0.04455795791000128, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[section_diamond]": 0.04361429181881249, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[self_crossing_bridge]": 0.13272679108195007, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[shared_sink_parallel]": 0.06583645706996322, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[single_section]": 0.014656001003459096, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[stacked_left_exit_drop]": 0.02592316595837474, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[stacked_lr_serpentine]": 0.024254083167761564, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[symmetric_diamond_beside_wide_fan]": 0.35372162610292435, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_bottom_entry_flow_start]": 0.01914116577245295, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_bottom_exit_bundle_jog]": 0.021217457950115204, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_bottom_exit_fork_diamond]": 0.02234366605989635, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_column_continuation_two_lines]": 0.013944998616352677, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_convergence_straight_drop]": 0.022196873789653182, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_internal_diagonal]": 0.023725875187665224, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_left_exit_step]": 0.053230624878779054, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_lr_exit_left]": 0.046215500216931105, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_lr_exit_right]": 0.015959916170686483, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_passthrough_continuation]": 0.02262975089251995, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_passthrough_trunk]": 0.01715395785868168, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_perp_exit_side_neighbour]": 0.012675916776061058, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_right_entry_stack]": 0.03716991702094674, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_trunk_through_fan]": 0.018351915990933776, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[tb_two_line_vert_seam]": 0.02176079200580716, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[terminal_symmetric_fan]": 0.01498012407682836, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[terminus_join]": 0.007311916910111904, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[top_entry_header_clash]": 0.038173333974555135, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[trunk_through_fan]": 0.03679920895956457, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[u_turn_fold]": 0.09275641571730375, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[uneven_diamond]": 0.014843916986137629, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[upward_bypass]": 0.059108791872859, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[variant_calling]": 0.24645012500695884, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[wide_fan_in]": 0.05241683404892683, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[wide_fan_out]": 0.028209334006533027, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[wide_label_fan]": 0.013048958964645863, + "tests/test_topology_validation.py::TestTopologyValidation::test_port_boundary[wrapped_label_trunk]": 0.019296082900837064, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[aligner_row_pinned_continuation]": 0.08378675114363432, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[around_below_ep_col_gt0]": 0.027257541893050075, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[around_section_below]": 0.02131745801307261, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[asymmetric_tree]": 0.03732145810499787, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bottom_row_climb_clear_corridor]": 0.045601333724334836, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[branch_fold_forward]": 0.034167208010330796, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[branch_fold_stability]": 0.03061966667883098, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bt_chain]": 0.011625959072262049, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bt_exit_top_above]": 0.02461316715925932, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bt_exit_top_above_2line]": 0.012716124765574932, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bt_fork]": 0.008843458024784923, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bt_perp_entry_below]": 0.029716374818235636, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bt_to_lr]": 0.34529391629621387, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bt_to_tb]": 0.02822291641496122, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bundle_terminator_continuation]": 0.022718499647453427, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_fan_in_outer_slot]": 0.16207008389756083, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_gap2_rightward_overflow]": 0.06581316608935595, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_label_rake]": 0.025285291951149702, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_label_rake_left]": 0.08533008326776326, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_label_rake_wide]": 0.15251383394934237, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_leftward_far_side_entry]": 0.06936933286488056, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_leftward_overflow]": 0.04873008327558637, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[bypass_v_tight]": 0.03322366485372186, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[clear_channel_target_aware_push]": 0.05116458400152624, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[compact_gap_peer_conflict]": 0.038866666378453374, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[compact_hidden_passthrough]": 0.028299124678596854, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[complex_multipath]": 0.08243958419188857, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[convergence_stacked_sink]": 0.05909579177387059, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[convergent_offrow_exit_climb]": 0.15623275097459555, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[corridor_narrow_gap_fallback]": 0.030474874889478087, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[cross_col_top_entry]": 0.022407540818676353, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[cross_column_perp_drop]": 0.02087370795197785, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[cross_column_perp_drop_far_exit]": 0.014202251099050045, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[cross_row_gap_wrap]": 0.02766445791348815, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[deep_linear]": 0.05383516615256667, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[disjoint_sameline_trunks]": 0.03202133276499808, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[divergent_fanout_split]": 0.016989249736070633, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[dogleg_exempt_distinct]": 0.029055125080049038, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[dogleg_exempt_sameline]": 0.012927041854709387, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[dogleg_twoline_fanout]": 0.02452166727744043, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[exit_corner_offset_dogleg]": 0.041103124152868986, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[fan_bypass_nesting]": 0.17542054201476276, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[fan_in_merge]": 0.03181633213534951, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[fold_double]": 0.11955408309586346, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[fold_fan_across]": 0.10131691652350128, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[fold_stacked_branch]": 0.19342712499201298, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[funcprofiler_upstream]": 0.26510820793919265, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[header_nudge]": 0.03507004212588072, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[header_side_rotated]": 0.01788233290426433, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[inrow_skip_breeze]": 0.023096124874427915, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[inter_row_wrap_clearance]": 0.23156716697849333, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[interchange_lane_reorder]": 0.02246020920574665, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[junction_entry_align]": 0.05461720796301961, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[junction_entry_collision]": 0.03144683316349983, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[junction_entry_reversed_fold]": 0.028204957954585552, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[junction_fanout_convergence]": 0.03426495683379471, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[left_entry_up_wrap]": 0.030121374875307083, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[left_exit_sink_below]": 0.03618745878338814, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_perp_bottom_exit_perp_entry]": 0.021682959282770753, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_perp_bottom_exit_side_entry]": 0.036887249909341335, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_perp_top_exit_perp_entry]": 0.01703058392740786, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_perp_top_exit_perp_entry_diverging]": 0.016127459006384015, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_perp_top_exit_side_entry]": 0.010713583091273904, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_to_tb_top_cross_col]": 0.020065750228241086, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_to_tb_top_drop]": 0.020914290798828006, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_to_tb_top_drop_two_lines]": 0.012000250164419413, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_to_tb_top_near_vertical]": 0.028854583855718374, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_to_tb_top_two_lines]": 0.010140041122213006, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_top_entry_cross_column]": 0.01573275006376207, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[lr_top_entry_cross_column_two_line]": 0.020066499011591077, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_around_below_leftmost]": 0.028005082858726382, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_bottom_row_bypass]": 0.031412208918482065, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_leftmost_sink_branch]": 0.046904709190130234, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_offrow_continuation]": 0.02171437512151897, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_port_above_approach]": 0.022060291841626167, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_pullaway]": 0.02856625011190772, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_right_entry]": 0.027073125122115016, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_trunk_out_of_range_section]": 0.03814212488941848, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[merge_trunk_over_low_section]": 0.05468304199166596, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[mismatched_tracks]": 0.07121120812371373, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[mixed_bundle_column]": 0.038962082704529166, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[mixed_port_sides]": 0.013481916161254048, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[multi_input_convergence]": 0.024196083890274167, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[multi_line_bundle]": 0.026329749263823032, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[multicarrier_offrow_exit_climb]": 0.03278354089707136, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[near_vertical_junction_hook]": 0.025033999932929873, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[off_track_convergence]": 0.018596584675833583, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[off_track_convergence_multiline]": 0.022140084067359567, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[off_track_input_above_consumer]": 0.13407479086890817, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[parallel_independent]": 0.02284587500616908, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[peeloff_extra_line_consumer]": 0.024140624795109034, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[peeloff_riser_respace]": 0.03507704217918217, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[post_convergence_trunk]": 0.009132290724664927, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[rail_inter_section]": 0.009951166110113263, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[rail_offtrack_fan]": 0.019928707741200924, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[rail_offtrack_io]": 0.009339083218947053, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[rail_offtrack_plain_io]": 0.008370291674509645, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[reconverge_reversed_fold]": 0.1472880421206355, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[right_entry_from_above]": 0.018514916766434908, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[right_entry_from_above_far]": 0.014878124231472611, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[right_entry_gap_above_empty_row]": 0.018982875859364867, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[right_entry_wrap_no_fan]": 0.013420082861557603, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[rl_entry_runway]": 0.03031616611406207, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[rnaseq_lite]": 0.08914329204708338, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[route_around_intervening]": 0.022454582853242755, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[section_diamond]": 0.0372905011754483, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[self_crossing_bridge]": 0.023024706868454814, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[shared_sink_parallel]": 0.0529675823636353, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[single_section]": 0.0053388760425150394, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[stacked_left_exit_drop]": 0.030832917196676135, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[stacked_lr_serpentine]": 0.02409625006839633, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[symmetric_diamond_beside_wide_fan]": 0.036843166686594486, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_bottom_entry_flow_start]": 0.010314084123820066, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_bottom_exit_bundle_jog]": 0.03004841599613428, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_bottom_exit_fork_diamond]": 0.049688499653711915, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_column_continuation_two_lines]": 0.01877520722337067, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_convergence_straight_drop]": 0.014332625083625317, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_internal_diagonal]": 0.03321758285164833, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_left_exit_step]": 0.040960000129416585, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_lr_exit_left]": 0.017523708753287792, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_lr_exit_right]": 0.032709040911868215, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_passthrough_continuation]": 0.01066579227335751, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_passthrough_trunk]": 0.09532475005835295, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_perp_exit_side_neighbour]": 0.008975917240604758, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_right_entry_stack]": 0.07346679107286036, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_trunk_through_fan]": 0.015671541914343834, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[tb_two_line_vert_seam]": 0.04625066602602601, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[terminal_symmetric_fan]": 0.017918750178068876, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[terminus_join]": 0.0067706238478422165, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[top_entry_header_clash]": 0.0584457500372082, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[trunk_through_fan]": 0.03214033180847764, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[u_turn_fold]": 0.18511554109863937, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[uneven_diamond]": 0.010943081928417087, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[upward_bypass]": 0.05656824982725084, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[variant_calling]": 0.4698405829258263, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[wide_fan_in]": 0.04595204186625779, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[wide_fan_out]": 0.049744416028261185, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[wide_label_fan]": 0.029025832889601588, + "tests/test_topology_validation.py::TestTopologyValidation::test_station_containment[wrapped_label_trunk]": 0.01663399999961257, + "tests/test_topology_validation.py::TestUpwardBypass::test_corner1_concentricity": 0.0002676260191947222, + "tests/test_topology_validation.py::TestUpwardBypass::test_corner2_concentricity": 0.00019162404350936413, + "tests/test_topology_validation.py::TestUpwardBypass::test_corner3_concentricity": 0.00018708291463553905, + "tests/test_topology_validation.py::TestUpwardBypass::test_corner4_concentricity": 0.0002749590203166008, + "tests/test_topology_validation.py::TestUpwardBypass::test_fan_positions_consistent": 0.05533029022626579, + "tests/test_topology_validation.py::TestUpwardBypass::test_no_line_crossings_on_segments": 0.045916790841147304, + "tests/test_topology_validation.py::TestVariantCallingDefects::test_no_excessive_column_gaps": 0.04153858311474323, + "tests/test_topology_validation.py::TestVariantCallingDefects::test_no_intra_section_chain_misalignment": 0.03587437514215708, + "tests/test_topology_validation.py::TestVariantCallingDefects::test_no_route_segment_crossings": 0.025497958064079285, + "tests/test_topology_validation.py::test_fan_bypass_nesting_fixture_fans_from_a_junction": 0.06932091689668596, + "tests/test_topology_validation.py::test_fan_bypass_no_fan_weave": 0.05495316698215902, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[aligner_row_pinned_continuation]": 0.0458619580604136, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[around_below_ep_col_gt0]": 0.028733792016282678, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[around_section_below]": 0.02618970861658454, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[asymmetric_tree]": 0.046750667272135615, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bottom_row_climb_clear_corridor]": 0.022394999861717224, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[branch_fold_forward]": 0.0367830831091851, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[branch_fold_stability]": 0.03552150004543364, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bt_chain]": 0.011671541025862098, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bt_exit_top_above]": 0.016459959326311946, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bt_exit_top_above_2line]": 0.02027020906098187, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bt_fork]": 0.01238954090513289, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bt_perp_entry_below]": 0.02228262508288026, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bt_to_lr]": 0.010894250124692917, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bt_to_tb]": 0.021767625119537115, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bundle_terminator_continuation]": 0.0085567906498909, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_fan_in_outer_slot]": 0.056504708947613835, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_gap2_rightward_overflow]": 0.0261273761279881, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_label_rake]": 0.030468918150290847, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_label_rake_left]": 0.30344404210336506, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_label_rake_wide]": 0.07875141687691212, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_leftward_far_side_entry]": 0.033426792128011584, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_leftward_overflow]": 0.02987866592593491, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[bypass_v_tight]": 0.046229915926232934, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[clear_channel_target_aware_push]": 0.04199295793659985, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[compact_gap_peer_conflict]": 0.03429383412003517, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[compact_hidden_passthrough]": 0.012735250173136592, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[complex_multipath]": 0.06073404219932854, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[convergence_stacked_sink]": 0.04211454093456268, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[convergent_offrow_exit_climb]": 0.14079204318113625, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[corridor_narrow_gap_fallback]": 0.024062708718702197, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[cross_col_top_entry]": 0.011487165931612253, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[cross_column_perp_drop]": 0.019472790881991386, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[cross_column_perp_drop_far_exit]": 0.026077791582792997, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[cross_row_gap_wrap]": 0.032071667024865746, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[deep_linear]": 0.059218083042651415, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[disjoint_sameline_trunks]": 0.052338666282594204, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[divergent_fanout_split]": 0.017846749862655997, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[dogleg_exempt_distinct]": 0.02143729105591774, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[dogleg_exempt_sameline]": 0.030604917090386152, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[dogleg_twoline_fanout]": 0.018494917079806328, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[exit_corner_offset_dogleg]": 0.028847292298451066, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[fan_bypass_nesting]": 0.062195208156481385, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[fan_in_merge]": 0.03342487383633852, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[fold_double]": 0.10830295900814235, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[fold_fan_across]": 0.1046355850994587, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[fold_stacked_branch]": 0.38178799976594746, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[funcprofiler_upstream]": 0.20225808303803205, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[header_nudge]": 0.020740249892696738, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[header_side_rotated]": 0.02664479101076722, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[inrow_skip_breeze]": 0.01215300103649497, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[inter_row_wrap_clearance]": 0.02906762482598424, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[interchange_lane_reorder]": 0.02302158297970891, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[junction_entry_align]": 0.035611331928521395, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[junction_entry_collision]": 0.036567957838997245, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[junction_entry_reversed_fold]": 0.03165491600520909, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[junction_fanout_convergence]": 0.015374792739748955, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[left_entry_up_wrap]": 0.016576957888901234, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[left_exit_sink_below]": 0.02047350024804473, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_perp_bottom_exit_perp_entry]": 0.01735387509688735, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_perp_bottom_exit_side_entry]": 0.020861917175352573, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_perp_top_exit_perp_entry]": 0.03215608187019825, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_perp_top_exit_perp_entry_diverging]": 0.014377540908753872, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_perp_top_exit_side_entry]": 0.018449668074026704, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_to_tb_top_cross_col]": 0.022564917104318738, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_to_tb_top_drop]": 0.01410241611301899, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_to_tb_top_drop_two_lines]": 0.011733624618500471, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_to_tb_top_near_vertical]": 0.020722415996715426, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_to_tb_top_two_lines]": 0.017099625198170543, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_top_entry_cross_column]": 0.012670249678194523, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[lr_top_entry_cross_column_two_line]": 0.011155748972669244, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_around_below_leftmost]": 0.022605831967666745, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_bottom_row_bypass]": 0.03986274893395603, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_leftmost_sink_branch]": 0.03234674991108477, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_offrow_continuation]": 0.018286250066012144, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_port_above_approach]": 0.024316209135577083, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_pullaway]": 0.04068700037896633, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_right_entry]": 0.030481875874102116, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_trunk_out_of_range_section]": 0.042054959340021014, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[merge_trunk_over_low_section]": 0.032400958240032196, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[mismatched_tracks]": 0.02255112398415804, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[mixed_bundle_column]": 0.058094333158805966, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[mixed_port_sides]": 0.024973208317533135, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[multi_input_convergence]": 0.042117832927033305, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[multi_line_bundle]": 0.02147766691632569, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[multicarrier_offrow_exit_climb]": 0.03621383407153189, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[near_vertical_junction_hook]": 0.04318466689437628, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[off_track_convergence]": 0.015688208863139153, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[off_track_convergence_multiline]": 0.02056112512946129, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[off_track_input_above_consumer]": 0.10749016725458205, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[parallel_independent]": 0.02938791736960411, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[peeloff_extra_line_consumer]": 0.03562970901839435, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[peeloff_riser_respace]": 0.03762958268634975, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[post_convergence_trunk]": 0.012703750049695373, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[rail_inter_section]": 0.006617042236030102, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[rail_offtrack_fan]": 0.016571999760344625, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[rail_offtrack_io]": 0.020710708806291223, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[rail_offtrack_plain_io]": 0.015132624888792634, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[reconverge_reversed_fold]": 0.09570395713672042, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[right_entry_from_above]": 0.009946458041667938, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[right_entry_from_above_far]": 0.023500707698985934, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[right_entry_gap_above_empty_row]": 0.034818666987121105, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[right_entry_wrap_no_fan]": 0.011267124908044934, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[rl_entry_runway]": 0.016641166992485523, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[rnaseq_lite]": 0.10580829321406782, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[route_around_intervening]": 0.024374415865167975, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[section_diamond]": 0.028266792185604572, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[self_crossing_bridge]": 0.01814895821735263, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[shared_sink_parallel]": 0.041815333999693394, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[single_section]": 0.01997141703031957, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[stacked_left_exit_drop]": 0.009328583953902125, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[stacked_lr_serpentine]": 0.03380195773206651, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[symmetric_diamond_beside_wide_fan]": 0.036862917710095644, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_bottom_entry_flow_start]": 0.018177540972828865, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_bottom_exit_bundle_jog]": 0.020669459365308285, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_bottom_exit_fork_diamond]": 0.018641415983438492, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_column_continuation_two_lines]": 0.014690043171867728, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_convergence_straight_drop]": 0.008750873850658536, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_internal_diagonal]": 0.018090958008542657, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_left_exit_step]": 0.019684374798089266, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_lr_exit_left]": 0.013969332911074162, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_lr_exit_right]": 0.014779583318158984, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_passthrough_continuation]": 0.015576249919831753, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_passthrough_trunk]": 0.03597291698679328, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_perp_exit_side_neighbour]": 0.013204624876379967, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_right_entry_stack]": 0.020931166596710682, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_trunk_through_fan]": 0.00949820876121521, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[tb_two_line_vert_seam]": 0.011910123750567436, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[terminal_symmetric_fan]": 0.017401458928361535, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[terminus_join]": 0.006343374960124493, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[top_entry_header_clash]": 0.012407708913087845, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[trunk_through_fan]": 0.04201741679571569, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[u_turn_fold]": 0.04715491831302643, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[uneven_diamond]": 0.028027832740917802, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[upward_bypass]": 0.05029162601567805, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[variant_calling]": 0.1700972500257194, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[wide_fan_in]": 0.22453083284199238, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[wide_fan_out]": 0.04301245813257992, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[wide_label_fan]": 0.01690616807900369, + "tests/test_topology_validation.py::test_layout_quality_warnings_report[wrapped_label_trunk]": 0.01794304302893579, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[aligner_row_pinned_continuation]": 0.05126216681674123, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[around_below_ep_col_gt0]": 0.02626895811408758, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[around_section_below]": 0.017260083928704262, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[asymmetric_tree]": 0.05008462397381663, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bottom_row_climb_clear_corridor]": 0.032944751204922795, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[branch_fold_forward]": 0.036868083057925105, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[branch_fold_stability]": 0.0426517091691494, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bt_chain]": 0.006261416943743825, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bt_exit_top_above]": 0.01487350114621222, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bt_exit_top_above_2line]": 0.01732145925052464, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bt_fork]": 0.01709837419912219, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bt_perp_entry_below]": 0.017042916733771563, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bt_to_lr]": 0.02047579106874764, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bt_to_tb]": 0.02923808409832418, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bundle_terminator_continuation]": 0.008682874729856849, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_fan_in_outer_slot]": 0.051542958011850715, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_gap2_rightward_overflow]": 0.03614266566000879, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_label_rake]": 0.028179208282381296, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_label_rake_left]": 0.027313499012961984, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_label_rake_wide]": 0.06470154179260135, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_leftward_far_side_entry]": 0.03370691603049636, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_leftward_overflow]": 0.018228291999548674, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[bypass_v_tight]": 0.03547154203988612, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[clear_channel_target_aware_push]": 0.2582891657948494, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[compact_gap_peer_conflict]": 0.024639790877699852, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[compact_hidden_passthrough]": 0.01778179220855236, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[complex_multipath]": 0.0518523333594203, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[convergence_stacked_sink]": 0.034391332883387804, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[convergent_offrow_exit_climb]": 0.13610024913214147, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[corridor_narrow_gap_fallback]": 0.032218458130955696, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[cross_col_top_entry]": 0.008809708757326007, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[cross_column_perp_drop]": 0.008633000310510397, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[cross_column_perp_drop_far_exit]": 0.014639082830399275, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[cross_row_gap_wrap]": 0.04370629182085395, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[deep_linear]": 0.04181558289565146, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[disjoint_sameline_trunks]": 0.021976999938488007, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[divergent_fanout_split]": 0.014926334144547582, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[dogleg_exempt_distinct]": 0.02976295887492597, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[dogleg_exempt_sameline]": 0.019652624614536762, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[dogleg_twoline_fanout]": 0.03069712594151497, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[epitopeprediction]": 0.0649237921461463, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[exit_corner_offset_dogleg]": 0.24911787500604987, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[fan_bypass_nesting]": 0.053051333874464035, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[fan_in_merge]": 0.05218079127371311, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[fold_double]": 0.10638104192912579, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[fold_fan_across]": 0.07886158325709403, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[fold_stacked_branch]": 0.09251566603779793, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[funcprofiler_upstream]": 0.25896025099791586, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[header_nudge]": 0.022748874966055155, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[header_side_rotated]": 0.02253912598825991, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[hlatyping]": 0.05129287461750209, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[inrow_skip_breeze]": 0.016991332871839404, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[inter_row_wrap_clearance]": 0.023648334201425314, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[interchange_lane_reorder]": 0.0158482501283288, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[junction_entry_align]": 0.032031001057475805, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[junction_entry_collision]": 0.03946737479418516, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[junction_entry_reversed_fold]": 0.03391579072922468, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[junction_fanout_convergence]": 0.019383917097002268, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[left_entry_up_wrap]": 0.02406125096604228, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[left_exit_sink_below]": 0.026823625899851322, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_perp_bottom_exit_perp_entry]": 0.01228770799934864, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_perp_bottom_exit_side_entry]": 0.011810249648988247, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_perp_top_exit_perp_entry]": 0.013310333946719766, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_perp_top_exit_perp_entry_diverging]": 0.02760208398103714, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_perp_top_exit_side_entry]": 0.01133604277856648, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_to_tb_top_cross_col]": 0.030761375091969967, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_to_tb_top_drop]": 0.015610916307196021, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_to_tb_top_drop_two_lines]": 0.015555000165477395, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_to_tb_top_near_vertical]": 0.021043083164840937, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_to_tb_top_two_lines]": 0.02753216726705432, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_top_entry_cross_column]": 0.018260498996824026, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[lr_top_entry_cross_column_two_line]": 0.01036345912143588, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_around_below_leftmost]": 0.025855831569060683, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_bottom_row_bypass]": 0.02618720894679427, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_leftmost_sink_branch]": 0.03792258375324309, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_offrow_continuation]": 0.022599543211981654, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_port_above_approach]": 0.03583303978666663, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_pullaway]": 0.028383873868733644, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_right_entry]": 0.02812854084186256, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_trunk_out_of_range_section]": 0.03362933429889381, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[merge_trunk_over_low_section]": 0.041089499834924936, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[mismatched_tracks]": 0.040345998015254736, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[mixed_bundle_column]": 0.03797187493182719, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[mixed_port_sides]": 0.01459358399733901, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[multi_input_convergence]": 0.022974584251642227, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[multi_line_bundle]": 0.03520233416929841, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[multicarrier_offrow_exit_climb]": 0.02266704197973013, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[near_vertical_junction_hook]": 0.019662041682749987, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[off_track_convergence]": 0.026050041895359755, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[off_track_convergence_multiline]": 0.027267750119790435, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[off_track_input_above_consumer]": 0.08479666686616838, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[parallel_independent]": 0.028997540939599276, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[peeloff_extra_line_consumer]": 0.028642666060477495, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[peeloff_riser_respace]": 0.023653833894059062, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[post_convergence_trunk]": 0.014131417032331228, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[rail_inter_section]": 0.010608164826408029, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[rail_offtrack_fan]": 0.013463583076372743, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[rail_offtrack_io]": 0.017225415678694844, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[rail_offtrack_plain_io]": 0.008313833037391305, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[reconverge_reversed_fold]": 0.3125438326969743, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[right_entry_from_above]": 0.012549666920676827, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[right_entry_from_above_far]": 0.013392290798947215, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[right_entry_gap_above_empty_row]": 0.030671626329421997, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[right_entry_wrap_no_fan]": 0.02450662525370717, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[rl_entry_runway]": 0.02325095795094967, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[rnaseq_lite]": 0.06826295796781778, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[rnaseq_sections]": 0.4738986250013113, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[route_around_intervening]": 0.02226987387984991, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[section_diamond]": 0.023209915962070227, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[self_crossing_bridge]": 0.025125999003648758, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[shared_sink_parallel]": 0.04480933281593025, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[single_section]": 0.01522824913263321, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[stacked_left_exit_drop]": 0.01711737527512014, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[stacked_lr_serpentine]": 0.02135116490535438, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[symmetric_diamond_beside_wide_fan]": 0.022852999158203602, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_bottom_entry_flow_start]": 0.008200000040233135, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_bottom_exit_bundle_jog]": 0.020909707760438323, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_bottom_exit_fork_diamond]": 0.025535832857713103, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_column_continuation_two_lines]": 0.011197540909051895, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_convergence_straight_drop]": 0.012304583797231317, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_internal_diagonal]": 0.02405350119806826, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_left_exit_step]": 0.030914250062778592, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_lr_exit_left]": 0.032608249923214316, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_lr_exit_right]": 0.013610792811959982, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_passthrough_continuation]": 0.018548917956650257, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_passthrough_trunk]": 0.018301998963579535, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_perp_exit_side_neighbour]": 0.02522445796057582, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_right_entry_stack]": 0.021362168015912175, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_trunk_through_fan]": 0.010383208747953176, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[tb_two_line_vert_seam]": 0.017296040896326303, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[terminal_symmetric_fan]": 0.016436417121440172, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[terminus_join]": 0.00871987477876246, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[top_entry_header_clash]": 0.2674009162001312, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[trunk_through_fan]": 0.026469625998288393, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[u_turn_fold]": 0.07263712515123188, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[uneven_diamond]": 0.013090125983580947, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[upward_bypass]": 0.06591375009156764, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[variant_calling0]": 0.049685665871948004, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[variant_calling1]": 0.4800057497341186, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[wide_fan_in]": 0.018957501277327538, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[wide_fan_out]": 0.020894832909107208, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[wide_label_fan]": 0.014306209050118923, + "tests/test_topology_validation.py::test_no_intra_section_chain_misalignment_across_gallery[wrapped_label_trunk]": 0.011925292434170842, + "tests/test_topology_validation.py::test_stacked_sections_serpentine_no_backtrack[stacked_lr_serpentine]": 0.02347549912519753, + "tests/test_topology_validation.py::test_stacked_sections_serpentine_no_backtrack[variantbenchmarking_auto]": 0.2077160831540823, + "tests/test_triage_tool.py::test_finder_registry_keys_are_live_invariants": 0.0033540409058332443, + "tests/test_triage_tool.py::test_label_violator_overlay_marks_glyph_and_expected_marker": 0.0007770839147269726, + "tests/test_triage_tool.py::test_rendered_label_box_uses_drawn_glyph_coords": 0.0008262500632554293, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/centered_tracks.mmd]": 0.016116252169013023, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/cross_track_interchange.mmd]": 0.02535866596736014, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/diagonal_labels.mmd]": 0.0629319183062762, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/differentialabundance.mmd]": 0.20120270806364715, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/differentialabundance_default.mmd]": 0.44072258402593434, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/directional_flow.mmd]": 0.01873679179698229, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/disconnected_components.mmd]": 0.029130541952326894, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/epitopeprediction.mmd]": 0.0646817497909069, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/file_icons.mmd]": 0.02826749999076128, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/genomeassembly.mmd]": 0.06809745798818767, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/genomeassembly_staggered.mmd]": 0.08783362410031259, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/genomic_pipeline.mmd]": 0.27577358298003674, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/group_labels.mmd]": 0.032365500926971436, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/hlatyping.mmd]": 0.05112208309583366, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/legend_combo.mmd]": 0.019580667139962316, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/legend_logo_placement.mmd]": 0.04551883530803025, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/line_spread.mmd]": 0.053765208926051855, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/longread_variant_calling.mmd]": 0.14074125024490058, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/marker_styles.mmd]": 0.034811874153092504, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/off_track_outputs.mmd]": 0.027519666822627187, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/rail_mode.mmd]": 0.038166501093655825, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/rail_section.mmd]": 0.0344350419472903, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/rnaseq_auto.mmd]": 0.2955164168961346, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/rnaseq_sections.mmd]": 0.4969819998368621, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/rnaseq_sections_manual.mmd]": 0.5893885411787778, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/sarek_metro.mmd]": 0.16001929179765284, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/simple_pipeline.mmd]": 0.013213374884799123, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/tb_file_termini.mmd]": 0.021438542054966092, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/aligner_row_pinned_continuation.mmd]": 0.048755583353340626, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/around_below_ep_col_gt0.mmd]": 0.03988008387386799, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/around_section_below.mmd]": 0.02440200001001358, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/asymmetric_tree.mmd]": 0.04213058273307979, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bottom_row_climb_clear_corridor.mmd]": 0.02671904070302844, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/branch_fold_forward.mmd]": 0.031252208864316344, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/branch_fold_stability.mmd]": 0.034091416047886014, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bt_chain.mmd]": 0.00622383295558393, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bt_exit_top_above.mmd]": 0.0164322501514107, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bt_exit_top_above_2line.mmd]": 0.029889751225709915, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bt_fork.mmd]": 0.009309334214776754, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bt_perp_entry_below.mmd]": 0.015336500015109777, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bt_to_lr.mmd]": 0.020593624794855714, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bt_to_tb.mmd]": 0.011198081774637103, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bundle_terminator_continuation.mmd]": 0.01694829110056162, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_fan_in_outer_slot.mmd]": 0.05304329167120159, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_gap2_rightward_overflow.mmd]": 0.02938387473113835, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_label_rake.mmd]": 0.05009499890729785, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_label_rake_left.mmd]": 0.02397999889217317, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_label_rake_wide.mmd]": 0.06431941594928503, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_leftward_far_side_entry.mmd]": 0.03046937519684434, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_leftward_overflow.mmd]": 0.02959599904716015, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/bypass_v_tight.mmd]": 0.020940748741850257, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/clear_channel_target_aware_push.mmd]": 0.022163917077705264, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/compact_gap_peer_conflict.mmd]": 0.024357332149520516, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/compact_hidden_passthrough.mmd]": 0.012858875095844269, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/complex_multipath.mmd]": 0.05001024971716106, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/convergence_stacked_sink.mmd]": 0.04542395891621709, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/convergent_offrow_exit_climb.mmd]": 0.11559503991156816, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/corridor_narrow_gap_fallback.mmd]": 0.026358208153396845, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/cross_col_top_entry.mmd]": 0.012190834153443575, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/cross_column_perp_drop.mmd]": 0.01888987491838634, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/cross_column_perp_drop_far_exit.mmd]": 0.010205001337453723, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/cross_row_gap_wrap.mmd]": 0.03835058375261724, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/deep_linear.mmd]": 0.06390504213050008, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/disjoint_sameline_trunks.mmd]": 0.027804124867543578, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/divergent_fanout_split.mmd]": 0.020457333885133266, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/dogleg_exempt_distinct.mmd]": 0.02892279182560742, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/dogleg_exempt_sameline.mmd]": 0.027179207652807236, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/dogleg_twoline_fanout.mmd]": 0.021522832801565528, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/exit_corner_offset_dogleg.mmd]": 0.017414124915376306, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/fan_bypass_nesting.mmd]": 0.05961204203777015, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/fan_in_merge.mmd]": 0.03243354195728898, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/fold_double.mmd]": 0.1285020001232624, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/fold_fan_across.mmd]": 0.07850358309224248, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/fold_stacked_branch.mmd]": 0.10532920924015343, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/funcprofiler_upstream.mmd]": 0.23037391784600914, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/header_nudge.mmd]": 0.016594500048086047, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/header_side_rotated.mmd]": 0.016954956809058785, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/inrow_skip_breeze.mmd]": 0.021094124764204025, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/inter_row_wrap_clearance.mmd]": 0.029904584167525172, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/interchange_lane_reorder.mmd]": 0.020585832884535193, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/junction_entry_align.mmd]": 0.04135241685435176, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/junction_entry_collision.mmd]": 0.02551666717045009, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/junction_entry_reversed_fold.mmd]": 0.03302016784437001, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/junction_fanout_convergence.mmd]": 0.025647249771282077, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/left_entry_up_wrap.mmd]": 0.018918209010735154, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/left_exit_sink_below.mmd]": 0.035558584379032254, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_perp_bottom_exit_perp_entry.mmd]": 0.014033291954547167, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_perp_bottom_exit_side_entry.mmd]": 0.020381083013489842, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry.mmd]": 0.014839750016108155, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd]": 0.01529287570156157, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_perp_top_exit_side_entry.mmd]": 0.010692958952859044, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_to_tb_top_cross_col.mmd]": 0.028680333867669106, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_to_tb_top_drop.mmd]": 0.02475779107771814, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_to_tb_top_drop_two_lines.mmd]": 0.015409083105623722, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_to_tb_top_near_vertical.mmd]": 0.015836834209039807, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_to_tb_top_two_lines.mmd]": 0.017221749760210514, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_top_entry_cross_column.mmd]": 0.010338583029806614, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/lr_top_entry_cross_column_two_line.mmd]": 0.012907833093777299, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_around_below_leftmost.mmd]": 0.02213250007480383, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_bottom_row_bypass.mmd]": 0.05775645817629993, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_leftmost_sink_branch.mmd]": 0.2655696670990437, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_offrow_continuation.mmd]": 0.024369917111471295, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_port_above_approach.mmd]": 0.02324249898083508, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_pullaway.mmd]": 0.043206957867369056, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_right_entry.mmd]": 0.03418695810250938, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_trunk_out_of_range_section.mmd]": 0.030054959934204817, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/merge_trunk_over_low_section.mmd]": 0.03434995794668794, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/mismatched_tracks.mmd]": 0.03557662502862513, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/mixed_bundle_column.mmd]": 0.04024966689758003, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/mixed_port_sides.mmd]": 0.015186623902991414, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/multi_input_convergence.mmd]": 0.014859417220577598, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/multi_line_bundle.mmd]": 0.029166291002184153, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/multicarrier_offrow_exit_climb.mmd]": 0.04134979215450585, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/near_vertical_junction_hook.mmd]": 0.018871041713282466, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/off_track_convergence.mmd]": 0.022927250247448683, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/off_track_convergence_multiline.mmd]": 0.0246930830180645, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/off_track_input_above_consumer.mmd]": 0.09200962586328387, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/parallel_independent.mmd]": 0.019297291757538915, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/peeloff_extra_line_consumer.mmd]": 0.033134167082607746, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/peeloff_riser_respace.mmd]": 0.029082374880090356, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/post_convergence_trunk.mmd]": 0.006806458113715053, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/rail_inter_section.mmd]": 0.010723875369876623, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/rail_offtrack_fan.mmd]": 0.014979291940107942, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/rail_offtrack_io.mmd]": 0.014925374882295728, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/rail_offtrack_plain_io.mmd]": 0.008629125077277422, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/reconverge_reversed_fold.mmd]": 0.07855495787225664, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/right_entry_from_above.mmd]": 0.014771458227187395, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/right_entry_from_above_far.mmd]": 0.021248583681881428, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/right_entry_gap_above_empty_row.mmd]": 0.026941081741824746, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/right_entry_wrap_no_fan.mmd]": 0.02767449989914894, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/rl_entry_runway.mmd]": 0.0206557500641793, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/rnaseq_lite.mmd]": 0.06722504110075533, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/route_around_intervening.mmd]": 0.021285501308739185, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/section_diamond.mmd]": 0.0575264988001436, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/self_crossing_bridge.mmd]": 0.03745625028386712, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/shared_sink_parallel.mmd]": 0.06804666575044394, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/single_section.mmd]": 0.012652334058657289, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/stacked_left_exit_drop.mmd]": 0.01555891684256494, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/stacked_lr_serpentine.mmd]": 0.043101000133901834, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/symmetric_diamond_beside_wide_fan.mmd]": 0.060287792002782226, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_bottom_entry_flow_start.mmd]": 0.008865706855431199, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_bottom_exit_bundle_jog.mmd]": 0.016199500067159534, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_bottom_exit_fork_diamond.mmd]": 0.03000579192303121, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_column_continuation_two_lines.mmd]": 0.014465165790170431, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_convergence_straight_drop.mmd]": 0.019014291698113084, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_internal_diagonal.mmd]": 0.011233042227104306, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_left_exit_step.mmd]": 0.0176069182343781, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_lr_exit_left.mmd]": 0.022076373919844627, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_lr_exit_right.mmd]": 0.019802833907306194, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_passthrough_continuation.mmd]": 0.008201707853004336, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_passthrough_trunk.mmd]": 0.030084874713793397, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_perp_exit_side_neighbour.mmd]": 0.008591040968894958, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_right_entry_stack.mmd]": 0.028618541080504656, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_trunk_through_fan.mmd]": 0.014599749585613608, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/tb_two_line_vert_seam.mmd]": 0.03215237497352064, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/terminal_symmetric_fan.mmd]": 0.029262499883770943, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/terminus_join.mmd]": 0.009537499863654375, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/top_entry_header_clash.mmd]": 0.017037665704265237, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/trunk_through_fan.mmd]": 0.03559745894744992, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/u_turn_fold.mmd]": 0.05935037485323846, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/uneven_diamond.mmd]": 0.016719414619728923, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/upward_bypass.mmd]": 0.06248858291655779, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/variant_calling.mmd]": 0.17621695809066296, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/wide_fan_in.mmd]": 0.028770292177796364, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/wide_fan_out.mmd]": 0.04318812512792647, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/wide_label_fan.mmd]": 0.022104417206719518, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/topologies/wrapped_label_trunk.mmd]": 0.03013824997469783, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/variant_calling.mmd]": 0.038280708715319633, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/variant_calling_tuned.mmd]": 0.051186458906158805, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/variantbenchmarking.mmd]": 0.2046737929340452, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/variantbenchmarking_auto.mmd]": 0.36300179082900286, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[examples/variantprioritization.mmd]": 0.04941020789556205, + "tests/test_trunk_continuation_jog_invariant.py::test_no_trunk_continuation_jog_in_gallery[tests/fixtures/topologies/twoline_fanout_up.mmd]": 0.025424874620512128, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/centered_tracks]": 0.034768542973324656, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/cross_track_interchange]": 0.041090999962762, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/diagonal_labels]": 0.07578174979425967, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/differentialabundance]": 0.1695121261291206, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/differentialabundance_default]": 0.3781724174041301, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/directional_flow]": 0.03130920906551182, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/disconnected_components]": 0.04260104219429195, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/epitopeprediction]": 0.04709912510588765, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/file_icons]": 0.018081207992509007, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/genomeassembly]": 0.1054670000448823, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/genomeassembly_staggered]": 0.11705754068680108, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/genomic_pipeline]": 0.33603524998761714, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/group_labels]": 0.023601458873599768, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/hlatyping]": 0.039651417173445225, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/legend_combo]": 0.020173416007310152, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/legend_logo_placement]": 0.05112883425317705, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/longread_variant_calling]": 0.13173683313652873, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/marker_styles]": 0.03669720911420882, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/off_track_outputs]": 0.02463266672566533, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/rnaseq_auto]": 0.09481866611167789, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/rnaseq_sections]": 0.4834461258724332, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/rnaseq_sections_manual]": 0.7875860421918333, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/simple_pipeline]": 0.009796499041840434, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/tb_file_termini]": 0.025271707912907004, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/variant_calling]": 0.032248207833617926, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/variant_calling_tuned]": 0.06657170690596104, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/variantbenchmarking]": 0.22109762532636523, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/variantbenchmarking_auto]": 0.1949989590793848, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[examples/variantprioritization]": 0.07264329004101455, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/01_minimal]": 0.018577832961454988, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/02_sections]": 0.0376120419241488, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/03_fan_out]": 0.03511900082230568, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/03b_fan_in_merge]": 0.03568716789595783, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/04_directions]": 0.04837499978020787, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/05_file_icons]": 0.024007626110687852, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/05b_multi_icons]": 0.1272657490335405, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/05c_files_icon]": 0.04738033376634121, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/05d_folder_icon]": 0.026322040939703584, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/05f_banner_labels]": 0.019633624935522676, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/06a_without_hidden]": 0.027192583307623863, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[guide/06b_with_hidden]": 0.029660376021638513, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[nextflow/duplicate_processes]": 0.02542949910275638, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[nextflow/flat_pipeline]": 0.013497834093868732, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[nextflow/unquoted_labels]": 0.02397529105655849, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[nextflow/variant_calling]": 0.051773167215287685, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[nextflow/with_subworkflows]": 0.24327966617420316, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/bubble_forced_label_clears_diagonal]": 0.023044625064358115, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/bubble_label_clears_diagonal]": 0.011321749771013856, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/bubble_output_above]": 0.014151460025459528, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/captioned_sibling_outputs]": 0.009759626118466258, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/da_pipeline]": 0.17380299977958202, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/diagonal_single_trunk_off_track]": 0.05968520836904645, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/file_icon_fanin]": 0.03285570768639445, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/font_scale]": 0.025918166153132915, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/genomeassembly_organellar]": 0.08447154215537012, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/icon_caption_wrap]": 0.006702626124024391, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/leaf_file_icon_on_trunk]": 0.009351041866466403, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/multiline_labels]": 0.19623545766808093, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/off_track_output_branched]": 0.01667566690593958, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/off_track_outputs_along_trunk]": 0.03244737605564296, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/rnaseq_sections]": 0.4671511258929968, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/rnaseq_simple]": 0.006652625976130366, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/tb_right_exit_feeder_slots]": 0.02353741694241762, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/trunk_align_matching_bundle]": 0.019235417246818542, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[tests/uneven_diamond]": 0.01351658278144896, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/aligner_row_pinned_continuation]": 0.05028462619520724, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/around_below_ep_col_gt0]": 0.021164667094126344, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/around_section_below]": 0.021238375222310424, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/asymmetric_tree]": 0.04314449988305569, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bottom_row_climb_clear_corridor]": 0.030748292105272412, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/branch_fold_forward]": 0.03683883394114673, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/branch_fold_stability]": 0.05345199885778129, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bt_chain]": 0.009992332896217704, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bt_exit_top_above]": 0.009694123873487115, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bt_exit_top_above_2line]": 0.010344542097300291, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bt_fork]": 0.013675999827682972, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bt_perp_entry_below]": 0.02405533310957253, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bt_to_lr]": 0.011197582818567753, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bt_to_tb]": 0.015021875035017729, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bundle_terminator_continuation]": 0.010989042231813073, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_fan_in_outer_slot]": 0.058986751129850745, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_gap2_rightward_overflow]": 0.04874883289448917, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_label_rake]": 0.019630958791822195, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_label_rake_left]": 0.02099800086580217, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_label_rake_wide]": 0.07023008423857391, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_leftward_far_side_entry]": 0.029404000146314502, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_leftward_overflow]": 0.024194041034206748, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/bypass_v_tight]": 0.04522858280688524, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/clear_channel_target_aware_push]": 0.024102874798700213, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/compact_gap_peer_conflict]": 0.04318579123355448, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/compact_hidden_passthrough]": 0.017150540836155415, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/complex_multipath]": 0.05805708304978907, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/convergence_stacked_sink]": 0.03279608325101435, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/convergent_offrow_exit_climb]": 0.1344829578883946, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/corridor_narrow_gap_fallback]": 0.02338458294980228, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/cross_col_top_entry]": 0.010135958902537823, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/cross_column_perp_drop]": 0.017170581966638565, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/cross_column_perp_drop_far_exit]": 0.010170042049139738, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/cross_row_gap_wrap]": 0.058425418101251125, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/deep_linear]": 0.07766883401200175, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/disjoint_sameline_trunks]": 0.06925325002521276, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/divergent_fanout_split]": 0.02670108270831406, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/dogleg_exempt_distinct]": 0.040253208950161934, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/dogleg_exempt_sameline]": 0.014629332814365625, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/dogleg_twoline_fanout]": 0.0189365828409791, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/exit_corner_offset_dogleg]": 0.03817175002768636, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/fan_bypass_nesting]": 0.07244150131009519, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/fan_in_merge]": 0.047197415959089994, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/fold_double]": 0.13977929181419313, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/fold_fan_across]": 0.11273399996571243, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/fold_stacked_branch]": 0.11462950124405324, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/funcprofiler_upstream]": 0.4683007919229567, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/header_nudge]": 0.016415375052019954, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/header_side_rotated]": 0.017329458380118012, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/inrow_skip_breeze]": 0.008719249628484249, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/inter_row_wrap_clearance]": 0.03099670773372054, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/interchange_lane_reorder]": 0.01336820819415152, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/junction_entry_align]": 0.07753412588499486, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/junction_entry_collision]": 0.03164241602644324, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/junction_entry_reversed_fold]": 0.04529449995607138, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/junction_fanout_convergence]": 0.026439667912200093, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/left_entry_up_wrap]": 0.012102375272661448, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/left_exit_sink_below]": 0.05554979108273983, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_perp_bottom_exit_perp_entry]": 0.019008916337043047, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_perp_bottom_exit_side_entry]": 0.030768625205382705, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_perp_top_exit_perp_entry]": 0.016468082321807742, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.02184087410569191, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_perp_top_exit_side_entry]": 0.014508831780403852, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_to_tb_top_cross_col]": 0.3269274579361081, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_to_tb_top_drop]": 0.011211416916921735, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_to_tb_top_drop_two_lines]": 0.018456499790772796, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_to_tb_top_near_vertical]": 0.02089058398269117, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_to_tb_top_two_lines]": 0.030350999906659126, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_top_entry_cross_column]": 0.01251583406701684, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/lr_top_entry_cross_column_two_line]": 0.010635749902576208, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_around_below_leftmost]": 0.028887833934277296, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_bottom_row_bypass]": 0.035679667722433805, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_leftmost_sink_branch]": 0.02733770781196654, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_offrow_continuation]": 0.01731058326549828, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_port_above_approach]": 0.03200504113920033, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_pullaway]": 0.03840649896301329, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_right_entry]": 0.02786912489682436, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_trunk_out_of_range_section]": 0.0451215417124331, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/merge_trunk_over_low_section]": 0.05013758293353021, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/mismatched_tracks]": 0.03322516707703471, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/mixed_bundle_column]": 0.04829095769673586, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/mixed_port_sides]": 0.019785125041380525, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/multi_input_convergence]": 0.022879624972119927, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/multi_line_bundle]": 0.02943237591534853, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/multicarrier_offrow_exit_climb]": 0.043706415919587016, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/near_vertical_junction_hook]": 0.026555916294455528, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/off_track_convergence]": 0.035927874967455864, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/off_track_convergence_multiline]": 0.02068575005978346, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/off_track_input_above_consumer]": 0.11275316728278995, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/parallel_independent]": 0.03626179089769721, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/peeloff_extra_line_consumer]": 0.03510054084472358, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/peeloff_riser_respace]": 0.040812416234984994, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/post_convergence_trunk]": 0.007680833805352449, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/reconverge_reversed_fold]": 0.43392745894379914, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/right_entry_from_above]": 0.011497207684442401, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/right_entry_from_above_far]": 0.013932541944086552, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/right_entry_gap_above_empty_row]": 0.012726958142593503, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/right_entry_wrap_no_fan]": 0.017948708264157176, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/rl_entry_runway]": 0.026855333242565393, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/rnaseq_lite]": 0.052849499974399805, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/route_around_intervening]": 0.01824708399362862, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/section_diamond]": 0.17243983410298824, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/self_crossing_bridge]": 0.015668958891183138, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/shared_sink_parallel]": 0.0291742910631001, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/single_section]": 0.005121334223076701, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/stacked_left_exit_drop]": 0.008752709021791816, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/stacked_lr_serpentine]": 0.021232540952041745, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/symmetric_diamond_beside_wide_fan]": 0.03505483316257596, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_bottom_entry_flow_start]": 0.01896820915862918, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_bottom_exit_bundle_jog]": 0.030087958090007305, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_bottom_exit_fork_diamond]": 0.030037958873435855, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_column_continuation_two_lines]": 0.013165832962840796, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_convergence_straight_drop]": 0.009201374603435397, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_internal_diagonal]": 0.02223712531849742, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_left_exit_step]": 0.02195570687763393, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_lr_exit_left]": 0.016250332817435265, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_lr_exit_right]": 0.01917995815165341, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_passthrough_continuation]": 0.01615020981989801, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_passthrough_trunk]": 0.015048458008095622, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_perp_exit_side_neighbour]": 0.020612708060070872, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_right_entry_stack]": 0.025861458154395223, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_trunk_through_fan]": 0.014657250139862299, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/tb_two_line_vert_seam]": 0.010349082760512829, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/terminal_symmetric_fan]": 0.01752766710706055, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/terminus_join]": 0.00891283294185996, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/top_entry_header_clash]": 0.015054207993671298, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/trunk_through_fan]": 0.02997937612235546, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/u_turn_fold]": 0.059886875096708536, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/uneven_diamond]": 0.007275417214259505, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/upward_bypass]": 0.06516491807997227, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/variant_calling]": 0.19213662506081164, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/wide_fan_in]": 0.023640625877305865, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/wide_fan_out]": 0.02420245879329741, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/wide_label_fan]": 0.03064141795039177, + "tests/test_trunk_slot.py::test_every_inter_section_trunk_is_declared[topologies/wrapped_label_trunk]": 0.020609291037544608, + "tests/test_trunk_slot.py::test_guard_flags_an_undeclared_trunk": 0.0002049580216407776, + "tests/test_trunk_slot.py::test_handlers_emit_trunk_slots[NOTSET]": 0.00015195808373391628, + "tests/test_trunk_slot.py::test_normalize_bypass_trunks_is_renamed": 0.00020575104281306267, + "tests/test_trunk_slot.py::test_routed_path_trunk_slot_defaults_to_none": 0.0003262918908149004, + "tests/test_trunk_slot.py::test_trunk_slot_carries_gap_identity": 0.0015896239783614874, + "tests/test_upright_spacing_frame.py::test_tb_and_bt_reserve_identical_label_extent": 0.0029146664310246706, + "tests/test_upright_spacing_frame.py::test_vertical_flow_reserves_lane_axis_for_side_labels[BT]": 0.0002258338499814272, + "tests/test_upright_spacing_frame.py::test_vertical_flow_reserves_lane_axis_for_side_labels[TB]": 0.00025795772671699524, + "tests/test_upright_spacing_frame.py::test_vertical_flow_terminus_icons_overhang_on_flow_axis[BT]": 0.0014605829492211342, + "tests/test_upright_spacing_frame.py::test_vertical_flow_terminus_icons_overhang_on_flow_axis[TB]": 0.0013302499428391457, + "tests/test_validate.py::test_clean_graph_has_no_issues": 0.0006667091511189938, + "tests/test_validate.py::test_default_line_edge_is_not_flagged": 0.00026741763576865196, + "tests/test_validate.py::test_issues_are_frozen": 0.0002020830288529396, + "tests/test_validate.py::test_multiple_findings_are_all_collected": 0.00023270887322723866, + "tests/test_validate.py::test_section_referencing_unknown_station_is_an_error": 0.0001922082155942917, + "tests/test_validate.py::test_undefined_line_reference_is_an_error": 0.0001990830060094595, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/centered_tracks]": 0.02324204216711223, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/cross_track_interchange]": 0.05537208332680166, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/diagonal_labels]": 0.05740166688337922, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/differentialabundance]": 0.18017333303578198, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/differentialabundance_default]": 0.1935864989645779, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/directional_flow]": 0.02599291573278606, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/disconnected_components]": 0.024879208765923977, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/epitopeprediction]": 0.06862887507304549, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/file_icons]": 0.023162001045420766, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/genomeassembly]": 0.06792304175905883, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/genomeassembly_staggered]": 0.06246633199043572, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/genomic_pipeline]": 0.2967168332543224, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/group_labels]": 0.024441707879304886, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/hlatyping]": 0.043331417022272944, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/legend_combo]": 0.021097458200529218, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/legend_logo_placement]": 0.05028162500821054, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/longread_variant_calling]": 0.11259279074147344, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/marker_styles]": 0.027474998962134123, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/off_track_outputs]": 0.015672666020691395, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/rnaseq_auto]": 0.11278816591948271, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/rnaseq_sections]": 0.5776646251324564, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/rnaseq_sections_manual]": 0.7296845831442624, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/simple_pipeline]": 0.019113208167254925, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/tb_file_termini]": 0.030100624775514007, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/variant_calling]": 0.027881083777174354, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/variant_calling_tuned]": 0.05991604086011648, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/variantbenchmarking]": 0.491053958889097, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/variantbenchmarking_auto]": 0.35626516677439213, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[examples/variantprioritization]": 0.05941687524318695, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/01_minimal]": 0.010797542054206133, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/02_sections]": 0.01524699991568923, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/03_fan_out]": 0.03393941675312817, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/03b_fan_in_merge]": 0.0387962912209332, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/04_directions]": 0.043106250232085586, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/05_file_icons]": 0.025394126307219267, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/05b_multi_icons]": 0.0390277907717973, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/05c_files_icon]": 0.02184991631656885, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/05d_folder_icon]": 0.018126041628420353, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/05f_banner_labels]": 0.019172457745298743, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/06a_without_hidden]": 0.037828748812898993, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[guide/06b_with_hidden]": 0.025717790005728602, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[nextflow/duplicate_processes]": 0.01215487509034574, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[nextflow/flat_pipeline]": 0.013329457957297564, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[nextflow/unquoted_labels]": 0.01089829090051353, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[nextflow/variant_calling]": 0.08102979185059667, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[nextflow/with_subworkflows]": 0.04241562495008111, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/bubble_forced_label_clears_diagonal]": 0.01557983411476016, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/bubble_label_clears_diagonal]": 0.023866998963057995, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/bubble_output_above]": 0.013356290990486741, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/captioned_sibling_outputs]": 0.015236124861985445, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/da_pipeline]": 0.196213458199054, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/diagonal_single_trunk_off_track]": 0.05196887580677867, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/file_icon_fanin]": 0.03256287379190326, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/font_scale]": 0.013608583016321063, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/genomeassembly_organellar]": 0.13880270905792713, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/icon_caption_wrap]": 0.009177666855975986, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/leaf_file_icon_on_trunk]": 0.01639704219996929, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/multiline_labels]": 0.017753873951733112, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/off_track_output_branched]": 0.017117584124207497, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/off_track_outputs_along_trunk]": 0.01943200104869902, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/rnaseq_sections]": 0.6114817091729492, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/rnaseq_simple]": 0.0180221248883754, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/tb_right_exit_feeder_slots]": 0.02824674895964563, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/trunk_align_matching_bundle]": 0.01934024877846241, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[tests/uneven_diamond]": 0.009971042163670063, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/aligner_row_pinned_continuation]": 0.05195216601714492, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/around_below_ep_col_gt0]": 0.02141124987974763, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/around_section_below]": 0.02315983292646706, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/asymmetric_tree]": 0.04461145726963878, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bottom_row_climb_clear_corridor]": 0.03502487461082637, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/branch_fold_forward]": 0.056909416103735566, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/branch_fold_stability]": 0.030950749292969704, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bt_chain]": 0.005784500855952501, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bt_exit_top_above]": 0.012278291396796703, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bt_exit_top_above_2line]": 0.01958595821633935, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bt_fork]": 0.015277582919225097, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bt_perp_entry_below]": 0.016890292055904865, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bt_to_lr]": 0.023163291858509183, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bt_to_tb]": 0.020853999070823193, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bundle_terminator_continuation]": 0.00969087379053235, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_fan_in_outer_slot]": 0.06971954205073416, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_gap2_rightward_overflow]": 0.03439174988307059, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_label_rake]": 0.028777583967894316, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_label_rake_left]": 0.0362792513333261, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_label_rake_wide]": 0.07911924901418388, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_leftward_far_side_entry]": 0.04877929319627583, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_leftward_overflow]": 0.031163749750703573, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/bypass_v_tight]": 0.04532174998894334, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/clear_channel_target_aware_push]": 0.04077387508004904, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/compact_gap_peer_conflict]": 0.26355212600901723, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/compact_hidden_passthrough]": 0.016769375186413527, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/complex_multipath]": 0.065763209015131, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/convergence_stacked_sink]": 0.051750709069892764, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/convergent_offrow_exit_climb]": 0.14395454293116927, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/corridor_narrow_gap_fallback]": 0.03284483402967453, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/cross_col_top_entry]": 0.0229026242159307, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/cross_column_perp_drop]": 0.02815845888108015, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/cross_column_perp_drop_far_exit]": 0.01657579210586846, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/cross_row_gap_wrap]": 0.03796579199843109, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/deep_linear]": 0.08285208279266953, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/disjoint_sameline_trunks]": 0.03801004239358008, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/divergent_fanout_split]": 0.018694665981456637, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/dogleg_exempt_distinct]": 0.022194958059117198, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/dogleg_exempt_sameline]": 0.02366237505339086, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/dogleg_twoline_fanout]": 0.024812084157019854, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/exit_corner_offset_dogleg]": 0.031081334222108126, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/fan_bypass_nesting]": 0.06970841600559652, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/fan_in_merge]": 0.043743624817579985, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/fold_double]": 0.15709345904178917, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/fold_fan_across]": 0.121920082019642, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/fold_stacked_branch]": 0.10760195879265666, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/funcprofiler_upstream]": 0.274174332851544, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/header_nudge]": 0.01921970839612186, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/header_side_rotated]": 0.020752665121108294, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/inrow_skip_breeze]": 0.012257748981937766, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/inter_row_wrap_clearance]": 0.019082834012806416, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/interchange_lane_reorder]": 0.01762583269737661, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/junction_entry_align]": 0.07901133387349546, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/junction_entry_collision]": 0.05468841618858278, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/junction_entry_reversed_fold]": 0.05484054214321077, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/junction_fanout_convergence]": 0.024808625923469663, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/left_entry_up_wrap]": 0.03497233404777944, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/left_exit_sink_below]": 0.03516824985854328, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_perp_bottom_exit_perp_entry]": 0.03373404196463525, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_perp_bottom_exit_side_entry]": 0.02848320920020342, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_perp_top_exit_perp_entry]": 0.023378374986350536, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.022759499959647655, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_perp_top_exit_side_entry]": 0.016315167071297765, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_to_tb_top_cross_col]": 0.030853708973154426, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_to_tb_top_drop]": 0.015674708876758814, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_to_tb_top_drop_two_lines]": 0.0198166249319911, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_to_tb_top_near_vertical]": 0.021475417306646705, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_to_tb_top_two_lines]": 0.018555167131125927, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_top_entry_cross_column]": 0.022604834055528045, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/lr_top_entry_cross_column_two_line]": 0.015603125095367432, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_around_below_leftmost]": 0.034218208864331245, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_bottom_row_bypass]": 0.03567566582933068, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_leftmost_sink_branch]": 0.046648625284433365, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_offrow_continuation]": 0.031140541890636086, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_port_above_approach]": 0.029642249224707484, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_pullaway]": 0.023872708901762962, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_right_entry]": 0.03121141716837883, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_trunk_out_of_range_section]": 0.03874004213139415, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/merge_trunk_over_low_section]": 0.044858792098239064, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/mismatched_tracks]": 0.036224041832610965, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/mixed_bundle_column]": 0.04021408315747976, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/mixed_port_sides]": 0.02264724997803569, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/multi_input_convergence]": 0.021505625918507576, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/multi_line_bundle]": 0.04079779121093452, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/multicarrier_offrow_exit_climb]": 0.04705312382429838, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/near_vertical_junction_hook]": 0.017924665939062834, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/off_track_convergence]": 0.032316458877176046, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/off_track_convergence_multiline]": 0.032510375836864114, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/off_track_input_above_consumer]": 0.07867170893587172, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/parallel_independent]": 0.035286166006699204, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/peeloff_extra_line_consumer]": 0.04273979179561138, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/peeloff_riser_respace]": 0.32465283293277025, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/post_convergence_trunk]": 0.010658582905307412, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/reconverge_reversed_fold]": 0.11295637488365173, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/right_entry_from_above]": 0.01576741598546505, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/right_entry_from_above_far]": 0.00992912519723177, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/right_entry_gap_above_empty_row]": 0.02283712523058057, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/right_entry_wrap_no_fan]": 0.015312624862417579, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/rl_entry_runway]": 0.018031748943030834, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/rnaseq_lite]": 0.06459412607364357, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/route_around_intervening]": 0.032802291214466095, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/section_diamond]": 0.0372960832901299, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/self_crossing_bridge]": 0.025482831988483667, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/shared_sink_parallel]": 0.07205391675233841, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/single_section]": 0.020624791970476508, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/stacked_left_exit_drop]": 0.023904334055259824, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/stacked_lr_serpentine]": 0.05392941785976291, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/symmetric_diamond_beside_wide_fan]": 0.03209587489254773, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_bottom_entry_flow_start]": 0.00851241685450077, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_bottom_exit_bundle_jog]": 0.0375349591486156, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_bottom_exit_fork_diamond]": 0.019787791883572936, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_column_continuation_two_lines]": 0.010215457994490862, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_convergence_straight_drop]": 0.007412167964503169, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_internal_diagonal]": 0.03955695824697614, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_left_exit_step]": 0.025394874857738614, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_lr_exit_left]": 0.014476667158305645, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_lr_exit_right]": 0.016011083032935858, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_passthrough_continuation]": 0.009198166895657778, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_passthrough_trunk]": 0.01689629117026925, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_perp_exit_side_neighbour]": 0.032628708984702826, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_right_entry_stack]": 0.32482170802541077, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_trunk_through_fan]": 0.02415745914913714, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/tb_two_line_vert_seam]": 0.01268262485973537, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/terminal_symmetric_fan]": 0.01831629197113216, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/terminus_join]": 0.008184165693819523, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/top_entry_header_clash]": 0.021520167123526335, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/trunk_through_fan]": 0.026248833164572716, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/u_turn_fold]": 0.0912474999204278, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/uneven_diamond]": 0.007868542335927486, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/upward_bypass]": 0.07815737510100007, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/variant_calling]": 0.204970708116889, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/wide_fan_in]": 0.035091164987534285, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/wide_fan_out]": 0.05466579087078571, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/wide_label_fan]": 0.010858750203624368, + "tests/test_validate_flag_idempotent.py::test_render_layout_chokepoint_is_observational[topologies/wrapped_label_trunk]": 0.024656376102939248, + "tests/test_validate_flag_idempotent.py::test_shared_column_survives_validate[variant_calling]": 0.135227917926386, + "tests/test_validate_flag_idempotent.py::test_shared_column_survives_validate[variant_calling_tuned]": 0.12682983302511275, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/centered_tracks]": 0.049699582858011127, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/cross_track_interchange]": 0.09628554061055183, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/diagonal_labels]": 0.17219212604686618, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/differentialabundance]": 0.5627938341349363, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/differentialabundance_default]": 0.6714328329544514, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/directional_flow]": 0.05359599902294576, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/disconnected_components]": 0.10602012509480119, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/epitopeprediction]": 0.5451496671885252, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/file_icons]": 0.07483945810236037, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/genomeassembly]": 0.2172767089214176, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/genomeassembly_staggered]": 0.19875425030477345, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/genomic_pipeline]": 1.062942085089162, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/group_labels]": 0.2098863327410072, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/hlatyping]": 0.17923191701993346, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/legend_combo]": 0.07968929223716259, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/legend_logo_placement]": 0.1496959172654897, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/longread_variant_calling]": 0.8588811671361327, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/marker_styles]": 0.062448541168123484, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/off_track_outputs]": 0.06012829206883907, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/rnaseq_auto]": 0.3442453327588737, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/rnaseq_sections]": 1.4373925828840584, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/rnaseq_sections_manual]": 1.6179987078066915, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/simple_pipeline]": 0.023614540928974748, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/tb_file_termini]": 0.1217732080258429, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/variant_calling]": 0.11816887510940433, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/variant_calling_tuned]": 0.13865450001321733, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/variantbenchmarking]": 0.9776356681250036, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/variantbenchmarking_auto]": 0.6846201680600643, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[examples/variantprioritization]": 0.15545925102196634, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/01_minimal]": 0.0418889163993299, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/02_sections]": 0.06775362486951053, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/03_fan_out]": 0.10888649988919497, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/03b_fan_in_merge]": 0.10888529103249311, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/04_directions]": 0.14593983255326748, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/05_file_icons]": 0.05855737579986453, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/05b_multi_icons]": 0.054794250056147575, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/05c_files_icon]": 0.06632841611281037, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/05d_folder_icon]": 0.06949458294548094, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/05f_banner_labels]": 0.07050637528300285, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/06a_without_hidden]": 0.07950845919549465, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[guide/06b_with_hidden]": 0.0852987919934094, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[nextflow/duplicate_processes]": 0.03018800006248057, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[nextflow/flat_pipeline]": 0.026911376044154167, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[nextflow/unquoted_labels]": 0.04904553992673755, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[nextflow/variant_calling]": 0.1264422917738557, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[nextflow/with_subworkflows]": 0.08287246013060212, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/bubble_forced_label_clears_diagonal]": 0.03716670908033848, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/bubble_label_clears_diagonal]": 0.05483779008500278, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/bubble_output_above]": 0.03820729162544012, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/captioned_sibling_outputs]": 0.027251625899225473, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/da_pipeline]": 0.5777229161467403, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/diagonal_single_trunk_off_track]": 0.4083650838583708, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/file_icon_fanin]": 0.0928936239797622, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/font_scale]": 0.03986349981278181, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/genomeassembly_organellar]": 0.3112512093503028, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/icon_caption_wrap]": 0.014816000824794173, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/leaf_file_icon_on_trunk]": 0.04454533290117979, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/multiline_labels]": 0.0584969581104815, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/off_track_output_branched]": 0.04151024995371699, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/off_track_outputs_along_trunk]": 0.04895283211953938, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/rnaseq_sections]": 1.1593892921227962, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/rnaseq_simple]": 0.02504025027155876, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/tb_right_exit_feeder_slots]": 0.09761754190549254, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/trunk_align_matching_bundle]": 0.06131979217752814, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[tests/uneven_diamond]": 0.049786708783358335, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/aligner_row_pinned_continuation]": 0.2928451260086149, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/around_below_ep_col_gt0]": 0.07937395898625255, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/around_section_below]": 0.07565079210326076, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/asymmetric_tree]": 0.12566762487404048, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bottom_row_climb_clear_corridor]": 0.05998987518250942, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/branch_fold_forward]": 0.11405699979513884, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/branch_fold_stability]": 0.09919670782983303, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bt_chain]": 0.01663658395409584, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bt_exit_top_above]": 0.033839458134025335, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bt_exit_top_above_2line]": 0.042601335095241666, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bt_fork]": 0.023827958153560758, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bt_perp_entry_below]": 0.04305133409798145, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bt_to_lr]": 0.0580982081592083, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bt_to_tb]": 0.08622491615824401, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bundle_terminator_continuation]": 0.02727825124748051, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_fan_in_outer_slot]": 0.25671933428384364, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_gap2_rightward_overflow]": 0.16195620805956423, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_label_rake]": 0.08015912468545139, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_label_rake_left]": 0.07622104184702039, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_label_rake_wide]": 0.2026793328113854, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_leftward_far_side_entry]": 0.09782158304005861, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_leftward_overflow]": 0.09683362464420497, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/bypass_v_tight]": 0.09612004063092172, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/clear_channel_target_aware_push]": 0.08262537629343569, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/compact_gap_peer_conflict]": 0.07321745902299881, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/compact_hidden_passthrough]": 0.04598758276551962, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/complex_multipath]": 0.15635824971832335, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/convergence_stacked_sink]": 0.13596658315509558, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/convergent_offrow_exit_climb]": 0.4732429590076208, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/corridor_narrow_gap_fallback]": 0.1499415000434965, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/cross_col_top_entry]": 0.06182962516322732, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/cross_column_perp_drop]": 0.06732479110360146, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/cross_column_perp_drop_far_exit]": 0.02957825013436377, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/cross_row_gap_wrap]": 0.0916711250320077, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/deep_linear]": 0.14973116689361632, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/disjoint_sameline_trunks]": 0.1507548748049885, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/divergent_fanout_split]": 0.06258812407031655, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/dogleg_exempt_distinct]": 0.12072808179073036, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/dogleg_exempt_sameline]": 0.13346108281984925, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/dogleg_twoline_fanout]": 0.08504120795987546, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/exit_corner_offset_dogleg]": 0.1055417088791728, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/fan_bypass_nesting]": 0.20146024972200394, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/fan_in_merge]": 0.18684641714207828, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/fold_double]": 0.33895220793783665, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/fold_fan_across]": 0.4225367500912398, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/fold_stacked_branch]": 0.38033574912697077, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/funcprofiler_upstream]": 1.0886959170456976, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/header_nudge]": 0.05624000076204538, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/header_side_rotated]": 0.047818498918786645, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/inrow_skip_breeze]": 0.04785312479361892, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/inter_row_wrap_clearance]": 0.07547845784574747, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/interchange_lane_reorder]": 0.038881667191162705, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/junction_entry_align]": 0.11223433306440711, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/junction_entry_collision]": 0.09297750005498528, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/junction_entry_reversed_fold]": 0.38160408311523497, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/junction_fanout_convergence]": 0.15621825004927814, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/left_entry_up_wrap]": 0.04712308314628899, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/left_exit_sink_below]": 0.0923808328807354, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_perp_bottom_exit_perp_entry]": 0.061082832980901, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_perp_bottom_exit_side_entry]": 0.04460145835764706, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_perp_top_exit_perp_entry]": 0.11391991609707475, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_perp_top_exit_perp_entry_diverging]": 0.06062316684983671, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_perp_top_exit_side_entry]": 0.06486345897428691, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_to_tb_top_cross_col]": 0.09364558407105505, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_to_tb_top_drop]": 0.05678750085644424, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_to_tb_top_drop_two_lines]": 0.08584670792333782, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_to_tb_top_near_vertical]": 0.06347262510098517, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_to_tb_top_two_lines]": 0.053835042752325535, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_top_entry_cross_column]": 0.02375820791348815, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/lr_top_entry_cross_column_two_line]": 0.07003083312883973, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_around_below_leftmost]": 0.06818325002677739, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_bottom_row_bypass]": 0.12771291588433087, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_leftmost_sink_branch]": 0.13269916689023376, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_offrow_continuation]": 0.10128225013613701, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_port_above_approach]": 0.10941145801916718, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_pullaway]": 0.10636979201808572, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_right_entry]": 0.09626579191535711, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_trunk_out_of_range_section]": 0.201128417160362, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/merge_trunk_over_low_section]": 0.13452366599813104, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/mismatched_tracks]": 0.07991487579420209, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/mixed_bundle_column]": 0.15440462389960885, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/mixed_port_sides]": 0.057820707093924284, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/multi_input_convergence]": 0.14793116599321365, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/multi_line_bundle]": 0.14703662414103746, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/multicarrier_offrow_exit_climb]": 0.10184333426877856, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/near_vertical_junction_hook]": 0.09577220818027854, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/off_track_convergence]": 0.07070770766586065, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/off_track_convergence_multiline]": 0.1017199158668518, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/off_track_input_above_consumer]": 0.375266166171059, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/parallel_independent]": 0.0820432510226965, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/peeloff_extra_line_consumer]": 0.14964000112377107, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/peeloff_riser_respace]": 0.11134741711430252, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/post_convergence_trunk]": 0.030632207868620753, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/reconverge_reversed_fold]": 0.5080637489445508, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/right_entry_from_above]": 0.04069387586787343, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/right_entry_from_above_far]": 0.04061208409257233, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/right_entry_gap_above_empty_row]": 0.06002708384767175, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/right_entry_wrap_no_fan]": 0.03183662495575845, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/rl_entry_runway]": 0.12176304101012647, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/rnaseq_lite]": 0.2928893342614174, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/route_around_intervening]": 0.10872604208998382, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/section_diamond]": 0.07725933310575783, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/self_crossing_bridge]": 0.08353829104453325, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/shared_sink_parallel]": 0.16941658221185207, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/single_section]": 0.032204624731093645, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/stacked_left_exit_drop]": 0.04605629201978445, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/stacked_lr_serpentine]": 0.09088458400219679, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/symmetric_diamond_beside_wide_fan]": 0.17306220810860395, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_bottom_entry_flow_start]": 0.06647029099985957, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_bottom_exit_bundle_jog]": 0.08337387512437999, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_bottom_exit_fork_diamond]": 0.07282095775008202, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_column_continuation_two_lines]": 0.04022149997763336, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_convergence_straight_drop]": 0.04388450016267598, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_internal_diagonal]": 0.05044054216705263, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_left_exit_step]": 0.3816611657384783, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_lr_exit_left]": 0.0585666683036834, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_lr_exit_right]": 0.12166362581774592, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_passthrough_continuation]": 0.03489216580055654, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_passthrough_trunk]": 0.07956600026227534, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_perp_exit_side_neighbour]": 0.05327949998900294, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_right_entry_stack]": 0.0692264570388943, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_trunk_through_fan]": 0.03476179135031998, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/tb_two_line_vert_seam]": 0.09362966800108552, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/terminal_symmetric_fan]": 0.05442862515337765, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/terminus_join]": 0.013757124077528715, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/top_entry_header_clash]": 0.03547512483783066, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/trunk_through_fan]": 0.0878978748805821, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/u_turn_fold]": 0.47763633308932185, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/uneven_diamond]": 0.04151679086498916, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/upward_bypass]": 0.197007373906672, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/variant_calling]": 0.49758116668090224, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/wide_fan_in]": 0.09260766697116196, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/wide_fan_out]": 0.09497337485663593, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/wide_label_fan]": 0.057290040189400315, + "tests/test_validate_flag_idempotent.py::test_validate_flag_does_not_change_geometry[topologies/wrapped_label_trunk]": 0.02588058402761817 +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..eae9897eb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,460 @@ +# Changelog + +All notable changes to nf-metro are documented here. + +The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +nf-metro uses [semantic versioning](https://semver.org/spec/v2.0.0.html) from +1.0.0 onwards. The CLI, the `.mmd` directive surface, and the embed contract +(the `data-*` attributes, driver API, and manifest schema, versioned by +`DRIVER_CONTRACT_VERSION` and `MANIFEST_SCHEMA_VERSION`) are the public API. The +Python modules are not a semver-stable public API. + +## [Unreleased] — 1.0.0 + +418 commits since 0.7.2, touching every layer of the stack. Existing `.mmd` +files render with no changes unless you opt in to a new rendering feature. + +### New commands and CLI flags + +- **`nf-metro serve` / `nf-metro serve-multi`** — live-progress overlay: a + metro map lights up in real time as a Nextflow pipeline runs, driven by weblog + events over SSE. `serve` is a single-map one-command mode (auto-stop on + pipeline exit); `serve-multi` is a persistent multi-run dashboard. +- **`nf-metro check-mapping`** — lints a `%%metro process:` mapping against the + real process graph and reports unmapped or misspelled names. +- **`nf-metro explain`** — explains the rule behind each inferred layout + decision for a `.mmd` file (direction inference, section order, port + placement). +- **`nf-metro embed-script`** — prints the versioned embed driver JS to stdout + or writes it to `-o ` for use on host pages. +- **`nf-metro render --format html`** — interactive HTML output with pan/zoom, + animated line highlighting, and the data manifest wired to the overlay. (The + basic HTML output existed since 0.7.0; this release stabilises the embed + contract and adds `--bare` / `--responsive` embedding modes.) +- **`nf-metro validate --with-layout` / `--strict`** — layered validation: the + base command checks authoring, `--with-layout` runs the full layout pipeline + and reports any guard violations, `--strict` turns violations into hard errors. +- **`nf-metro render --validate`** / **`nf-metro validate-svg --geometry`** — + post-render geometry check reads the drawn SVG to catch label strikes, marker + crossings, and offset-pitch collapse. +- **`--directional` / `--no-directional`** — draw open `>` chevrons along each + route pointing in the flow direction (source to target). Off by default. +- **`--bare`** — omit the title block and outer padding for tight embedding in + docs pages or apps. +- **`--responsive`** — emit `viewBox` only (no fixed `width`/`height`) for + fluid SVG embedding. +- **`--embed-font`** — inline Inter as a base64 `@font-face` so the SVG renders + identically on any host without a font CDN. +- **`--font-paths`** — convert all text to paths for pixel-perfect PDF/PNG + export. +- **`--no-chrome-css`** — bake concrete colors (disabling CSS custom property + overrides) for rasterisation pipelines like cairosvg. +- **`--theme seqera`** — Seqera Platform visual theme. + +### New `%%metro` directives + +- **`%%metro process: | `** — tie a station to the Nextflow + process(es) it represents for live-progress mode. The regex matches the + fully-qualified process name; repeat to attach several patterns to one + station. Pure metadata — never affects the rendered map. +- **`%%metro auto_process: true`** (and `--auto-process`) — give every station + with no explicit `process:` directive its own id as a default process + pattern, anchored to the final segment of the process name, so a map whose + station ids already name their processes lights up live with no per-station + mapping. Opt-in; explicit directives override. +- **`%%metro process_scope: `** (and `--process-scope`) — factor out the + fully-qualified-name prefix shared by a pipeline's processes (e.g. + `NFCORE_RNASEQ:RNASEQ`); each `process:` value is then the tail under that + scope, matched literally and tolerant of intermediate subworkflow nesting. +- **`%%metro directional: true`** — graph-wide opt-in for flow direction + chevrons (mirrors `--directional`). +- **`%%metro marker: | , `** — override a station's + marker shape (`circle`, `square`, `pill`) and fill (`open`, `solid`, or any + literal color). Opt-in; unmarked diagrams render byte-identically. +- **`%%metro marker_legend:`** — add a marker shape/fill key below the line + legend. +- **`%%metro group: |

+
+ +
+
+
+
+ + + + + +``` + +--- + +## Versioning + +Both the manifest schema and the driver contract are versioned. The Python +constants are: + +```python +from nf_metro.manifest import MANIFEST_SCHEMA_VERSION # e.g. "1.0" +from nf_metro.render.driver import DRIVER_CONTRACT_VERSION # e.g. "1.0" +``` + +The schema version follows `major.minor` semantics: the minor part increments +for additive (backward-compatible) changes; the major part increments for +breaking changes. Consumers must ignore unknown fields (additive tolerance). + +This surface is stable as of nf-metro 1.0: within a major version the contract +only grows in backward-compatible ways. Pin to a specific nf-metro release only +if you depend on the exact bytes of the output. diff --git a/docs/embedding.md b/docs/embedding.md new file mode 100644 index 000000000..f47dcbd6f --- /dev/null +++ b/docs/embedding.md @@ -0,0 +1,299 @@ +--- +title: "Embedding guide" +description: How to embed nf-metro SVG maps in host applications — sizing, theming, and driving maps at runtime. +--- + +:::note[Stable as of nf-metro 1.0] +The embedding surface (the `--nfm-*` properties, the `data-*` contract, and +the manifest schema) is a public, versioned surface. The manifest schema +version (`MANIFEST_SCHEMA_VERSION`) and driver contract version +(`DRIVER_CONTRACT_VERSION`) are both `1.0` and change under `major.minor` +semantics; see [Versioning and stability](#versioning-and-stability) below. +::: + +This guide is for someone putting a rendered nf-metro map into **their own** +page or application: a docs site, an internal dashboard, a pipeline run viewer. +You do not need to read `src/` to follow it. It covers how to produce an +embed-friendly file, how to size and theme it from the host page, and how to +drive it from live state (lighting up nodes as a job runs). + +:::tip[Just want a picture?] +Skip straight to [Static embed](#a-static-embed). If you want a panel that reacts to a running pipeline, read on to [Interactive and progress embeds](#interactive-and-progress-embeds). +::: + +## Choosing an output + +nf-metro renders two shapes, and the right one depends on what the host needs. + +| You want | Use | Why | +| ----------------------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------- | +| A static picture (thumbnail, README, slide) | `render` → **SVG** | One self-contained file; scales crisply; no scripts. | +| A live, interactive panel (pan/zoom, line filtering, hover) | `render --format html` | A self-contained page with the driver and styling already wired. | +| A progress overlay driven by your own app | **SVG** + the [manifest](/nf-metro/manifest/) | You read the embedded manifest and draw your own status layer. | + +The SVG carries a machine-readable [manifest](/nf-metro/manifest/) and a stable +[`data-*` contract](/nf-metro/embed/) either way, so a static embed can later become an +interactive one without re-rendering. + +## Render options for embedding + +These flags shape the SVG for life inside someone else's page. They apply to +`--format svg`; the interactive HTML page already handles sizing, scoping, and +chrome itself (see [Interactive and progress embeds](#interactive-and-progress-embeds)). + +### Responsive sizing - `--responsive` + +By default the `` carries fixed `width`/`height` attributes. With +`--responsive` it emits **only** a `viewBox` (plus `preserveAspectRatio`), so +the host sizes it with CSS: + +```bash +nf-metro render pipeline.mmd -o pipeline.svg --responsive +``` + +```css +.metro-map svg { + width: 100%; + height: auto; +} +``` + +Use this for any fluid layout. The `viewBox` stays `0 0 `, so +overlays built from the manifest still line up (see +[Progress overlays](#progress-overlays)). + +### Font portability - `--embed-font` / `--text-to-paths` + +By default the SVG references a system font family, which renders differently +(or falls back) on a host without that font. Two flags make it self-contained: + +| Flag | What it does | Keeps selectable text? | Trade-off | +| ----------------- | --------------------------------------------------------- | ----------------------------- | ----------------------------------------------------- | +| `--embed-font` | Inlines a subset of Inter as a base64 `@font-face` block. | Yes (and `data-*` on labels). | Larger file. | +| `--text-to-paths` | Converts every glyph to a vector ``. | No. | Smallest dependency surface; needs `fonttools[woff]`. | + +```bash +nf-metro render pipeline.mmd -o pipeline.svg --embed-font # portable, still selectable +nf-metro render pipeline.mmd -o pipeline.svg --text-to-paths # zero font dependency +``` + +Prefer `--embed-font` when you want labels to stay selectable/searchable; +`--text-to-paths` when the consumer is a strict renderer or you need pixel +fidelity with no font handling at all. + +### Bare fragment - `--bare` + +`--bare` drops the title and the outer right padding so the canvas hugs the +content, for a host that supplies its own frame and heading: + +```bash +nf-metro render pipeline.mmd -o pipeline.svg --bare +``` + +The `viewBox` origin stays at `0 0` and coordinates stay absolute, so the +[manifest](/nf-metro/manifest/) and any overlay still align. The attribution watermark +is **kept** in bare mode (see [Attribution](#attribution)). + +### Theming from the host - `--nfm-*` properties + +Chrome colors (background, title, labels, section boxes, legend) are emitted as +CSS custom properties with the theme color as the fallback, e.g. +`fill: var(--nfm-bg, #2b2b2b)`. A host recolors the map **without re-rendering** +by setting these on a wrapping element: + +```css +.metro-map { + --nfm-bg: #ffffff; + --nfm-title-color: #222; + --nfm-label-color: #333; + --nfm-section-fill: #f4f4f4; + --nfm-section-stroke: #ddd; + --nfm-section-label-color: #555; + --nfm-legend-bg: #fafafa; + --nfm-legend-text-color: #333; +} +``` + +| Property | Recolors | +| --------------------------------------------- | ------------------------------ | +| `--nfm-bg` | Background rectangle | +| `--nfm-title-color` | Title text | +| `--nfm-label-color` | Station labels | +| `--nfm-section-fill` / `--nfm-section-stroke` | Section box fill / border | +| `--nfm-section-label-color` | Section names and group labels | +| `--nfm-legend-bg` / `--nfm-legend-text-color` | Legend background / text | + +Line and route colors are **not** recolorable - they carry meaning, so they +stay baked as presentation attributes. + +### Multiple maps on one page - `--svg-class-prefix` + +Two inline SVGs on the same page share class names (`nf-metro-station`, …), +so host CSS or the dark-mode block from one can bleed into the other. Give each +a distinct prefix: + +```bash +nf-metro render a.mmd -o a.svg --svg-class-prefix mapA +nf-metro render b.mmd -o b.svg --svg-class-prefix mapB +``` + +`mapA-nf-metro-station`, `mapB-nf-metro-station`, and so on stay independent. +`data-*` attributes and the manifest element id are never prefixed, so the +[contract](/nf-metro/embed/) is unchanged. + +### Dark-mode opt-out - `--no-dark-mode-css` + +When a theme has a transparent background, the SVG injects a +`@media (prefers-color-scheme: dark)` block so labels stay readable on a dark +host page. If your host manages its own theme and that media query fights it, +suppress it: + +```bash +nf-metro render pipeline.mmd -o pipeline.svg --no-dark-mode-css +``` + +### Raster export (PNG) - `--mode` and `--no-chrome-css` + +Two independent settings control correct PNG output: + +**Palette (`--mode`)** - always pass `--mode light` or `--mode dark` explicitly. +Without it the default palette is used, which may not match your intent. +It also pins `color-scheme` on the SVG root so CSS-aware rasterizers resolve +`light-dark()` to the right values regardless of the host OS color scheme. + +**CSS variables (`--no-chrome-css`)** - the `--nfm-*` properties above use CSS +`var()`, which many rasterizers (including **cairosvg**) cannot parse and abort +on. Add `--no-chrome-css` to bake the concrete theme colors instead (the map +looks identical; you just lose live host recoloring): + +```bash +nf-metro render pipeline.mmd -o pipeline.svg --no-chrome-css --mode light +python -c "import cairosvg; cairosvg.svg2png(url='pipeline.svg', write_to='pipeline.png', scale=2)" +``` + +For a CSS-custom-property-aware rasterizer (`resvg`, `rsvg-convert`, headless +Chromium) skip `--no-chrome-css` - those tools resolve `var()` and `light-dark()` +natively - but still pass `--mode` to pin the palette: + +```bash +nf-metro render pipeline.mmd -o pipeline.svg --mode light +resvg pipeline.svg pipeline.png +``` + +## Sizing and placement + +Everything in an nf-metro SVG lives in one coordinate space: `viewBox="0 0 w h"` +with no outer transform. That is what makes the host's job simple: + +- **Size** the SVG with CSS (`width: 100%; height: auto`) - use `--responsive` + so there are no fixed dimensions to override. +- **Stack** a base render and an overlay by giving both the **same `viewBox`** + and absolutely positioning them in the same box. Because coordinates are + absolute and share the origin, a marker the overlay draws at a node's + manifest `(x, y)` lands exactly on that node. + +```html +
+ + + + + + +
+``` + +The manifest's `width`/`height` fields give the exact `viewBox` to reuse. + +## The embed contract + +The stable surface a host depends on is documented in one authoritative place +each - this guide links to them rather than restating them: + +- **[Embed contract](/nf-metro/embed/)** - the `data-node-*` / `data-station-*` / + `data-section-*` attribute vocabulary and the driver API + (`attachMetroMap`, `highlightLine`, `selectNode`, `getManifest`, …). +- **[Data manifest](/nf-metro/manifest/)** - the manifest JSON schema, its version, the + matching semantics (`patterns` → runtime names), and the `overlay_svg` helper. + +The join key across all of it is the node `id`: it equals `data-node-id` on the +drawn element and `node.id` in the manifest JSON. + +## A static embed + +The minimum to put a map on a page. Render a portable, fluid SVG and inline it: + +```bash +nf-metro render pipeline.mmd -o pipeline.svg --responsive --embed-font +``` + +```html +
+ + +
+``` + +GitHub READMEs strip ` + + +""" + +_SVG_ROOT_RE = re.compile(r"(]*)(>)", re.DOTALL) +_SELF_SCHEME_RE = re.compile(r'\s+style="color-scheme:\s*light\s+dark"') +_WIDTH_RE = re.compile(r'\bwidth="(\d+)"') +_HEIGHT_RE = re.compile(r'\bheight="(\d+)"') + + +def _inline_svg(path: Path) -> str: + """Read SVG; strip self-declared color-scheme and add viewBox for CSS scaling. + + SVGs rendered with self_color_scheme=True carry style="color-scheme: light dark" + on their root element. When inlined into a host page, that self-declaration + overrides the page's color-scheme. Stripping it lets light-dark() values inside + the SVG resolve against the host page's color-scheme instead, so the page-level + toggle controls the renders. + + Adding viewBox (when absent) enables proportional CSS scaling via max-width/height. + """ + content = path.read_text() + m = _SVG_ROOT_RE.search(content) + if not m: + return content + tag_open, attrs, tag_close = m.group(1), m.group(2), m.group(3) + + attrs = _SELF_SCHEME_RE.sub("", attrs) + + if "viewBox" not in attrs: + w = _WIDTH_RE.search(attrs) + h = _HEIGHT_RE.search(attrs) + if w and h: + attrs += f' viewBox="0 0 {w.group(1)} {h.group(1)}"' + + return content[: m.start()] + tag_open + attrs + tag_close + content[m.end() :] + + +def _load_json(render_dir: Path, filename: str) -> dict: + """Load a JSON sidecar from a render directory, or return an empty dict.""" + path = render_dir / filename + if path.exists(): + return json.loads(path.read_text()) + return {} + + +def _build_metrics_html( + changed: list[tuple[str, str]], + base_metrics: dict[str, dict[str, float]], + pr_metrics: dict[str, dict[str, float]], +) -> str: + """Build the advisory layout-quality delta table for the changed renders. + + Returns an empty string when no scorecard is available on either side (the + base branch predates the metric, or computation failed everywhere). + """ + if not base_metrics and not pr_metrics: + return "" + + header_cells = "".join(f"{spec.label}" for spec in METRICS) + rows: list[str] = [] + for name, _kind in changed: + stem = name.removesuffix(".svg") + base = base_metrics.get(name) + pr = pr_metrics.get(name) + if base is None and pr is None: + continue + cells = [f'{stem}'] + for spec in METRICS: + bv = base.get(spec.key) if base else None + pv = pr.get(spec.key) if pr else None + direction = delta_direction(bv, pv) + cls = {-1: "m-better", 1: "m-worse", 0: "m-flat"}[direction] + both_present = bv is not None and pv is not None + if both_present and direction != 0: + text = ( + f"{format_value(spec, bv)}→{format_value(spec, pv)} " + f"({format_delta(spec, bv, pv)})" + ) + elif both_present: + text = format_value(spec, pv) + elif bv is None: + text = f"–→{format_value(spec, pv)}" + else: + text = f"{format_value(spec, bv)}→–" + cells.append(f'{text}') + rows.append(f"{''.join(cells)}") + + if not rows: + return "" + + return ( + '
\n

Layout-quality metrics

\n' + '

Advisory only — nothing gates on these. ' + "Lower is better; " + 'green improved, ' + 'red regressed.

\n' + f"\n{header_cells}\n" + + "\n".join(rows) + + "\n
Render
\n
" + ) + + +def build_diff( + base_dir: Path, pr_dir: Path, output_dir: Path, pr_number: str | None = None +) -> bool: + """Compare renders and generate diff page. Returns True if changes found.""" + base_svgs = {p.name for p in base_dir.glob("*.svg")} if base_dir.exists() else set() + pr_svgs = {p.name for p in pr_dir.glob("*.svg")} if pr_dir.exists() else set() + all_names = sorted(base_svgs | pr_svgs) + + changed: list[tuple[str, str]] = [] # (name, kind) + for name in all_names: + base_path = base_dir / name + pr_path = pr_dir / name + if name in base_svgs and name in pr_svgs: + if base_path.read_bytes() != pr_path.read_bytes(): + changed.append((name, "changed")) + elif name in pr_svgs: + changed.append((name, "added")) + else: + changed.append((name, "removed")) + + if not changed: + return False + + # Load manifest from PR renders (preferred) with base as fallback + manifest = _load_json(pr_dir, "manifest.json") + base_manifest = _load_json(base_dir, "manifest.json") + for name, _ in changed: + if name not in manifest and name in base_manifest: + manifest[name] = base_manifest[name] + + base_metrics = _load_json(base_dir, "metrics.json") + pr_metrics = _load_json(pr_dir, "metrics.json") + + # Group changed files by section + section_order: list[str] = [] + by_section: dict[str, list[tuple[str, str]]] = defaultdict(list) + for name, kind in changed: + section = manifest.get(name, "Other") + if section not in by_section: + section_order.append(section) + by_section[section].append((name, kind)) + + output_dir.mkdir(parents=True, exist_ok=True) + + # Build HTML + title_suffix = f" - PR #{pr_number}" if pr_number else "" + n_changed = sum(1 for _, k in changed if k == "changed") + n_added = sum(1 for _, k in changed if k == "added") + n_removed = sum(1 for _, k in changed if k == "removed") + parts = [] + if n_changed: + parts.append(f"{n_changed} changed") + if n_added: + parts.append(f"{n_added} added") + if n_removed: + parts.append(f"{n_removed} removed") + timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC") + summary = ( + f"{', '.join(parts)} out of {len(all_names)} total renders." + f" Generated {timestamp}." + ) + + # Table of contents (grouped by section) + toc_parts = ['
\n

Changed renders

'] + for section in section_order: + items = by_section[section] + sec_id = section.lower().replace(" ", "-") + toc_parts.append(f'

{section}

\n
    ') + for name, kind in items: + stem = name.removesuffix(".svg") + badge_class = f"badge-{kind}" + toc_parts.append( + f'
  • {stem}' + f'{kind}
  • ' + ) + toc_parts.append("
") + toc_parts.append("
") + toc = "\n".join(toc_parts) + + # Diff entries (grouped by section) + entries_html = [] + for section in section_order: + sec_id = section.lower().replace(" ", "-") + entries_html.append( + f'

{section}

' + ) + for name, kind in by_section[section]: + stem = name.removesuffix(".svg") + heading = stem.replace("_", " ").title() + badge = f"badge-{kind}" + h3 = f'

{heading} {kind}

' + div_open = f'
' + + if kind == "changed": + base_svg = _inline_svg(base_dir / name) + pr_svg = _inline_svg(pr_dir / name) + toggle = ( + '
' + '" + '' + '' + "
" + ) + entry = ( + f"{div_open}\n{h3}\n{toggle}\n" + f'
\n' + f'

Base (main)

' + f'
{base_svg}
\n' + f'

PR

' + f'
{pr_svg}
\n' + f"
\n
" + ) + elif kind == "added": + pr_svg = _inline_svg(pr_dir / name) + entry = ( + f"{div_open}\n{h3}\n" + f'

New in PR

' + f'
{pr_svg}
\n' + f"" + ) + else: # removed + base_svg = _inline_svg(base_dir / name) + entry = ( + f"{div_open}\n{h3}\n" + f'

Removed (was in base)

' + f'
{base_svg}
\n' + f"" + ) + entries_html.append(entry) + + ordered_changed = [ + item for section in section_order for item in by_section[section] + ] + metrics_html = _build_metrics_html(ordered_changed, base_metrics, pr_metrics) + + html = HTML_TEMPLATE.format( + title_suffix=title_suffix, + summary=summary, + metrics=metrics_html, + toc=toc, + entries="\n\n".join(entries_html), + ) + (output_dir / "index.html").write_text(html) + return True + + +def main() -> None: + parser = argparse.ArgumentParser(description="Generate render diff page") + parser.add_argument("base_dir", type=Path, help="Base branch render directory") + parser.add_argument("pr_dir", type=Path, help="PR branch render directory") + parser.add_argument("output_dir", type=Path, help="Output directory for diff site") + parser.add_argument("--pr", default=None, help="PR number for title") + args = parser.parse_args() + + has_changes = build_diff(args.base_dir, args.pr_dir, args.output_dir, args.pr) + if has_changes: + print(f"Diff page written to {args.output_dir}/index.html") + sys.exit(0) + else: + print("No render changes detected.") + sys.exit(2) + + +if __name__ == "__main__": + main() diff --git a/scripts/diff_phase_snapshots.py b/scripts/diff_phase_snapshots.py new file mode 100644 index 000000000..909d2ab0e --- /dev/null +++ b/scripts/diff_phase_snapshots.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +"""Diff two per-phase coordinate-snapshot trees to localise a regression. + +Phase snapshots are produced by ``compute_layout`` when +``NF_METRO_PHASE_SNAPSHOTS=1`` is set (see issue #363). Each fixture's +snapshots land under ``//.json``. This tool compares +the same fixture across two trees (e.g. a base render and a PR render) and +reports the first phase at which station coords, port positions, or section +bboxes diverge. + +Usage: + NF_METRO_PHASE_SNAPSHOTS=1 NF_METRO_PHASE_SNAPSHOT_DIR=/tmp/base \\ + python -m nf_metro render examples/rnaseq_sections.mmd -o /tmp/base.svg + NF_METRO_PHASE_SNAPSHOTS=1 NF_METRO_PHASE_SNAPSHOT_DIR=/tmp/pr \\ + python -m nf_metro render examples/rnaseq_sections.mmd -o /tmp/pr.svg + python scripts/diff_phase_snapshots.py /tmp/base /tmp/pr --fixture rnaseq_sections + +Without ``--fixture`` every fixture present in both trees is compared. +Exit status is 1 when any divergence is found, 0 otherwise, so the tool is +usable as a CI gate. +""" + +from __future__ import annotations + +import argparse +import json +import sys +from pathlib import Path +from typing import Any + +# Phase ordering for "first phase to diverge". Mirrors the call order in +# engine.compute_layout. Phases not listed (or the sectionless "flat" +# layout) are appended afterward in lexicographic order so the tool still +# works if the pipeline gains a phase before this list is updated. +_PHASE_ORDER = [ + "flat", + "1.1", + "1.2", + "1.3", + "1.4", + "1.5", + "2.1", + "3.1", + "3.2", + "3.3", + "3.4", + "3.5", + "4.1", + "4.2", + "4.3", + "4.4", + "4.5", + "4.6", + "4.7", + "4.8", + "4.9", + "4.10", + "5.1", + "5.2", + "5.3", + "5.4", + "5.5", + "6.1", + "6.2", + "6.3", + "6.4", + "6.5", + "6.6", + "6.7", + "6.8", + "6.9", + "6.10", + "6.11", + "6.12", + "6.13", + "6.14", + "6.15a", + "6.15", + "6.16", + "final", +] + + +def _phase_sort_key(phase: str) -> tuple[int, str]: + try: + return (_PHASE_ORDER.index(phase), "") + except ValueError: + return (len(_PHASE_ORDER), phase) + + +def _load(path: Path) -> dict[str, Any]: + return json.loads(path.read_text()) + + +def _fixtures(root: Path) -> set[str]: + return {p.name for p in root.iterdir() if p.is_dir()} if root.is_dir() else set() + + +def _phases(fixture_dir: Path) -> dict[str, Path]: + return {p.stem: p for p in sorted(fixture_dir.glob("*.json"))} + + +def _diff_payloads(base: dict[str, Any], pr: dict[str, Any]) -> list[str]: + """Return human-readable lines describing each coord difference.""" + diffs: list[str] = [] + for kind in ("stations", "ports", "sections"): + base_items = base.get(kind, {}) + pr_items = pr.get(kind, {}) + for key in sorted(set(base_items) | set(pr_items)): + b = base_items.get(key) + p = pr_items.get(key) + if b is None: + diffs.append(f" {kind}/{key}: only in PR") + continue + if p is None: + diffs.append(f" {kind}/{key}: only in base") + continue + for field in sorted(set(b) | set(p)): + bv = b.get(field) + pv = p.get(field) + if bv != pv: + diffs.append(f" {kind}/{key}.{field}: {bv} -> {pv}") + return diffs + + +def diff_fixture(base_dir: Path, pr_dir: Path, fixture: str) -> bool: + """Compare one fixture's snapshot trees. Returns True if it diverged.""" + base_fix = base_dir / fixture + pr_fix = pr_dir / fixture + base_phases = _phases(base_fix) + pr_phases = _phases(pr_fix) + + if not base_phases and not pr_phases: + print(f"[{fixture}] no snapshots found in either tree") + return False + + only_base = set(base_phases) - set(pr_phases) + only_pr = set(pr_phases) - set(base_phases) + common = sorted(set(base_phases) & set(pr_phases), key=_phase_sort_key) + + diverged = False + for phase in common: + diffs = _diff_payloads(_load(base_phases[phase]), _load(pr_phases[phase])) + if diffs: + print(f"[{fixture}] FIRST DIVERGENCE at phase {phase}:") + for line in diffs[:40]: + print(line) + if len(diffs) > 40: + print(f" ... and {len(diffs) - 40} more") + diverged = True + break + + if not diverged: + if only_base or only_pr: + print( + f"[{fixture}] coords match on all shared phases; " + f"phase sets differ (base-only={sorted(only_base)}, " + f"pr-only={sorted(only_pr)})" + ) + diverged = True + else: + print(f"[{fixture}] no divergence across {len(common)} phases") + return diverged + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__.split("\n\n")[0]) + parser.add_argument("base", type=Path, help="base snapshot tree root") + parser.add_argument("pr", type=Path, help="PR snapshot tree root") + parser.add_argument( + "--fixture", + help="fixture slug to compare; omit to compare all shared fixtures", + ) + args = parser.parse_args(argv) + + if args.fixture: + fixtures = [args.fixture] + else: + fixtures = sorted(_fixtures(args.base) & _fixtures(args.pr)) + if not fixtures: + print("no shared fixtures between the two trees") + return 1 + + any_diverged = False + for fixture in fixtures: + if diff_fixture(args.base, args.pr, fixture): + any_diverged = True + return 1 if any_diverged else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/gallery.yaml b/scripts/gallery.yaml new file mode 100644 index 000000000..47d4ed2ff --- /dev/null +++ b/scripts/gallery.yaml @@ -0,0 +1,1334 @@ +gallery: + # ── Getting Started ──────────────────────────────────────────────────────── + - id: simple_pipeline + source_dir: examples + category: Getting Started + description: Minimal two-line pipeline with no sections. + - id: rnaseq_auto + source_dir: examples + category: Getting Started + description: + "Demonstrates fully auto-inferred layout: no `%%metro grid:` directives needed. + See [nf-core Pipelines](/nf-metro/pipelines/) for the full gallery." + - id: rnaseq_sections + source_dir: examples + category: Getting Started + description: + Same pipeline with manual `%%metro grid:` overrides and file markers, showing + how explicit directives can fine-tune placement. + + # ── Feature Showcase ─────────────────────────────────────────────────────── + - id: directional_flow + source_dir: examples + category: Feature Showcase + description: + "Opt-in static flow chevrons via `%%metro directional: true` (CLI: `--directional`): + periodic open chevrons ride each route pointing source to target. A three-line bundled + trunk fans out to per-line analyses and converges again, so the chevrons make bundle, + fan-out, and merge direction legible without the animated `--animate` balls. Marker size, + spacing, opacity, and colour are `Theme` knobs." + - id: line_spread + source_dir: examples + category: Feature Showcase + description: + "Demonstrates the `%%metro line_spread:` axis with one per-section override + per section: `bundle` (default) merges shared lines onto one trunk that cascades downward, + `centered` balances that bundle about the midline, and `rails` draws each line as a parallel + rail with shared stations as interchanges." + - id: cross_track_interchange + source_dir: examples + category: Feature Showcase + description: + "Demonstrates `%%metro interchange:`: parallel tumour/normal lanes share one + MarkDuplicates step without merging, drawn as a cross-track interchange so each lane stays + straight on its own track instead of pinching together to a point. Auto-layout infers + the same interchange for fully-parallel lanes even without the directive." + - id: marker_styles + source_dir: examples + category: Feature Showcase + description: + Per-station marker shapes & fills encoding tool attributes (mandatory/optional/accelerated/expanded-elsewhere) + with a marker key alongside the line legend. Demonstrates `%%metro marker:` and `%%metro + marker_legend:`. + - id: diagonal_labels + source_dir: examples + category: Feature Showcase + description: + "Opt-in diagonal station labels via `%%metro label_angle: 45`: a dense pre-processing + trunk whose tilted names pack tighter than horizontal labels would, feeding a variant-calling + section in the row below that fans out to three callers and back in -- the reserved vertical + room keeps the hanging labels clear of the row beneath." + - id: file_icons + source_dir: examples + category: Feature Showcase + description: + "Terminus icon variants: single-sheet `%%metro file:`, stacked `%%metro files:` + for multiplicity, the `%%metro dir:` folder, and the optional `| banner` format strip." + - id: legend_logo_placement + source_dir: examples + category: Feature Showcase + description: + "Demonstrates positioning the bundled legend+logo block: `%%metro legend: br + | canvas` pins it to the empty lower-right canvas corner and `%%metro logo_scale:` enlarges + the embedded logo. The directive also supports `| dx,dy` offsets and absolute `x,y` placement; + the block auto-avoids sections and routes. The QC line shows a downward cross-column feeder + dropping straight into its consumer section." + - id: legend_combo + source_dir: examples + category: Feature Showcase + description: + "Demonstrates `%%metro legend_combo:`: a normal (blue) and tumor (red) line + travel together as a tumor-normal pair. The combo renders one legend row with a striped + red+blue swatch. Normal travels only within the bundle so its individual row is suppressed, + while tumor breaks away alone to Annotate and keeps its own row; the QC line is unaffected." + - id: group_labels + source_dir: examples + category: Feature Showcase + description: + Annotative `%%metro group:` band captions labelling sarek-style sub-families + of callers (SNPs & Indels / SV & CNV / MSI) within a single section, without splitting + them apart. + - id: off_track_outputs + source_dir: examples + category: Feature Showcase + description: + "Off-track file artefacts hung above a pre-processing trunk at the step that + writes each one: `%%metro off_track:` on a producer-fed sink anchors it to its producer + (not the section top), mirroring the off-track input mechanism for outputs. Each output + gets its own column clear of the next station, and a step writing several files (MarkDup + here) stacks them above it." + - id: tb_file_termini + source_dir: examples + category: Feature Showcase + description: + "A `%%metro direction: TB` reporting section whose file outputs are line termini. + Regression fixture: terminus file icons orient to a vertical flow, with the connector + entering from the top." + - id: disconnected_components + source_dir: examples + category: Feature Showcase + description: + A connected three-section trunk plus a separate, wide disconnected section. + Each weakly-connected component of the section graph is placed in its own local column + grid and the components are stacked vertically, so the wide panel never inflates the trunk's + columns or flings its later sections to the right. + - id: multi_section_cell + source_dir: examples/topologies + category: Feature Showcase + description: + "Multiple sections packed into one grid cell: a `%%metro grid:` directive + names two comma-separated sections that share a cell and pack side-by-side + along the flow axis. A short+long pair in one row aligns top-to-bottom with + a long+short pair packed into the same column below it, freeing the + bottom-left for the legend." + + # ── Realistic Pipelines ──────────────────────────────────────────────────── + - id: genomic_pipeline + source_dir: examples + category: Realistic Pipelines + description: + "Multi-section genomic variant-calling pipeline: same-direction sections stacked + in one column (serpentine carriage-return) plus a multi-row QC collector fan-in descending + a shared inter-column corridor." + - id: longread_variant_calling + source_dir: examples + category: Realistic Pipelines + description: + "Dense long-read variant-calling pipeline (six lines, nine sections): exercises + inter-section routing around non-connecting section boxes, cross-row feeds via the inter-row + gap, same-line bundle coincidence, and a same-colour crossover bridge." + - id: sarek_metro + source_dir: examples + category: Realistic Pipelines + description: + "Integration showcase: a sarek-style variant-calling pipeline drawn with diagonal + (45-degree) labels for tight column packing, an off-track FASTQ input, file termini, marker + styles, and a `%%metro line_spread: rails` panel where each caller keeps its own rail + and shared stations render as interchanges." + - id: differentialabundance + source_dir: examples + category: Realistic Pipelines + description: + "nf-core/differentialabundance with four input lines, off-track gene-set inputs, + and a bypass-heavy reporting row. Uses `%%metro center_ports: true`." + - id: differentialabundance_default + source_dir: examples + category: Realistic Pipelines + description: + Same nf-core/differentialabundance map at default (uncentered) layout — useful + for spotting regressions that only show with default port placement. + - id: genomeassembly_staggered + source_dir: examples + category: Realistic Pipelines + description: + "sanger-tol/genomeassembly with explicit `%%metro grid:` directives stacking + each section in its own grid row. Regression fixture: cross-column junction routes were + going backward in X." + - id: rnaseq_lite + source_dir: examples/topologies + category: Realistic Pipelines + description: Simplified RNA-seq pipeline with three analysis routes. + - id: variant_calling + source_dir: examples/topologies + category: Realistic Pipelines + description: Variant calling pipeline with four lines sharing alignment. + - id: foldback_exit_peeloff + source_dir: examples/topologies + category: Realistic Pipelines + description: + "An auto-folded serpentine (`%%metro fold_threshold: 15`) where a return-row + section exit splits a bundle to two downstream sections: one line continues + level along the row, the other turns down to a lower loop. Regression fixture + for the peel-off lane crossover at the exit -- the reversal must follow the + continuing line through the peel-off junction so it stays level." + - id: seqinspector + source_dir: examples/showcase + category: Realistic Pipelines + description: + "nf-core/seqinspector with an explicit `%%metro grid:` stacking two single-row + sections (Run Folder, BAM Files) in the column beside a rowspan-2 FASTQ section. + Regression fixture: the stacked sections must fill the rowspan band -- the top one's + box top meets the band top (instead of a fan poking into the title) and the bottom + one's box bottom meets the band bottom (instead of floating high with slack below)." + + # ── Basic Topologies ─────────────────────────────────────────────────────── + - id: single_section + source_dir: examples/topologies + category: Basic Topologies + description: One section, one line. The simplest possible case. + - id: deep_linear + source_dir: examples/topologies + category: Basic Topologies + description: Seven sections in a straight chain. Exercises the grid fold threshold. + - id: parallel_independent + source_dir: examples/topologies + category: Basic Topologies + description: Two disconnected pipelines stacked vertically. + - id: disconnected_components_fold + source_dir: examples/topologies + category: Basic Topologies + description: + "A folded disconnected-component layout (`%%metro fold_threshold: 3`). The main trunk + folds into a serpentine while a wide standalone section stacks below it. Regression + fixture for full clearance between the wide section and the folded trunk's bottom row." + - id: mismatched_tracks + source_dir: examples/topologies + category: Basic Topologies + description: Lines with mismatched track counts at shared stations. + - id: self_crossing_bridge + source_dir: examples/topologies + category: Basic Topologies + description: + One colour whose vertical bus crosses its own independent horizontal connector + earns a bridge gap (same-colour crossover, not a fan). + + # ── Fan-out and Fan-in ───────────────────────────────────────────────────── + - id: wide_fan_out + source_dir: examples/topologies + category: Fan-out and Fan-in + description: One source fanning out to four target sections. + - id: wide_fan_in + source_dir: examples/topologies + category: Fan-out and Fan-in + description: Four sources converging into one target section. + - id: section_diamond + source_dir: examples/topologies + category: Fan-out and Fan-in + description: "Section-level fork-join: fan-out then reconverge." + - id: uneven_diamond + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + Node-level fork-join whose branches differ in length; each branch holds its + own track instead of collapsing the shorter ones together. + - id: symmetric_diamond_beside_wide_fan + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + "A `diamond_style: symmetric` 2-way fork-join sharing a section with a wider + 3-way fan. The 2-way diamond straddles its trunk evenly, but at full pitch -- as tall + as the 3-way fan, with an empty trunk row between its branches -- because the half-pitch + compaction is a per-section decision the mixed-fan section cannot qualify for (#1076)." + - id: terminal_symmetric_fan + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + A terminal section whose entry fans into equal-rank sinks; the fan stays symmetric + about the entry port (regression lock for top-anchored terminal fans). + - id: internal_source_equal_sibling_2fan + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + "An internal source station feeds exactly two equal-sibling branches (same line, + same downstream join). The source is centred between its two consumers, which + straddle it symmetrically, rather than staying collinear with one branch while the + other peels off (#1223)." + - id: trunk_through_fan + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + "A pass-through section: the trunk runs straight through a symmetric fan-and-reconverge, + exit on the merge row (regression lock for detached reconvergence exits)." + - id: wide_label_fan + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + A two-column fan whose station labels are wider than the column pitch; the + engine wraps the labels and widens spacing so they don't collide. + - id: wrapped_label_trunk + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + A wrapped station label on a lower track whose block would grow into the metro + line on the track above; the label is pulled back to its un-pushed anchor so the name + clears the line. + - id: funcprofiler_upstream + source_dir: examples/topologies + category: Fan-out and Fan-in + description: + "A profiling section whose stacked tools share a fan-in/fan-out: a line the + 'FMH FunProfiler' station does not carry would rake its wide below-station label, so + the label flips to its clear side and the diagonal no longer strikes the glyphs." + + # ── Branching and Multipath ──────────────────────────────────────────────── + - id: asymmetric_tree + source_dir: examples/topologies + category: Branching and Multipath + description: One root branching into three paths of different depths. + - id: complex_multipath + source_dir: examples/topologies + category: Branching and Multipath + description: Four lines taking different routes through six sections. + - id: interchange_lane_reorder + source_dir: examples/topologies + category: Branching and Multipath + description: + "Two lanes share one step while a third lane is declared between them. Auto-layout + reorders the interleaving lane to an outer track so the two members become adjacent and + infer a clean interchange, instead of abstaining (issue #779)." + + # ── Multi-line Bundles ───────────────────────────────────────────────────── + - id: multi_line_bundle + source_dir: examples/topologies + category: Multi-line Bundles + description: Six lines travelling through the same three-section chain. + - id: mixed_port_sides + source_dir: examples/topologies + category: Multi-line Bundles + description: A section with both RIGHT and BOTTOM exits. + - id: compact_hidden_passthrough + source_dir: examples/topologies + category: Multi-line Bundles + description: + Compact mode keeps a hidden single-line pass-through station on its bundle + slot so the two lines weave consistently through the section. + - id: compact_gap_peer_conflict + source_dir: examples/topologies + category: Multi-line Bundles + description: + A fork-join whose hub carries non-consecutive offset slots safely abandons + gap-compaction when a visible same-layer peer carries the intervening line, rather than + cascading the reorder. + - id: bundle_terminator_continuation + source_dir: examples/topologies + category: Multi-line Bundles + description: + A two-line bundle enters a station where one line terminates while the other + continues to a single successor. The successor holds the trunk row rather than dropping + to its own line base, so the chain runs flat instead of dipping into a V-kink before the + section exit. + + # ── TB / BT Sections ─────────────────────────────────────────────────────── + - id: bt_chain + source_dir: examples/topologies + category: TB / BT Sections + description: + "A `%%metro direction: BT` (bottom-to-top) section: a three-station chain whose + flow runs up the column, the vertical mirror of a TB chain (#1044)." + - id: bt_fork + source_dir: examples/topologies + category: TB / BT Sections + description: + "A symmetric fan-out inside a `%%metro direction: BT` section: the hub sits + at the bottom and both branches fan upward, the lane bundle riding the `+x` side as the + rotation image of a TB fork (#1044)." + - id: bt_perp_entry_below + source_dir: examples/topologies + category: TB / BT Sections + description: + "A BT section fed from below: a lower BT section's trailing TOP exit continues + up the shared lane into an upper BT section's BOTTOM entry, a two-line bundle riding + one column across the seam (#1044)." + - id: bt_exit_top_above + source_dir: examples/topologies + category: TB / BT Sections + description: + A BT section's trailing TOP exit dropping up into the BOTTOM entry of an LR + section stacked above it (#1044). + - id: bt_exit_top_above_2line + source_dir: examples/topologies + category: TB / BT Sections + description: + "The two-line form of the BT TOP-exit drop into an LR BOTTOM entry: the bundle + keeps its lane across the perpendicular boundary, the BT feeder fanning +x rather than + the downward-TB -x (#1066)." + - id: bt_to_lr + source_dir: examples/topologies + category: TB / BT Sections + description: + A BT section's trailing TOP (perpendicular) exit taking the up-and-over corridor + into the LEFT entry of a neighbouring LR section, a two-line bundle staying parallel across + the seam (#1044). + - id: bt_to_tb + source_dir: examples/topologies + category: TB / BT Sections + description: + "A BT section's RIGHT exit feeding a TB section's LEFT entry: an upward flow + handing off to a downward one across the column seam (#1044)." + - id: tb_fork_lane_transpose + source_dir: examples/topologies + category: TB / BT Sections + description: + "A vertical-flow (TB) section whose trunk station forks one line down to an + in-section file terminus and the other out to a side exit through a bypass + helper. The bypassing line rides the section's lane side of the trunk, so its + fork leg reaches the bypass without crossing the straight-down terminus leg + (issue #1163)." + - id: tb_passthrough_trunk + source_dir: examples/topologies + category: TB / BT Sections + description: + "A three-line bundle running straight down a linear chain of stations in a + `%%metro direction: TB` section. The trunk passes through each station as a clean vertical + column: every line holds one offset, so no station reads as an elbow." + - id: tb_internal_diagonal + source_dir: examples/topologies + category: TB / BT Sections + description: + "A symmetric fan-out inside a `%%metro direction: TB` section: the hub centres + over its two branch stations, which sit on X tracks either side of it, so both internal + edges route as 45-degree diagonals (the `_route_tb_internal` diagonal arm) (#917)." + - id: tb_trunk_through_fan + source_dir: examples/topologies + category: TB / BT Sections + description: + "An asymmetric fan-out inside a `%%metro direction: TB` section: one line continues + straight down the trunk column to its child while a sibling peels off to another column. The + continuation is slotted onto the trunk so it drops straight instead of jogging one offset + step (#929)." + - id: tb_passthrough_continuation + source_dir: examples/topologies + category: TB / BT Sections + description: + "A TB convergence that is not a sink: a diagonal feeder continues straight + down to a station directly below the merge while a collinear feeder peels off. The continuation + rides the trunk slot so it drops straight, instead of being forced outboard where it kinks + at the merge and crosses the collinear feeder (issue #1012)." + - id: tb_column_continuation_two_lines + source_dir: examples/topologies + category: TB / BT Sections + description: + "A TB section with a two-line BOTTOM exit continuing straight down into the + TB section below. The exit port seats close to the last station with normal section padding + rather than the doubled gap the fold-span extension would add (issue #1062)." + - id: tb_right_entry_stack + source_dir: examples/topologies + category: TB / BT Sections + description: + "A two-line bundle into a stacked TB section's RIGHT entry from a same-row + left source: it loops over the section top and descends into the port, the U-turn transposing + the bundle, with concentric corners built via `build_concentric_bundle` (#707)." + - id: tb_bottom_entry_flow_start + source_dir: examples/topologies + category: TB / BT Sections + description: + "A `%%metro direction: TB` section given `%%metro entry: bottom` whose consumer + is the flow-start (top) station. The bottom entry is re-anchored to the top so the line + enters beside its consumer and flows down, rather than running up through MultiQC to reach + Collect and folding back (#885)." + - id: tb_left_exit_step + source_dir: examples/topologies + category: TB / BT Sections + description: + "A TB alignment section exits LEFT into a lower right-entry section with a + blocker directly below: the exit bundle steps west-down-west, routed as a parallel staircase + that keeps the feed order (issue #671)." + - id: tb_lr_exit_left + source_dir: examples/topologies + category: TB / BT Sections + description: + "A `%%metro direction: TB` section dropping in through its TOP entry and leaving + through a LEFT exit into a section below-left (the `_route_tb_lr_exit` LEFT arm): the + station drops, turns once, and runs out of the box's left side, the vertical leg fanned + by the reversed station offset so the outermost line takes the widest arc (#917)." + - id: tb_lr_exit_right + source_dir: examples/topologies + category: TB / BT Sections + description: + "A `%%metro direction: TB` section dropping in through its TOP entry and leaving + through a RIGHT exit into the next forward section (the `_route_tb_lr_exit` RIGHT arm): + the mirror of the LEFT exit, fanned by the exit port's own offset (#917)." + - id: tb_convergence_straight_drop + source_dir: examples/topologies + category: TB / BT Sections + description: + "Two lines converge at a TB section's terminal merge; the feeder whose source + is collinear with the merge drops dead straight while the sibling arrives diagonally, + instead of the straight feeder kinking off its lane (issue #1007)." + - id: tb_bottom_exit_fork_diamond + source_dir: examples/topologies + category: TB / BT Sections + description: + "A TB section's BOTTOM exit forks to two stacked TB sections in different + rows, the lower also fed by the upper (a diamond). The fork junction's leg into the nearer + TOP entry drops straight in its column rather than jogging sideways and reversing at the + boundary, and the leg continuing to the far section rides the intervening section's own + trunk for the shared line as one stroke (issue #1058)." + - id: tb_bottom_exit_bundle_jog + source_dir: examples/topologies + category: TB / BT Sections + description: + "A four-line bundle leaves a TB section's BOTTOM exit and jogs down into the + TOP entry of an RL section placed in the row below and one column to the left. The four + lines keep distinct channels through the jog instead of collapsing onto one (issue #1074)." + - id: tb_perp_exit_side_neighbour + source_dir: examples/topologies + category: TB / BT Sections + description: + A vertical-flow section's BOTTOM exit feeds a side LR neighbour sharing the + exit's Y. The connector leaves the port down into the inter-row corridor clear of the + box, runs across, then turns up into the entry, rather than running straight along the + section's bottom edge and out through the corner (#1052). + - id: tb_two_line_vert_seam + source_dir: examples/topologies + category: TB / BT Sections + description: + A vertical-flow section's RIGHT exit feeds another vertical-flow section's + LEFT entry with a two-line bundle. The entry sits a station gap above the trunk head so + both lines enter horizontally then drop straight onto their trunk lanes, rather than the + staggered line slanting into the trunk for want of drop room (#1054). + - id: top_entry_header_clash + source_dir: examples/topologies + category: TB / BT Sections + description: + A TB section's title is long enough to reach under the trunk that drops into + its TOP entry. Rather than route the line around the title, the header relocates below + the box so the drop enters cleanly. + - id: header_side_rotated + source_dir: examples/topologies + category: TB / BT Sections + description: + A TB section whose trunk drops through the top edge and exits the bottom edge + blocks the header on both horizontal edges. The title rotates and runs down the clear + left edge instead of crossing the line. + - id: header_nudge + source_dir: examples/topologies + category: TB / BT Sections + description: + "A title too long to fit a rotated side, on a section blocked top and bottom + by its trunk: the header shifts right past the trunk as a last resort, the canvas growing + to keep it visible." + - id: lr_to_tb_top_drop + source_dir: examples/topologies + category: TB / BT Sections + description: + "An LR section feeds the TOP entry of a TB section stacked directly below. + With no explicit exit side the engine infers a BOTTOM exit: the line curves out of the + trunk after the last station and drops straight onto the target trunk, which is aligned + under the exit." + - id: lr_to_tb_top_drop_two_lines + source_dir: examples/topologies + category: TB / BT Sections + description: + Two co-travelling lines drop out of an LR section's explicit BOTTOM exit into + a TB section's shared TOP entry below, staying parallel through the corner and down to + the trunk without crossing. + - id: lr_to_tb_top_near_vertical + source_dir: examples/topologies + category: TB / BT Sections + description: + A RIGHT-exit LR section feeds the TOP entry of a TB section stacked directly + below. The explicit right exit leaves on the right, clears the source box, and doubles + back over the inter-row gap to drop straight onto the target trunk rather than elbowing + in through the top-right corner. + - id: lr_to_tb_top_cross_col + source_dir: examples/topologies + category: TB / BT Sections + description: + A junction source feeds both a same-row RIGHT-entry consumer and a TB section's + TOP entry two rows below. The downward branch drops onto the target trunk without crossing + the section boundary off-port. + - id: lr_to_tb_top_two_lines + source_dir: examples/topologies + category: TB / BT Sections + description: + Two co-travelling lines from a RIGHT-exit LR section double back into a TB + section's shared TOP entry below, landing on their trunk X offsets so the bundle stays + parallel through the boundary without pinching or crossing. + + # ── Serpentine Layout ────────────────────────────────────────────────────── + - id: fold_fan_across + source_dir: examples/topologies + category: Serpentine Layout + description: Three lines diverge, converge at a fold, then continue on the return row. + - id: fold_left_exit_right_entry + source_dir: examples/topologies + category: Serpentine Layout + description: + "A folded TB section's LEFT exit runs straight west into a relocated section's + RIGHT entry. Regression fixture: the two joined sections share a bbox bottom so + the straight run clears both edges by the same distance." + - id: fold_double + source_dir: examples/topologies + category: Serpentine Layout + description: Ten-section linear pipeline with two fold points (serpentine layout). + - id: fold_stacked_branch + source_dir: examples/topologies + category: Serpentine Layout + description: Stacked analysis sections feeding through a fold into branching targets. + - id: reconverge_reversed_fold + source_dir: examples/topologies + category: Serpentine Layout + description: + "Serpentine-fold reconvergence: a multi-modal pipeline fanning out to stacked + analysis sections and reconverging onto a reversed return row." + - id: convergence_sink_fold + source_dir: examples/topologies + category: Serpentine Layout + description: + "Convergence sink folded below its branches: a `fold_threshold` stacks the + parallel branches in one column and drops the shared sink onto a lower row, + fed through a TOP entry. Each upper branch's bottom-exit feeder routes around + the intervening branch boxes through the clear left-side gap rather than + ploughing straight down through them." + - id: same_side_culdesac + source_dir: examples/topologies + category: Inter-section Routing + description: + "A line declares its entry on a reversed (RL) section's flow-trailing edge, + the edge the section flows out of, but its consumer is an interior station + held off the leading end by a file terminus. Rather than fold the line back + over the trunk to reach it, the entry re-anchors to the section's leading + edge; the producer then reaches it by wrapping over the section top, so the + line reads as a clean loop and the consumer is a straight pass-through." + - id: convergence_fold_diamond + source_dir: examples/topologies + category: Serpentine Layout + description: + "Two distinct lines converging into a sink folded below its branches: a + `fold_threshold` stacks both branches in one column and drops the shared sink + onto a lower row, fed through a TOP entry. The two feeders, and the run through + the merge, ride parallel approach channels rather than collapsing onto one + vertical channel." + - id: fold_split_targets + source_dir: examples/topologies + category: Serpentine Layout + description: + "Two folded branches dropping into one section through a shared TOP entry, + each line continuing to its own separate sink (a fan, not a merge). The + distinct-line drops stay collapsed onto the column trunk, since they part to + different stations rather than bundling along a shared run." + - id: stacked_lr_serpentine + source_dir: examples/topologies + category: Serpentine Layout + description: + Same-direction sections stacked in one grid column, chained via short vertical + drops on alternating sides (serpentine), no wrap-around. + - id: serpentine_grid_wide_bundle + source_dir: examples/topologies + category: Serpentine Layout + description: + "A two-line bundle folds through a 3x2 section grid: each row flows left to + right, and the bundle wraps from the right of one row to the left of the next. + The wrap spans more than one column, so its return run loops through the clear + inter-row gap with both lines kept fanned around every corner." + - id: serpentine_grid_tall_bundle + source_dir: examples/topologies + category: Serpentine Layout + description: + "A two-line bundle folds through a 2x3 section grid, wrapping twice. Each wrap + returns through its own inter-row gap, so the two stacked return runs stay on + distinct channels rather than collapsing onto one." + - id: serpentine_rl_bundle + source_dir: examples/topologies + category: Serpentine Layout + description: + "A true boustrophedon fold of a two-line bundle: the top row flows left to + right, drops straight down the right edge, and the return row flows right to + left via direction: RL. The bundle stays on the outside of the fold the whole + way round (top, right, then bottom) with no crossover, and the descent column + aligns under the exit so the drop is a clean U." + - id: lr_bottom_exit_rl_top_entry_jog + source_dir: examples/topologies + category: Serpentine Layout + description: + "An LR section's bottom exit drops straight into the top entry of the + direction: RL section stacked directly below it. The receiving RL section + reserves an offset slot for a line that peels off inside it, so the descent + inherits that wider anchoring and lands square on the entry port with no + sideways jog at the boundary (issue #1212)." + - id: manual_rl_row_nonconsumer_bypass + source_dir: examples/topologies + category: Serpentine Layout + description: + "A manual-grid serpentine whose return row flows right to left via + direction: RL. A non-consumer line shares an exit bundle with a consumed + line but is not consumed by the intervening RL section, so it must bypass + around that section rather than route through its interior. The descent + column lands in the clear gap beside the intervening box and the line + loops below the whole row into its target (issue #1211)." + - id: packed_cell_cellmate_bypass + source_dir: examples/topologies + category: Serpentine Layout + description: + "The same non-consumer bypass as manual_rl_row_nonconsumer_bypass, but + the intervening section is packed into the same grid cell as the target + rather than given its own cell. The bypass must still loop around the + cell-mate's box instead of cutting straight through it (issue #1228)." + - id: packed_cell_cellmate_bypass_adjacent + source_dir: examples/topologies + category: Serpentine Layout + description: + "The packed-cell cell-mate bypass with the bypassing line's source section + sitting in the column immediately adjacent to the packed cell, with no gap + column to descend through. The bypass must still loop below the cell-mate's + box rather than collapse back to a straight run through its interior + (issue #1233)." + - id: branch_fold_forward + source_dir: examples/topologies + category: Serpentine Layout + description: + "A side branch (Aux) shares a topo column with the spine (Genome). At a low + fold threshold the serpentine packer skips that branch column as a fold point - folding + it would strand Genome's consumer (Post) behind it - and folds the spine instead, so + every inter-section edge flows forward and Genome's exit faces Post (issue #1080)." + - id: branch_fold_stability + source_dir: examples/topologies + category: Serpentine Layout + description: + "A wide side branch (Survey) shares a topo column with the spine and sits one + station below its fold threshold. Adding a station inside Survey must not re-grid the + downstream Report onto a backward return row: inter-section placement is a function of + the DAG, not of intra-section size (issue #1082)." + + # ── Bypass Routing ───────────────────────────────────────────────────────── + - id: inrow_skip_breeze + source_dir: examples/topologies + category: Bypass Routing + description: + An express line skips a station three collinear stations share; the geometric + bypass pass bows it around the skipped marker (#990). + - id: sectionless_skip_breeze + source_dir: examples/topologies + category: Bypass Routing + description: + A skip-line jumps between two stops on a graph with no declared section, + skipping the stops between them. Interchange inference detects the + parallel-lane hub and the detour routes around the skipped markers + instead of through them (#1229). + - id: bypass_fan_in_outer_slot + source_dir: examples/topologies + category: Bypass Routing + description: + "A bypass line (QC) skips hub and alignment to reach a deeper station (MultiQC + Report) in the Integration section, while dna/meth/rna/atac converge at a fan-in entry + port. The bypass line claims the outer slot so no empty interior gaps appear (issue #655)." + - id: upward_bypass + source_dir: examples/topologies + category: Bypass Routing + description: Tall section bypass where the trunk is above the source (upward gap1). + - id: bypass_label_rake + source_dir: examples/topologies + category: Bypass Routing + description: + A foreign line dips below a station to bypass its marker, then climbs back + to the trunk past the wide 'Quantification' label. The router lengthens the dip's flat + run so the climb seats clear of the glyphs (`_clear_bypass_v_label_strikes`). + - id: bypass_label_rake_left + source_dir: examples/topologies + category: Bypass Routing + description: + "Mirror of the bypass-label rake: the dip's descending leg, not its climb, + crosses the wide 'Quantification Step' label, so its V corner lands in the label's + left half and the router seats it clear of the left edge (`_clear_bypass_v_label_strikes`)." + - id: bypass_label_rake_wide + source_dir: examples/topologies + category: Bypass Routing + description: + "An extra-wide bypassed-station label the router cannot seat the V's flat-run + corner clear of: the strike-clearance loop pushes the bypassed node out by whole grid + columns until the dip clears the glyphs, widening rather than relying on the router's + partial corner-seating (issue #700)." + - id: bypass_v_tight + source_dir: examples/topologies + category: Bypass Routing + description: + "An intra-section bypass V at a tight column pitch: without room for a lead-in + the descent would diverge on the 'Process A' marker and rake its label. The engine pushes + the bypassed node to a further grid column so the V diverges past the label and keeps + a visible flat run through its X (issue #688)." + - id: fan_bypass_nesting + source_dir: examples/topologies + category: Bypass Routing + description: + "A junction fans to a straight continuation, three down-turns into stacked + rows, and one far-column bypass. The bypass joins the same concentric corner as the down-turns + and descends in the shared channel, peeling into its lane at the inter-row gap rather + than grazing the down-turn corners near the junction (issue #652)." + - id: divergent_fanout_split + source_dir: examples/topologies + category: Bypass Routing + description: + "One line fans out from a single source to a near and a far target in the row + below. The two descents stay fused as one trunk until the near branch turns off, so the + farther branch never peels onto the inside of the nearer one and crosses it (issue #702)." + - id: disjoint_sameline_trunks + source_dir: examples/topologies + category: Bypass Routing + description: + "Two lines diving into one below-row channel to bypass a section ride a tight + concentric bundle until a member peels up at its turn column, rather than being split + apart by a track reserved for a trunk that only appears further along the channel (issue + #702)." + - id: dogleg_exempt_distinct + source_dir: examples/topologies + category: Bypass Routing + description: + "A bypass line cleared off a different line's exempt wrap trunk in the inter-row + gap runs parallel above it as a tight bundle, rather than doglegging onto the crossing + side where its riser would pierce the wrap run twice (issue #702)." + - id: dogleg_exempt_sameline + source_dir: examples/topologies + category: Bypass Routing + description: + "Two opposing flows of one line fused in the inter-row gap are pulled apart + into a dogleg; the down-moved trunk stops short of the next row's section header badge, + keeping the required clearance rather than crowding it (issue #698)." + - id: dogleg_twoline_fanout + source_dir: examples/topologies + category: Bypass Routing + description: + "Two distinct lines leave one section through a shared exit junction to different + sections in the row below. They descend as one concentric bundle and split only where + the near line peels into its target while the far line continues over it, rather than + diverging at the junction and crossing (issue #719)." + - id: bypass_gap2_rightward_overflow + source_dir: examples/topologies + category: Bypass Routing + description: + A seven-line rightward bypass whose gap-2 bundle right edge overflows the inter-column + gap limit and is clamped, keeping the bundle inside the gap. + - id: bypass_leftward_overflow + source_dir: examples/topologies + category: Bypass Routing + description: + "A seven-line reverse-flow (right-to-left) bypass: the trunk leads out leftward, + the mirror of every other bypass. The concentric order and corner radii follow the trunk's + travel direction so the bundle fans cleanly instead of twisting at the descent corner + (issue #723)." + - id: bypass_leftward_far_side_entry + source_dir: examples/topologies + category: Bypass Routing + description: + "A seven-line reverse-flow bypass into a far-side LEFT entry: the source exits + its left edge and the target's entry port is on its own far (left) edge, so the bundle + wraps around below into the port from its outward side. The half-turn transposes the bundle, + so the target section's line order is reversed to match and no line crosses a mate (issue + #974)." + - id: exit_corner_offset_dogleg + source_dir: examples/topologies + category: Bypass Routing + description: + A passing line runs through a section on a per-line bundle offset, then exits + and bypasses a higher row to climb to a far target. The onward run keeps the line's offset + over the row-level traverse so it leaves the exit port straight, with the single level + change a clean riser at the far gap rather than a one-offset-step jog at the exit corner. + - id: convergent_offrow_exit_climb + source_dir: examples/topologies + category: Bypass Routing + description: + A single-row long-read variant-calling map. The annotation section carries + only snv and sv (the two highest-priority lines), reached through a bypass whose source + re-based them onto low slots. Its two-line bundle anchors on its own trunk rather than + inheriting the high global slots, so its markers sit on their rows and the run into reports + stays level. + - id: fold_bypass_creep + source_dir: examples/topologies + category: Bypass Routing + description: + A fold turns the calling section into a vertical bridge and a qc line forks + around its file terminus into a separate downstream report section. Keeping the bypass + feeds the bridge's height into the downstream section's placement, which settles one pass + later, so the report section seats at its converged Y in both validated and unvalidated + renders. + - id: fold_bypass_creep_tight + source_dir: examples/topologies + category: Bypass Routing + description: + The tight variant of the fold bypass, where the file terminus sits one row below + the forking station, so the qc bypass V seats on the trailing row. The folded + section's perpendicular exit corridor clears the V by a full station-flat length, so + the bypass run-out reads as a visible flat rather than collapsing onto the curve apex. + + # ── Merge & Convergence ──────────────────────────────────────────────────── + - id: merge_offrow_continuation + source_dir: examples/topologies + category: Merge & Convergence + description: + A perpendicular feeder re-slots at a multi-feeder merge port, and the single + re-joined line leaves the merge row before reaching its consumer one row up, so the bundle-offset + walk stops at the off-row exit rather than carrying the slot off the row. + - id: junction_entry_reversed_fold + source_dir: examples/topologies + category: Merge & Convergence + description: + "A two-line bundle exits a TB section's RIGHT side, wraps into a Source section, + then fans out at a junction into two same-row destinations. The bundle order is carried + concentrically through the reversal corners so the lines never cross at a station, and + the fan-out peels off cleanly (issue #760)." + - id: convergence_stacked_sink + source_dir: examples/topologies + category: Merge & Convergence + description: + A leaf sink that would otherwise sit alone in the spine band migrates into + the convergence return row (no grid-cell collision). + - id: terminus_join + source_dir: examples/topologies + category: Merge & Convergence + description: + Two lines converge on a single file-icon terminus in a sectionless flat graph, + so the join lands directly on the terminus rather than a synthesised convergence junction. + - id: merge_port_above_approach + source_dir: examples/topologies + category: Merge & Convergence + description: + "A line descending into a multi-feeder merge port from a section above keeps + the above-trunk slot all the way to the output, so its riser joins the bundle without + crossing the trunk on the outgoing run (issue #704)." + - id: junction_entry_collision + source_dir: examples/topologies + category: Merge & Convergence + description: + "A three-line fan-out where one line continues straight to its own destination + while the other two branch away: the straight line keeps a constant bundle slot across + the source exit so its trunk stays horizontal (issue #704)." + - id: junction_entry_align + source_dir: examples/topologies + category: Merge & Convergence + description: + "A two-line bundle whose order is preserved across the junction-to-entry-port + boundary, so the straight-through line stays horizontal instead of slanting to swap slots + (issue #704)." + - id: merge_trunk_out_of_range_section + source_dir: examples/topologies + category: Merge & Convergence + description: + Two same-row sources merge into one sink past an intervening section while + another row's section sits outside the merge column range, so the merge trunk keeps its + same-row bypass channel rather than crossing below the out-of-range section. + - id: merge_trunk_over_low_section + source_dir: examples/topologies + category: Merge & Convergence + description: + A same-row merge trunk bypasses past a tall intervening section while a lower-row + section sits within the merge column range. The inter-row gap clears the lower section's + header, so the trunk (and its branches) route through that gap rather than diving below + the whole canvas. + - id: merge_bottom_row_bypass + source_dir: examples/topologies + category: Merge & Convergence + description: + "A merge whose entry sits in the bottommost grid row: the trunk's inter-row + bypass routes in the cramped gap above that row. Placement reserves the gap so the channel + clears the upper row's section boxes instead of grazing them." + - id: merge_pullaway + source_dir: examples/topologies + category: Merge & Convergence + description: + One line converges on a merge from two stacked rows of the same column; the + cross-row feeder drops onto the trunk's pull-away bypass channel and the two travel as + a single stroke into the entry. + - id: merge_right_entry + source_dir: examples/topologies + category: Merge & Convergence + description: + "One line converges on a RIGHT entry whose consumer is the sink's flow-start + station: the sink flows right-to-left so the merge arrives beside its consumer, and the + trunk loops under the sink onto that channel rather than slicing across the box to the + far station (#885)." + - id: peeloff_riser_respace + source_dir: examples/topologies + category: Merge & Convergence + description: + "Four lines from two sources ride one shared bypass trunk and rise into a common + destination entry port, where the trunk-Y order and the entry-port slot order disagree. + Each source bundle keeps its declaration order at the peel-off corner instead of inverting + (issue #695)." + - id: peeloff_extra_line_consumer + source_dir: examples/topologies + category: Merge & Convergence + description: + "Same peel-off topology as peeloff_riser_respace but the destination section + also carries an extra internal branch (l5). The riser reorder must still fire and keep + the bundle crossing-free at the shared entry port regardless of extra lines in the consumer + section (issue #751)." + - id: merge_leftmost_sink_branch + source_dir: examples/topologies + category: Merge & Convergence + description: + "A leftward merge whose trunk reaches a leftmost-column sink's LEFT entry: + the trunk wraps to rise on the box's far (left) side, with the branch feeders converging + on its shared channel, rather than crossing the sink interior to the far-side port." + - id: merge_around_below_leftmost + source_dir: examples/topologies + category: Merge & Convergence + description: + "Two sources merging into a leftmost-column LEFT entry: the trunk routes around + the target's left side to enter from outside while the second merge target is reached + in-row." + - id: post_convergence_trunk + source_dir: examples/topologies + category: Merge & Convergence + description: + Two stacked inputs converge on a station inside one LR section. The merge station's + single linear successor continues flat on the merge row rather than dropping back onto + one of the incoming branch rows, so the post-merge trunk runs straight instead of zigzagging. + - id: junction_fanout_convergence + source_dir: examples/topologies + category: Merge & Convergence + description: + "Three lines converge into one joint-calling entry port: two bypass the intervening + sections and climb risers into the port while the third joins flat from the adjacent column. + The flat shallow feeder takes the port-near slot on top of the climbing pair so the bundle + turns into the port concentrically, instead of the flat line weaving across the risers + at the corner." + - id: aligner_row_pinned_continuation + source_dir: examples/topologies + category: Merge & Convergence + description: + Three sibling aligners feed one dedup hub that lands on the lead aligner's + row, while one aligner's line continues on a track pinned to the section bottom by hidden + continuation stations. The aligners stack on consecutive grid rows instead of the low-line + aligner being dragged down to crowd its neighbour and strand the middle row (#1071). + + # ── Inter-section Routing ────────────────────────────────────────────────── + - id: left_exit_sink_below + source_dir: examples/topologies + category: Inter-section Routing + description: + "A TB bridge's LEFT exit feeds a LEFT-entry sink one row below and to the + left: the bundle leads out left and drops straight down a channel clear of both boxes, + routing around the bridge rather than clawing back through its interior (issue #1083)." + - id: right_entry_gap_above_empty_row + source_dir: examples/topologies + category: Inter-section Routing + description: + "A right-entry feed from a source two rows above its target, where the target + flows right-to-left so its flow-start consumer sits at the entry edge: the feed loops + around below into the port beside the consumer rather than crossing the box and folding + back (#885)." + - id: corridor_narrow_gap_fallback + source_dir: examples/topologies + category: Inter-section Routing + description: + "A left-entry feed crosses two rows past a wider intervening section whose + inter-row gap is too narrow for the corridor's clearance band, so it falls back to the + around-below loop clear of that section while the adjacent feeder takes the corridor (issue + #722)." + - id: around_section_below + source_dir: examples/topologies + category: Inter-section Routing + description: + Cross-row route to a LEFT-entry target where the natural inter-row channel + would cut through an intervening section's bbox. Exercises `_route_around_section_below` + (collector-fan-in geometry). + - id: inter_row_wrap_clearance + source_dir: examples/topologies + category: Inter-section Routing + description: + A right-exit bundle wrapping down to a left-entry in the row below. The horizontal + run sits centred in the inter-row gap, clear of both the section above and the next row's + header. + - id: cross_col_top_entry + source_dir: examples/topologies + category: Inter-section Routing + description: + "A cross-column feed from a RIGHT-exit producer into a TOP-entry consumer: + the entry port is placed on the section boundary rather than floating above the canvas + (issue #740)." + - id: lr_top_entry_cross_column + source_dir: examples/topologies + category: Inter-section Routing + description: + "A TB section dropping from its BOTTOM exit into the TOP entry of an LR section + whose run sits left of the drop column: the LR run is shifted right under the drop and + the section bbox follows it so the trailing station stays contained (issue #1057)." + - id: lr_top_entry_cross_column_two_line + source_dir: examples/topologies + category: Inter-section Routing + description: + "Two lines dropping together from a TB BOTTOM exit into the TOP entry of an + LR section: the in-section line order follows the arrival order so the entry corner nests + concentrically and the bundle neither pinches nor crosses through the bend (issue #1061)." + - id: right_entry_wrap_no_fan + source_dir: examples/topologies + category: Inter-section Routing + description: + A single line wrapping from an LR exit into a cross-row RL section's RIGHT + entry, with no junction siblings (the solo `_route_right_entry_wrap` lead-in). + - id: left_entry_up_wrap + source_dir: examples/topologies + category: Inter-section Routing + description: + A two-line bundle wrapping up-and-left from a source below-and-right into a + cross-row section's LEFT entry (the `_route_left_entry_wrap` up-riser path); the bundle + order is preserved concentrically around the wrap. + - id: around_below_ep_col_gt0 + source_dir: examples/topologies + category: Inter-section Routing + description: + A two-line bundle looping around below the canvas into a non-zero-column LEFT-entry + target, past an intervening middle-row section that blocks the direct wrap. + - id: stacked_left_exit_drop + source_dir: examples/topologies + category: Inter-section Routing + description: + "A LEFT exit feeding a LEFT entry stacked directly below it: the connector + leads out into a clean channel left of the column and drops, rather than dropping straight + down the shared edge through the source box." + - id: right_entry_from_above + source_dir: examples/topologies + category: Inter-section Routing + description: + "A RIGHT entry whose consumer is the section's flow-start station: the section + flows right-to-left so the consumer sits at the entry edge and the feed enters beside + it, rather than running across the box to the far station and folding back (#885). Fed + from a higher row past the target's right edge, the line drops straight down its outward + side to the entry Y rather than looping below the box (#889)." + - id: right_entry_from_above_far + source_dir: examples/topologies + category: Inter-section Routing + description: + "A RIGHT entry fed from two rows up, past the target's right edge: the line + drops straight down its outward side across the empty intervening row to the entry Y and + turns in, rather than diving below the box and climbing back up (#889)." + - id: route_around_intervening + source_dir: examples/topologies + category: Inter-section Routing + description: + "A line skips a middle section: it routes around the intervening section's + bbox rather than slicing through it." + - id: cross_row_gap_wrap + source_dir: examples/topologies + category: Inter-section Routing + description: + A cross-row feed runs its horizontal in the inter-row gap and drops straight + in, rather than diving under the return row counter to its flow. + - id: rl_entry_runway + source_dir: examples/topologies + category: Inter-section Routing + description: + "A source section feeding a left-hand target via `%%metro exit: left`: it flows + right-to-left so its producers sit at the left exit edge and the runway leaves beside + them, rather than the producers exiting left back through the start station (#885)." + - id: lr_perp_top_exit_side_entry + source_dir: examples/topologies + category: Inter-section Routing + description: + Two co-travelling lines leave an LR section through an explicit TOP exit and + feed the LEFT entry of a same-row neighbour. The exit port sits past the last station, + and the bundle rises into the header band, runs across, and descends to the consumer's + row to enter straight, staying parallel through every concentric corner. + - id: lr_perp_bottom_exit_side_entry + source_dir: examples/topologies + category: Inter-section Routing + description: + "The BOTTOM-exit mirror of lr_perp_top_exit_side_entry: the bundle drops below + the source section, runs across the under-row band, and rises back to the consumer's + row to enter straight." + - id: lr_perp_top_exit_perp_entry + source_dir: examples/topologies + category: Inter-section Routing + description: + Two co-travelling lines leave an LR section through a TOP exit and feed the + TOP entry of a same-row neighbour in another column. The bundle rises over the header + band and drops into the consumer trunk, keeping a single left/right order across the shared + entry port so it stays parallel without crossing at the drop. + - id: lr_perp_bottom_exit_perp_entry + source_dir: examples/topologies + category: Inter-section Routing + description: + "The BOTTOM-exit mirror of lr_perp_top_exit_perp_entry: the bundle drops under + the row, runs across, and rises into the consumer's BOTTOM entry, staying parallel through + the corridor." + - id: lr_perp_top_exit_perp_entry_diverging + source_dir: examples/topologies + category: Inter-section Routing + description: + A TOP-exit bundle taken over the corridor into a TOP entry where the two lines + split to different downstream stations. Consistent corridor ordering routes each line + to its target without a convergence jog at the entry. + - id: cross_column_perp_drop + source_dir: examples/topologies + category: Inter-section Routing + description: + "A `%%metro direction: TB` section fed by a perpendicular drop from a section + in a different grid column. The vertical trunk stays on the QC section's own column and + the cross-column feed comes over the top and drops into the trunk head, rather than the + trunk being dragged out toward the off-column source." + - id: cross_column_perp_drop_far_exit + source_dir: examples/topologies + category: Inter-section Routing + description: + The cross-column perpendicular drop where the source's exit side faces away + from the target's entry side (a BOTTOM exit feeding a TOP entry). The lead-in crosses + to the inter-column gap and reaches the TOP entry from above the box, rather than rising + up the trunk through the section's stations. + - id: bottom_row_climb_clear_corridor + source_dir: examples/topologies + category: Inter-section Routing + description: + A section in the bottommost grid row sends a line up and across to a higher-row + target several columns away. The columns it spans hold no same-row section, so the line + runs along its own row level and climbs at the end rather than diving below the source + row to the canvas floor and looping back up. + - id: multicarrier_offrow_exit_climb + source_dir: examples/topologies + category: Inter-section Routing + description: + A section's exit port carries two lines from two stations that share a trunk + row off the port row, then fans out through a junction to several rows. The parallel bundle + anchors on the shared carrier row so it runs flat inside the section and the fan-out risers + fall in the inter-section gap, rather than both lines climbing a diagonal up to the port + inside the section. + - id: clear_channel_target_aware_push + source_dir: examples/topologies + category: Inter-section Routing + description: + A hub fans one line down into a wide section stacked directly below and another + down-and-right to a target. The fan descent for the rightward line grazes the wide block, + so the graze correction pushes it toward the target's side of the block rather than the + nearer edge, keeping the line heading to its target instead of detouring across the canvas. + - id: near_vertical_junction_hook + source_dir: examples/topologies + category: Inter-section Routing + description: + "A fan-out junction overhanging a same-column RIGHT entry one row below. The + two-line bundle drops straight down the junction's own column and turns once into the + port, rather than leading out to a centred gap channel and hooking back: a hook's opposite-handed + corners cannot nest a multi-line bundle. The destination section carries the matching + line order so the bundle arrives in the order the section lays it out (#1018)." + + # ── Off-track & Rails ────────────────────────────────────────────────────── + - id: off_track_convergence + source_dir: examples/topologies + category: Off-track & Rails + description: + Multiple off-track file inputs converging on a single consumer. The trunk stays + horizontal while the inputs stack above the consumer column. + - id: off_track_convergence_multiline + source_dir: examples/topologies + category: Off-track & Rails + description: + "A multi-line bundle enters a section and converges on a deep first station + that also consumes off-track file inputs. The consumer stays on the section trunk, level + with its continuation, rather than being dragged to the section floor (issue #650)." + - id: off_track_input_above_consumer + source_dir: examples/topologies + category: Off-track & Rails + description: + "A section whose mid-trunk station consumes an off-track input while a neighbouring + station feeds an off-track output. The input hugs one row above its consumer instead of + towering an extra slot up because it shares an anchor with the differently-columned output + (issue #651)." + - id: rail_inter_section + source_dir: examples/topologies + category: Off-track & Rails + description: + "Two `%%metro line_spread: rails` sections joined by an inter-section edge. + The connector wraps cleanly from the upstream right exit port, down the right margin, + across the inter-section gap, and down the left margin into the downstream left entry + port - no dangling port stubs and no avoidable crossings between co-travelling lines." + - id: rail_offtrack_io + source_dir: examples/topologies + category: Off-track & Rails + description: + "A `%%metro line_spread: rails` section with off-track `%%metro file:` input + and output. Each off-track file terminus carries a buffer-stop nub at the rail-side end + of its vertical stub (like the on-rail CRAM/VCF termini) seated clear of its under-icon + caption, rather than the line ending bare at the icon." + - id: rail_offtrack_plain_io + source_dir: examples/topologies + category: Off-track & Rails + description: + "A `%%metro line_spread: rails` section with plain (non-file) off-track input + and output. Each plain off-track node renders a station marker at its line end rather + than a bare stub, and the input's label sits above the node clear of its drop and the + adjacent station's label." + +pipelines: + - id: rnaseq_auto + title: nf-core/rnaseq + repo_url: https://github.com/nf-core/rnaseq + description: + RNA-seq analysis with multiple aligner and quantification routes (STAR/RSEM, + STAR/Salmon, HISAT2, Salmon pseudo-alignment, Kallisto). + - id: sarek_metro + title: nf-core/sarek + repo_url: https://github.com/nf-core/sarek + description: + Germline and somatic variant calling, covering germline, tumor-only, and tumor-normal + paired analysis through SNP/indel, SV/CNV, and MSI callers with downstream variant annotation. + - id: epitopeprediction + title: nf-core/epitopeprediction + repo_url: https://github.com/nf-core/epitopeprediction + description: + MHC binding prediction from VCF, protein FASTA, or peptide TSV inputs through + five prediction tools. + - id: hlatyping + title: nf-core/hlatyping + repo_url: https://github.com/nf-core/hlatyping + description: HLA typing from FASTQ or BAM inputs via OptiType and HLA-HD. + - id: variantprioritization + title: nf-core/variantprioritization + repo_url: https://github.com/nf-core/variantprioritization + description: Somatic and germline variant prioritization using PCGR and CPSR. + - id: variantbenchmarking + title: nf-core/variantbenchmarking + repo_url: https://github.com/nf-core/variantbenchmarking + description: + Benchmarking of variant callers against truth sets with Truvari, hap.py, RTGtools, + and more. + - id: genomeassembly + title: sanger-tol/genomeassembly + repo_url: https://github.com/sanger-tol/genomeassembly + description: + Genome assembly from long reads and Hi-C data through purging, polishing, scaffolding, + and QC. + - id: seqinspector + title: nf-core/seqinspector + repo_url: https://github.com/nf-core/seqinspector + description: + Dedicated QC-only pipeline for sequencing data, running FASTQ, BAM, and run-folder + QC tools in parallel and aggregating everything into a MultiQC report. + +# Stems rendered for the CI render-diff only (not shown on gallery/pipelines pages). +# These supplement the auto-discovered guide/*.mmd and tests/fixtures/nextflow/*.mmd globs. +render_only: + # Stems from examples/ rendered into the "Guide Examples" render-diff section. + # rnaseq_sections_manual is the manually-gridded companion to rnaseq_auto. + guide_examples: + - rnaseq_auto + - variantbenchmarking + - variantbenchmarking_auto + - marker_styles + - rnaseq_sections_manual + # Hand-tuned Nextflow DAG conversions from examples/; output name differs from stem. + nextflow_conversions: + - { id: variant_calling, output: nf_variant_calling_tuned } + - { id: variant_calling_tuned, output: nf_variant_calling_tuned_icons } + # Stems from tests/fixtures/ rendered into the "Test Fixtures" render-diff section. + test_fixtures: + - multiline_labels + - rnaseq_simple + - genomeassembly_organellar diff --git a/scripts/guard_cost_audit.py b/scripts/guard_cost_audit.py new file mode 100644 index 000000000..3d4c83ea0 --- /dev/null +++ b/scripts/guard_cost_audit.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python3 +"""Time every ``validate=True`` guard and routing check over the corpus. + +The guard suite is gated behind ``validate=True``, which the ``render`` path +never sets, so end users get no protection from the ``_guard_*`` functions in +``phases/guards.py`` or the ``check_*`` invariants in ``routing/invariants.py``. +Promoting a cheap subset to always-on (see ``docs/dev/guard_tiers.md``) needs a +measured per-guard cost so the always-on tier can be picked on evidence rather +than guesswork. + +This tool lays out each fixture once (``validate=False``), computes the shared +``offsets`` / ``routes`` a guard run inspects, then times each registered guard +and each routing check against that final state. It reports a per-guard table +(total + mean-per-fixture microseconds, raise count) sorted by cost and a tier +proposal: guards cheaper than ``--tier-a-threshold`` mean microseconds are +flagged as Tier-A (always-on) candidates. + +Usage:: + + python scripts/guard_cost_audit.py # examples/ + topologies + python scripts/guard_cost_audit.py --json out.json + python scripts/guard_cost_audit.py --repeats 5 # average noisy timings +""" + +from __future__ import annotations + +import argparse +import json +import sys +import time +import warnings +from pathlib import Path +from typing import Any, Callable + +REPO_ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(REPO_ROOT / "src")) + +from nf_metro.layout.engine import compute_layout # noqa: E402 +from nf_metro.layout.phases.guards import GUARD_REGISTRY # noqa: E402 +from nf_metro.layout.routing import ( # noqa: E402 + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.invariants import CHECK_REGISTRY # noqa: E402 +from nf_metro.parser.mermaid import parse_metro_mermaid # noqa: E402 + + +def discover_fixtures() -> list[Path]: + """Every ``%%metro``-format ``.mmd`` under ``examples/`` + ``topologies``. + + Mirrors ``tests/test_engine_guards_perf._discover_fixtures`` but restricted + to the shipping examples corpus the audit targets. + """ + roots = [REPO_ROOT / "examples", REPO_ROOT / "examples" / "topologies"] + out: list[Path] = [] + seen: set[Path] = set() + for root in roots: + if not root.exists(): + continue + for p in sorted(root.glob("*.mmd")): + if p in seen: + continue + if "%%metro" not in p.read_text(errors="ignore"): + continue + seen.add(p) + out.append(p) + return out + + +def _time_call(fn: Callable[..., Any], repeats: int) -> tuple[float, bool]: + """Return ``(min_seconds, raised)`` over ``repeats`` calls of ``fn``.""" + best = float("inf") + raised = False + for _ in range(repeats): + t0 = time.perf_counter() + try: + fn() + except Exception: # noqa: BLE001 - a raising guard is a valid outcome + raised = True + best = min(best, time.perf_counter() - t0) + return best, raised + + +def audit(fixtures: list[Path], repeats: int) -> dict[str, dict[str, Any]]: + """Accumulate per-guard / per-check timings across the fixture corpus.""" + stats: dict[str, dict[str, Any]] = {} + + def record(kind: str, name: str, seconds: float, raised: bool) -> None: + s = stats.setdefault( + name, + {"kind": kind, "total_s": 0.0, "fixtures": 0, "raises": 0}, + ) + s["total_s"] += seconds + s["fixtures"] += 1 + s["raises"] += int(raised) + + tier_by_name = {spec.name: spec.tier for spec in (*GUARD_REGISTRY, *CHECK_REGISTRY)} + + for path in fixtures: + graph = parse_metro_mermaid(path.read_text()) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + compute_layout(graph, validate=False) + offsets = compute_station_offsets(graph) + try: + routes = route_edges(graph, station_offsets=offsets) + except Exception: # noqa: BLE001 + routes = None + pool: dict[str, Any] = { + "graph": graph, + "routes": routes, + "offsets": offsets, + } + + for spec in GUARD_REGISTRY: + if "routes" in spec.needs and routes is None: + continue + kwargs = {n: pool[n] for n in spec.needs if n in pool} + seconds, raised = _time_call( + lambda s=spec, k=kwargs: s.fn(graph, "audit", **k), repeats + ) + record("guard", spec.name, seconds, raised) + + for spec in CHECK_REGISTRY: + if "routes" in spec.needs and routes is None: + continue + kwargs = {n: pool[n] for n in spec.needs} + seconds, raised = _time_call(lambda f=spec.fn, k=kwargs: f(**k), repeats) + record("check", spec.name, seconds, raised) + + for name, s in stats.items(): + s["mean_us"] = (s["total_s"] / s["fixtures"]) * 1e6 if s["fixtures"] else 0.0 + s["total_us"] = s["total_s"] * 1e6 + s["tier"] = tier_by_name.get(name) + return stats + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument("--json", type=Path, help="write the raw table to this path") + ap.add_argument( + "--repeats", + type=int, + default=3, + help="time each guard N times per fixture and keep the min (default 3)", + ) + ap.add_argument( + "--tier-a-threshold", + type=float, + default=50.0, + help="mean microseconds below which a guard is a Tier-A candidate", + ) + args = ap.parse_args() + + fixtures = discover_fixtures() + if not fixtures: + print("no fixtures found", file=sys.stderr) + return 1 + stats = audit(fixtures, args.repeats) + + rows = sorted(stats.items(), key=lambda kv: kv[1]["mean_us"], reverse=True) + print( + f"# guard cost audit over {len(fixtures)} fixtures (repeats={args.repeats})\n" + ) + print( + f"{'guard / check':<52}{'kind':<7}{'mean us':>10}{'total us':>11}" + f"{'raises':>8}{'tier':>6}" + ) + print("-" * 94) + for name, s in rows: + print( + f"{name:<52}{s['kind']:<7}{s['mean_us']:>10.1f}{s['total_us']:>11.0f}" + f"{s['raises']:>8}{(s['tier'] or '-'):>6}" + ) + + cheap = [n for n, s in rows if s["mean_us"] < args.tier_a_threshold] + print( + f"\nTier-A candidates (<{args.tier_a_threshold:.0f} us mean): " + f"{len(cheap)} of {len(stats)}" + ) + for n in cheap: + print(f" {n}") + + if args.json: + args.json.write_text(json.dumps(stats, indent=2, sort_keys=True) + "\n") + print(f"\nwrote {args.json}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/list_topology_fixtures.py b/scripts/list_topology_fixtures.py new file mode 100644 index 000000000..d86a042ae --- /dev/null +++ b/scripts/list_topology_fixtures.py @@ -0,0 +1,54 @@ +"""Print the topology fixture catalogue: all .mmd files in examples/topologies/, +their %%metro title, and whether they are already named in the README. + +Usage: + python scripts/list_topology_fixtures.py + +The script compares fixtures on disk against names mentioned anywhere in +examples/topologies/README.md and prints a count summary. Pipe to a file or +copy the output into the README's "Regression Catalogue" section. +""" + +from __future__ import annotations + +import re +import sys +from pathlib import Path + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" +README_PATH = TOPOLOGIES_DIR / "README.md" + + +def _title(mmd: Path) -> str: + for line in mmd.read_text().splitlines(): + m = re.match(r"%%metro\s+title:\s*(.*)", line) + if m: + return m.group(1).strip() + return mmd.stem + + +def main() -> None: + fixtures = sorted(TOPOLOGIES_DIR.glob("*.mmd")) + readme_text = README_PATH.read_text() + documented = { + name + for name in (f.stem for f in fixtures) + if name in readme_text + } + undocumented = [f for f in fixtures if f.stem not in documented] + + print(f"Total fixtures : {len(fixtures)}") + print(f"In README : {len(documented)}") + print(f"Not in README : {len(undocumented)}") + print() + + if undocumented: + print("Undocumented fixtures:") + for f in undocumented: + print(f" {f.name:55s} {_title(f)}") + else: + print("All fixtures are mentioned in the README.") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/render_topologies.py b/scripts/render_topologies.py new file mode 100644 index 000000000..d56405bcb --- /dev/null +++ b/scripts/render_topologies.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +"""Batch render all .mmd files in the repository to SVG and PNG. + +Usage: + python scripts/render_topologies.py + python scripts/render_topologies.py --output-dir /tmp/my_renders +""" + +from __future__ import annotations + +import argparse +import hashlib +import sys +import tempfile +from pathlib import Path + +# Add project root to path +project_root = Path(__file__).parent.parent +sys.path.insert(0, str(project_root / "src")) + +from nf_metro.convert import convert_nextflow_dag # noqa: E402 +from nf_metro.layout.engine import compute_layout # noqa: E402 +from nf_metro.parser.mermaid import parse_metro_mermaid # noqa: E402 +from nf_metro.render.svg import render_svg # noqa: E402 +from nf_metro.themes import THEMES # noqa: E402 + +NEXTFLOW_DIR = project_root / "tests" / "fixtures" / "nextflow" + + +def _collect_mmd_files() -> list[Path]: + """Collect all .mmd files in the repo, excluding .git. + + When two files have identical content, only the first is kept + (sorted order means examples/ wins over tests/fixtures/). + """ + all_paths = sorted(p for p in project_root.rglob("*.mmd") if ".git" not in p.parts) + seen_hashes: dict[str, Path] = {} + result: list[Path] = [] + for p in all_paths: + content = p.read_text() + h = hashlib.sha256(content.encode()).hexdigest() + if h in seen_hashes: + continue + seen_hashes[h] = p + result.append(p) + return result + + +def render_file( + mmd_path: Path, + output_dir: Path, + *, + debug: bool = False, + straight_diamonds: bool = False, +) -> tuple[str, list[str]]: + """Parse, layout, and render a .mmd file to SVG (and optionally PNG). + + Returns (name, list_of_issues). The output filename is derived from + the path relative to the project root so files in different directories + don't collide. + """ + rel = mmd_path.relative_to(project_root) + name = str(rel).replace("/", "_").removesuffix(".mmd") + is_nextflow = NEXTFLOW_DIR in mmd_path.parents or mmd_path.parent == NEXTFLOW_DIR + issues: list[str] = [] + + try: + text = mmd_path.read_text() + if is_nextflow: + text = convert_nextflow_dag(text) + graph = parse_metro_mermaid(text) + except Exception as e: + return name, [f"PARSE ERROR: {e}"] + + if straight_diamonds: + graph.diamond_style = "straight" + + try: + compute_layout(graph) + except Exception as e: + return name, [f"LAYOUT ERROR: {e}"] + + theme_name = graph.style if graph.style in THEMES else "nfcore" + theme = THEMES[theme_name] + + try: + # chrome_css=False bakes concrete colors so the cairosvg PNG step below + # works (cairosvg cannot parse the var() chrome custom properties). + svg_str = render_svg(graph, theme, debug=debug, chrome_css=False) + except Exception as e: + return name, [f"RENDER ERROR: {e}"] + + svg_path = output_dir / f"{name}.svg" + svg_path.write_text(svg_str) + + # Try PNG conversion via cairosvg (optional) + try: + import cairosvg + + png_path = output_dir / f"{name}.png" + cairosvg.svg2png(bytestring=svg_str.encode(), write_to=str(png_path), scale=2) + except ImportError: + issues.append("cairosvg not available, skipping PNG") + except Exception as e: + issues.append(f"PNG conversion error: {e}") + + return name, issues + + +def main(): + parser = argparse.ArgumentParser( + description="Batch render all .mmd files in the repo", + ) + parser.add_argument( + "--output-dir", + type=Path, + default=None, + help="Output directory (default: unique temp dir)", + ) + parser.add_argument( + "--debug", + action="store_true", + help="Enable debug overlay", + ) + parser.add_argument( + "--straight-diamonds", + action="store_true", + help="Keep top branch of diamond fork-joins on the main track", + ) + args = parser.parse_args() + + if args.output_dir is not None: + output_dir = args.output_dir + output_dir.mkdir(parents=True, exist_ok=True) + else: + output_dir = Path(tempfile.mkdtemp(prefix="nf_metro_renders_")) + + all_files = _collect_mmd_files() + print(f"Rendering {len(all_files)} files to {output_dir}/") + if args.debug: + print("Debug overlay: ON") + if args.straight_diamonds: + print("Straight diamonds: ON") + print() + + # Dry-run to get output names for alignment + max_name_len = max( + len(str(f.relative_to(project_root)).replace("/", "_").removesuffix(".mmd")) + for f in all_files + ) + any_errors = False + + for mmd_path in all_files: + name, issues = render_file( + mmd_path, + output_dir, + debug=args.debug, + straight_diamonds=args.straight_diamonds, + ) + status = "OK" if not issues else "ISSUES" + if any("ERROR" in i for i in issues): + status = "FAIL" + any_errors = True + + print(f" {name:<{max_name_len}} [{status}]") + for issue in issues: + print(f" - {issue}") + + print(f"\nOutputs in: {output_dir}/") + + if any_errors: + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/scripts/routing_gate_coverage.py b/scripts/routing_gate_coverage.py new file mode 100644 index 000000000..890b61ca9 --- /dev/null +++ b/scripts/routing_gate_coverage.py @@ -0,0 +1,624 @@ +#!/usr/bin/env python3 +"""Map every topology-conditional gate in ``layout/routing/`` to the fixtures +that exercise each of its arms. + +The routing subpackage dispatches each edge through priority-ordered handlers +and sequential post-passes. Every ``if``/``while`` in those modules is a +*gate* with two arms; a gate written for the topologies in hand can fire (or +fail to fire) on a novel topology and produce a visual defect. This tool +renders the whole ``examples/`` corpus under per-fixture branch coverage, +restricted to the routing modules, and reports for each gate arm which +fixtures reach it -- turning "every new pipeline stress-tests every implicit +assumption" into a finite, enumerated checklist. + +Usage:: + + python scripts/routing_gate_coverage.py # print markdown matrix + python scripts/routing_gate_coverage.py --write # regenerate doc + baseline + python scripts/routing_gate_coverage.py --json # machine-readable dump + +The reusable entry point is :func:`compute_gate_coverage`, imported by +``tests/test_routing_gate_coverage.py`` to ratchet the gap set: a new gate +must ship with a fixture hitting both arms, and closing a gap tightens the +baseline. +""" + +from __future__ import annotations + +import argparse +import ast +import hashlib +import json +import os +import sys +from dataclasses import dataclass, field +from pathlib import Path + +PROJECT_ROOT = Path(__file__).resolve().parent.parent +ROUTING_DIR = PROJECT_ROOT / "src" / "nf_metro" / "layout" / "routing" +DOC_PATH = PROJECT_ROOT / "docs" / "dev" / "routing_gate_coverage.md" +BASELINE_PATH = PROJECT_ROOT / "tests" / "data" / "routing_gate_coverage_baseline.json" +# Curated per-gate triage verdicts, keyed by ``Gate.key``: a gap that no fixture +# can ever close because the arm is a defensive guard or unreachable. Rendered as +# the matrix's Triage column so a triaged arm is not re-investigated. +TRIAGE_PATH = PROJECT_ROOT / "tests" / "data" / "routing_gate_triage.json" + +# Accepted triage verdicts. ``reachable`` is absent by design: a fixture closes +# such an arm, dropping it from the gap set rather than recording a verdict. +TRIAGE_STATUSES = frozenset({"defensive", "candidate-dead", "needs-review"}) + +# ``coverage`` derives a module's branch arcs from CPython bytecode, whose arc +# model shifts between interpreter versions (e.g. 3.12 splits short-circuit +# ``and``/``or`` operands into separate arms). The matrix and baseline are +# therefore a single-interpreter artifact; regenerate and ratchet under this +# version. +BASELINE_PYTHON = (3, 11) + +# Operand-level arc coverage is also sensitive to the interpreter's hash seed: +# the layout engine iterates hash-ordered sets while rendering, so which operand +# of a short-circuit ``and``/``or`` decides the branch can vary run to run even +# though the rendered SVG is identical. Pinning the seed makes the matrix and +# baseline reproducible (the sibling of the interpreter-version pin above); the +# sweep re-execs under this value when invoked without it. +PINNED_HASH_SEED = "0" + +# The gate matrix scopes to routing *decision* modules: the dispatch handlers +# and the post-routing passes. ``invariants.py`` is the validator (its branches +# only fire under ``validate=True``, a separate test surface), and ``__init__`` +# is re-exports; neither holds a topology gate. +EXCLUDED_MODULES = {"__init__.py", "invariants.py"} + + +def ensure_pinned_hash_seed() -> None: + """Re-exec under :data:`PINNED_HASH_SEED` unless it is already in effect. + + Hash randomization is fixed at interpreter start, so a sweep that wants + reproducible operand-level coverage must run under a known seed. When the + seed differs (the default randomized seed, or any other value) this re-execs + the same command with the seed pinned; on the second pass the early return + lets it proceed. + """ + if os.environ.get("PYTHONHASHSEED") == PINNED_HASH_SEED: + return + os.execve( + sys.executable, + [sys.executable, *sys.argv], + {**os.environ, "PYTHONHASHSEED": PINNED_HASH_SEED}, + ) + + +@dataclass +class GateArm: + """One arm of a gate: the branch to ``dst_line`` and the fixtures taking it.""" + + dst_line: int + fixtures: list[str] = field(default_factory=list) + + @property + def covered(self) -> bool: + return bool(self.fixtures) + + +@dataclass +class Gate: + """A single branch point (``if``/``while``/comprehension filter).""" + + module: str + src_line: int + code: str + occurrence: int # 1-based index of this code text within the module + arms: list[GateArm] = field(default_factory=list) + + @property + def key(self) -> str: + """Line-shift-stable identity: module + source text + occurrence.""" + return f"{self.module}::{self.code}::#{self.occurrence}" + + @property + def fully_covered(self) -> bool: + return all(a.covered for a in self.arms) + + def to_payload(self) -> dict: + """Serialize to the ``--json`` dump's per-gate shape.""" + return { + "module": self.module, + "line": self.src_line, + "code": self.code, + "occurrence": self.occurrence, + "fully_covered": self.fully_covered, + "arms": [{"dst": a.dst_line, "fixtures": a.fixtures} for a in self.arms], + } + + @classmethod + def from_payload(cls, entry: dict) -> Gate: + """Reconstruct a gate from one :meth:`to_payload` entry.""" + gate = cls( + module=entry["module"], + src_line=entry["line"], + code=entry["code"], + occurrence=entry["occurrence"], + ) + gate.arms = [GateArm(a["dst"], list(a["fixtures"])) for a in entry["arms"]] + return gate + + +def _collect_corpus() -> list[tuple[Path, bool]]: + """Every ``.mmd`` in the render corpus as ``(path, is_nextflow)``, deduped by + content (sorted order). + + Mirrors ``tests/conftest.py``'s ``content_corpus``: the ``examples/`` tree + (``rglob`` already subsumes ``examples/topologies`` and ``examples/guide``), + the loose ``tests/fixtures/`` fixtures, and the Nextflow-DAG fixtures under + ``tests/fixtures/nextflow/`` (which need ``convert_nextflow_dag`` before + parsing). Widening past the original ``examples/``-only scope lets the test + fixtures retire gate arms the gallery never reaches. Unlike + ``content_corpus`` this keeps the ``rails`` fixtures -- their rail router is + a routing path the matrix should measure, not skip. + """ + examples = PROJECT_ROOT / "examples" + fixtures = PROJECT_ROOT / "tests" / "fixtures" + nextflow = fixtures / "nextflow" + sources: list[tuple[list[Path], bool]] = [ + (sorted(examples.rglob("*.mmd")), False), + (sorted(fixtures.glob("*.mmd")), False), + (sorted(nextflow.glob("*.mmd")), True), + ] + candidates = [(p, is_nextflow) for paths, is_nextflow in sources for p in paths] + + seen: set[str] = set() + out: list[tuple[Path, bool]] = [] + for path, is_nextflow in candidates: + h = hashlib.sha256(path.read_bytes()).hexdigest() + if h in seen: + continue + seen.add(h) + out.append((path, is_nextflow)) + return out + + +def _render_under_coverage(corpus: list[tuple[Path, bool]]): + """Render every fixture under its own coverage context; return the data.""" + import coverage + + # ``data_file=None`` keeps the arc data in memory: the script writes no + # ``.coverage`` file, and concurrent ratchet-test workers under ``pytest -n + # auto`` each get a private in-memory store rather than racing one on-disk + # sqlite file. + cov = coverage.Coverage(branch=True, source=[str(ROUTING_DIR)], data_file=None) + cov.start() + + # Import inside the measured region so module-level branches are attributed, + # then render each fixture on the production path (validate=False). + from nf_metro.convert import convert_nextflow_dag + from nf_metro.layout.engine import compute_layout + from nf_metro.parser.mermaid import parse_metro_mermaid + from nf_metro.render.svg import render_svg + from nf_metro.themes import THEMES + + for path, is_nextflow in corpus: + ctx = str(path.relative_to(PROJECT_ROOT)) + cov.switch_context(ctx) + try: + text = path.read_text() + if is_nextflow: + text = convert_nextflow_dag(text) + graph = parse_metro_mermaid(text) + compute_layout(graph) + theme = THEMES[graph.style if graph.style in THEMES else "nfcore"] + render_svg(graph, theme) + except Exception as exc: # noqa: BLE001 - a broken fixture must not abort the sweep + print(f" WARN: {ctx} failed to render: {exc}", file=sys.stderr) + + cov.stop() + return cov + + +def _expandable_boolean_conditions( + source: str, +) -> dict[int, tuple[str, list[int], int]]: + """Map each cleanly operand-expandable multi-line ``and``/``or`` condition to + ``(operator, operand_lines, body_line)``, keyed by the opening ``if``/``while`` + line. + + CPython emits no branch bytecode at the opening line of a wrapped boolean + condition -- the short-circuit branches live on the operand lines -- so the + static arc coverage attributes to the opening line is *phantom*. This finds + the conditions whose operand structure is simple enough to re-attribute the + decision to its operand lines without guessing: each operand is single-line + and not itself a ``BoolOp``, and the operands sit on strictly increasing, + distinct lines. Anything more tangled (a nested ``and``/``or``, an operand + spanning lines, two operands sharing a line) is omitted, leaving the caller + on coverage's collapsed view rather than risking a wrong operand attribution. + """ + out: dict[int, tuple[str, list[int], int]] = {} + for node in ast.walk(ast.parse(source)): + if not isinstance(node, (ast.If, ast.While)): + continue + test = node.test + if not isinstance(test, ast.BoolOp) or test.lineno == test.end_lineno: + continue + operands = test.values + lines = [o.lineno for o in operands] + if any(isinstance(o, ast.BoolOp) for o in operands): + continue + if any(o.lineno != o.end_lineno for o in operands): + continue + if lines != sorted(set(lines)): + continue + op = "or" if isinstance(test.op, ast.Or) else "and" + out[node.lineno] = (op, lines, node.body[0].lineno) + return out + + +def _operand_arms( + dsts: list[int], + condition: tuple[str, list[int], int], + executed_from_operands: set[tuple[int, int]], +) -> list[tuple[int, list[int]]] | None: + """Decompose a phantom boolean gate into one ``(operand_line, [dsts])`` per + operand, or ``None`` to fall back to the collapsed opening-line gate. + + The collapsed gate has exactly two destinations: the body (``condition``'s + ``body_line``) and the else/loop-back line. Each operand short-circuits to + one of them (``or`` -> body when true, ``and`` -> else when false) or, when + it does not decide, falls through to the next operand line; the final operand + takes the remaining destination. The synthesized arcs are validated against + the arcs actually executed from the operand lines: if any executed arc is + unaccounted for, the model of this condition is wrong and we fall back. + """ + op, operand_lines, body_line = condition + if len(dsts) != 2: + return None + else_candidates = [d for d in dsts if d != body_line] + if len(else_candidates) != 1: + return None + else_line = else_candidates[0] + + synthesized: set[tuple[int, int]] = set() + specs: list[tuple[int, list[int]]] = [] + for i, line in enumerate(operand_lines): + is_last = i == len(operand_lines) - 1 + if op == "or": + decided = body_line + fallthrough = else_line if is_last else operand_lines[i + 1] + else: + decided = else_line + fallthrough = body_line if is_last else operand_lines[i + 1] + specs.append((line, sorted({decided, fallthrough}))) + synthesized.add((line, decided)) + synthesized.add((line, fallthrough)) + + if not executed_from_operands <= synthesized: + return None + return specs + + +def _build_gate( + module: str, + src_line: int, + dsts: list[int], + hitter_index: dict[tuple[int, int], list[str]], + source_lines: list[str], + code_seen: dict[str, int], +) -> Gate: + """Construct a :class:`Gate` at ``src_line`` with one arm per destination. + + ``code_seen`` is the module-wide occurrence counter that keys gates by their + source text, so it must be shared across collapsed and operand-level gates. + """ + code = ( + source_lines[src_line - 1].strip() + if 0 < src_line <= len(source_lines) + else "" + ) + occurrence = code_seen.get(code, 0) + 1 + code_seen[code] = occurrence + gate = Gate(module=module, src_line=src_line, code=code, occurrence=occurrence) + for dst in sorted(dsts): + gate.arms.append(GateArm(dst, hitter_index.get((src_line, dst), []))) + return gate + + +def compute_gate_coverage() -> list[Gate]: + """Render the corpus and return one :class:`Gate` per routing branch point. + + Each gate carries its arms, and each arm the sorted list of fixtures that + exercise it. An arm with no fixtures is an un-exercised gate arm. + """ + corpus = _collect_corpus() + fixtures = [str(p.relative_to(PROJECT_ROOT)) for p, _ in corpus] + cov = _render_under_coverage(corpus) + data = cov.get_data() + measured = sorted(data.measured_files()) + reporters = {f: cov._get_file_reporter(f) for f in measured} + + # Invert the per-fixture arc sets into an ``arc -> fixtures`` index per file + # in one pass. Iterating fixtures in sorted order yields sorted fixture + # lists for free. + # + # The tracer records the executed transition from the *physical* line that + # holds the branch bytecode -- an operand line of a wrapped ``if (`` or the + # first element of a multi-line body -- whereas ``FileReporter.arcs()`` + # attributes the static arc to the multi-line statement's *opening* line. + # ``translate_arcs`` collapses each physical endpoint onto that logical + # first line, so a genuinely-taken branch lands on the same arc the static + # view names instead of looking un-exercised. + # ``phys_hitters`` keeps the *untranslated* physical arcs: a wrapped boolean + # condition's operand line is the real branch source that the translated view + # collapses onto the opening line. + arc_hitters: dict[str, dict[tuple[int, int], list[str]]] = {f: {} for f in measured} + phys_hitters: dict[str, dict[tuple[int, int], list[str]]] = { + f: {} for f in measured + } + for fx in fixtures: + data.set_query_context(fx) + for f in measured: + raw = data.arcs(f) or [] + for arc in raw: + phys_hitters[f].setdefault(arc, []).append(fx) + for arc in reporters[f].translate_arcs(raw): + arc_hitters[f].setdefault(arc, []).append(fx) + + gates: list[Gate] = [] + for f in measured: + module = Path(f).name + if module in EXCLUDED_MODULES: + continue + # ``FileReporter.arcs()`` is coverage's plugin-API view of every + # possible branch arc; pairing it with the executed-arc index above + # reveals which arms no fixture takes. + possible = reporters[f].arcs() + if not possible: + continue + source = Path(f).read_text() + source_lines = source.splitlines() + boolean_conditions = _expandable_boolean_conditions(source) + phys_src_lines = {arc[0] for arc in phys_hitters[f]} + + # Group possible arcs by source line; a gate is a line with >=2 arms. + arcs_by_src: dict[int, list[int]] = {} + for src, dst in possible: + if src < 0: + continue + arcs_by_src.setdefault(src, []).append(dst) + + code_seen: dict[str, int] = {} + for src_line in sorted(arcs_by_src): + dsts = arcs_by_src[src_line] + if len(dsts) < 2: + continue # not a branch point + + # A wrapped boolean ``if (``/``while (`` carries no branch bytecode + # at its opening line (no physical arc originates there); its arms + # are phantom. Re-attribute the decision to its operand lines so a + # genuinely un-exercised short-circuit branch surfaces as its own + # gate instead of hiding behind the collapsed opening-line arm. + condition = boolean_conditions.get(src_line) + if condition is not None and src_line not in phys_src_lines: + operand_lines = set(condition[1]) + executed = {a for a in phys_hitters[f] if a[0] in operand_lines} + specs = _operand_arms(dsts, condition, executed) + if specs is not None: + for operand_line, operand_dsts in specs: + gates.append( + _build_gate( + module, + operand_line, + operand_dsts, + phys_hitters[f], + source_lines, + code_seen, + ) + ) + continue + + gates.append( + _build_gate( + module, src_line, dsts, arc_hitters[f], source_lines, code_seen + ) + ) + + return gates + + +def gates_from_payload(payload: list[dict]) -> list[Gate]: + """Reconstruct :class:`Gate` objects from the ``--json`` dump. + + Lets a caller obtain gates from a seed-pinned subprocess (see + :data:`PINNED_HASH_SEED`) rather than computing them in-process, which keeps + operand-level coverage reproducible. + """ + return [Gate.from_payload(entry) for entry in payload] + + +def gap_keys(gates: list[Gate]) -> list[str]: + """Stable keys of gates with at least one un-exercised arm.""" + return sorted(g.key for g in gates if not g.fully_covered) + + +def triage_stale_keys( + gates: list[Gate], triage: dict[str, dict[str, str]] +) -> list[str]: + """Triage keys that do not name a current gate with an un-exercised arm. + + A verdict is valid only while its gate stays a gap; one whose gate the + corpus fully exercises (or whose key text has diverged from the source) is + stale and must be removed so the sidecar cannot mis-describe a closed gate. + """ + return sorted(set(triage) - set(gap_keys(gates))) + + +def load_triage() -> dict[str, dict[str, str]]: + """Curated ``{gate key -> {status, note}}`` verdicts for un-closable gaps. + + Returns an empty mapping when the sidecar is absent (the matrix renders + without a Triage column). Each value's ``status`` must be one of + :data:`TRIAGE_STATUSES`. + """ + if not TRIAGE_PATH.exists(): + return {} + raw = json.loads(TRIAGE_PATH.read_text()) + for key, entry in raw.items(): + status = entry.get("status") + if status not in TRIAGE_STATUSES: + raise ValueError( + f"Triage entry {key!r} has status {status!r}; " + f"expected one of {sorted(TRIAGE_STATUSES)}." + ) + return raw + + +def _render_markdown(gates: list[Gate], triage: dict[str, dict[str, str]]) -> str: + by_module: dict[str, list[Gate]] = {} + for g in gates: + by_module.setdefault(g.module, []).append(g) + + total = len(gates) + covered = sum(1 for g in gates if g.fully_covered) + gaps = total - covered + + out: list[str] = [] + out.append("---") + out.append('title: "Routing gate coverage matrix"') + out.append( + "description: Coverage matrix tracking which routing families have " + "invariant gate-arm tests and their current pass/fail status." + ) + out.append("sidebar:") + out.append(' label: "Routing gate coverage"') + out.append(" order: 5") + out.append("---") + out.append("") + out.append("# Routing gate coverage matrix") + out.append("") + out.append( + "Auto-generated by `scripts/routing_gate_coverage.py` under CPython " + f"{BASELINE_PYTHON[0]}.{BASELINE_PYTHON[1]} with " + f"`PYTHONHASHSEED={PINNED_HASH_SEED}` (the arc model is " + "interpreter-specific and operand-level coverage is hash-seed " + "sensitive). Do not edit by hand; run the script to regenerate." + ) + out.append("") + out.append( + "Each row is a branch point (a *gate*) in a `layout/routing/` dispatch " + "handler or post-pass. A gate has two or more arms; the cells list how " + "many corpus fixtures exercise each arm. An arm reached by **0 " + "fixtures** is an un-exercised gate arm: either no shipped topology " + "takes that path (author a fixture, or confirm it is defensive/dead)." + ) + out.append("") + out.append( + f"**{covered}/{total}** gates fully exercised (both/all arms hit by some " + f"fixture); **{gaps}** gates have at least one un-exercised arm." + ) + out.append("") + out.append( + "Modules scoped to routing decision gates; `invariants.py` (the " + "`validate=True` checker) and `__init__.py` are excluded." + ) + out.append("") + triaged = sum(1 for g in gates if not g.fully_covered and g.key in triage) + if triage: + out.append( + "The Triage column carries a curated verdict for gaps no fixture " + "can close: **defensive** (a guard arm a valid topology never " + "violates), **candidate-dead** (no constructible topology reaches " + "it; left in place pending a separate deletion review), or " + "**needs-review** (not yet classified). A blank cell means the gap " + "is still open for a fixture. " + f"**{triaged}** gaps carry a triage verdict." + ) + out.append("") + + for module in sorted(by_module): + mod_gates = by_module[module] + mod_gaps = [g for g in mod_gates if not g.fully_covered] + out.append(f"## `{module}`") + out.append("") + out.append( + f"{len(mod_gates) - len(mod_gaps)}/{len(mod_gates)} gates fully exercised." + ) + out.append("") + if not mod_gaps: + out.append("All gates have every arm exercised by the corpus.") + out.append("") + continue + out.append("Gates with an un-exercised arm:") + out.append("") + out.append("| Line | Gate | Un-exercised arm(s) | Triage |") + out.append("| ---: | --- | --- | --- |") + for g in sorted(mod_gaps, key=lambda g: g.src_line): + dead = ", ".join(f"`->L{a.dst_line}`" for a in g.arms if not a.covered) + code = g.code.replace("|", "\\|") + if len(code) > 90: + code = code[:87] + "..." + entry = triage.get(g.key) + if entry: + note = entry["note"].replace("|", "\\|") + verdict = f"**{entry['status']}** -- {note}" + else: + verdict = "" + out.append(f"| {g.src_line} | `{code}` | {dead} | {verdict} |") + out.append("") + + return "\n".join(out) + "\n" + + +def main() -> int: + ensure_pinned_hash_seed() + + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--write", + action="store_true", + help="Regenerate the committed matrix doc and ratchet baseline.", + ) + parser.add_argument( + "--json", action="store_true", help="Emit the full matrix as JSON to stdout." + ) + args = parser.parse_args() + + if args.write and sys.version_info[:2] != BASELINE_PYTHON: + sys.exit( + f"Refusing to regenerate: the baseline is pinned to CPython " + f"{BASELINE_PYTHON[0]}.{BASELINE_PYTHON[1]} but this is " + f"{sys.version_info[0]}.{sys.version_info[1]}; the arc model differs." + ) + + gates = compute_gate_coverage() + triage = load_triage() + + # ``--json`` is the machine-readable dump the ratchet test consumes; it must + # emit even when the triage sidecar is stale so the dedicated stale-triage + # test can report the specific offenders rather than the whole run aborting. + if args.json: + payload = [{**g.to_payload(), "triage": triage.get(g.key)} for g in gates] + json.dump(payload, sys.stdout, indent=2) + sys.stdout.write("\n") + return 0 + + stale = triage_stale_keys(gates, triage) + if stale: + sys.exit( + "Triage sidecar references gate(s) the corpus now fully exercises " + "(or whose key has shifted). Remove the stale entr(y/ies) from " + f"{TRIAGE_PATH.relative_to(PROJECT_ROOT)}:\n " + "\n ".join(stale) + ) + + markdown = _render_markdown(gates, triage) + + if args.write: + DOC_PATH.parent.mkdir(parents=True, exist_ok=True) + DOC_PATH.write_text(markdown) + BASELINE_PATH.parent.mkdir(parents=True, exist_ok=True) + BASELINE_PATH.write_text(json.dumps(gap_keys(gates), indent=2) + "\n") + print(f"Wrote {DOC_PATH.relative_to(PROJECT_ROOT)}") + print(f"Wrote {BASELINE_PATH.relative_to(PROJECT_ROOT)}") + else: + sys.stdout.write(markdown) + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/serve_docs.sh b/scripts/serve_docs.sh new file mode 100755 index 000000000..320b58ee9 --- /dev/null +++ b/scripts/serve_docs.sh @@ -0,0 +1,147 @@ +#!/usr/bin/env bash +# +# Spin up the Astro / Starlight docs site locally - optionally for a specific +# nf-metro branch. +# +# The site (website/) loads dynamic content that is git-ignored and generated +# from the Python package: the gallery + pipelines pages and their SVGs +# (scripts/build_gallery.py) and the playground's example manifest +# (scripts/build_playground_examples.py). Without that content the dev server +# still runs, but the Gallery / nf-core pipelines / playground pages are empty +# or 404. This script generates it (once, then reuses it) and starts the dev +# server, so a clean checkout reaches a complete local site in one command. +# +# The renders on the Gallery / pipelines pages are produced by the nf_metro +# package, so previewing a branch means rendering with that branch's code. With +# --branch, the script checks the branch out into an isolated git worktree, +# installs that worktree's nf_metro into the active Python env, and serves from +# it - so the local site reflects the branch end to end. +# +# Usage: +# scripts/serve_docs.sh # serve from the current checkout +# scripts/serve_docs.sh --branch # serve from a worktree on +# scripts/serve_docs.sh --rebuild # force-regenerate gallery + playground content +# scripts/serve_docs.sh --skip-content # skip content generation entirely (fastest) +# scripts/serve_docs.sh --preview # production build + preview instead of dev +# scripts/serve_docs.sh --no-install # skip the npm dependency check +# scripts/serve_docs.sh --worktree-dir

# where --branch puts its worktree +# scripts/serve_docs.sh -- --host 0.0.0.0 # forward remaining args to astro +# +# Any arguments after `--` are forwarded to `astro dev` / `astro preview` +# (e.g. `-- --host 0.0.0.0 --port 4000`). + +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +BRANCH="" +WORKTREE_DIR="" +REBUILD=false +SKIP_CONTENT=false +PREVIEW=false +NO_INSTALL=false +ASTRO_ARGS=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --branch) BRANCH="${2:?--branch needs a ref}"; shift 2 ;; + --worktree-dir) WORKTREE_DIR="${2:?--worktree-dir needs a path}"; shift 2 ;; + --rebuild) REBUILD=true; shift ;; + --skip-content) SKIP_CONTENT=true; shift ;; + --preview) PREVIEW=true; shift ;; + --no-install) NO_INSTALL=true; shift ;; + --) shift; ASTRO_ARGS=("$@"); break ;; + -h|--help) + sed -n '2,/^set -euo/p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//;$d' + exit 0 ;; + *) echo "Unknown option: $1 (use -- to pass args to astro)" >&2; exit 1 ;; + esac +done + +# --- Branch worktree --------------------------------------------------------- +# Point the rest of the script at an isolated worktree for the requested ref and +# install that branch's nf_metro so the gallery renders reflect the branch. +if [[ -n "$BRANCH" ]]; then + slug="$(printf '%s' "$BRANCH" | tr '/ ' '--')" + WT="${WORKTREE_DIR:-$REPO_ROOT/../nf-metro-serve-$slug}" + + echo "==> Preparing worktree for '$BRANCH' at $WT" + git -C "$REPO_ROOT" fetch origin --quiet || true + # Serve a detached HEAD at the resolved ref: this is a read-only preview, and + # detaching lets the worktree coexist with the same branch checked out + # elsewhere (e.g. a dev worktree). Prefer the remote-tracking ref so PR + # branches reflect what's pushed. + if git -C "$REPO_ROOT" rev-parse --verify --quiet "origin/$BRANCH" >/dev/null; then + SERVE_REF="origin/$BRANCH" + else + SERVE_REF="$BRANCH" + fi + if [[ -d "$WT" ]]; then + git -C "$WT" fetch origin --quiet || true + git -C "$WT" checkout --detach --quiet "$SERVE_REF" + else + git -C "$REPO_ROOT" worktree add --detach "$WT" "$SERVE_REF" + fi + + REPO_ROOT="$(cd "$WT" && pwd)" + + echo "==> Installing $BRANCH's nf_metro into the active env (gallery renders reflect the branch)" + if ! pip install -e "$REPO_ROOT[docs]" -q; then + echo "WARNING: editable install of the branch failed; gallery renders may not" >&2 + echo " reflect '$BRANCH'. Activate the project env and retry." >&2 + fi +fi + +WEBSITE_DIR="$REPO_ROOT/website" + +# --- Dynamic content (gallery, pipelines, playground manifest) --------------- +# The gallery manifest JSON is the marker for "content already generated". +GALLERY_MARKER="$REPO_ROOT/website/src/content/gallery.json" + +generate_content() { + if ! python -c "import nf_metro" >/dev/null 2>&1; then + echo "WARNING: the 'nf_metro' package is not importable in this Python." >&2 + echo " Activate the project env (e.g. 'source ~/.local/bin/mm-activate nf-metro')" >&2 + echo " or 'pip install -e .', then re-run. Skipping content generation;" >&2 + echo " the Gallery / pipelines / playground pages will be empty." >&2 + return + fi + echo "==> Generating playground example manifest" + python "$REPO_ROOT/scripts/build_playground_examples.py" + echo "==> Generating gallery + pipelines pages and render SVGs (slow on first run)" + python "$REPO_ROOT/scripts/build_gallery.py" + # Drop the live-render cache so served maps reflect the current engine + # (the content-hash key won't change for an editable-install code edit). + rm -rf "$WEBSITE_DIR/.metro-cache" +} + +if [[ "$SKIP_CONTENT" == true ]]; then + echo "==> Skipping dynamic content generation (--skip-content)" +elif [[ "$REBUILD" == true || -n "$BRANCH" || ! -f "$GALLERY_MARKER" ]]; then + # Always regenerate for --branch: stale content would show another ref's renders. + generate_content +else + echo "==> Reusing existing generated content (use --rebuild to refresh)" +fi + +# --- Node dependencies ------------------------------------------------------- +if [[ "$NO_INSTALL" == false ]]; then + if [[ ! -d "$WEBSITE_DIR/node_modules" || "$WEBSITE_DIR/package-lock.json" -nt "$WEBSITE_DIR/node_modules" ]]; then + echo "==> Installing npm dependencies" + (cd "$WEBSITE_DIR" && npm install) + else + echo "==> npm dependencies up to date (use --no-install to skip this check)" + fi +fi + +# --- Serve ------------------------------------------------------------------- +# bash 3.2 (the macOS system default) errors on "${arr[@]}" for an empty array +# under `set -u`; the guarded form below expands to nothing when ASTRO_ARGS is +# empty and preserves per-element quoting otherwise. +if [[ "$PREVIEW" == true ]]; then + echo "==> Building static site, then serving the production preview" + (cd "$WEBSITE_DIR" && npm run build && npm run preview -- ${ASTRO_ARGS[@]+"${ASTRO_ARGS[@]}"}) +else + echo "==> Starting Astro dev server at http://localhost:4321/nf-metro/" + (cd "$WEBSITE_DIR" && npm run dev -- ${ASTRO_ARGS[@]+"${ASTRO_ARGS[@]}"}) +fi diff --git a/scripts/update_versions_manifest.py b/scripts/update_versions_manifest.py new file mode 100644 index 000000000..98ab5c7ce --- /dev/null +++ b/scripts/update_versions_manifest.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +"""Maintain the docs version manifest (gh-pages/versions.json). + +Each deploy upserts its target into the manifest the version switcher reads. +The file format matches the one mike produced, so the historical pre-Astro +entries it already contains are preserved untouched: + + [{"version": "dev", "title": "dev", "aliases": []}, + {"version": "0.7.2", "title": "0.7.2", "aliases": ["latest"]}, ...] + +Usage: + python scripts/update_versions_manifest.py \ + --manifest gh-pages/versions.json --version dev + python scripts/update_versions_manifest.py \ + --manifest gh-pages/versions.json --version X.Y.Z --latest +""" + +from __future__ import annotations + +import argparse +import json +from pathlib import Path + + +def version_sort_key(entry: dict) -> tuple: + """Sort `dev` first, then numeric versions newest-first.""" + version = entry["version"] + if version == "dev": + return (0,) + parts = tuple(int(p) for p in version.split(".") if p.isdigit()) + # Negate so larger versions sort earlier; `1` keeps them after `dev`. + return (1, tuple(-p for p in parts)) + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--manifest", required=True, type=Path) + parser.add_argument("--version", required=True) + parser.add_argument( + "--latest", + action="store_true", + help="Mark this version as the `latest` alias (releases only).", + ) + args = parser.parse_args() + + entries: list[dict] = [] + if args.manifest.exists(): + entries = json.loads(args.manifest.read_text()) + + by_version = {e["version"]: e for e in entries} + entry = by_version.setdefault( + args.version, {"version": args.version, "title": args.version, "aliases": []} + ) + entry.setdefault("aliases", []) + + if args.latest: + for e in by_version.values(): + e["aliases"] = [a for a in e.get("aliases", []) if a != "latest"] + if "latest" not in entry["aliases"]: + entry["aliases"].append("latest") + + ordered = sorted(by_version.values(), key=version_sort_key) + args.manifest.write_text(json.dumps(ordered, indent=2) + "\n") + + +if __name__ == "__main__": + main() diff --git a/src/nf_metro/__init__.py b/src/nf_metro/__init__.py index 8bb66024e..687fac937 100644 --- a/src/nf_metro/__init__.py +++ b/src/nf_metro/__init__.py @@ -1,3 +1,5 @@ """nf-metro: Generate metro-map-style SVG diagrams from Mermaid graph definitions.""" -__version__ = "0.1.0" +__version__ = "1.0.0" + +__all__ = ["__version__"] diff --git a/src/nf_metro/api.py b/src/nf_metro/api.py new file mode 100644 index 000000000..bd771ea64 --- /dev/null +++ b/src/nf_metro/api.py @@ -0,0 +1,280 @@ +"""Shared rendering entry points for the parse -> layout -> render pipeline. + +The CLI (:mod:`nf_metro.cli`) and any embedding caller (the browser playground, +notebooks, other tools) both turn ``.mmd`` text into a settled +:class:`~nf_metro.parser.model.MetroGraph` and an SVG/HTML string. The option +cascade that drives that path - explicit option > ``%%metro`` directive > +default - lives here so both surfaces resolve it identically. + +:func:`prepare_graph` returns a laid-out graph (so a caller that also needs the +graph, e.g. for post-render geometry validation, keeps it in hand); +:func:`render_string` is the one-call convenience that returns the rendered +string. +""" + +from __future__ import annotations + +import warnings +from collections.abc import Mapping +from dataclasses import dataclass +from typing import Literal + +from nf_metro.layout import compute_layout +from nf_metro.options import LAYOUT_OPTIONS +from nf_metro.parser import parse_metro_mermaid +from nf_metro.parser.directives import apply_legend_directive +from nf_metro.parser.model import LineSpread, MetroGraph +from nf_metro.render import render_svg +from nf_metro.render.html import render_html +from nf_metro.render.legend import logo_is_resolvable, resolve_logo_file +from nf_metro.render.style import Theme +from nf_metro.themes import DEFAULT_MODE, THEME_MODES, THEMES + +# `style: dark` predates theme names; alias it onto the nfcore brand. +_STYLE_THEME_ALIASES = {"dark": "nfcore"} + + +@dataclass +class RenderConfig: + """Render-side options that control SVG/HTML output format and appearance. + + Pass as ``config=RenderConfig(...)`` to :func:`render_string` instead of + the individual keyword arguments. When *config* is supplied to + ``render_string``, the matching flat keyword arguments are ignored. + """ + + output_format: Literal["svg", "html"] = "svg" + debug: bool = False + responsive: bool = False + embed_font: bool = False + text_to_paths: bool = False + svg_class_prefix: str = "" + inject_dark_mode_css: bool = True + chrome_css: bool = True + self_color_scheme: bool = True + baked_mode: str | None = None + bare: bool = False + embed_basename: str = "metro_map.html" + + +def apply_layout_overrides(graph: MetroGraph, opts: Mapping[str, object]) -> None: + """Write each explicitly-set registry option onto its graph field. + + Parse-time options (``fold_threshold``) are skipped: their value reaches + the graph through :func:`~nf_metro.parser.parse_metro_mermaid` instead. + """ + for opt in LAYOUT_OPTIONS: + if opt.parse_time: + continue + value = opts.get(opt.name) + if value is not None: + setattr(graph, opt.target_attr, value) + + +def resolve_theme( + theme: str | None, graph: MetroGraph, mode: str | None = None +) -> Theme: + """Resolve a concrete theme from independent brand and mode axes. + + Brand comes from the explicit ``theme`` name (``--theme``) or the + ``%%metro style:`` directive (``dark`` aliases to ``nfcore``). Mode comes + from the explicit ``mode`` argument (``--mode``), then the ``%%metro mode:`` + directive, then ``DEFAULT_MODE``. No brand carries its own mode: a known + brand always resolves through its light/dark family for the chosen mode. + """ + if theme is not None: + brand = theme + else: + name = graph.style.strip().lower() + brand = _STYLE_THEME_ALIASES.get(name, name) + + resolved_mode = (mode or graph.mode).strip().lower() or DEFAULT_MODE + family = THEME_MODES.get(brand) + if family and resolved_mode in family: + return family[resolved_mode] + + return THEMES.get(brand, THEMES["nfcore"]) + + +def render_graph(graph: MetroGraph, theme_obj: Theme, cfg: RenderConfig) -> str: + """Route a settled graph to the appropriate renderer using *cfg*. + + Use this when you already hold a laid-out graph (e.g. from + :func:`prepare_graph`) and want the render half of :func:`render_string` + without re-parsing. + """ + font_portability: Literal["embed", "paths"] | None = ( + "paths" if cfg.text_to_paths else "embed" if cfg.embed_font else None + ) + if cfg.output_format == "html": + return render_html( + graph, + theme_obj, + debug=cfg.debug, + embed_basename=cfg.embed_basename, + font_portability=font_portability, + inject_dark_mode_css=cfg.inject_dark_mode_css, + baked_mode=cfg.baked_mode, + ) + return render_svg( + graph, + theme_obj, + debug=cfg.debug, + responsive=cfg.responsive, + font_portability=font_portability, + svg_class_prefix=cfg.svg_class_prefix, + inject_dark_mode_css=cfg.inject_dark_mode_css, + chrome_css=cfg.chrome_css, + self_color_scheme=cfg.self_color_scheme, + baked_mode=cfg.baked_mode, + bare=cfg.bare, + ) + + +def prepare_graph( + text: str, + *, + from_nextflow: bool = False, + title: str | None = None, + line_spread: str | None = None, + logo: str | None = None, + legend: str | None = None, + layout_options: Mapping[str, object] | None = None, + source_dir: str = "", +) -> MetroGraph: + """Parse *text*, apply option overrides, and compute the layout in place. + + Returns the settled graph. Propagates the pipeline's typed errors: + :class:`ValueError` (parse), and the layout errors + :class:`~nf_metro.layout.CyclicGraphError`, + :class:`~nf_metro.layout.BackwardFlowError`, + :class:`~nf_metro.layout.MixedEntryDirectionError`, + :class:`~nf_metro.layout.PhaseInvariantError`. + """ + opts = layout_options or {} + + if from_nextflow: + from nf_metro.convert import convert_nextflow_dag + + text = convert_nextflow_dag(text, title=title or "") + + fold = opts.get("fold_threshold") + auto_process = opts.get("auto_process") + process_scope = opts.get("process_scope") + graph = parse_metro_mermaid( + text, + max_station_columns=fold if isinstance(fold, int) else None, + auto_process=auto_process if isinstance(auto_process, bool) else None, + process_scope=process_scope if isinstance(process_scope, str) else None, + ) + + apply_layout_overrides(graph, opts) + + if source_dir: + graph.source_dir = source_dir + for attr in ("logo_path", "logo_path_light", "logo_path_dark"): + raw: str = getattr(graph, attr) + resolved = resolve_logo_file(raw, source_dir) if raw else "" + if resolved: + setattr(graph, attr, resolved) + if line_spread is not None: + graph.line_spread = LineSpread(line_spread) + if logo is not None: + graph.logo_path = str(logo) + if legend is not None: + apply_legend_directive(legend, graph) + if title is not None: + graph.title = title + + for _attr in ("logo_path", "logo_path_light", "logo_path_dark"): + _raw: str = getattr(graph, _attr) + if _raw and not logo_is_resolvable(_raw): + raise ValueError(f"%%metro logo: path {_raw!r} not found") + + compute_layout(graph) + return graph + + +def render_string( + text: str, + *, + config: RenderConfig | None = None, + theme: str | None = None, + mode: str | None = None, + output_format: Literal["svg", "html"] = "svg", + from_nextflow: bool = False, + title: str | None = None, + line_spread: str | None = None, + logo: str | None = None, + legend: str | None = None, + layout_options: Mapping[str, object] | None = None, + debug: bool = False, + responsive: bool = False, + embed_font: bool = False, + text_to_paths: bool = False, + svg_class_prefix: str = "", + inject_dark_mode_css: bool = True, + chrome_css: bool = True, + self_color_scheme: bool = True, + bare: bool = False, + embed_basename: str = "metro_map.html", +) -> str: + """Render *text* to an SVG (default) or interactive HTML string. + + A one-call wrapper over :func:`prepare_graph` plus :func:`render_graph`. + Callers that also need the graph (e.g. to run + :func:`nf_metro.render.validate_render` on the output) should call + :func:`prepare_graph` and :func:`render_graph` directly. + + *config* groups all render-side options into a :class:`RenderConfig` bundle. + When supplied, the individual render-side keyword arguments (``output_format``, + ``debug``, ``responsive``, ``embed_font``, ``text_to_paths``, + ``svg_class_prefix``, ``inject_dark_mode_css``, ``chrome_css``, + ``self_color_scheme``, ``bare``, ``embed_basename``) are ignored in favour of + *config*, and passing any of them with a non-default value alongside + *config* warns. Pass one or the other, not both. + + *self_color_scheme* — when ``True`` (default) the root ```` element + declares ``color-scheme: light dark`` so ``light-dark()`` custom properties + resolve against the viewer's OS preference. Set ``False`` when inlining the + SVG into a host page that owns the color-scheme (matches ``--no-self-color-scheme`` + on the CLI). + """ + graph = prepare_graph( + text, + from_nextflow=from_nextflow, + title=title, + line_spread=line_spread, + logo=logo, + legend=legend, + layout_options=layout_options, + ) + theme_obj = resolve_theme(theme, graph, mode=mode) + flat = RenderConfig( + output_format=output_format, + debug=debug, + responsive=responsive, + embed_font=embed_font, + text_to_paths=text_to_paths, + svg_class_prefix=svg_class_prefix, + inject_dark_mode_css=inject_dark_mode_css, + chrome_css=chrome_css, + self_color_scheme=self_color_scheme, + baked_mode=(mode or graph.mode).strip() or None if config is None else None, + bare=bare, + embed_basename=embed_basename, + ) + if config is not None: + defaults = RenderConfig() + shadowed = sorted( + name + for name, value in vars(flat).items() + if value != getattr(defaults, name) + ) + if shadowed: + warnings.warn( + f"render_string: config= supersedes the flat render kwargs; " + f"ignoring {shadowed}", + stacklevel=2, + ) + return render_graph(graph, theme_obj, config or flat) diff --git a/src/nf_metro/cli.py b/src/nf_metro/cli.py index 4337088e1..a2f771c14 100644 --- a/src/nf_metro/cli.py +++ b/src/nf_metro/cli.py @@ -2,14 +2,36 @@ from __future__ import annotations +import warnings +from collections.abc import Callable, Iterable from pathlib import Path +from typing import Any, Literal, TypeVar, cast import click from nf_metro import __version__ -from nf_metro.layout import compute_layout -from nf_metro.parser import parse_metro_mermaid -from nf_metro.render import render_svg +from nf_metro.api import RenderConfig, prepare_graph, render_graph, resolve_theme +from nf_metro.explain import build_explain, format_explain_json, format_explain_text +from nf_metro.introspect import build_info, format_info_json, format_info_text +from nf_metro.layout import ( + BackwardFlowError, + FoldThresholdError, + MixedEntryDirectionError, + PhaseInvariantError, + compute_layout, +) +from nf_metro.live.server import DEFAULT_OVERLAY, OVERLAY_STYLES +from nf_metro.options import LAYOUT_OPTIONS, LayoutOption +from nf_metro.parser import ( + ERROR, + WARNING, + CyclicGraphError, + ValidationIssue, + parse_metro_mermaid, + validate_graph, +) +from nf_metro.parser.model import LineSpread +from nf_metro.render import validate_render from nf_metro.themes import THEMES @@ -19,106 +41,1075 @@ def cli() -> None: """nf-metro: Generate metro-map-style SVG diagrams from Mermaid definitions.""" +_F = TypeVar("_F", bound=Callable[..., Any]) + + +def _layout_cli_option(opt: LayoutOption) -> Callable[..., Any]: + """Build the ``click.option`` decorator for a registry option. + + All default to ``None`` so an omitted flag leaves the directive value in + place; a set flag overrides it (the CLI half of the cascade in + :mod:`nf_metro.options`). + """ + if opt.kind == "bool": + no_flag = "--no-" + opt.name.replace("_", "-") + return click.option( + f"{opt.cli_flag}/{no_flag}", + opt.name, + default=None, + help=opt.help, + hidden=opt.hidden, + ) + if opt.kind == "choice": + ctype: Any = click.Choice(opt.choices) + elif opt.kind == "float" and opt.max_val is not None: + lo = 0.0 if opt.sign in ("nonneg", "positive") else None + ctype = click.FloatRange(min=lo, max=opt.max_val) + elif opt.kind == "int" and opt.max_val is not None: + lo_i = 0 if opt.sign in ("nonneg", "positive") else None + ctype = click.IntRange(min=lo_i, max=int(opt.max_val)) + else: + ctype = {"int": int, "float": float, "str": str}[opt.kind] + return click.option( + opt.cli_flag, + opt.name, + type=ctype, + default=None, + help=opt.help, + hidden=opt.hidden, + ) + + +def layout_cli_options(f: _F) -> _F: + """Attach a CLI flag for every registry option, in declaration order.""" + for opt in reversed(LAYOUT_OPTIONS): + f = _layout_cli_option(opt)(f) + return f + + +def _echo_issues( + label: str, issues: Iterable[ValidationIssue], path: Path | str +) -> None: + """Print a labelled, bulleted block of validation issues to stderr.""" + click.echo(f"{label}:", err=True) + for issue in issues: + click.echo(f" - {issue.format(path)}", err=True) + + @cli.command() @click.argument("input_file", type=click.Path(exists=True, path_type=Path)) -@click.option("-o", "--output", type=click.Path(path_type=Path), default=None, - help="Output SVG file path. Defaults to + +nf-metro live + + + +

+
Run: waiting for events · + idle
+
+ +
+ running + done + failed +
+
+
+
+ %BASE_SVG% + %OVERLAY_SVG% +
+%SCRIPT% + +""" + + +class _QuietHandler(BaseHTTPRequestHandler): + """BaseHTTPRequestHandler that doesn't log every request to stderr.""" + + def log_message(self, *args: object) -> None: + pass + + +def _send_body( + handler: BaseHTTPRequestHandler, code: int, body: str, ctype: str = "text/plain" +) -> None: + data = body.encode() + handler.send_response(code) + handler.send_header("Content-Type", ctype) + handler.send_header("Content-Length", str(len(data))) + handler.end_headers() + handler.wfile.write(data) + + +def _token_ok(handler: BaseHTTPRequestHandler, token: str | None) -> bool: + if token is None: + return True + qs = urllib.parse.urlparse(handler.path).query + given = urllib.parse.parse_qs(qs).get("token", [None])[0] + return (given or handler.headers.get("X-Metro-Token")) == token + + +def _read_body(handler: BaseHTTPRequestHandler) -> bytes: + try: + length = int(handler.headers.get("Content-Length", 0)) + except (TypeError, ValueError): + length = 0 + return handler.rfile.read(length) if length else b"" + + +def _sse_response(handler: BaseHTTPRequestHandler, state: ProgressState) -> None: + handler.send_response(200) + handler.send_header("Content-Type", "text/event-stream") + handler.send_header("Cache-Control", "no-cache") + handler.send_header("Connection", "keep-alive") + handler.end_headers() + q = state.subscribe() + try: + while True: + try: + msg = q.get(timeout=15) + handler.wfile.write(f"data: {msg}\n\n".encode()) + except queue.Empty: + handler.wfile.write(b": ping\n\n") + handler.wfile.flush() + except (BrokenPipeError, ConnectionResetError): + pass + finally: + state.unsubscribe(q) + + +def make_handler( + model: MapModel, + state: ProgressState, + token: str | None, + overlay: str = DEFAULT_OVERLAY, +) -> type[BaseHTTPRequestHandler]: + class Handler(_QuietHandler): + def do_GET(self) -> None: + path = urllib.parse.urlparse(self.path).path + if path == "/": + page = build_page(model, overlay=overlay) + _send_body(self, 200, page, "text/html; charset=utf-8") + elif path == "/state": + _send_body(self, 200, json.dumps(state.snapshot()), "application/json") + elif path == "/stream": + _sse_response(self, state) + else: + _send_body(self, 404, "not found") + + def do_POST(self) -> None: + if urllib.parse.urlparse(self.path).path != "/events": + _send_body(self, 404, "not found") + return + if not _token_ok(self, token): + _send_body(self, 401, "unauthorized") + return + try: + state.ingest(json.loads(_read_body(self) or b"{}")) + except (json.JSONDecodeError, ValueError): + pass + _send_body(self, 200, "ok") + + return Handler + + +class MetroServer(ThreadingHTTPServer): + """A serving HTTP server that carries its ProgressState. + + Exposing ``state`` lets :func:`run_lifecycle` wait on the run's terminal + event to auto-stop, without a side channel. + """ + + state: ProgressState + + +def serve( + graph: MetroGraph, + theme: Theme, + host: str = "127.0.0.1", + port: int = 8080, + token: str | None = None, + overlay: str = DEFAULT_OVERLAY, +) -> MetroServer: + """Build the model from a graph+theme and return a serving ``MetroServer``. + + The caller drives the server (``serve_forever``); separating construction + makes the handler and state testable without binding a socket. ``overlay`` + is the status-overlay style shown until a viewer picks another in the page. + """ + return serve_model( + MapModel(graph, theme), + host=host, + port=port, + token=token, + overlay=overlay, + ) + + +def serve_model( + model: MapModel, + host: str = "127.0.0.1", + port: int = 8080, + token: str | None = None, + overlay: str = DEFAULT_OVERLAY, +) -> MetroServer: + """Return a serving ``MetroServer`` from a pre-built ``MapModel``. + + Allows callers that already hold a model (e.g. loaded from an SVG) to skip + the render step. The caller drives the server lifecycle via + :func:`run_lifecycle`. + """ + state = ProgressState(model) + httpd = MetroServer((host, port), make_handler(model, state, token, overlay)) + httpd.state = state + return httpd + + +class RunRegistry: + """A persistent server's set of live runs, keyed by a short id. + + A run is registered by POSTing its .mmd to ``/maps``; the registry parses + and lays it out once, then holds a MapModel + ProgressState that the run's + weblog events drive. Many pipelines can report into one server. + """ + + def __init__( + self, theme: Theme, max_runs: int = 100, overlay: str = DEFAULT_OVERLAY + ) -> None: + self.theme = theme + self.max_runs = max_runs + self.overlay = overlay if overlay in OVERLAY_STYLES else DEFAULT_OVERLAY + self.is_light = _is_light_bg(theme.background_color) + self.lock = threading.Lock() + self.runs: dict[str, dict[str, Any]] = {} + + def register(self, mmd_text: str, name: str | None) -> str: + graph = parse_metro_mermaid(mmd_text) + compute_layout(graph) + model = MapModel(graph, self.theme) + rid = uuid.uuid4().hex[:8] + with self.lock: + self.runs[rid] = { + "model": model, + "state": ProgressState(model), + "name": name or rid, + "created": time.time(), + } + # Bound memory on a long-lived server: drop the oldest runs. + while len(self.runs) > self.max_runs: + del self.runs[min(self.runs, key=lambda k: self.runs[k]["created"])] + return rid + + def get(self, rid: str) -> dict[str, Any] | None: + with self.lock: + return self.runs.get(rid) + + def listing(self) -> list[dict[str, Any]]: + with self.lock: + runs = list(self.runs.items()) + out = [] + for rid, r in runs: + snap = r["state"].snapshot() + out.append( + { + "id": rid, + "name": r["name"], + "created": r["created"], + "run_state": snap["run"]["state"], + "done": sum( + 1 for v in snap["stations"].values() if v["state"] == "done" + ), + "total": len(snap["stations"]), + } + ) + out.sort(key=lambda r: r["created"], reverse=True) + return out + + +def build_index(registry: RunRegistry) -> str: + rows = "\n".join( + f'' + f'{html.escape(r["name"])}' + f'{html.escape(r["run_state"])} · ' + f"{r['done']}/{r['total']} done" + for r in registry.listing() + ) + if not rows: + rows = '

No runs yet. Point a pipeline at this server.

' + scheme = "light" if registry.is_light else "dark" + return INDEX_TEMPLATE.replace("%CSS%", _root_vars(scheme) + _INDEX_CSS).replace( + "%ROWS%", rows + ) + + +_INDEX_CSS = """ + body { margin: 0; background: var(--bg); color: var(--fg); + font-family: -apple-system, "Segoe UI", Roboto, Inter, sans-serif; } + header { padding: 0.8rem 1rem; border-bottom: 1px solid var(--border); + font-weight: 600; } + .runs { display: flex; flex-direction: column; gap: 0.5rem; padding: 1rem; + max-width: 720px; } + .run { display: flex; justify-content: space-between; align-items: center; + padding: 0.7rem 1rem; border: 1px solid var(--border); border-radius: 8px; + text-decoration: none; color: var(--fg); border-left-width: 4px; } + .run:hover { background: var(--hover); } + .run.running { border-left-color: var(--st-running); } + .run.complete { border-left-color: var(--st-done); } + .run.error { border-left-color: var(--st-failed); } + .run.idle { border-left-color: var(--st-pending); } + .name { font-weight: 600; } + .meta { font-size: 0.8rem; color: var(--muted); } + .empty { padding: 1rem; color: var(--muted); } +""" + +INDEX_TEMPLATE = """ + + + + +nf-metro live + + + +
nf-metro live · runs
+
+%ROWS% +
+ +""" + + +def make_multi_handler( + registry: RunRegistry, token: str | None +) -> type[BaseHTTPRequestHandler]: + """Handler for the persistent multi-run server. + + Routes: ``GET /`` index, ``POST /maps`` register a run, and per-run + ``GET /r//`` page, ``GET /r//state``, ``GET /r//stream``, + ``POST /r//events``. + """ + run_re = re.compile(r"^/r/([0-9a-f]+)/(state|stream|events)?$") + + class Handler(_QuietHandler): + def do_GET(self) -> None: + path = urllib.parse.urlparse(self.path).path + if path == "/": + _send_body(self, 200, build_index(registry), "text/html; charset=utf-8") + return + m = run_re.match(path) + if not m: + _send_body(self, 404, "not found") + return + run = registry.get(m.group(1)) + if run is None: + _send_body(self, 404, "unknown run") + return + kind = m.group(2) + state: ProgressState = run["state"] + if kind is None: + page = build_page( + run["model"], + stream_url=f"/r/{m.group(1)}/stream", + overlay=registry.overlay, + ) + _send_body(self, 200, page, "text/html; charset=utf-8") + elif kind == "state": + _send_body(self, 200, json.dumps(state.snapshot()), "application/json") + elif kind == "stream": + _sse_response(self, state) + else: + _send_body(self, 404, "not found") + + def do_POST(self) -> None: + path = urllib.parse.urlparse(self.path).path + if not _token_ok(self, token): + _send_body(self, 401, "unauthorized") + return + raw = _read_body(self) + + if path == "/maps": + name = urllib.parse.parse_qs( + urllib.parse.urlparse(self.path).query + ).get("name", [None])[0] + try: + rid = registry.register(raw.decode("utf-8"), name) + except Exception as exc: # parse/layout failure -> 400, never 500 + _send_body(self, 400, f"bad map: {exc}") + return + body = json.dumps( + {"id": rid, "view": f"/r/{rid}/", "events": f"/r/{rid}/events"} + ) + _send_body(self, 200, body, "application/json") + return + + m = run_re.match(path) + if m and m.group(2) == "events": + run = registry.get(m.group(1)) + if run is None: + _send_body(self, 404, "unknown run") + return + try: + run["state"].ingest(json.loads(raw or b"{}")) + except (json.JSONDecodeError, ValueError): + pass + _send_body(self, 200, "ok") + return + + _send_body(self, 404, "not found") + + return Handler + + +def serve_multi( + theme: Theme, + host: str = "127.0.0.1", + port: int = 8080, + token: str | None = None, + overlay: str = DEFAULT_OVERLAY, +) -> ThreadingHTTPServer: + """A persistent multi-run server: pipelines POST their .mmd to ``/maps``.""" + registry = RunRegistry(theme, overlay=overlay) + return ThreadingHTTPServer((host, port), make_multi_handler(registry, token)) + + +def _weblog_command(launch_cmd: Sequence[str], events_url: str) -> list[str]: + """The launch command with ``-with-weblog `` appended. + + Left untouched if the caller already passed their own ``-with-weblog``. + """ + cmd = list(launch_cmd) + if "-with-weblog" not in cmd: + cmd += ["-with-weblog", events_url] + return cmd + + +def run_lifecycle( + httpd: MetroServer, + page_url: str, + events_url: str, + *, + launch_cmd: Sequence[str] = (), + shutdown_after_complete: bool = False, + grace: float = 10.0, + open_browser: bool = False, + echo: Callable[[str], None] = print, +) -> None: + """Run the server and tie its lifetime to the workflow. + + Serves in a background thread. When ``launch_cmd`` is given it runs that + command (a ``nextflow run ...``) with the weblog wired up and waits for it + to exit; otherwise the run is launched separately. With + ``shutdown_after_complete`` the server stops ``grace`` seconds after the + run's terminal event (or after the launched command exits); otherwise it + serves until interrupted. Always tears the server down on the way out. + """ + if open_browser: + webbrowser.open(page_url) + threading.Thread(target=httpd.serve_forever, daemon=True).start() + + proc: subprocess.Popen[bytes] | None = None + try: + if launch_cmd: + proc = subprocess.Popen(_weblog_command(launch_cmd, events_url)) + proc.wait() + echo(f"\nWorkflow finished. Map still live at {page_url}") + if shutdown_after_complete: + if not launch_cmd: + httpd.state.run_ended.wait() + echo(f"Shutting down in {grace:g}s ...") + time.sleep(grace) + else: + echo("Press Ctrl-C to stop.") + while True: + time.sleep(3600) + except KeyboardInterrupt: + echo("\nStopping.") + finally: + if proc is not None and proc.poll() is None: + proc.terminate() + httpd.shutdown() + httpd.server_close() diff --git a/src/nf_metro/manifest/__init__.py b/src/nf_metro/manifest/__init__.py new file mode 100644 index 000000000..da44f1c7e --- /dev/null +++ b/src/nf_metro/manifest/__init__.py @@ -0,0 +1,92 @@ +"""The embedded-manifest standard: a self-describing, addressable SVG. + +This package is deliberately **dependency-free** (Python standard library only, +no other ``nf_metro`` imports) so it can be lifted into its own distribution +as-is. It owns the format, the reader, the matcher, and the producer helpers; +nf-metro is one *producer* on top of it (see +:mod:`nf_metro.render.manifest` for the :class:`~nf_metro.parser.model.MetroGraph` +adapter, which maps metro stations/lines/sections onto the neutral +nodes/groups/regions vocabulary below). + +The implementation is split across :mod:`._common` (shared constants), +:mod:`.produce` (build and embed), and :mod:`.read` (read back and match); this +module is the public surface that re-exports them. + +A rendered SVG becomes a durable contract that a downstream tool can drive - +position overlays, restyle nodes, look up which patterns a node matches - from +the **committed file alone**, with no re-render and no in-memory graph. The +data is carried two redundant, sanitization-safe ways (no ``, regardless of JS string context. JSON's optional `\/` + # escape decodes back to `/`, so the snippet survives round-trip. + inline_snippet_json = json.dumps(inline_snippet).replace(" str: + return _INLINE_TEMPLATE.substitute( + sid=sid, + svg=svg, + lines_json=json.dumps(lines), + shared_js=get_driver_js(), + ) diff --git a/src/nf_metro/render/icons.py b/src/nf_metro/render/icons.py index b8aca0406..c07bee197 100644 --- a/src/nf_metro/render/icons.py +++ b/src/nf_metro/render/icons.py @@ -1,15 +1,417 @@ -"""Icon helpers for metro map rendering (future use).""" +"""Icon helpers for metro map rendering.""" from __future__ import annotations +__all__ = [ + "render_file_icon", + "render_files_icon", + "render_folder_icon", +] + +import drawsvg as draw + +from nf_metro.render.constants import ( + FILES_ICON_OFFSET_RATIO, + FOLDER_TAB_HEIGHT_RATIO, + FOLDER_TAB_WIDTH_RATIO, + ICON_BANNER_BOTTOM_MARGIN_RATIO, + ICON_BANNER_FILL, + ICON_BANNER_HEIGHT_RATIO, + ICON_BANNER_TEXT_COLOR, + ICON_FOLD_CREASE_RATIO, + ICON_FOLD_OVERLAY_OPACITY, + ICON_LABEL_CHAR_WIDTH_RATIO, + ICON_LABEL_CLEARANCE, + ICON_LABEL_LINE_HEIGHT_RATIO, + ICON_TEXT_OFFSET_RATIO, + TEXT_VCENTER_DY, +) + + +def _label_text_width(label: str, font_size: float) -> float: + """Estimated rendered width of ``label`` at ``font_size``.""" + return len(label) * font_size * ICON_LABEL_CHAR_WIDTH_RATIO + + +def _fit_label_font(label: str, font_size: float, width: float) -> float: + """Shrink ``font_size`` so ``label`` keeps ``ICON_LABEL_CLEARANCE`` clear of + the icon's left/right edges; returns ``font_size`` unchanged when it fits.""" + max_width = width - 2 * ICON_LABEL_CLEARANCE + text_width = _label_text_width(label, font_size) + if max_width > 0 and text_width > max_width: + return font_size * max_width / text_width + return font_size + + +def _split_icon_label_tokens(label: str) -> list[str]: + """Split ``label`` at ``/`` and whitespace, keeping the separator on the token. + + A ``/`` stays as a trailing character and a whitespace break becomes a + trailing space, so concatenating the tokens of a line reconstructs the + original spacing (``BAM/`` + ``CRAM`` -> ``BAM/CRAM``; ``FASTQ `` + ``BAM`` + -> ``FASTQ BAM``). A label with no break point yields a single token, + signalling the caller to keep it on one shrink-to-fit line rather than + break a word mid-character.""" + tokens: list[str] = [] + buf = "" + for ch in label: + buf += ch + if ch == "/": + tokens.append(buf) + buf = "" + elif ch.isspace(): + if buf.strip(): + tokens.append(buf.strip() + " ") + buf = "" + if buf.strip(): + tokens.append(buf.strip()) + return tokens + + +def _wrap_icon_label(label: str, font_size: float, width: float) -> list[str]: + """Break ``label`` into stacked lines each fitting the icon's usable width. + + Splits are made on ``/`` then whitespace so format names like ``BAM/CRAM`` + break at the slash. A label that fits, or that has no break point (a single + word), stays on one line so it shrinks to fit instead of breaking mid-word. + """ + max_width = width - 2 * ICON_LABEL_CLEARANCE + if max_width <= 0 or _label_text_width(label, font_size) <= max_width: + return [label] + + tokens = _split_icon_label_tokens(label) + if len(tokens) <= 1: + return [label] + + lines: list[str] = [] + current = "" + for token in tokens: + if current and _label_text_width(current + token, font_size) > max_width: + lines.append(current) + current = token + else: + current += token + if current: + lines.append(current) + return [stripped for line in lines if (stripped := line.rstrip())] or [label] + + +def _append_icon_label( + d: draw.Drawing, + label: str, + cx: float, + text_y: float, + width: float, + font_size: float, + font_color: str, + font_family: str, +) -> None: + """Render the format label as bold coloured text centred at ``text_y``. + + A label that fits the icon's usable width renders as a single line. A wider + label wraps onto stacked lines split on ``/`` or whitespace, centred + vertically around ``text_y``; a label with no break point shrinks to fit so + the font stays legible instead of breaking a word mid-character.""" + if not label: + return + lines = _wrap_icon_label(label, font_size, width) + line_height = font_size * ICON_LABEL_LINE_HEIGHT_RATIO + top_y = text_y - line_height * (len(lines) - 1) / 2 + for i, line in enumerate(lines): + d.append( + draw.Text( + line, + _fit_label_font(line, font_size, width), + cx, + top_y + i * line_height, + fill=font_color, + font_family=font_family, + font_weight="bold", + text_anchor="middle", + dy=TEXT_VCENTER_DY, + ) + ) + + +def _append_icon_banner_band( + d: draw.Drawing, + label: str, + cx: float, + cy: float, + width: float, + height: float, + font_size: float, + font_family: str, +) -> None: + """Render a dark banner strip with bold white text across the icon. + + The strip spans the icon width and sits in the lower portion, leaving + white document visible both above and below it. Used when a terminus + directive sets the ``banner`` option. + """ + if not label: + return + band_h = height * ICON_BANNER_HEIGHT_RATIO + band_bottom = cy + height / 2 - height * ICON_BANNER_BOTTOM_MARGIN_RATIO + band_top = band_bottom - band_h + d.append( + draw.Rectangle( + cx - width / 2, + band_top, + width, + band_h, + fill=ICON_BANNER_FILL, + stroke="none", + ) + ) + _append_icon_label( + d, + label, + cx, + (band_top + band_bottom) / 2, + width, + font_size, + ICON_BANNER_TEXT_COLOR, + font_family, + ) + def train_icon_path(x: float, y: float, size: float = 12.0) -> str: """Generate an SVG path string for a small train icon. Placeholder for future.""" # Simple diamond shape as placeholder hs = size / 2 - return ( - f"M {x} {y - hs} " - f"L {x + hs} {y} " - f"L {x} {y + hs} " - f"L {x - hs} {y} Z" + return f"M {x} {y - hs} L {x + hs} {y} L {x} {y + hs} L {x - hs} {y} Z" + + +def render_file_icon( + d: draw.Drawing, + cx: float, + cy: float, + width: float, + height: float, + fold_size: float, + fill: str, + stroke: str, + stroke_width: float, + corner_radius: float, + label: str, + font_size: float, + font_color: str, + font_family: str, + banner: bool = False, +) -> None: + """Render a file/document icon with a dog-ear fold at top-right. + + The icon is centered on (cx, cy). The shape is a rectangle with the + top-right corner replaced by a diagonal fold. + """ + hw = width / 2 + hh = height / 2 + x0 = cx - hw + y0 = cy - hh + x1 = cx + hw + y1 = cy + hh + r = corner_radius + f = fold_size + + # Main document shape: rectangle with top-right dog-ear + # Start at top-left + corner radius, go clockwise + path = draw.Path( + fill=fill, + stroke=stroke, + stroke_width=stroke_width, + stroke_linejoin="round", + ) + # Top edge: from top-left corner to fold start + path.M(x0 + r, y0) + path.L(x1 - f, y0) + # Diagonal fold + path.L(x1, y0 + f) + # Right edge down to bottom-right corner + path.L(x1, y1 - r) + # Bottom-right corner + path.Q(x1, y1, x1 - r, y1) + # Bottom edge + path.L(x0 + r, y1) + # Bottom-left corner + path.Q(x0, y1, x0, y1 - r) + # Left edge + path.L(x0, y0 + r) + # Top-left corner + path.Q(x0, y0, x0 + r, y0) + path.Z() + d.append(path) + + # Fold triangle (slightly darker overlay) + fold_path = draw.Path( + fill=stroke, + opacity=ICON_FOLD_OVERLAY_OPACITY, + stroke="none", + ) + fold_path.M(x1 - f, y0) + fold_path.L(x1 - f, y0 + f) + fold_path.L(x1, y0 + f) + fold_path.Z() + d.append(fold_path) + + # Fold crease line + crease = draw.Path( + fill="none", + stroke=stroke, + stroke_width=stroke_width * ICON_FOLD_CREASE_RATIO, + ) + crease.M(x1 - f, y0) + crease.L(x1 - f, y0 + f) + crease.L(x1, y0 + f) + d.append(crease) + + if banner: + _append_icon_banner_band( + d, label, cx, cy, width, height, font_size, font_family + ) + else: + # Label centred in the body, shifted down slightly to clear the fold. + text_y = cy + f * ICON_TEXT_OFFSET_RATIO + _append_icon_label( + d, label, cx, text_y, width, font_size, font_color, font_family + ) + + +def render_files_icon( + d: draw.Drawing, + cx: float, + cy: float, + width: float, + height: float, + fold_size: float, + fill: str, + stroke: str, + stroke_width: float, + corner_radius: float, + label: str, + font_size: float, + font_color: str, + font_family: str, + banner: bool = False, +) -> None: + """Render a stacked-files icon (two overlapping documents). + + The front page (identical to the single file icon, and the one carrying the + label) is centered on (cx, cy) so a files icon's left edge lines up with + single file icons sharing a row; the back page peeks up and to the right, + into the open space ahead of the icon, so it never crowds the icon to its + left. + """ + off = width * FILES_ICON_OFFSET_RATIO + + # Back page (peeks up-right behind the centered front page) + render_file_icon( + d, + cx=cx + off, + cy=cy - off, + width=width, + height=height, + fold_size=fold_size, + fill=fill, + stroke=stroke, + stroke_width=stroke_width, + corner_radius=corner_radius, + label="", + font_size=font_size, + font_color=font_color, + font_family=font_family, ) + + # Front page (centered on the icon anchor) + render_file_icon( + d, + cx=cx, + cy=cy, + width=width, + height=height, + fold_size=fold_size, + fill=fill, + stroke=stroke, + stroke_width=stroke_width, + corner_radius=corner_radius, + label=label, + font_size=font_size, + font_color=font_color, + font_family=font_family, + banner=banner, + ) + + +def render_folder_icon( + d: draw.Drawing, + cx: float, + cy: float, + width: float, + height: float, + fill: str, + stroke: str, + stroke_width: float, + corner_radius: float, + label: str, + font_size: float, + font_color: str, + font_family: str, +) -> None: + """Render a folder icon with a tab on the top-left. + + The icon is centered on (cx, cy). The shape is a rectangle with a + smaller tab rectangle protruding from the top-left corner. + """ + hw = width / 2 + hh = height / 2 + r = corner_radius + + tab_h = height * FOLDER_TAB_HEIGHT_RATIO + tab_w = width * FOLDER_TAB_WIDTH_RATIO + + # The body sits below the tab + body_top = cy - hh + tab_h + x0 = cx - hw + x1 = cx + hw + y1 = cy + hh + + # Tab shape (top-left rectangle with rounded top corners) + tab = draw.Path( + fill=fill, + stroke=stroke, + stroke_width=stroke_width, + stroke_linejoin="round", + ) + tab_top = cy - hh + tab_right = x0 + tab_w + tab.M(x0 + r, tab_top) + tab.L(tab_right - r, tab_top) + tab.Q(tab_right, tab_top, tab_right, tab_top + r) + tab.L(tab_right, body_top) + tab.L(x0, body_top) + tab.L(x0, tab_top + r) + tab.Q(x0, tab_top, x0 + r, tab_top) + tab.Z() + d.append(tab) + + # Body rectangle (rounded bottom corners + top-right corner) + body = draw.Path( + fill=fill, + stroke=stroke, + stroke_width=stroke_width, + stroke_linejoin="round", + ) + body.M(x0, body_top) + body.L(x1 - r, body_top) + body.Q(x1, body_top, x1, body_top + r) + body.L(x1, y1 - r) + body.Q(x1, y1, x1 - r, y1) + body.L(x0 + r, y1) + body.Q(x0, y1, x0, y1 - r) + body.L(x0, body_top) + body.Z() + d.append(body) + + # Label centered in the body + text_y = (body_top + y1) / 2 + _append_icon_label(d, label, cx, text_y, width, font_size, font_color, font_family) diff --git a/src/nf_metro/render/inline.html b/src/nf_metro/render/inline.html new file mode 100644 index 000000000..965ab69f3 --- /dev/null +++ b/src/nf_metro/render/inline.html @@ -0,0 +1,68 @@ +
+ +
+@@svg + +
drag pan / cmd+scroll zoom / click line to focus
+
+
+
+ +
diff --git a/src/nf_metro/render/legend.py b/src/nf_metro/render/legend.py index 607d42e00..762a1c7f4 100644 --- a/src/nf_metro/render/legend.py +++ b/src/nf_metro/render/legend.py @@ -2,79 +2,545 @@ from __future__ import annotations +__all__ = [ + "compute_legend_dimensions", + "logo_image_kwargs", + "logo_is_resolvable", + "marker_corner_radius", + "marker_fill_color", + "marker_stroke_color", + "open_logo_image", + "render_legend", + "resolve_logo_file", +] + +import base64 +from dataclasses import dataclass +from io import BytesIO +from pathlib import Path +from typing import TYPE_CHECKING + import drawsvg as draw -from nf_metro.parser.model import MetroGraph +if TYPE_CHECKING: + from PIL.Image import Image as PILImageType + +from nf_metro.parser.model import ( + MARKER_FILL_OPEN, + MARKER_FILL_SOLID, + MARKER_SHAPE_CIRCLE, + MARKER_SHAPE_PILL, + MARKER_SHAPE_SQUARE, + MetroGraph, + MetroLine, +) +from nf_metro.render.constants import ( + LEGEND_BORDER_RADIUS, + LEGEND_CHAR_WIDTH_RATIO, + LEGEND_LINE_HEIGHT, + LEGEND_MARKER_GAP, + LEGEND_MARKER_PILL_RATIO, + LEGEND_MARKER_RADIUS, + LEGEND_PADDING, + LEGEND_SWATCH_WIDTH, + LEGEND_TEXT_GAP, + LOGO_GAP, + LOGO_SCALE_FACTOR, + TEXT_VCENTER_DY, + line_style_kwargs, +) +from nf_metro.render.ns import adaptive_logo_mask_ids as _adaptive_logo_mask_ids +from nf_metro.render.ns import ns as _ns from nf_metro.render.style import Theme -def compute_legend_dimensions(graph: MetroGraph, theme: Theme) -> tuple[float, float]: +def logo_is_resolvable(path: str) -> bool: + """True when *path* can be opened as a logo image. + + A logo is either a base64 data URI (self-contained, needs no filesystem - + this is what lets a logo travel into sandboxed contexts such as the + browser-based playground) or a path to an existing file. + """ + return path.startswith("data:") or Path(path).is_file() + + +def resolve_logo_file(raw: str, source_dir: str) -> str: + """Return a resolvable path/data-URI for *raw*, or empty string if not found. + + Tries *raw* as-is first, then relative to *source_dir* (the directory the + map's ``.mmd`` came from), so a logo path can be written relative to the + source file rather than the caller's working directory. + """ + if logo_is_resolvable(raw): + return raw + if source_dir: + candidate = Path(source_dir) / raw + if candidate.is_file(): + return str(candidate) + return "" + + +def open_logo_image(path: str) -> "PILImageType": + """Open a logo image from a data URI or a file path.""" + from PIL import Image as PILImage + + if path.startswith("data:"): + header, _, payload = path.partition(",") + if ";base64" not in header: + raise ValueError("logo data URI must be base64-encoded") + return PILImage.open(BytesIO(base64.b64decode(payload))) + return PILImage.open(path) + + +def logo_image_kwargs(path: str) -> dict[str, str | bool]: + """``drawsvg.Image`` kwargs that embed a logo from a data URI or file path. + + A data URI is already a self-contained ``data:`` href, so it is passed + through unembedded; a file path is read and base64-embedded as usual. + """ + if path.startswith("data:"): + return {"path": path, "embed": False} + return {"path": path, "embed": True} + + +def marker_fill_color(fill: str, theme: Theme) -> str: + """Resolve a marker fill keyword/colour to an SVG fill value. + + ``open`` renders the theme's open-marker interior (falling back to the + background, or white on transparent themes); ``solid`` uses the default + station fill; anything else is taken as a literal colour. + """ + if fill == MARKER_FILL_OPEN: + if theme.marker_open_fill: + return theme.marker_open_fill + if theme.background_color and theme.background_color != "none": + return theme.background_color + return "#ffffff" + if fill == MARKER_FILL_SOLID: + return theme.station_fill + return fill + + +def marker_corner_radius(shape: str, r: float) -> float: + """Corner radius for a marker glyph of half-size ``r``. + + ``square`` is left with sharp corners; every other shape rounds fully + (``r``), giving circles, capsules and stadium-ended pills. + """ + return 0.0 if shape == MARKER_SHAPE_SQUARE else r + + +def marker_stroke_color(theme: Theme) -> str: + """Resolve the outline colour for marker glyphs and their swatches. + + A dedicated light outline keeps dark-filled markers visible against a + dark background; an empty ``marker_stroke`` inherits ``station_stroke``. + """ + return theme.marker_stroke or theme.station_stroke + + +@dataclass +class _LegendRow: + """One row of the legend: a label plus the line(s) its swatch shows.""" + + label: str + lines: tuple[MetroLine, ...] + + +def _combo_standalone_members(graph: MetroGraph, line_ids: tuple[str, ...]) -> set[str]: + """Return combo members that also travel alone somewhere. + + A member is "stand-alone" if it traverses an edge that is not shared by + every other member of the combo, i.e. the line breaks away from the bundle + to a destination the rest do not reach. Such a line keeps its own legend + row in addition to the combo row, so the diagram's lone segment is labelled. + """ + edges_by_line: dict[str, set[tuple[str, str]]] = {lid: set() for lid in line_ids} + for e in graph.edges: + if e.line_id in edges_by_line: + edges_by_line[e.line_id].add((e.source, e.target)) + + nonempty = [edges for edges in edges_by_line.values() if edges] + shared = set.intersection(*nonempty) if nonempty else set() + return {lid for lid in line_ids if edges_by_line[lid] - shared} + + +def _legend_rows(graph: MetroGraph) -> list[_LegendRow]: + """Return the ordered legend rows for a graph. + + Each metro line that is not part of a ``legend_combo`` gets its own row, in + definition order. Each combo named in ``graph.legend_combos`` becomes a + single row whose swatch shows its constituent lines as adjacent stripes. A + constituent line is suppressed from its own individual row only while it + travels entirely within the bundle; if it has a stand-alone segment it + keeps its individual row too (see ``_combo_standalone_members``). + """ + suppressed_ids: set[str] = set() + for line_ids, _label in graph.legend_combos: + suppressed_ids.update( + set(line_ids) - _combo_standalone_members(graph, line_ids) + ) + + rows: list[_LegendRow] = [] + for ml in graph.lines.values(): + if ml.id in suppressed_ids: + continue + rows.append(_LegendRow(label=ml.display_name, lines=(ml,))) + + for line_ids, label in graph.legend_combos: + members = tuple(graph.lines[lid] for lid in line_ids if lid in graph.lines) + if members: + rows.append(_LegendRow(label=label, lines=members)) + + return rows + + +def _logo_gap(graph: MetroGraph) -> float: + """Horizontal gap between the embedded logo and the legend entries. + + An explicit ``%%metro legend_logo_gap:`` wins; otherwise the default gap + tracks ``font_scale`` so an enlarged logo keeps proportional breathing room. + """ + if graph.legend_logo_gap is not None: + return graph.legend_logo_gap + return LOGO_GAP * graph.font_scale + + +def _scale_logo_to_content( + logo_size: tuple[float, float], text_block_height: float, scale: float = 1.0 +) -> tuple[float, float]: + """Scale a logo against the legend's text block, preserving aspect ratio. + + The logo is sized to ``LOGO_SCALE_FACTOR`` of the text block height, then + multiplied by the user ``scale`` (``%%metro logo_scale:``). A scale above 1 + can make the logo taller than the text block, in which case the legend box + grows to contain it (see ``_legend_metrics``). + """ + orig_w, orig_h = logo_size + if orig_h <= 0: + return (0.0, 0.0) + target_h = text_block_height * LOGO_SCALE_FACTOR * scale + aspect = orig_w / orig_h + return (target_h * aspect, target_h) + + +def _legend_metrics( + graph: MetroGraph, + rows: list[_LegendRow], + logo_size: tuple[float, float] | None, +) -> tuple[float, float, float, float]: + """Return (text_block_h, content_h, logo_w, logo_h) for the legend. + + ``content_h`` is the inner height of the legend box: the taller of the + text block and a (possibly enlarged) logo. + """ + line_height = LEGEND_LINE_HEIGHT + line_block_h = len(rows) * line_height + marker_block_h = ( + LEGEND_MARKER_GAP + len(graph.marker_legend) * line_height + if graph.marker_legend + else 0.0 + ) + text_block_h = max(line_block_h + marker_block_h, graph.legend_min_height) + logo_w = logo_h = 0.0 + if logo_size: + logo_w, logo_h = _scale_logo_to_content( + logo_size, text_block_h, graph.logo_scale + ) + content_h = max(text_block_h, logo_h) + return text_block_h, content_h, logo_w, logo_h + + +def compute_legend_dimensions( + graph: MetroGraph, + theme: Theme, + logo_size: tuple[float, float] | None = None, + rows: list[_LegendRow] | None = None, +) -> tuple[float, float]: """Compute the width and height of the legend without rendering it. Returns (width, height). Returns (0, 0) if there are no lines. + logo_size is the original (width, height) of the logo image if present. + ``rows`` may be passed by a caller that already built them (see + ``render_legend``) to avoid recomputing. """ if not graph.lines: return (0.0, 0.0) - line_height = 24.0 - padding = 12.0 - swatch_width = 24.0 - text_offset = swatch_width + 12.0 + if rows is None: + rows = _legend_rows(graph) + if not rows: + return (0.0, 0.0) + + padding = LEGEND_PADDING + swatch_width = LEGEND_SWATCH_WIDTH + text_offset = swatch_width + LEGEND_TEXT_GAP + + max_name_len = max(len(row.label) for row in rows) + if graph.marker_legend: + max_name_len = max(max_name_len, *(len(e.caption) for e in graph.marker_legend)) + char_width = theme.legend_font_size * LEGEND_CHAR_WIDTH_RATIO - max_name_len = max(len(ml.display_name) for ml in graph.lines.values()) - width = text_offset + max_name_len * 7.5 + padding * 2 - height = padding * 2 + len(graph.lines) * line_height + _text_h, content_height, logo_w, _logo_h = _legend_metrics(graph, rows, logo_size) + logo_gap = _logo_gap(graph) if logo_size else 0.0 + + width = padding * 2 + logo_w + logo_gap + text_offset + max_name_len * char_width + height = padding * 2 + content_height return (width, height) +def _render_swatch( + d: draw.Drawing, + row: _LegendRow, + theme: Theme, + x0: float, + entry_y: float, + swatch_width: float, +) -> None: + """Draw the colour swatch for a row. + + A single-line row draws one horizontal segment. A combo row draws each + constituent line as a stripe at a small vertical offset, so the swatch + reads as a bundle of adjacent lines, each honouring its style. + """ + n = len(row.lines) + if n == 1: + offsets = [0.0] + else: + spacing = min(theme.line_width, LEGEND_LINE_HEIGHT / (n + 1)) + offsets = [(i - (n - 1) / 2.0) * spacing for i in range(n)] + + for ml, dy in zip(row.lines, offsets): + dash_kw = line_style_kwargs(ml.style) + d.append( + draw.Line( + x0, + entry_y + dy, + x0 + swatch_width, + entry_y + dy, + stroke=ml.color, + stroke_width=theme.line_width, + stroke_linecap="round", + **dash_kw, + ) + ) + + def render_legend( - drawing: draw.Drawing, + d: draw.Drawing, graph: MetroGraph, theme: Theme, x: float, y: float, + logo_path: str | None = None, + logo_path_light: str | None = None, + logo_path_dark: str | None = None, + logo_size: tuple[float, float] | None = None, ) -> None: """Render a legend showing all metro lines and their colors. - Positioned at (x, y), drawing downward. + Positioned at (x, y), rendering downward. If a logo path and logo_size are + provided, the logo is embedded inside the legend box to the left of the + line entries. + + ``logo_path`` is the always-shown single-path logo (backwards compatible). + ``logo_path_light`` and ``logo_path_dark`` select adaptive rendering via + SVG masks: each variant is shown only in its respective color-scheme mode. + Either variant may be omitted to produce a single-mode adaptive logo + (e.g. light-only or dark-only). """ if not graph.lines: return - line_height = 24.0 - padding = 12.0 - swatch_width = 24.0 - text_offset = swatch_width + 12.0 + rows = _legend_rows(graph) + if not rows: + return + + line_height = LEGEND_LINE_HEIGHT + padding = LEGEND_PADDING + swatch_width = LEGEND_SWATCH_WIDTH + text_offset = swatch_width + LEGEND_TEXT_GAP - legend_width, legend_height = compute_legend_dimensions(graph, theme) + text_block_h, content_height, scaled_w, scaled_h = _legend_metrics( + graph, rows, logo_size + ) + + legend_width, legend_height = compute_legend_dimensions( + graph, theme, logo_size=logo_size, rows=rows + ) # Background - drawing.append(draw.Rectangle( - x, y, - legend_width, legend_height, - rx=6, ry=6, - fill=theme.legend_background, - )) - - # Line entries - for i, metro_line in enumerate(graph.lines.values()): - entry_y = y + padding + i * line_height + line_height / 2 - - # Color swatch (line segment) - drawing.append(draw.Line( - x + padding, entry_y, - x + padding + swatch_width, entry_y, - stroke=metro_line.color, - stroke_width=theme.line_width, - stroke_linecap="round", - )) + d.append( + draw.Rectangle( + x, + y, + legend_width, + legend_height, + rx=LEGEND_BORDER_RADIUS, + ry=LEGEND_BORDER_RADIUS, + fill=theme.legend_background, + class_=_ns("nf-metro-legend-bg"), + ) + ) + + # Logo (left side, vertically centered in content area) + logo_offset = 0.0 + has_adaptive = bool(logo_path_light) or bool(logo_path_dark) + active_logo = logo_path_dark or logo_path_light or logo_path + if active_logo and logo_size: + logo_x = x + padding + logo_y = y + padding + (content_height - scaled_h) / 2 + if has_adaptive: + key_path = logo_path_dark or logo_path_light or "" + dark_mask_id, light_mask_id = _adaptive_logo_mask_ids(key_path) + defs_parts = [] + if logo_path_dark: + defs_parts.append( + f'' + f'' + f"" + ) + if logo_path_light: + defs_parts.append( + f'' + f'' + f"" + ) + d.append(draw.Raw(f"{''.join(defs_parts)}")) + if logo_path_dark: + d.append( + draw.Image( + logo_x, + logo_y, + scaled_w, + scaled_h, + mask=f"url(#{dark_mask_id})", + **logo_image_kwargs(logo_path_dark), + ) + ) + if logo_path_light: + d.append( + draw.Image( + logo_x, + logo_y, + scaled_w, + scaled_h, + mask=f"url(#{light_mask_id})", + **logo_image_kwargs(logo_path_light), + ) + ) + elif logo_path: + d.append( + draw.Image( + logo_x, + logo_y, + scaled_w, + scaled_h, + **logo_image_kwargs(logo_path), + ) + ) + logo_offset = scaled_w + _logo_gap(graph) + + # Line entries, vertically centred within the content area (which can be + # taller than the text block when an enlarged logo grows the box). + text_top = y + padding + (content_height - text_block_h) / 2 + for i, row in enumerate(rows): + entry_y = text_top + i * line_height + line_height / 2 + + _render_swatch( + d, + row, + theme, + x + padding + logo_offset, + entry_y, + swatch_width, + ) # Label - drawing.append(draw.Text( - metro_line.display_name, - theme.legend_font_size, - x + padding + text_offset, entry_y, - fill=theme.legend_text_color, - font_family=theme.label_font_family, - dominant_baseline="central", - )) + d.append( + draw.Text( + row.label, + theme.legend_font_size, + x + padding + logo_offset + text_offset, + entry_y, + fill=theme.legend_text_color, + font_family=theme.label_font_family, + dy=TEXT_VCENTER_DY, + class_=_ns("nf-metro-legend-text"), + ) + ) + + if graph.marker_legend: + _render_marker_key( + d, + graph, + theme, + x + padding + logo_offset, + text_top + len(rows) * line_height + LEGEND_MARKER_GAP, + text_offset, + line_height, + ) + + +def _render_marker_key( + d: draw.Drawing, + graph: MetroGraph, + theme: Theme, + left_x: float, + top_y: float, + text_offset: float, + line_height: float, +) -> None: + """Render the marker shape/fill key rows below the line legend.""" + swatch_cx = left_x + LEGEND_SWATCH_WIDTH / 2 + r = LEGEND_MARKER_RADIUS + stroke = marker_stroke_color(theme) + stroke_cls = _ns("nf-metro-marker-stroke") + for i, entry in enumerate(graph.marker_legend): + entry_y = top_y + i * line_height + line_height / 2 + fill = marker_fill_color(entry.style.fill, theme) + if entry.style.shape == MARKER_SHAPE_CIRCLE: + d.append( + draw.Circle( + swatch_cx, + entry_y, + r, + fill=fill, + stroke=stroke, + stroke_width=theme.station_stroke_width, + class_=stroke_cls, + ) + ) + else: + half_w = ( + r * LEGEND_MARKER_PILL_RATIO + if entry.style.shape == MARKER_SHAPE_PILL + else r + ) + rx = marker_corner_radius(entry.style.shape, r) + d.append( + draw.Rectangle( + swatch_cx - half_w, + entry_y - r, + half_w * 2, + r * 2, + rx=rx, + ry=rx, + fill=fill, + stroke=stroke, + stroke_width=theme.station_stroke_width, + class_=stroke_cls, + ) + ) + d.append( + draw.Text( + entry.caption, + theme.legend_font_size, + left_x + text_offset, + entry_y, + fill=theme.legend_text_color, + font_family=theme.label_font_family, + dy=TEXT_VCENTER_DY, + class_=_ns("nf-metro-legend-text"), + ) + ) diff --git a/src/nf_metro/render/manifest.py b/src/nf_metro/render/manifest.py new file mode 100644 index 000000000..32880e57b --- /dev/null +++ b/src/nf_metro/render/manifest.py @@ -0,0 +1,111 @@ +"""nf-metro's graph adapter for the embedded-manifest standard. + +The format, reader, matcher, and producer helpers live in the dependency-free +:mod:`nf_metro.manifest` package (built to be lifted into its own +distribution), whose vocabulary is tool-neutral: nodes, groups, regions. This +module is the thin nf-metro-specific adapter: it maps a laid-out +:class:`~nf_metro.parser.model.MetroGraph` (stations, lines, sections, process +mappings) onto that neutral vocabulary. The standalone API is re-exported here +so existing ``nf_metro.render.manifest`` imports keep working. +""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + +from nf_metro.manifest import ( + MANIFEST_ELEMENT_ID, + MANIFEST_SCHEMA_VERSION, + build_manifest_data, + inject_manifest, + manifest_json, + manifest_metadata_svg, + manifest_schema, + match_node_ids, + matching_node_ids, + node_data_attrs, + overlay_svg, + read_manifest, +) + +if TYPE_CHECKING: + from nf_metro.parser.model import MetroGraph + +__all__ = [ + "MANIFEST_SCHEMA_VERSION", + "MANIFEST_ELEMENT_ID", + "build_manifest", + "build_manifest_data", + "manifest_json", + "manifest_metadata_svg", + "manifest_schema", + "inject_manifest", + "overlay_svg", + "node_data_attrs", + "read_manifest", + "match_node_ids", + "matching_node_ids", +] + + +def build_manifest( + graph: MetroGraph, + *, + width: int, + height: int, + station_radius: float, + extra_node_data: dict[str, dict[str, Any]] | None = None, +) -> dict[str, Any]: + """Build the manifest dict from the graph the renderer just laid out. + + Maps the metro graph onto the standard's neutral vocabulary - stations are + nodes, lines are groups, sections are regions, and a station's process + patterns are its node patterns - then hands plain data to the standalone + :func:`~nf_metro.manifest.build_manifest_data`. Coordinates and the process + mapping are read from the same fields the live server uses + (``graph.stations[].x/.y`` and ``graph.process_mapping``) so the embedded + data cannot drift from the live behaviour. ``width`` and ``height`` are the + final canvas dimensions; ``station_radius`` is the single nominal marker + radius. + + ``extra_node_data`` is an optional mapping from station id to additional + fields (e.g. ``w``, ``h``, ``rx`` pill dimensions computed by the renderer) + that are merged into each node entry before serialisation. + + Ports and hidden nodes are excluded. Every other station is included -- + unmapped ones simply carry an empty ``patterns`` list -- so the manifest is + a complete, future-proof inventory of addressable nodes rather than only the + subset that lights up today. + """ + real_sections = graph.real_sections + + nodes: list[dict[str, Any]] = [] + for station in graph.stations.values(): + if station.is_port or station.is_hidden: + continue + entry: dict[str, Any] = { + "id": station.id, + "label": station.label or station.id, + "x": station.x, + "y": station.y, + "r": station_radius, + "groups": graph.station_lines(station.id), + "patterns": list(graph.process_mapping.get(station.id, [])), + } + if station.section_id in real_sections: + entry["region"] = station.section_id + if extra_node_data and station.id in extra_node_data: + entry.update(extra_node_data[station.id]) + nodes.append(entry) + + return build_manifest_data( + title=graph.title, + width=width, + height=height, + nodes=nodes, + groups=[ + {"id": line.id, "label": line.display_name, "color": line.color} + for line in graph.lines.values() + ], + regions=[{"id": sid, "label": sec.name} for sid, sec in real_sections.items()], + ) diff --git a/src/nf_metro/render/ns.py b/src/nf_metro/render/ns.py new file mode 100644 index 000000000..591e16e5e --- /dev/null +++ b/src/nf_metro/render/ns.py @@ -0,0 +1,41 @@ +"""SVG class-namespace utilities shared across render modules.""" + +from __future__ import annotations + +import contextlib +import contextvars +import hashlib +from collections.abc import Generator + +__all__ = ["ns", "class_prefix_context", "adaptive_logo_mask_ids"] + +_render_class_prefix: contextvars.ContextVar[str] = contextvars.ContextVar( + "_render_class_prefix", default="" +) + + +def ns(cls: str) -> str: + """Apply the active render namespace prefix to an SVG class name.""" + p = _render_class_prefix.get() + return f"{p}-{cls}" if p else cls + + +def adaptive_logo_mask_ids(key_path: str) -> tuple[str, str]: + """Return stable, unique SVG mask IDs for an adaptive logo pair. + + IDs are derived from *key_path* (dark logo if available, else light) so + the same file always maps to the same IDs, avoiding collisions when + multiple SVGs are inlined on one page. Returns ``(dark_mask_id, light_mask_id)``. + """ + h = hashlib.md5(key_path.encode()).hexdigest()[:8] + return ns(f"nfm-logo-mask-dark-{h}"), ns(f"nfm-logo-mask-light-{h}") + + +@contextlib.contextmanager +def class_prefix_context(prefix: str) -> Generator[None, None, None]: + """Context manager that sets the SVG class namespace prefix for the duration.""" + token = _render_class_prefix.set(prefix) + try: + yield + finally: + _render_class_prefix.reset(token) diff --git a/src/nf_metro/render/section_header.py b/src/nf_metro/render/section_header.py new file mode 100644 index 000000000..d848b6d2d --- /dev/null +++ b/src/nf_metro/render/section_header.py @@ -0,0 +1,357 @@ +"""Section header (number badge + title) placement. + +The header is drawn at a section box's top-left corner by default. When a route +enters the box through an edge under the header it would cross the title text. +:func:`resolve_section_header_placement` picks a position that keeps the header +clear of routes, never moving a route to do so, following the priority chain: + +1. ``above`` - the default top-left position, when the top edge is clear. +2. ``below`` - mirror at the bottom-left, when the top is blocked but the bottom + is clear. +3. ``left`` / ``right`` - the title rotated to read down a vertical edge, when + both horizontal edges are blocked but a side is clear and the title fits. +4. ``nudge`` - the top-left header shifted right past the clashing routes, as a + last resort that always clears. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Literal + +from nf_metro.parser.model import MetroGraph, Section +from nf_metro.render.constants import ( + SECTION_HEADER_ROUTE_PAD, + SECTION_HEADER_SIDE_GAP, + SECTION_LABEL_CHAR_WIDTH_RATIO, + SECTION_LABEL_HALF_HEIGHT_RATIO, + SECTION_LABEL_TEXT_OFFSET, + SECTION_NUM_CIRCLE_R_LARGE, + SECTION_NUM_Y_OFFSET, +) + +Rect = tuple[float, float, float, float] +Polyline = list[tuple[float, float]] +HeaderMode = Literal["above", "below", "left", "right", "nudge"] + + +@dataclass(frozen=True) +class SectionHeaderPlacement: + """Resolved drawing geometry for one section's header. + + ``badge_*`` locate the numbered circle; ``label_*`` locate the title text. + ``label_rotation`` is 0 for the horizontal positions and 90 for the rotated + side positions (title reads top-to-bottom). ``keepout`` is the union bbox + of badge and title used by the render-time guard. + """ + + mode: HeaderMode + badge_cx: float + badge_cy: float + label_x: float + label_y: float + label_rotation: float + keepout: Rect + + +def estimate_section_label_width(name: str, font_size: float) -> float: + """Estimate the rendered width of a section title in pixels.""" + return len(name) * font_size * SECTION_LABEL_CHAR_WIDTH_RATIO + + +def _header_length(name: str, font_size: float) -> float: + """Length of the header (badge + gap + title) along its reading axis.""" + circle_r = SECTION_NUM_CIRCLE_R_LARGE + if not name: + return 2.0 * circle_r + return ( + 2.0 * circle_r + + SECTION_LABEL_TEXT_OFFSET + + estimate_section_label_width(name, font_size) + ) + + +def resolve_section_header_placement( + graph: MetroGraph, + section: Section, + label_font_size: float, + polylines: list[Polyline] | None = None, +) -> SectionHeaderPlacement: + """Pick a clash-free position for ``section``'s header (see module docstring). + + Each candidate position is tested against the actual routed ``polylines`` so + a line crossing the header band - whether it enters through an edge port or + merely skirts the box - forces a relocation. With no polylines supplied the + default above-left position is returned (used only where routes are not yet + available).""" + circle_r = SECTION_NUM_CIRCLE_R_LARGE + num_y = SECTION_NUM_Y_OFFSET + gap = SECTION_HEADER_SIDE_GAP + + x0 = section.bbox_x + y0 = section.bbox_y + box_bottom = section.bbox_y + section.bbox_h + box_right = section.bbox_x + section.bbox_w + length = _header_length(section.name, label_font_size) + half_text = SECTION_LABEL_HALF_HEIGHT_RATIO * label_font_size + + above = _above(x0, y0, circle_r, num_y, length, half_text) + if polylines is None: + return above + + # A rotated side header runs down the edge and must fit the box height; the + # left column additionally needs room between the box and the canvas origin. + side_fits = length <= section.bbox_h + candidates = [above, _below(x0, box_bottom, circle_r, num_y, length, half_text)] + if side_fits and x0 - gap - 2.0 * circle_r >= 0.0: + candidates.append(_left(x0, y0, circle_r, gap, length)) + if side_fits: + candidates.append(_right(box_right, y0, circle_r, gap, length)) + + for candidate in candidates: + if _placement_clear(candidate, polylines): + return candidate + return _nudge(x0, y0, circle_r, num_y, length, half_text, above, polylines) + + +def resolve_all_section_headers( + graph: MetroGraph, + label_font_size: float, + polylines: list[Polyline], +) -> dict[str, SectionHeaderPlacement]: + """Resolve every drawn section's header placement once, keyed by section id.""" + return { + section.id: resolve_section_header_placement( + graph, section, label_font_size, polylines + ) + for section in graph.sections.values() + if section.bbox_w > 0 and section.bbox_h > 0 and not section.is_implicit + } + + +def _placement_clear( + placement: SectionHeaderPlacement, polylines: list[Polyline] +) -> bool: + """True if no routed line comes within ``SECTION_HEADER_ROUTE_PAD`` of the + placement's header region.""" + pad = SECTION_HEADER_ROUTE_PAD + return not any( + _segment_hits_rect(poly[i], poly[i + 1], placement.keepout, -pad) + for poly in polylines + for i in range(len(poly) - 1) + ) + + +def _above( + x0: float, + y0: float, + circle_r: float, + num_y: float, + length: float, + half_text: float, +) -> SectionHeaderPlacement: + cx = x0 + circle_r + cy = y0 - circle_r - num_y + return SectionHeaderPlacement( + mode="above", + badge_cx=cx, + badge_cy=cy, + label_x=cx + circle_r + SECTION_LABEL_TEXT_OFFSET, + label_y=cy, + label_rotation=0.0, + keepout=(x0, cy - half_text, x0 + length, y0), + ) + + +def _below( + x0: float, + box_bottom: float, + circle_r: float, + num_y: float, + length: float, + half_text: float, +) -> SectionHeaderPlacement: + cx = x0 + circle_r + cy = box_bottom + circle_r + num_y + return SectionHeaderPlacement( + mode="below", + badge_cx=cx, + badge_cy=cy, + label_x=cx + circle_r + SECTION_LABEL_TEXT_OFFSET, + label_y=cy, + label_rotation=0.0, + keepout=(x0, box_bottom, x0 + length, cy + half_text), + ) + + +def _left( + x0: float, + y0: float, + circle_r: float, + gap: float, + length: float, +) -> SectionHeaderPlacement: + col_x = x0 - gap - circle_r + cy = y0 + circle_r + return SectionHeaderPlacement( + mode="left", + badge_cx=col_x, + badge_cy=cy, + label_x=col_x, + label_y=cy + circle_r + SECTION_LABEL_TEXT_OFFSET, + label_rotation=90.0, + keepout=(col_x - circle_r, y0, x0, y0 + length), + ) + + +def _right( + box_right: float, + y0: float, + circle_r: float, + gap: float, + length: float, +) -> SectionHeaderPlacement: + col_x = box_right + gap + circle_r + cy = y0 + circle_r + return SectionHeaderPlacement( + mode="right", + badge_cx=col_x, + badge_cy=cy, + label_x=col_x, + label_y=cy + circle_r + SECTION_LABEL_TEXT_OFFSET, + label_rotation=90.0, + keepout=(box_right, y0, col_x + circle_r, y0 + length), + ) + + +def _nudge( + x0: float, + y0: float, + circle_r: float, + num_y: float, + length: float, + half_text: float, + above: SectionHeaderPlacement, + polylines: list[Polyline], +) -> SectionHeaderPlacement: + """Shift the above-left header right until it clears every route crossing + the band it would occupy. Always clears, at the cost of a header that may + overhang the box to the right.""" + pad = SECTION_HEADER_ROUTE_PAD + bx0, by0, bx1, by1 = above.keepout + band = (bx0 - pad, by0 - pad, bx1 + pad, by1 + pad) + start = x0 + for poly in polylines: + for i in range(len(poly) - 1): + span = _segment_rect_xspan(poly[i], poly[i + 1], band) + if span is not None: + start = max(start, span + pad) + cx = start + circle_r + cy = y0 - circle_r - num_y + return SectionHeaderPlacement( + mode="nudge", + badge_cx=cx, + badge_cy=cy, + label_x=cx + circle_r + SECTION_LABEL_TEXT_OFFSET, + label_y=cy, + label_rotation=0.0, + keepout=(start, cy - half_text, start + length, y0), + ) + + +class SectionHeaderClashError(RuntimeError): + """A section header was placed over a routed line. + + Raised on the render path so the placement chain can never silently draw a + title across a metro line, independent of ``compute_layout``'s validation. + """ + + +@dataclass(frozen=True) +class HeaderRouteClash: + """A routed line crosses a section header's text/badge region.""" + + section_id: str + mode: str + keepout: Rect + + def message(self) -> str: + return ( + f"section '{self.section_id}' header (placed '{self.mode}') overlaps a " + f"route inside {tuple(round(c, 1) for c in self.keepout)}" + ) + + +def _clip_segment( + p0: tuple[float, float], p1: tuple[float, float], rect: Rect +) -> tuple[float, float] | None: + """Liang-Barsky clip of segment ``p0``-``p1`` against ``rect``; returns the + ``(t_lo, t_hi)`` parameter range inside the rect, or ``None`` if it misses.""" + rx0, ry0, rx1, ry1 = rect + if rx1 <= rx0 or ry1 <= ry0: + return None + x0, y0 = p0 + dx = p1[0] - x0 + dy = p1[1] - y0 + t_lo, t_hi = 0.0, 1.0 + for p, q in ((-dx, x0 - rx0), (dx, rx1 - x0), (-dy, y0 - ry0), (dy, ry1 - y0)): + if p == 0: + if q < 0: + return None + continue + t = q / p + if p < 0: + t_lo = max(t_lo, t) + else: + t_hi = min(t_hi, t) + if t_lo > t_hi: + return None + return t_lo, t_hi + + +def _segment_hits_rect( + p0: tuple[float, float], + p1: tuple[float, float], + rect: Rect, + margin: float, +) -> bool: + """True if segment ``p0``-``p1`` enters ``rect`` inset by ``margin`` on every + side (negative ``margin`` expands), so a route merely tangent to the keepout + boundary does not count.""" + inset = ( + rect[0] + margin, + rect[1] + margin, + rect[2] - margin, + rect[3] - margin, + ) + return _clip_segment(p0, p1, inset) is not None + + +def _segment_rect_xspan( + p0: tuple[float, float], p1: tuple[float, float], rect: Rect +) -> float | None: + """Largest X at which segment ``p0``-``p1`` lies inside ``rect``, or ``None``.""" + clip = _clip_segment(p0, p1, rect) + if clip is None: + return None + t_lo, t_hi = clip + return max(p0[0] + t_lo * (p1[0] - p0[0]), p0[0] + t_hi * (p1[0] - p0[0])) + + +def check_section_headers_clear_routes( + placements: dict[str, SectionHeaderPlacement], + polylines: list[Polyline], + margin: float = 2.0, +) -> list[HeaderRouteClash]: + """Report every section whose resolved header region a routed line crosses.""" + clashes: list[HeaderRouteClash] = [] + for section_id, placement in placements.items(): + rect = placement.keepout + for poly in polylines: + if any( + _segment_hits_rect(poly[i], poly[i + 1], rect, margin) + for i in range(len(poly) - 1) + ): + clashes.append(HeaderRouteClash(section_id, placement.mode, rect)) + break + return clashes diff --git a/src/nf_metro/render/standalone.html b/src/nf_metro/render/standalone.html new file mode 100644 index 000000000..fe131e434 --- /dev/null +++ b/src/nf_metro/render/standalone.html @@ -0,0 +1,149 @@ + + + + +@@title + + + +
+
+

@@title

+ drag to pan, scroll to zoom, click a line to focus + + +
+
+ @@svg +
+ +
+
+ +
+
+ +

Embed snippets

+

Interactive HTML (inline). Self-contained snippet - + paste into any HTML host (MkDocs, Confluence, Notion, blog templates) + and it keeps full pan / zoom / line-filter. No iframe, no hosting.

+
+ + +
+

+    

Interactive (iframe). Host this HTML file and embed + the iframe. GitHub READMEs strip iframes - link to a hosted page + from the README instead.

+
+ + +
+

+    

Static SVG. Inline this anywhere that accepts raw HTML + (or save it as .svg). No interactivity but it renders even where + scripts are stripped.

+
+ + +
+

+  
+
+ + + + diff --git a/src/nf_metro/render/style.py b/src/nf_metro/render/style.py index a18527cfe..d8688cfde 100644 --- a/src/nf_metro/render/style.py +++ b/src/nf_metro/render/style.py @@ -2,23 +2,44 @@ from __future__ import annotations -from dataclasses import dataclass, field +__all__ = ["Theme"] +from dataclasses import dataclass -@dataclass +from nf_metro.layout.constants import ( + ICON_HALF_HEIGHT, + STATION_RADIUS_APPROX, + TERMINUS_WIDTH, +) + + +@dataclass(kw_only=True) class Theme: """Visual theme for a metro map.""" name: str + # Brand identity (``nfcore``, ``seqera``) and display mode (``light`` / + # ``dark``) are orthogonal axes. ``brand`` ties a resolved theme back to its + # light/dark family so the renderer can emit both palettes; ``mode`` records + # which one is baked as the concrete default. ``brand=""`` opts a theme out + # of family pairing (single-palette render). + brand: str = "" + mode: str = "dark" background_color: str station_fill: str station_stroke: str - station_radius: float + station_radius: float = STATION_RADIUS_APPROX station_stroke_width: float line_width: float label_color: str label_font_family: str label_font_size: float + label_font_weight: str + # Knockout halo painted behind station labels so names stay legible where + # they fall over routes. Width 0 disables. Empty colour resolves to the + # background (a knockout), or white on transparent themes. + label_halo_width: float = 3.0 + label_halo_color: str = "" title_color: str title_font_size: float section_fill: str @@ -28,3 +49,35 @@ class Theme: legend_background: str legend_text_color: str legend_font_size: float + # Animation settings + animation_ball_radius: float = 3.0 + animation_ball_color: str = "#ffffff" + animation_ball_stroke: str = "" + animation_ball_stroke_width: float = 1.0 + animation_balls_per_line: int = 1 + animation_speed: float = 80.0 # pixels per second + # Static directional chevrons (--directional). Kept transit-restrained: + # a wide spacing so most routes show only a few markers. + directional_marker_size: float = 4.0 # arm half-length and half-width, px + directional_marker_spacing: float = 64.0 # px + directional_marker_opacity: float = 0.75 + directional_marker_color: str = "" # empty = inherit the line colour + # Terminus (file icon) settings + terminus_width: float = TERMINUS_WIDTH + terminus_height: float = 2 * ICON_HALF_HEIGHT + terminus_fold_size: float = 8.0 + terminus_fill: str = "" # empty = inherit station_fill + terminus_stroke: str = "" # empty = inherit station_stroke + terminus_stroke_width: float = 1.5 + terminus_corner_radius: float = 2.0 + terminus_font_size: float = 7.5 + terminus_font_color: str = "" # empty = inherit label_color + # Bridge glyph at non-merging line crossings + bridge_glyph: bool = True + # Interior fill for "open" markers (%%metro marker: ... | open). Empty + # falls back to the background colour, or white on transparent themes. + marker_open_fill: str = "" + # Outline for marker glyphs (%%metro marker:) and their legend swatches. + # A light outline keeps dark-filled markers visible against a dark + # background. Empty inherits station_stroke. + marker_stroke: str = "" diff --git a/src/nf_metro/render/svg.py b/src/nf_metro/render/svg.py index 7a6eb16ca..687831d54 100644 --- a/src/nf_metro/render/svg.py +++ b/src/nf_metro/render/svg.py @@ -2,154 +2,1023 @@ from __future__ import annotations -from pathlib import Path +__all__ = ["apply_route_offsets", "render_svg"] + +import html +import math +import re +import textwrap +import warnings +from collections.abc import Iterable +from dataclasses import replace +from typing import Any, Literal, NamedTuple import drawsvg as draw -from nf_metro.layout.labels import LabelPlacement, place_labels -from nf_metro.layout.routing import RoutedPath, compute_station_offsets, route_edges -from nf_metro.parser.model import MetroGraph -from nf_metro.render.legend import compute_legend_dimensions, render_legend +from nf_metro.layout.constants import ( + LABEL_LINE_HEIGHT, + OFFTRACK_TERMINUS_NUB_CLEARANCE, + SAME_COORD_TOLERANCE, + resolve_offset_step, +) +from nf_metro.layout.geometry import lanes_run_along_x, segment_intersects_bbox +from nf_metro.layout.labels import ( + LabelPlacement, + _label_bbox, + font_scale_context, + place_labels, +) +from nf_metro.layout.phases.guards import ( + FoldThresholdError, + assert_render_layout_invariants, + iter_opposing_line_overlaps, +) +from nf_metro.layout.routing import ( + RoutedPath, + apply_route_offsets, + compute_station_offsets, + route_edges_centred, +) +from nf_metro.layout.routing.corners import ( + curve_tangents, + resolve_curve_radii, +) +from nf_metro.layout.routing.invariants import ( + CurveInvariantError, + assert_render_curve_invariants, +) +from nf_metro.layout.routing.reversal import tb_positive_fan_sections +from nf_metro.manifest import node_data_attrs +from nf_metro.parser.model import ( + ICON_TYPE_DIR, + ICON_TYPE_FILE, + ICON_TYPE_FILES, + MARKER_FILL_OPEN, + MARKER_FILL_SOLID, + MARKER_SHAPE_PILL, + Interchange, + MarkerStyle, + MetroGraph, + Section, + Station, +) +from nf_metro.render.bridges import BridgeBreak, compute_bridges +from nf_metro.render.constants import ( + CANVAS_PADDING, + CAPTION_FILL, + CAPTION_FONT_SIZE, + DEBUG_DIAMOND_RADIUS, + DEBUG_ENTRY_PORT_COLOR, + DEBUG_EXIT_PORT_COLOR, + DEBUG_FONT_SIZE, + DEBUG_GRID_COLOR, + DEBUG_GRID_COLOR_LIGHT, + DEBUG_HIDDEN_LABEL_OFFSET, + DEBUG_HIDDEN_STATION_COLOR, + DEBUG_LABEL_OFFSET, + DEBUG_ROW_GRID_COLOR, + DEBUG_ROW_GRID_COLOR_LIGHT, + DEBUG_STROKE_WIDTH, + DEBUG_WAYPOINT_COLOR, + DEBUG_WAYPOINT_COLOR_LIGHT, + DEBUG_WAYPOINT_RADIUS, + FALLBACK_LINE_COLOR, + FILES_ICON_OFFSET_RATIO, + GROUP_LABEL_BAND_PADDING, + GROUP_LABEL_FONT_SCALE, + GROUP_LABEL_GAP, + GROUP_LABEL_LABEL_CLEARANCE, + GROUP_LABEL_TICK_LENGTH, + GROUP_LABEL_UNDERLINE_GAP, + GROUP_LABEL_UNDERLINE_OPACITY, + GROUP_LABEL_UNDERLINE_WIDTH, + ICON_BBOX_MARGIN, + ICON_CLEARANCE_MARGIN, + ICON_INTER_GAP, + ICON_NAME_FONT_SCALE, + ICON_NAME_GAP, + ICON_STATION_GAP, + LEGEND_GAP, + LEGEND_INSET, + LEGEND_ROUTE_CLEARANCE, + LOGO_Y_STANDALONE, + MARKER_PILL_LENGTH_RATIO, + RAIL_KNOB_RADIUS_RATIO, + RAIL_LINK_HALF_WIDTH_RATIO, + SECTION_BOX_RADIUS, + SECTION_HEADER_ROUTE_PAD, + SECTION_NUM_CIRCLE_R_LARGE, + SECTION_NUM_FONT_SIZE, + SECTION_STROKE_WIDTH, + SVG_CURVE_RADIUS, + TERMINUS_FONT_COLOR, + TEXT_VCENTER_DY, + TITLE_Y_OFFSET, + WATERMARK_BARE_X_INSET, + WATERMARK_FILL, + WATERMARK_FONT_SIZE, + WATERMARK_PADDING_RATIO, + WATERMARK_Y_INSET, + line_style_kwargs, +) +from nf_metro.render.icons import ( + render_file_icon, + render_files_icon, + render_folder_icon, +) +from nf_metro.render.legend import ( + compute_legend_dimensions, + logo_image_kwargs, + marker_corner_radius, + marker_fill_color, + marker_stroke_color, + open_logo_image, + render_legend, + resolve_logo_file, +) +from nf_metro.render.manifest import build_manifest, manifest_metadata_svg +from nf_metro.render.ns import adaptive_logo_mask_ids as _adaptive_logo_mask_ids +from nf_metro.render.ns import class_prefix_context +from nf_metro.render.ns import ns as _ns +from nf_metro.render.section_header import ( + SectionHeaderClashError, + SectionHeaderPlacement, + check_section_headers_clear_routes, + resolve_all_section_headers, +) from nf_metro.render.style import Theme +def _compute_canvas_bounds( + graph: MetroGraph, + routes: list[RoutedPath], + debug: bool = False, +) -> tuple[float, float]: + """Compute max X/Y from stations, section boxes, and route waypoints.""" + if debug: + visible_stations = list(graph.stations.values()) + else: + visible_stations = [ + s for s in graph.stations.values() if not s.is_port and not s.is_hidden + ] + all_stations = ( + visible_stations if visible_stations else list(graph.stations.values()) + ) + + max_x = max(s.x for s in all_stations) + max_y = max(s.y for s in all_stations) + + for section in graph.sections.values(): + if section.bbox_w > 0: + max_x = max(max_x, section.bbox_x + section.bbox_w) + max_y = max(max_y, section.bbox_y + section.bbox_h) + + for route in routes: + for px, py in route.points: + if px > max_x: + max_x = px + if py > max_y: + max_y = py + + return max_x, max_y + + +def _position_legend( + graph: MetroGraph, + theme: Theme, + max_x: float, + max_y: float, + padding: float, + logo_in_legend: bool, + logo_w: float, + logo_h: float, + legend_position: str, + routes: list[RoutedPath], +) -> tuple[float, float, float, float, bool]: + """Compute legend position and dimensions. + + Returns (legend_x, legend_y, legend_w, legend_h, show_legend). + + ``legend_position`` is passed in because callers may override it per render + (only ``"none"`` is overridden in practice); the placement modifiers + (``legend_anchor``/``legend_offset``/``legend_at``) are read from ``graph``. + + A casual corner keyword auto-relocates to the bottom-left when it would + overlap a section or a routed line. An explicit pin (canvas anchor, offset, + or absolute coordinates) is honoured as placed, but warns on overlap. + """ + legend_logo_size = (logo_w, logo_h) if logo_in_legend else None + legend_w, legend_h = compute_legend_dimensions( + graph, theme, logo_size=legend_logo_size + ) + show_legend = legend_position != "none" and legend_w > 0 + legend_x = 0.0 + legend_y = 0.0 + + if not show_legend: + return legend_x, legend_y, legend_w, legend_h, show_legend + + # Absolute placement (legend: x,y) pins the block top-left exactly. + if graph.legend_at is not None: + legend_x, legend_y = graph.legend_at + if _legend_overlaps_content( + legend_x, legend_y, legend_w, legend_h, graph, routes + ): + warnings.warn( + f"legend placed at {graph.legend_at} overlaps a section or route.", + stacklevel=2, + ) + return legend_x, legend_y, legend_w, legend_h, show_legend + + pos = legend_position + gap = LEGEND_GAP + inset = LEGEND_INSET + content_left = min( + (s.bbox_x for s in graph.sections.values() if s.bbox_w > 0), + default=padding, + ) + content_top = min( + (s.bbox_y for s in graph.sections.values() if s.bbox_w > 0), + default=padding, + ) + + # Frame the keyword anchor against the section bbox (default) or the canvas + # margin. The canvas frame lets a corner fill the empty drawing margin. + if graph.legend_anchor == "canvas": + left, top = padding, padding + else: + left, top = content_left, content_top + right, bottom = max_x, max_y + + if pos == "bl": + legend_x = left + legend_y = bottom - legend_h + elif pos == "br": + legend_x = right - legend_w - inset + legend_y = bottom - legend_h - inset + elif pos == "tl": + legend_x = left + inset + legend_y = top + inset + elif pos == "tr": + legend_x = right - legend_w - inset + legend_y = top + inset + elif pos == "bottom": + legend_x = left + legend_y = bottom + gap + elif pos == "right": + legend_x = right + gap + legend_y = top + + # An explicit pin (canvas anchor or offset) means the author placed the + # block deliberately, so don't auto-relocate it; warn instead if it + # overlaps. A casual corner keyword relocates to the bottom-left when it + # would overlap a section or a routed line. + explicit_pin = graph.legend_anchor == "canvas" or graph.legend_offset is not None + if graph.legend_offset is not None: + legend_x += graph.legend_offset[0] + legend_y += graph.legend_offset[1] + + if explicit_pin: + if _legend_overlaps_content( + legend_x, legend_y, legend_w, legend_h, graph, routes + ): + warnings.warn( + f"legend pinned at '{pos}' overlaps a section or route.", + stacklevel=2, + ) + elif pos not in ("bottom", "right") and _legend_overlaps_content( + legend_x, legend_y, legend_w, legend_h, graph, routes + ): + legend_x = content_left + legend_y = max_y + gap + + return legend_x, legend_y, legend_w, legend_h, show_legend + + +def _icon_obstacles_by_station( + graph: MetroGraph, + theme: Theme, + station_offsets: dict[tuple[str, str], float], +) -> dict[str, tuple[float, float, float, float]]: + """Compute each terminus file icon's bounding box, keyed by station id. + + The box covers the icon row(s) and any caption text beneath, with a + clearance margin -- the same geometry the label placer treats as an + obstacle. Keyed by station so a caller can attribute a box to the + station whose icon it is (e.g. to exempt that station's own terminating + segment from a line-crosses-icon check). + """ + obstacles: dict[str, tuple[float, float, float, float]] = {} + margin = ICON_CLEARANCE_MARGIN + + for station in graph.stations.values(): + if not station.is_terminus or not station.terminus_labels: + continue + + # Reuse the renderer's own icon-placement geometry so the obstacle + # tracks the *drawn* icons. Icons march along the section's flow + # axis -- horizontally for LR/RL, vertically for TB/BT -- so a + # box that always assumed a horizontal row sat beside the wrong + # axis on a vertical-flow terminus (a line could rake the real + # icon while the box reported clear). + line_offs = [ + station_offsets.get((station.id, lid), 0.0) + for lid in graph.station_lines(station.id) + ] + min_off = min(line_offs) if line_offs else 0.0 + max_off = max(line_offs) if line_offs else 0.0 + centers = _terminus_icon_centers_for(station, graph, theme, min_off, max_off) + if not centers: + continue + + # Stacked-files icons extend beyond nominal size by the offset. + has_stacked = ICON_TYPE_FILES in (station.terminus_icon_types or []) + stacked_pad = ( + theme.terminus_width * FILES_ICON_OFFSET_RATIO if has_stacked else 0.0 + ) + icon_half_w = theme.terminus_width / 2 + stacked_pad + icon_half_h = theme.terminus_height / 2 + stacked_pad + + x_min = min(cx for cx, _ in centers) - icon_half_w + x_max = max(cx for cx, _ in centers) + icon_half_w + y_min = min(cy for _, cy in centers) - icon_half_h + y_max = max(cy for _, cy in centers) + icon_half_h + + # Captions render below the icon row, so extend the box downward to + # cover them and keep neighbouring labels at a distance. + if any(station.terminus_names or []): + y_max += ICON_NAME_GAP + theme.label_font_size * ICON_NAME_FONT_SCALE + + obstacles[station.id] = ( + x_min - margin, + y_min - margin, + x_max + margin, + y_max + margin, + ) + + return obstacles + + +def _compute_icon_obstacles( + graph: MetroGraph, + theme: Theme, + station_offsets: dict[tuple[str, str], float], +) -> list[tuple[float, float, float, float]]: + """Bounding boxes for terminus file icons, as label-placement obstacles.""" + return list(_icon_obstacles_by_station(graph, theme, station_offsets).values()) + + def render_svg( graph: MetroGraph, theme: Theme, width: int | None = None, height: int | None = None, - padding: float = 60.0, + padding: float = CANVAS_PADDING, + animate: bool | None = None, + debug: bool = False, + legend_position: str | None = None, + responsive: bool = False, + font_portability: Literal["embed", "paths"] | None = None, + svg_class_prefix: str = "", + inject_dark_mode_css: bool = True, + chrome_css: bool = True, + self_color_scheme: bool = True, + baked_mode: str | None = None, + bare: bool = False, ) -> str: - """Render a metro map graph to an SVG string.""" + """Render a metro map graph to an SVG string. + + ``width``, ``height``, and ``animate`` fall back to the graph's fields + (set by directive or CLI flag) when left unset. + + If ``legend_position`` is given it overrides ``graph.legend_position`` + for this render only, without mutating the graph. + + If ``responsive`` is True the root ```` element omits fixed + ``width``/``height`` attributes and adds + ``preserveAspectRatio="xMinYMin meet"``, so a host page can scale the + diagram with CSS (e.g. ``width: 100%; height: auto``). + + ``font_portability`` controls how the SVG handles fonts on foreign hosts: + + - ``"embed"``: inlines a subset of Inter as a base64 ``@font-face`` block. + - ``"paths"``: converts all text to vector paths, removing font + dependencies entirely (requires ``fontTools[woff]``). + - ``None`` (default): bare ``font-family`` reference, resolved by the host renderer. + + ``svg_class_prefix``: when non-empty, every SVG presentation class (e.g. + ``nf-metro-station``, ``metro-line-``) is prefixed with + ``-``. Use distinct prefixes for each map on a shared + page to prevent CSS collisions between maps or with host-page styles. + ``data-*`` attributes and manifest element ids are not affected. + + ``inject_dark_mode_css``: when False, the ``prefers-color-scheme: dark`` + ````) + resolves ``light-dark()`` against the viewer's OS preference. The value + is ``light dark`` (adaptive) unless *baked_mode* is set. + Set False when inlining into a page that owns the theme (the docs site, + the playground): the SVG then inherits the page's ``color-scheme`` so a + manual light/dark toggle drives it. No effect for single-palette themes. + + ``baked_mode``: when ``"light"`` or ``"dark"``, the root ```` declares + ``color-scheme: `` instead of the adaptive ``color-scheme: light dark``. + This ensures ``light-dark()`` in the chrome CSS resolves to the correct + palette in rasterizers that respect the OS color-scheme (e.g. cairosvg on + a dark-mode macOS session). Set this to the explicit ``--mode`` value when + rendering for PNG export; leave ``None`` for browser-adaptive SVG output. + + ``bare``: when True, omits the title and outer padding so the canvas + hugs the diagram content. The attribution watermark is kept. Use for + embedding the SVG inside a host page that supplies its own frame and + heading. + """ if not graph.stations: return '' - # Filter out port stations for dimension calculation - visible_stations = [s for s in graph.stations.values() if not s.is_port] - all_stations_for_bounds = visible_stations if visible_stations else list(graph.stations.values()) + if width is None: + width = graph.width + if height is None: + height = graph.height + if animate is None: + animate = graph.animate - max_x = max(s.x for s in all_stations_for_bounds) - max_y = max(s.y for s in all_stations_for_bounds) + scaled_theme = _scale_theme_fonts(theme, graph.font_scale) + with class_prefix_context(svg_class_prefix), font_scale_context(graph.font_scale): + try: + svg = _render_svg_scaled( + graph, + scaled_theme, + width=width, + height=height, + padding=padding, + animate=animate, + debug=debug, + legend_position=legend_position, + responsive=responsive, + inject_dark_mode_css=inject_dark_mode_css, + chrome_css=chrome_css, + self_color_scheme=self_color_scheme, + baked_mode=baked_mode, + bare=bare, + ) + except (CurveInvariantError, SectionHeaderClashError) as exc: + reframed = _fold_threshold_error(graph) + if reframed is not None: + raise reframed from exc + raise + + if _fold_back_under_compression(graph): + reframed = _fold_threshold_error(graph) + if reframed is not None: + raise reframed + + if font_portability == "paths": + from nf_metro.render.font_embed import text_to_paths as _text_to_paths + + return _text_to_paths(svg) + + if font_portability == "embed": + from nf_metro.render.font_embed import embed_font as _embed_font + + return _embed_font(svg) + + return svg + + +def _fold_threshold_error(graph: MetroGraph) -> FoldThresholdError | None: + """Reframe a fold-induced routing abort as an authoring error. + + Returns ``None`` when the section grid was not compressed by a user-set + fold threshold, so the original internal invariant propagates (it is a + genuine engine self-check at the map's natural width). Otherwise the + compacted geometry is what the router could not resolve, so return a + :class:`FoldThresholdError` naming the directive and the fix. + """ + relocated = graph._fold_compressed_sections + if not relocated: + return None + sections = ", ".join(sorted(relocated)) + return FoldThresholdError( + f"fold_threshold={graph._fold_threshold_effective} is too small for " + f"this map: it folds section(s) {sections} into a tighter grid than " + f"their natural layout, leaving the router no room to separate the " + f"bundle curves. Raise --fold-threshold (or the %%metro fold_threshold " + f"directive), or remove it to render at the default width." + ) + + +def _fold_back_under_compression(graph: MetroGraph) -> bool: + """True when a fold-compressed grid leaves a line folding back over itself. + + A too-small fold can collapse an inter-section fan onto a single row where a + line runs out along a track and straight back along it. The doubled-back + legs draw collinear on the trunk, so no curve self-check fires and the map + renders silently tangled (a station in the overlap is read out of flow + order). Detecting it here lets the render chokepoint reframe the tangle as + a :class:`FoldThresholdError`, the same authoring error a fold-induced curve + abort raises, instead of emitting the tangled map. + + Guarded on ``_fold_compressed_sections`` so the default (un-folded) render + pays nothing: at the natural width the set is empty and this short-circuits. + """ + if not graph._fold_compressed_sections: + return False + return any(iter_opposing_line_overlaps(graph)) + + +def _scale_theme_fonts(theme: Theme, scale: float) -> Theme: + """Return a theme with every text size multiplied by ``scale``. + + Returns the theme unchanged at ``scale == 1.0`` so the default render + is identical to the unscaled theme. + """ + if scale == 1.0: + return theme + return replace( + theme, + label_halo_width=theme.label_halo_width * scale, + label_font_size=theme.label_font_size * scale, + title_font_size=theme.title_font_size * scale, + section_label_font_size=theme.section_label_font_size * scale, + legend_font_size=theme.legend_font_size * scale, + terminus_font_size=theme.terminus_font_size * scale, + ) - # Also consider section bounding boxes - for section in graph.sections.values(): - if section.bbox_w > 0: - max_x = max(max_x, section.bbox_x + section.bbox_w) - max_y = max(max_y, section.bbox_y + section.bbox_h) + +def _render_svg_scaled( + graph: MetroGraph, + theme: Theme, + *, + width: int | None, + height: int | None, + padding: float, + animate: bool, + debug: bool, + legend_position: str | None, + responsive: bool = False, + inject_dark_mode_css: bool = True, + chrome_css: bool = True, + self_color_scheme: bool = True, + baked_mode: str | None = None, + bare: bool = False, +) -> str: + """Render body, run with ``theme`` fonts and label metrics already scaled.""" + effective_legend_position = ( + legend_position if legend_position is not None else graph.legend_position + ) + + station_offsets = compute_station_offsets( + graph, offset_step=resolve_offset_step(graph.track_gap, theme.line_width) + ) + routes = route_edges_centred(graph, station_offsets=station_offsets) + assert_render_curve_invariants(graph, routes, station_offsets) + assert_render_layout_invariants(graph, routes, station_offsets, strict=graph.strict) + header_polylines = [apply_route_offsets(route, station_offsets) for route in routes] + + # Compute labels early so section bbox expansions are applied + # before section boxes are drawn and canvas bounds are computed. + icon_obstacles = _compute_icon_obstacles(graph, theme, station_offsets) + labels = place_labels( + graph, + station_offsets=station_offsets, + icon_obstacles=icon_obstacles, + routes=routes, + label_angle=graph.label_angle or 0.0, + ) + + # Per-station rendered label (top, bottom) Y, so group bands clear the + # (possibly diagonal) station labels rather than just the markers. + label_extents: dict[str, tuple[float, float]] = {} + for p in labels: + if p.station_id: + _, ly0, _, ly1 = _label_bbox(p) + label_extents[p.station_id] = (ly0, ly1) + + group_bands = ( + _group_bands(graph, theme, station_offsets, label_extents) + if graph.groups + else [] + ) + + # Reserve room inside section boxes for below group bands before bboxes + # feed the section render and the canvas-bounds computation. + if group_bands: + _reserve_section_space_for_groups(graph, group_bands) + + # Resolve headers against the final section bboxes (label and group + # reservations above can grow a box, moving where its header sits). + header_placements = resolve_all_section_headers( + graph, theme.section_label_font_size, header_polylines + ) + _guard_section_headers_clear_routes(header_placements, header_polylines) + + max_x, max_y = _compute_canvas_bounds(graph, routes, debug) + + # Group captions can extend below/right of the content; grow the canvas + # so they are not clipped. + if group_bands: + g_max_x, g_max_y = _group_caption_bounds(group_bands) + max_x = max(max_x, g_max_x) + max_y = max(max_y, g_max_y) # Compute legend and logo dimensions - legend_x = 0.0 - legend_y = 0.0 - legend_w, legend_h = compute_legend_dimensions(graph, theme) - show_legend = graph.legend_position != "none" and legend_w > 0 + adaptive_logo = chrome_css and _is_adaptive_mode(graph) + show_logo, logo_w, logo_h, effective_logo = _resolve_logo(graph, adaptive_logo) + resolved_logo_light = ( + resolve_logo_file(graph.logo_path_light, graph.source_dir) + if graph.logo_path_light + else "" + ) + resolved_logo_dark = ( + resolve_logo_file(graph.logo_path_dark, graph.source_dir) + if graph.logo_path_dark + else "" + ) - logo_w, logo_h = (0.0, 0.0) - show_logo = graph.logo_path and Path(graph.logo_path).is_file() - if show_logo: - logo_w, logo_h = compute_logo_dimensions(graph.logo_path) + logo_in_legend = show_logo and effective_legend_position != "none" + legend_logo_size = (logo_w, logo_h) if logo_in_legend else None - if show_legend: - pos = graph.legend_position - gap = 30.0 - inset = 10.0 - # Section content bounds (or station bounds if no sections) - content_left = min((s.bbox_x for s in graph.sections.values() if s.bbox_w > 0), default=padding) - content_right = max_x - content_top = min((s.bbox_y for s in graph.sections.values() if s.bbox_w > 0), default=padding) - content_bottom = max_y - - if pos == "bl": - legend_x = content_left - legend_y = content_bottom - legend_h - elif pos == "br": - legend_x = content_right - legend_w - inset - legend_y = content_bottom - legend_h - inset - elif pos == "tl": - legend_x = content_left + inset - legend_y = content_top + inset - elif pos == "tr": - legend_x = content_right - legend_w - inset - legend_y = content_top + inset - elif pos == "bottom": - legend_x = content_left - legend_y = content_bottom + gap - elif pos == "right": - legend_x = content_right + gap - legend_y = content_top + legend_x, legend_y, legend_w, legend_h, show_legend = _position_legend( + graph, + theme, + max_x, + max_y, + padding, + logo_in_legend, + logo_w, + logo_h, + effective_legend_position, + routes, + ) + if show_legend: max_x = max(max_x, legend_x + legend_w) max_y = max(max_y, legend_y + legend_h) - # Position logo above the legend (or top-left if no legend) + # Standalone logo positioning (only when no legend to embed it in) logo_x = 0.0 logo_y = 0.0 - if show_logo: - logo_gap = 10.0 - if show_legend: - logo_x = legend_x - logo_y = legend_y - logo_h - logo_gap - else: - logo_x = padding - logo_y = 5.0 + if show_logo and not show_legend: + logo_w *= graph.logo_scale + logo_h *= graph.logo_scale + logo_x = padding + logo_y = LOGO_Y_STANDALONE max_x = max(max_x, logo_x + logo_w) - auto_width = max_x + padding * 2 - auto_height = max_y + padding * 2 + # Right margin: one padding width in full mode; none in bare mode so the + # canvas hugs the content. Bottom margin is always just enough room for + # the watermark text. + auto_width = max_x + (0.0 if bare else padding) + auto_height = max_y + WATERMARK_Y_INSET * 2 + WATERMARK_FONT_SIZE + + # A relocated header may sit past the box; let it use the margins already + # added above and only stretch the canvas for the part that overflows them, + # so a below/side header adds no needless blank space. + for placement in header_placements.values(): + if placement.mode == "above": + continue + _, _, hx1, hy1 = placement.keepout + auto_width = max(auto_width, hx1 + SECTION_HEADER_ROUTE_PAD) + auto_height = max(auto_height, hy1 + SECTION_HEADER_ROUTE_PAD) svg_width = width or int(auto_width) svg_height = height or int(auto_height) - d = draw.Drawing(svg_width, svg_height) + # Local import: themes imports render.style, so a module-level import here + # would close a render <-> themes cycle depending on first-import order. + from nf_metro.themes import mode_pair - # Background - d.append(draw.Rectangle(0, 0, svg_width, svg_height, fill=theme.background_color)) + root_attrs: dict[str, str] = {} + if responsive: + root_attrs["preserveAspectRatio"] = "xMinYMin meet" + if self_color_scheme and mode_pair(theme) is not None: + color_scheme = baked_mode if baked_mode is not None else "light dark" + root_attrs["style"] = f"color-scheme: {color_scheme}" + d = draw.Drawing(svg_width, svg_height, **root_attrs) - # Title / Logo - if show_logo: - _render_logo(d, graph.logo_path, logo_x, logo_y, logo_w, logo_h) - elif graph.title: - d.append(draw.Text( - graph.title, - theme.title_font_size, - padding, 30, - fill=theme.title_color, - font_family=theme.label_font_family, - font_weight="bold", - )) + positive_fan = tb_positive_fan_sections(graph) + + # Embed the machine-readable manifest first, so the file is a durable, + # self-describing contract regardless of what is drawn below it. + if graph.embed_manifest: + boxes: dict[str, dict[str, float]] = {} + for s in graph.stations.values(): + if s.is_port or s.is_hidden: + continue + cx, cy, w, h, rx = station_marker_box( + graph, theme, s, station_offsets, positive_fan + ) + boxes[s.id] = {"x": cx, "y": cy, "w": w, "h": h, "rx": rx} + manifest = build_manifest( + graph, + width=svg_width, + height=svg_height, + station_radius=theme.station_radius, + extra_node_data=boxes, + ) + d.append(draw.Raw(manifest_metadata_svg(manifest))) + + # Chrome CSS: custom properties so hosts can recolor without re-rendering. + # Injected before the background rect so browser parsing order is correct. + if chrome_css: + _inject_chrome_css(d, theme) + + # Dark-mode CSS for transparent-background themes so that elements + # rendered directly on the canvas (section labels, number badges, + # title) remain readable when the browser provides a dark background. + # Must follow the chrome CSS so the media-query rule wins by source order. + if inject_dark_mode_css and ( + not theme.background_color or theme.background_color == "none" + ): + _inject_dark_mode_style(d) + + # Background (skip for transparent themes) + if theme.background_color and theme.background_color != "none": + d.append( + draw.Rectangle( + 0, + 0, + svg_width, + svg_height, + fill=theme.background_color, + class_=_ns("nf-metro-bg"), + ) + ) + + # Title / Logo (omitted in bare mode; standalone logo only when not in legend) + if not bare: + if show_logo and not logo_in_legend: + if adaptive_logo: + _render_adaptive_logo( + d, + resolved_logo_light, + resolved_logo_dark, + logo_x, + logo_y, + logo_w, + logo_h, + ) + else: + _render_logo(d, effective_logo, logo_x, logo_y, logo_w, logo_h) + elif graph.title and not logo_in_legend: + d.append( + draw.Text( + graph.title, + theme.title_font_size, + padding, + TITLE_Y_OFFSET, + fill=theme.title_color, + font_family=theme.label_font_family, + font_weight="bold", + **{"class": _ns("nf-metro-title")}, + ) + ) # Sections if graph.sections: - _render_first_class_sections(d, graph, theme) - - # Route edges (compute offsets first so TB routes can pre-apply them) - station_offsets = compute_station_offsets(graph) - routes = route_edges(graph, station_offsets=station_offsets) + _render_first_class_sections(d, graph, theme, header_placements) # Draw edges (lines) behind stations _render_edges(d, graph, routes, station_offsets, theme) + # Directional chevrons ride on top of the lines but behind stations. + if graph.directional: + _render_directional_markers(d, graph, routes, station_offsets, theme) + + # Animation (after edges, before stations so balls travel behind station markers) + if animate: + from nf_metro.render.animate import render_animation + + render_animation(d, graph, routes, station_offsets, theme) + # Draw stations (all circles, skip ports) - _render_stations(d, graph, theme, station_offsets) + _render_stations(d, graph, theme, station_offsets, positive_fan) - # Draw labels (horizontal, skip ports) - labels = place_labels(graph) + # Draw labels _render_labels(d, labels, theme) - # Legend + # Annotative intra-section group captions. + if group_bands: + _render_station_groups(d, theme, group_bands) + + # Debug overlay (ports, hidden stations, edge waypoints) + if debug: + _render_debug_overlay(d, graph, routes, station_offsets, theme) + + # Legend (with embedded logo if present) if show_legend: - render_legend(d, graph, theme, legend_x, legend_y) + _in_legend = logo_in_legend + render_legend( + d, + graph, + theme, + legend_x, + legend_y, + logo_path=effective_logo if (_in_legend and not adaptive_logo) else None, + logo_path_light=( + resolved_logo_light if (adaptive_logo and _in_legend) else None + ), + logo_path_dark=( + resolved_logo_dark if (adaptive_logo and _in_legend) else None + ), + logo_size=legend_logo_size, + ) + + # Attribution watermark + watermark_x_inset = ( + WATERMARK_BARE_X_INSET if bare else padding * WATERMARK_PADDING_RATIO + ) + d.append( + draw.Text( + f"created with nf-metro {_version_string()}", + WATERMARK_FONT_SIZE, + svg_width - watermark_x_inset, + svg_height - WATERMARK_Y_INSET, + fill=WATERMARK_FILL, + font_family=theme.label_font_family, + text_anchor="end", + ) + ) + + if graph.caption: + d.append( + draw.Text( + graph.caption, + CAPTION_FONT_SIZE, + watermark_x_inset, + svg_height - WATERMARK_Y_INSET, + fill=CAPTION_FILL, + font_family=theme.label_font_family, + text_anchor="start", + ) + ) + + svg = d.as_svg() + if responsive: + svg = _strip_svg_dimensions(svg) + return svg + + +_SVG_OPEN_TAG_RE = re.compile(r"(]*?>)", re.DOTALL) +_SVG_WH_ATTR_RE = re.compile(r'\s+(?:width|height)="[^"]*"') + + +def _strip_svg_dimensions(svg: str) -> str: + """Remove fixed width/height attributes from the root opening tag.""" + return _SVG_OPEN_TAG_RE.sub( + lambda m: _SVG_WH_ATTR_RE.sub("", m.group(1)), svg, count=1 + ) + + +def _legend_overlaps_sections( + lx: float, ly: float, lw: float, lh: float, graph: MetroGraph +) -> bool: + """Check if a legend rectangle overlaps any section bounding box.""" + for section in graph.sections.values(): + if section.bbox_w <= 0: + continue + if ( + lx < section.bbox_x + section.bbox_w + and lx + lw > section.bbox_x + and ly < section.bbox_y + section.bbox_h + and ly + lh > section.bbox_y + ): + return True + return False + + +def _legend_overlaps_routes( + lx: float, + ly: float, + lw: float, + lh: float, + routes: list[RoutedPath], + margin: float, +) -> bool: + """Check if a legend rectangle (grown by *margin*) crosses any route.""" + bbox = (lx - margin, ly - margin, lx + lw + margin, ly + lh + margin) + for route in routes: + pts = route.points + for (x1, y1), (x2, y2) in zip(pts, pts[1:]): + if segment_intersects_bbox(x1, y1, x2, y2, bbox): + return True + return False + + +def _legend_overlaps_content( + lx: float, + ly: float, + lw: float, + lh: float, + graph: MetroGraph, + routes: list[RoutedPath], +) -> bool: + """Whether the legend rect overlaps a section box or a routed line.""" + return _legend_overlaps_sections(lx, ly, lw, lh, graph) or _legend_overlaps_routes( + lx, ly, lw, lh, routes, LEGEND_ROUTE_CLEARANCE + ) + + +def _version_string() -> str: + """Return version string, appending '+dev' for editable/non-release installs.""" + from nf_metro import __version__ + + try: + import importlib.metadata + import json + + dist = importlib.metadata.distribution("nf-metro") + direct_url = dist.read_text("direct_url.json") + if direct_url: + data = json.loads(direct_url) + if data.get("dir_info", {}).get("editable"): + return f"v{__version__}+dev" + except ( + FileNotFoundError, + json.JSONDecodeError, + importlib.metadata.PackageNotFoundError, + ): + pass + return f"v{__version__}" + + +def _effective_logo_path(graph: MetroGraph) -> str: + """Return the logo path appropriate for the graph's style. + + Used for non-adaptive (static) rendering such as PNG export. When the + directive was ``%%metro logo: light.png | dark.png``, the light variant is + returned for ``style: light`` and the dark variant otherwise. Falls back + to the single-path ``logo_path`` for backwards compatibility. + """ + is_light = graph.style.strip().lower() == "light" + if is_light and graph.logo_path_light: + return graph.logo_path_light + if not is_light and graph.logo_path_dark: + return graph.logo_path_dark + return graph.logo_path + + +def _is_adaptive_mode(graph: MetroGraph) -> bool: + """True when the %%metro logo: directive used pipe syntax (one or both variants).""" + return bool(graph.logo_path_light) or bool(graph.logo_path_dark) + - return d.as_svg() +def _has_adaptive_logos(graph: MetroGraph) -> bool: + """Return True when both logo variants are set and their files exist.""" + return bool(resolve_logo_file(graph.logo_path_light, graph.source_dir)) and bool( + resolve_logo_file(graph.logo_path_dark, graph.source_dir) + ) + + +def _resolve_logo(graph: MetroGraph, adaptive: bool) -> tuple[bool, float, float, str]: + """Return (show_logo, logo_w, logo_h, effective_logo_path). + + ``adaptive`` is True when the %%metro logo: directive used pipe syntax. + In adaptive mode the dimensions come from whichever variant file exists. + In single-path mode ``effective_logo`` is the path to render. + """ + if adaptive: + raw_candidates = (graph.logo_path_dark, graph.logo_path_light) + dim_path = next( + (resolve_logo_file(p, graph.source_dir) for p in raw_candidates if p), + "", + ) + if dim_path: + w, h = compute_logo_dimensions(dim_path) + return True, w, h, "" + if any(raw_candidates): + raise ValueError( + f"%%metro logo: path(s) {[p for p in raw_candidates if p]} not found" + ) + return False, 0.0, 0.0, "" + effective = _effective_logo_path(graph) + if not effective: + return False, 0.0, 0.0, "" + resolved = resolve_logo_file(effective, graph.source_dir) + if resolved: + w, h = compute_logo_dimensions(resolved) + return True, w, h, resolved + raise ValueError(f"%%metro logo: path {effective!r} not found") def compute_logo_dimensions( logo_path: str, - logo_height: float = 50.0, + logo_height: float = 80.0, ) -> tuple[float, float]: """Compute logo display dimensions preserving aspect ratio.""" - from PIL import Image as PILImage - - img = PILImage.open(logo_path) + img = open_logo_image(logo_path) aspect = img.width / img.height return logo_height * aspect, logo_height @@ -163,62 +1032,285 @@ def _render_logo( logo_h: float, ) -> None: """Embed a logo image at the given position.""" - d.append(draw.Image( - x, y, - logo_w, logo_h, - path=logo_path, - embed=True, - )) + d.append( + draw.Image( + x, + y, + logo_w, + logo_h, + **logo_image_kwargs(logo_path), + ) + ) + + +def _render_adaptive_logo( + d: draw.Drawing, + light_path: str, + dark_path: str, + x: float, + y: float, + logo_w: float, + logo_h: float, +) -> None: + """Embed logo variant(s) using SVG masks driven by light-dark(). + + *light_path*/*dark_path* must already be resolved (data URI or an + existing file path); either may be absent. ``light-dark()`` inherits + color-scheme from the host document so logos follow a page's dark/light + toggle, not only the OS media preference. + """ + key_path = dark_path or light_path + dark_mask_id, light_mask_id = _adaptive_logo_mask_ids(key_path) + defs_parts = [] + if dark_path: + defs_parts.append( + f'' + f'' + f"" + ) + if light_path: + defs_parts.append( + f'' + f'' + f"" + ) + if not defs_parts: + return + d.append(draw.Raw(f"{''.join(defs_parts)}")) + if dark_path: + d.append( + draw.Image( + x, + y, + logo_w, + logo_h, + mask=f"url(#{dark_mask_id})", + **logo_image_kwargs(dark_path), + ) + ) + if light_path: + d.append( + draw.Image( + x, + y, + logo_w, + logo_h, + mask=f"url(#{light_mask_id})", + **logo_image_kwargs(light_path), + ) + ) + + +def _inject_chrome_css(d: draw.Drawing, theme: Theme) -> None: + """Inject CSS custom properties for chrome colors. + + Defines ``--nfm-map-*`` properties on the chrome element classes so a host + can recolor the map's non-semantic surfaces (background, labels, section + boxes, legend) by setting those properties on a wrapping element. The + fallback for each property is the mode-adaptive ``light-dark()`` of the + theme's light and dark palettes (or the theme's single baked value when it + has no light/dark family), so the map follows the viewer's ``color-scheme`` + with no host intervention. Line/route colors carry semantic meaning and + remain as baked presentation attributes. + """ + from nf_metro.themes import mode_pair + + pair = mode_pair(theme) + light, dark = pair if pair is not None else (theme, theme) + + def _adapt(light_val: str, dark_val: str) -> str: + return light_val if light is dark else f"light-dark({light_val}, {dark_val})" + + def _prop(var: str, attr: str) -> str: + return f"var({var}, {_adapt(getattr(light, attr), getattr(dark, attr))})" + + def _rule(cls: str, props: str) -> str: + return f".{_ns(cls)} {{ {props}; }}" + + section_label = "--nfm-map-section-label-color" + lines: list[str] = [] + if theme.background_color and theme.background_color != "none": + lines.append( + _rule("nf-metro-bg", f"fill: {_prop('--nfm-map-bg', 'background_color')}") + ) + lines += [ + _rule( + "nf-metro-title", f"fill: {_prop('--nfm-map-title-color', 'title_color')}" + ), + _rule( + "nf-metro-station-label", + f"fill: {_prop('--nfm-map-label-color', 'label_color')}", + ), + _rule( + "nf-metro-section-box", + f"fill: {_prop('--nfm-map-section-fill', 'section_fill')};" + f" stroke: {_prop('--nfm-map-section-stroke', 'section_stroke')}", + ), + _rule( + "nf-metro-section-label", + f"fill: {_prop(section_label, 'section_label_color')}", + ), + _rule( + "nf-metro-group-label", + f"fill: {_prop(section_label, 'section_label_color')}", + ), + _rule( + "nf-metro-group-underline", + f"stroke: {_prop(section_label, 'section_label_color')}", + ), + _rule( + "nf-metro-legend-bg", + f"fill: {_prop('--nfm-map-legend-bg', 'legend_background')}", + ), + _rule( + "nf-metro-legend-text", + f"fill: {_prop('--nfm-map-legend-text-color', 'legend_text_color')}", + ), + ] + _ms_adapt = _adapt( + light.marker_stroke or light.station_stroke, + dark.marker_stroke or dark.station_stroke, + ) + lines.append( + _rule( + "nf-metro-marker-stroke", + f"stroke: var(--nfm-map-marker-stroke, {_ms_adapt})", + ) + ) + # The label halo is a knockout of the background, so it tracks --nfm-map-bg + # and must flip with the mode too; otherwise a dark-baked halo blots out + # labels in light mode. Disabled-halo themes draw no halo, so emit nothing. + halo_light, halo_dark = _label_halo_color(light), _label_halo_color(dark) + if halo_light is not None and halo_dark is not None: + halo_val = f"var(--nfm-map-bg, {_adapt(halo_light, halo_dark)})" + lines.append( + _rule("nf-metro-label-halo", f"fill: {halo_val}; stroke: {halo_val}") + ) + d.append(draw.Raw(f"")) + + +def _inject_dark_mode_style(d: draw.Drawing) -> None: + """Inject CSS for dark-mode browsers viewing a transparent-background SVG. + + When the SVG has no opaque background, elements rendered directly on the + canvas (section labels, numbered badges, title) can become invisible if the + browser supplies a dark page background. A ``prefers-color-scheme: dark`` + media query adjusts those elements so they remain readable. CSS rules + override SVG presentation attributes, so we only need class selectors. + """ + sl = _ns("nf-metro-section-label") + sc = _ns("nf-metro-section-num-circle") + ti = _ns("nf-metro-title") + css = textwrap.dedent(f"""\ + @media (prefers-color-scheme: dark) {{ + .{sl} {{ fill: #d0d0d0; }} + .{sc} {{ fill: #777777; }} + .{ti} {{ fill: #ffffff; }} + }} + """) + d.append(draw.Raw(f"")) + + +def _guard_section_headers_clear_routes( + placements: dict[str, SectionHeaderPlacement], + polylines: list[list[tuple[float, float]]], +) -> None: + """Fail loudly if any section header was placed over a routed line.""" + clashes = check_section_headers_clear_routes(placements, polylines) + if clashes: + raise SectionHeaderClashError("; ".join(c.message() for c in clashes)) def _render_first_class_sections( d: draw.Drawing, graph: MetroGraph, theme: Theme, + header_placements: dict[str, SectionHeaderPlacement], ) -> None: """Render first-class sections using pre-computed bounding boxes.""" for section in graph.sections.values(): if section.bbox_w <= 0 or section.bbox_h <= 0: continue + if section.is_implicit: + continue - d.append(draw.Rectangle( - section.bbox_x, section.bbox_y, - section.bbox_w, section.bbox_h, - rx=8, ry=8, - fill=theme.section_fill, - stroke=theme.section_stroke, - stroke_width=1.0, - )) - - # Numbered circle above the box, left-aligned - circle_r = 9 - cx = section.bbox_x + circle_r - cy = section.bbox_y - circle_r - 4 - - d.append(draw.Circle( - cx, cy, circle_r, - fill=theme.station_stroke, - )) - d.append(draw.Text( - str(section.number), - 9, - cx, cy, - fill=theme.station_fill, - font_family=theme.label_font_family, - font_weight="bold", - text_anchor="middle", - dominant_baseline="central", - )) - - # Section name to the right of the circle - d.append(draw.Text( - section.name, - theme.section_label_font_size, - cx + circle_r + 5, cy, - fill=theme.section_label_color, - font_family=theme.label_font_family, - dominant_baseline="central", - )) + section_lines: set[str] = set() + for sid in section.station_ids: + section_lines.update(graph.station_lines(sid)) + section_data = { + "data-section-id": section.id, + "data-section-lines": ",".join(sorted(section_lines)), + } + + d.append( + draw.Rectangle( + section.bbox_x, + section.bbox_y, + section.bbox_w, + section.bbox_h, + rx=SECTION_BOX_RADIUS, + ry=SECTION_BOX_RADIUS, + fill=theme.section_fill, + stroke=theme.section_stroke, + stroke_width=SECTION_STROKE_WIDTH, + class_=_ns("nf-metro-section-box"), + **section_data, + ) + ) + + # Place the header (number badge + title) clear of any route that would + # otherwise cross it; the resolver never moves a route to do so. + placement = header_placements[section.id] + + d.append( + draw.Circle( + placement.badge_cx, + placement.badge_cy, + SECTION_NUM_CIRCLE_R_LARGE, + fill=theme.station_stroke, + **{ + "class": _ns("nf-metro-section-num-circle"), + "data-section-id": section.id, + }, + ) + ) + d.append( + draw.Text( + str(section.number), + SECTION_NUM_FONT_SIZE, + placement.badge_cx, + placement.badge_cy, + fill=theme.station_fill, + font_family=theme.label_font_family, + font_weight="bold", + text_anchor="middle", + dy=TEXT_VCENTER_DY, + **{"data-section-id": section.id}, + ) + ) + + label_kwargs: dict[str, object] = { + "class": _ns("nf-metro-section-label"), + "data-section-id": section.id, + } + if placement.label_rotation: + label_kwargs["transform"] = ( + f"rotate({placement.label_rotation} " + f"{placement.label_x} {placement.label_y})" + ) + d.append( + draw.Text( + section.name, + theme.section_label_font_size, + placement.label_x, + placement.label_y, + fill=theme.section_label_color, + font_family=theme.label_font_family, + font_weight="bold", + dy=TEXT_VCENTER_DY, + **label_kwargs, + ) + ) def _render_edges( @@ -227,41 +1319,51 @@ def _render_edges( routes: list[RoutedPath], station_offsets: dict[tuple[str, str], float], theme: Theme, - curve_radius: float = 10.0, + curve_radius: float = SVG_CURVE_RADIUS, ) -> None: """Render metro line edges with smooth curves at direction changes.""" - for route in routes: - line = graph.lines.get(route.line_id) - color = line.color if line else "#888888" - if route.offsets_applied: - # TB section routes have offsets pre-applied in the routing code - pts = list(route.points) - else: - src_off = station_offsets.get((route.edge.source, route.line_id), 0.0) - tgt_off = station_offsets.get((route.edge.target, route.line_id), 0.0) - - orig_sy = route.points[0][1] - orig_ty = route.points[-1][1] - pts = [] - for i, (x, y) in enumerate(route.points): - if i == 0: - pts.append((x, y + src_off)) - elif i == len(route.points) - 1: - pts.append((x, y + tgt_off)) - elif abs(y - orig_sy) <= abs(y - orig_ty): - pts.append((x, y + src_off)) - else: - pts.append((x, y + tgt_off)) + # Group routes by metro line so each line's paths are contiguous in + # document order, then any two lines have the same relative paint order + # at every overlap. Reverse-of-definition order makes the first-defined + # line paint last (on top everywhere). Unknown line_ids sort to the + # back (painted last); Python's stable sort preserves within-group order. + line_priority = {lid: i for i, lid in enumerate(graph.lines)} + routes = sorted(routes, key=lambda r: -line_priority.get(r.line_id, -1)) - if len(pts) == 2: - d.append(draw.Line( - pts[0][0], pts[0][1], - pts[1][0], pts[1][1], - stroke=color, - stroke_width=theme.line_width, - stroke_linecap="round", - )) + polylines = [apply_route_offsets(route, station_offsets) for route in routes] + bridges: dict[int, list[BridgeBreak]] = ( + compute_bridges(graph, routes, polylines, curve_radius=curve_radius) + if theme.bridge_glyph + else {} + ) + + for route, pts in zip(routes, polylines): + line = graph.lines.get(route.line_id) + color = line.color if line else FALLBACK_LINE_COLOR + style_kw = line_style_kwargs(line.style) if line else {} + class_name = _ns(f"metro-line-{route.line_id}") + breaks = bridges.get(id(route)) + + if breaks: + _render_bridged_edge( + d, pts, route, breaks, color, style_kw, class_name, theme, curve_radius + ) + elif len(pts) == 2: + d.append( + draw.Line( + pts[0][0], + pts[0][1], + pts[1][0], + pts[1][1], + stroke=color, + stroke_width=theme.line_width, + stroke_linecap="round", + class_=class_name, + **{"data-line-id": route.line_id}, + **style_kw, + ) + ) elif len(pts) >= 3: path = draw.Path( stroke=color, @@ -269,144 +1371,1950 @@ def _render_edges( fill="none", stroke_linecap="round", stroke_linejoin="round", + class_=class_name, + **{"data-line-id": route.line_id}, + **style_kw, ) path.M(*pts[0]) - for i in range(1, len(pts) - 1): - prev = pts[i - 1] - curr = pts[i] - nxt = pts[i + 1] - - dx1 = curr[0] - prev[0] - dy1 = curr[1] - prev[1] - len1 = (dx1**2 + dy1**2) ** 0.5 - - dx2 = nxt[0] - curr[0] - dy2 = nxt[1] - curr[1] - len2 = (dx2**2 + dy2**2) ** 0.5 - - # Only halve segment length when the adjacent point also - # has a curve; endpoints (first/last points) never do. - max_len1 = len1 / 2 if i > 1 else len1 - max_len2 = len2 / 2 if i < len(pts) - 2 else len2 - corner_idx = i - 1 - if route.curve_radii and corner_idx < len(route.curve_radii): - effective_r = route.curve_radii[corner_idx] - else: - effective_r = curve_radius - r = min(effective_r, max_len1, max_len2) - - if len1 > 0 and len2 > 0: - before_x = curr[0] - (dx1 / len1) * r - before_y = curr[1] - (dy1 / len1) * r - after_x = curr[0] + (dx2 / len2) * r - after_y = curr[1] + (dy2 / len2) * r + resolved = resolve_curve_radii( + pts, route.curve_radii, default_radius=curve_radius + ) + before, after, curved = _curve_tangents(pts, resolved) - path.L(before_x, before_y) - path.Q(curr[0], curr[1], after_x, after_y) + for i in range(1, len(pts) - 1): + if curved[i]: + path.L(*before[i]) + path.Q(pts[i][0], pts[i][1], *after[i]) else: - path.L(*curr) + path.L(*pts[i]) path.L(*pts[-1]) d.append(path) -def _render_stations( +def _render_directional_markers( d: draw.Drawing, graph: MetroGraph, + routes: list[RoutedPath], + station_offsets: dict[tuple[str, str], float], theme: Theme, - station_offsets: dict[tuple[str, str], float] | None = None, ) -> None: - """Render stations as pill shapes. - - Normal stations get vertical pills (tall, narrow). Stations in a TB - section's vertical part (layer > 0) get horizontal pills (wide, short) - since the lines run vertically through them. + """Draw static chevrons along each route, pointing source to target. - Skips port stations (is_port=True). + The flow direction is the order of the routed point sequence, so each + chevron simply rides the polyline at the local segment direction. Markers + are spaced by arc length and kept sparse and subtle by default, in the + spirit of a one-way transit line's direction-of-travel arrows. """ - for station in graph.stations.values(): - if station.is_port: + size = theme.directional_marker_size + spacing = max(theme.directional_marker_spacing, 1.0) + opacity = theme.directional_marker_opacity + # A route shorter than one chevron carries no useful direction cue. + min_length = 2 * size + stroke_width = max(theme.line_width * 0.5, 1.0) + + for route in routes: + pts = apply_route_offsets(route, station_offsets) + if len(pts) < 2: continue + line = graph.lines.get(route.line_id) + color = theme.directional_marker_color or ( + line.color if line else FALLBACK_LINE_COLOR + ) + class_name = _ns(f"metro-direction-{route.line_id}") + for point, heading in _chevron_samples(pts, spacing, min_length): + _draw_chevron( + d, + point, + heading, + color, + size, + stroke_width, + opacity, + class_name, + route.line_id, + ) - r = theme.station_radius - - # Determine if this is a TB vertical station (rotated pill) - is_tb_vert = False - if station.section_id: - sec = graph.sections.get(station.section_id) - if sec and sec.direction == "TB" and station.layer > 0: - is_tb_vert = True - - if station_offsets: - line_offsets = [ - station_offsets.get((station.id, lid), 0.0) - for lid in graph.station_lines(station.id) - ] - if line_offsets: - min_off = min(line_offsets) - max_off = max(line_offsets) - else: - min_off = max_off = 0.0 - else: - min_off = max_off = 0.0 - - span = max_off - min_off - - if is_tb_vert: - # Horizontal pill: lines spread along X axis - w = span + r * 2 - h = r * 2 - cx = station.x + (min_off + max_off) / 2 - d.append(draw.Rectangle( - cx - w / 2, station.y - h / 2, - w, h, - rx=r, ry=r, - fill=theme.station_fill, - stroke=theme.station_stroke, - stroke_width=theme.station_stroke_width, - )) - else: - # Vertical pill: lines spread along Y axis - w = r * 2 - h = span + r * 2 - cy = station.y + (min_off + max_off) / 2 - d.append(draw.Rectangle( - station.x - w / 2, cy - h / 2, - w, h, - rx=r, ry=r, - fill=theme.station_fill, - stroke=theme.station_stroke, - stroke_width=theme.station_stroke_width, - )) +def _chevron_samples( + pts: list[tuple[float, float]], spacing: float, min_length: float +) -> list[tuple[tuple[float, float], tuple[float, float]]]: + """Sample (point, unit-heading) pairs evenly along a polyline. -def _render_labels( - d: draw.Drawing, - labels: list[LabelPlacement], + Chevrons are centred on the polyline so a route reads symmetrically. A + route between ``min_length`` and ``spacing`` in length carries a single + chevron at its midpoint. + """ + segments = [ + (a, b, length) + for a, b in zip(pts, pts[1:]) + if (length := math.hypot(b[0] - a[0], b[1] - a[1])) > 0 + ] + total = sum(length for _, _, length in segments) + if total < min_length: + return [] + + count = max(1, int(total // spacing)) + start = (total - (count - 1) * spacing) / 2 + + samples: list[tuple[tuple[float, float], tuple[float, float]]] = [] + targets = [start + i * spacing for i in range(count)] + travelled = 0.0 + ti = 0 + for (ax, ay), (bx, by), length in segments: + ux, uy = (bx - ax) / length, (by - ay) / length + while ti < len(targets) and targets[ti] <= travelled + length: + offset = targets[ti] - travelled + samples.append(((ax + ux * offset, ay + uy * offset), (ux, uy))) + ti += 1 + travelled += length + return samples + + +def _draw_chevron( + d: draw.Drawing, + point: tuple[float, float], + heading: tuple[float, float], + color: str, + size: float, + stroke_width: float, + opacity: float, + class_name: str, + line_id: str, +) -> None: + """Draw one open ``>`` chevron centred at *point*, apex along *heading*.""" + px, py = point + ux, uy = heading + perp = (-uy, ux) + apex = (px + ux * size, py + uy * size) + back = (px - ux * size, py - uy * size) + wing1 = (back[0] + perp[0] * size, back[1] + perp[1] * size) + wing2 = (back[0] - perp[0] * size, back[1] - perp[1] * size) + + path = draw.Path( + stroke=color, + stroke_width=stroke_width, + fill="none", + stroke_linecap="round", + stroke_linejoin="round", + opacity=opacity, + class_=class_name, + **{"data-line-id": line_id}, + ) + path.M(*wing1) + path.L(*apex) + path.L(*wing2) + d.append(path) + + +def _curve_tangents( + pts: list[tuple[float, float]], resolved: list[float] +) -> tuple[ + dict[int, tuple[float, float]], dict[int, tuple[float, float]], dict[int, bool] +]: + """Curve entry/exit points for each interior vertex. + + Returns ``(before, after, curved)`` keyed by vertex index ``i`` in + ``1..len(pts)-2``: ``before[i]``/``after[i]`` are the points where the + smoothing curve leaves and rejoins the polyline; ``curved[i]`` is False + for a degenerate corner (zero-length neighbour), where both collapse to + the vertex itself. + """ + before: dict[int, tuple[float, float]] = {} + after: dict[int, tuple[float, float]] = {} + curved: dict[int, bool] = {} + for i, tan in enumerate(curve_tangents(pts, resolved), start=1): + before[i] = tan.before + after[i] = tan.after + curved[i] = tan.curved + return before, after, curved + + +def _render_bridged_edge( + d: draw.Drawing, + pts: list[tuple[float, float]], + route: RoutedPath, + breaks: list[BridgeBreak], + color: str, + style_kw: dict[str, str], + class_name: str, + theme: Theme, + curve_radius: float, +) -> None: + """Render an under-line interrupted by a short gap at each crossing. + + The line is drawn exactly as the continuous case except that, on every + straight run carrying a crossing, the pen lifts across a small gap so the + over-line reads as passing over the top. + """ + resolved = resolve_curve_radii(pts, route.curve_radii, default_radius=curve_radius) + m = len(pts) - 1 + before, after, _ = _curve_tangents(pts, resolved) + + path = draw.Path( + stroke=color, + stroke_width=theme.line_width, + fill="none", + stroke_linecap="round", + stroke_linejoin="round", + class_=class_name, + **{"data-line-id": route.line_id}, + **style_kw, + ) + path.M(*pts[0]) + for s in range(m): + run_start = pts[0] if s == 0 else after[s] + run_end = pts[m] if s + 1 == m else before[s + 1] + seg_breaks = sorted( + (bk for bk in breaks if bk.seg_index == s), + key=lambda bk: ( + (bk.cut_a[0] - run_start[0]) ** 2 + (bk.cut_a[1] - run_start[1]) ** 2 + ), + ) + for bk in seg_breaks: + path.L(*bk.cut_a) + path.M(*bk.cut_b) + path.L(*run_end) + if s + 1 <= m - 1: + path.Q(pts[s + 1][0], pts[s + 1][1], *after[s + 1]) + d.append(path) + + +def _drawn_bundle_span( + graph: MetroGraph, + station: Station, + station_offsets: dict[tuple[str, str], float], + positive_fan: set[str], +) -> tuple[float, float]: + """Min/max of a station's per-line offsets *as drawn*. + + A vertical-flow (TB) section is the 90-degree rotation of a horizontal one: + a line rides ``x - offset`` where an LR line rides ``y + offset`` (matching + :func:`_tb_x_offset`). Spanning the marker over the drawn offsets keeps it + centred on the lines that actually pass through the station, so a one-line or + off-trunk-subset station does not leave its glyph beside its own track. + """ + raw = [ + station_offsets.get((station.id, lid), 0.0) + for lid in graph.station_lines(station.id) + ] + if not raw: + return 0.0, 0.0 + sec = graph.sections.get(station.section_id) if station.section_id else None + if sec is not None and sec.direction == "TB": + sign = 1.0 if station.section_id in positive_fan else -1.0 + drawn = [sign * off for off in raw] + else: + drawn = raw + return min(drawn), max(drawn) + + +def _pill_box( + station: Station, + r: float, + min_off: float, + max_off: float, + is_tb_vert: bool, + flow_len: float | None = None, +) -> tuple[float, float, float, float]: + """Return ``(x, y, w, h)`` for the bundle-spanning pill at a station. + + The pill covers every line passing through the station: it spans the line + bundle across the section's flow axis (wide for TB sections where lines + arrive vertically, tall otherwise) and is centred on the bundle mid-offset. + ``flow_len`` overrides the extent along the flow axis (default ``2 * r``), + elongating the glyph along the line. + """ + span = max_off - min_off + mid = (min_off + max_off) / 2 + flow = r * 2 if flow_len is None else flow_len + if is_tb_vert: + w, h = span + r * 2, flow + cx, cy = station.x + mid, station.y + else: + w, h = flow, span + r * 2 + cx, cy = station.x, station.y + mid + return cx - w / 2, cy - h / 2, w, h + + +def station_marker_box( + graph: MetroGraph, + theme: Theme, + station: Station, + station_offsets: dict[tuple[str, str], float] | None, + positive_fan: set[str] | None = None, +) -> tuple[float, float, float, float, float]: + """The drawn marker's bounding box as ``(cx, cy, w, h, rx)``. + + Mirrors the bundle-span / orientation logic of :func:`_render_station_into` + and defers to :func:`_pill_box` for the box itself, so an overlay can place + a shape that matches a station's pill (a circle for one line, a capsule + spanning the bundle for several) without re-running the renderer. Glyph + stations (rail interchanges, explicit markers) fall back to the same + bundle-span box, a reasonable footprint for those too. + + ``positive_fan`` lets a caller iterating over stations pass that set once + rather than re-deriving its reversal fixed-point per station. + """ + r = theme.station_radius + is_tb_vert = bool( + station.section_id + and (sec := graph.sections.get(station.section_id)) + and sec.direction == "TB" + ) + if positive_fan is None: + positive_fan = tb_positive_fan_sections(graph) + if station.rail_top_y is not None and station.rail_bottom_y is not None: + used = station.rail_used_ys or [station.y] + min_off, max_off = min(used) - station.y, max(used) - station.y + elif station_offsets and not graph.station_is_rail(station.id): + min_off, max_off = _drawn_bundle_span( + graph, station, station_offsets, positive_fan + ) + else: + min_off = max_off = 0.0 + + x, y, w, h = _pill_box(station, r, min_off, max_off, is_tb_vert) + return x + w / 2, y + h / 2, w, h, r + + +def _append_terminus_icons( + d: draw.Drawing, + station: Station, + graph: MetroGraph, + theme: Theme, + r: float, + min_off: float, + max_off: float, +) -> None: + """Render a station's terminus icons into their own data-tagged group.""" + icon_group = draw.Group(**{"data-station-id": station.id}) + _render_terminus_icons(icon_group, station, graph, theme, r, min_off, max_off) + d.append(icon_group) + + +def _render_marker_station( + d: draw.Drawing, + marker: MarkerStyle, + theme: Theme, + station: Station, + r: float, + min_off: float, + max_off: float, + is_tb_vert: bool, + station_data: dict[str, str], +) -> None: + """Draw a shape/fill marker glyph over the station's line bundle. + + ``circle`` and ``square`` keep the bundle-spanning pill geometry, varying + only the corner rounding. ``pill`` is elongated along the line (a capsule + in the opposite orientation to the default station pill) while still + growing across the bundle to cover every track it spans. + """ + flow_len = ( + r * MARKER_PILL_LENGTH_RATIO if marker.shape == MARKER_SHAPE_PILL else None + ) + x, y, w, h = _pill_box(station, r, min_off, max_off, is_tb_vert, flow_len=flow_len) + rx = marker_corner_radius(marker.shape, r) + marker_data = { + **station_data, + "class_": f"{station_data['class_']} {_ns('nf-metro-marker-stroke')}", + } + d.append( + draw.Rectangle( + x, + y, + w, + h, + rx=rx, + ry=rx, + fill=marker_fill_color(marker.fill, theme), + stroke=marker_stroke_color(theme), + stroke_width=theme.station_stroke_width, + **marker_data, + ) + ) + + +def _station_data_attrs(graph: MetroGraph, station: Station) -> dict[str, str]: + """SVG data-attributes shared by every station marker. + + Values that flow from user content (label, section name) are HTML-escaped + because drawsvg does not escape unknown kwargs. + """ + data = { + "class_": _ns("nf-metro-station"), + "data-station-id": station.id, + "data-station-lines": ",".join(graph.station_lines(station.id)), + "data-station-label": html.escape(station.label or station.id), + } + if station.section_id: + data["data-section-id"] = station.section_id + sec_obj = graph.sections.get(station.section_id) + if sec_obj: + data["data-section-name"] = html.escape(sec_obj.name) + return data + + +def _rail_marker_fill(marker: MarkerStyle | None, theme: Theme) -> str | None: + """Interior tint for a spanning rail interchange carrying a marker. + + Only a marker with a literal colour fill (not the ``open`` / ``solid`` + keywords) tints the interchange; keyword fills and unmarked stations keep + the default interior so their glyph is unchanged. + """ + if marker is None or marker.fill in (MARKER_FILL_OPEN, MARKER_FILL_SOLID): + return None + return marker_fill_color(marker.fill, theme) + + +def _draw_interchange_glyph( + d: draw.Group | draw.Drawing, + x: float, + knobs: list[tuple[str, float]], + theme: Theme, + r: float, + *, + interior_fill: str, + outline: str, + station_data: dict[str, str], + data_station_id: str, +) -> None: + """Draw the metro interchange idiom: a knob on each used rail joined by a + link bar spanning them (the classic metro / nf-core-sarek glyph). + + ``knobs`` is one ``(line_id, y)`` per rail the glyph stops on. It is built + in two stacked layers so the outline stays continuous where the link meets a + knob: an outline layer (link bar + discs grown by the stroke width) paints + the union's outer boundary, then an interior layer at the true radii fills + it. The link is the *fill* colour, not the stroke, so it reads as joining + the knobs rather than cutting across them. + """ + if not knobs: + return + ys = [y for _, y in knobs] + top_y, bot_y = min(ys), max(ys) + sw = theme.station_stroke_width + # A spanning interchange draws each rail's knob slightly larger than the bare + # marker, bulging out of a narrower link bar. A single-knob stop has nothing + # to bulge from, so it uses the standard marker radius. + is_spanning = (bot_y - top_y) > SAME_COORD_TOLERANCE + knob_r = r * RAIL_KNOB_RADIUS_RATIO if is_spanning else r + bar_half = r * RAIL_LINK_HALF_WIDTH_RATIO + + def _link_bar(width: float, stroke: str, **extra: object) -> None: + # A round-capped line of the given width is a capsule; used here only + # for its straight body between the top and bottom knobs (the caps are + # covered by the circles), so it joins them with no seam. + if bot_y - top_y <= SAME_COORD_TOLERANCE: + return + d.append( + draw.Line( + x, + top_y, + x, + bot_y, + stroke=stroke, + stroke_width=width, + stroke_linecap="round", + **extra, + ) + ) + + def _knobs(radius: float, fill: str, **extra: object) -> None: + for lid, y in knobs: + d.append( + draw.Circle( + x, + y, + radius, + fill=fill, + stroke=fill, + stroke_width=0, + **{**extra, "data-line-id": lid}, + ) + ) + + _link_bar( + (bar_half + sw) * 2, + outline, + **{**station_data, "class_": _ns("nf-metro-rail-connector")}, + ) + _knobs( + knob_r + sw, + outline, + **{ + "class_": _ns("nf-metro-rail-knob-outline"), + "data-station-id": data_station_id, + }, + ) + _link_bar(bar_half * 2, interior_fill) + _knobs( + knob_r, + interior_fill, + **{"class_": _ns("nf-metro-rail-knob"), "data-station-id": data_station_id}, + ) + + +def _render_rail_pill( + d: draw.Drawing, + graph: MetroGraph, + station: Station, + theme: Theme, + r: float, + fill_override: str | None = None, +) -> None: + """Render a rail-mode multi-rail station as the metro interchange glyph. + + ``fill_override`` tints the interior (link bar + knobs) with a marker fill + colour while keeping the interchange shape, so a spanning rail station can + carry its ``%%metro marker:`` colour; a tinted interchange takes the light + marker outline so the fill reads against the dark background. + """ + interior_fill = fill_override if fill_override is not None else theme.station_fill + outline = ( + marker_stroke_color(theme) + if fill_override is not None + else theme.station_stroke + ) + # rail_used_ys is recorded parallel to the line-definition order (see + # rail_mode._layout_section_rails); zip the knobs against that same order. A + # rail within the connector's span but not used by the station gets no knob. + served = graph.station_lines_ordered(station.id) + knobs = list(zip(served, station.rail_used_ys)) + _draw_interchange_glyph( + d, + station.x, + knobs, + theme, + r, + interior_fill=interior_fill, + outline=outline, + station_data=_station_data_attrs(graph, station), + data_station_id=station.id, + ) + + +def _render_interchange( + d: draw.Group | draw.Drawing, + graph: MetroGraph, + ic: Interchange, + theme: Theme, + station_offsets: dict[tuple[str, str], float] | None, + r: float, +) -> None: + """Draw a cross-track interchange as one glyph across its member stations. + + Each member sub-station sits at the same X on its own track; the glyph is a + knob where each line crosses (its laid-out, offset-applied Y) joined by a + link bar spanning the members, built in the same two stacked layers as the + rail-mode interchange so the outline stays continuous. + """ + members = [graph.stations[mid] for mid in ic.member_ids if mid in graph.stations] + if not members: + return + offs = station_offsets or {} + # One knob per (member, line it carries) at the line's rendered Y. + knobs = [ + (lid, m.y + offs.get((m.id, lid), 0.0)) + for m in members + for lid in graph.station_lines_ordered(m.id) + ] + # A marker on the anchor tints the glyph and takes the light marker outline, + # mirroring a marked rail-mode interchange. + fill_override = _rail_marker_fill(members[0].marker, theme) + _draw_interchange_glyph( + d, + members[0].x, + knobs, + theme, + r, + interior_fill=fill_override + if fill_override is not None + else theme.station_fill, + outline=( + marker_stroke_color(theme) + if fill_override is not None + else theme.station_stroke + ), + station_data=_station_data_attrs(graph, members[0]), + data_station_id=ic.node_id, + ) + + +def _draw_blank_terminus_nub( + d: draw.Drawing, + station: Station, + r: float, + min_off: float, + max_off: float, + station_data: dict[str, str], + theme: Theme, + is_tb_vert: bool = False, +) -> None: + """Draw a blank terminus's unrounded nub (a sharp-cornered station rect).""" + bx, by, bw, bh = _pill_box(station, r, min_off, max_off, is_tb_vert) + d.append( + draw.Rectangle( + bx, + by, + bw, + bh, + fill=theme.station_fill, + stroke=theme.station_stroke, + stroke_width=theme.station_stroke_width, + **station_data, + ) + ) + + +def _station_group_attrs( + graph: MetroGraph, + theme: Theme, + station: Station, + station_offsets: dict[tuple[str, str], float] | None = None, + positive_fan: set[str] | None = None, +) -> dict[str, Any]: + """Attributes for a station's wrapping ```` element. + + Makes each station one addressable DOM node carrying its identity and + geometry, so a consumer can restyle or replace it without the manifest or + a re-render. ``data-node-id`` is the join key: it equals the station's + ``id`` in the embedded manifest. The geometry attributes mirror the + manifest's ``x``/``y``/``r`` (absolute SVG user units, rounded to 1dp) so an + overlay can position against either half interchangeably. A metro line is a + manifest group and a section is a manifest region. When ``station_offsets`` + is supplied the full pill box (``w``/``h``/``rx``) is also emitted so an + overlay can reproduce the exact marker shape. + """ + section = graph.sections.get(station.section_id) if station.section_id else None + section_id = ( + station.section_id if section is not None and not section.is_implicit else None + ) + cx: float = station.x + cy: float = station.y + w: float | None = None + h: float | None = None + rx: float | None = None + if station_offsets is not None: + cx, cy, w, h, rx = station_marker_box( + graph, theme, station, station_offsets, positive_fan + ) + return { + "class_": _ns("nf-metro-station-group"), + **node_data_attrs( + id=station.id, + x=cx, + y=cy, + r=theme.station_radius, + groups=graph.station_lines(station.id), + region=section_id, + w=w, + h=h, + rx=rx, + ), + } + + +def _render_stations( + d: draw.Drawing, + graph: MetroGraph, + theme: Theme, + station_offsets: dict[tuple[str, str], float] | None = None, + positive_fan: set[str] | None = None, +) -> None: + """Render stations as pill shapes. + + Normal stations get vertical pills (tall, narrow). Stations in a TB + section get horizontal pills (wide, short) since the lines run + vertically through them. + + When the manifest is embedded, each station's glyph (pill/marker/rail + interchange plus any terminus icons) is wrapped in its own ```` carrying + ``data-node-*`` identity and geometry, so the station is a single + addressable element; with ``--no-manifest`` the glyphs are drawn directly + with no wrapper. Skips port stations (is_port=True). + """ + if positive_fan is None: + positive_fan = tb_positive_fan_sections(graph) + for station in graph.stations.values(): + if station.is_port or station.is_hidden: + continue + if graph.embed_manifest: + attrs = _station_group_attrs( + graph, theme, station, station_offsets, positive_fan + ) + g = draw.Group(**attrs) + _render_station_into( + g, graph, theme, station, station_offsets, positive_fan + ) + d.append(g) + else: + _render_station_into( + d, graph, theme, station, station_offsets, positive_fan + ) + + +def _render_station_into( + d: draw.Group | draw.Drawing, + graph: MetroGraph, + theme: Theme, + station: Station, + station_offsets: dict[tuple[str, str], float] | None, + positive_fan: set[str], +) -> None: + """Draw one station's glyph and terminus icons into a container. + + The container is the station's wrapping ```` when the manifest is + embedded, or the drawing itself under ``--no-manifest``. + """ + r = theme.station_radius + + # Cross-track interchange: the whole glyph is drawn once, anchored on the + # node the interchange kept (its id equals interchange_id); the other member + # sub-stations contribute knobs but draw nothing of their own. A marker on + # the anchor tints the glyph (like a rail-mode interchange) rather than + # suppressing it. + if station.interchange_id is not None: + if station.id == station.interchange_id: + ic = next( + (c for c in graph.interchanges if c.node_id == station.interchange_id), + None, + ) + if ic is not None and ic.member_ids: + _render_interchange(d, graph, ic, theme, station_offsets, r) + return + + # Rail mode: a blank terminus terminates its converged bundle exactly + # like any other render -- the standard unrounded nub (via _pill_box) + # spanning the bundle, plus the file icon -- rather than a rail-specific + # glyph. The only difference is the span comes from the rail bundle + # (rail mode does not use station_offsets). An off-track terminus parks + # off the rails and its lines converge onto a single vertical stub, so its + # nub is the bundle-centred square (zero span) seating the buffer stop + # where the stub meets the file icon, matching on-rail file termini. + if graph.station_is_rail(station.id) and station.is_blank_terminus: + if station.off_track: + t_min = t_max = 0.0 + else: + used = station.rail_used_ys or [station.y] + t_min = min(used) - station.y + t_max = max(used) - station.y + _draw_blank_terminus_nub( + d, station, r, t_min, t_max, _station_data_attrs(graph, station), theme + ) + _append_terminus_icons(d, station, graph, theme, r, t_min, t_max) + return + + # Rail mode: a multi-rail station draws as a spanning interchange; a + # single-rail station draws as one knob centred on its rail. Both go + # through _render_rail_pill (its link bar self-suppresses with no span), + # so a single stop sits exactly on the rail rather than being shifted by + # the normal-mode parallel-line station_offsets, which don't apply once + # a line is pinned to a fixed rail. Marked stations keep their glyph. + if ( + graph.station_is_rail(station.id) + and station.marker is None + and not station.is_terminus + and not station.off_track + ): + _render_rail_pill(d, graph, station, theme, r) + return + if station.rail_top_y is not None and station.rail_bottom_y is not None: + _render_rail_pill( + d, graph, station, theme, r, _rail_marker_fill(station.marker, theme) + ) + return + + # A vertical-flow (TB/BT) station draws a horizontal (rotated) pill. + is_tb_vert = False + if station.section_id: + sec = graph.sections.get(station.section_id) + if sec and lanes_run_along_x(sec.direction): + is_tb_vert = True + + # A rail station is pinned to its rail Y; the parallel-line bundle + # offsets do not apply (the rail-pill path above ignores them too), so a + # marked single-rail station's glyph must seat on the rail rather than + # ride the bundle's mid-offset. + if station_offsets and not graph.station_is_rail(station.id): + min_off, max_off = _drawn_bundle_span( + graph, station, station_offsets, positive_fan + ) + else: + min_off = max_off = 0.0 + + station_data = _station_data_attrs(graph, station) + + if graph.station_is_rail(station.id) and (min_off, max_off) != (0.0, 0.0): + raise AssertionError( + f"rail station {station.id!r} marker glyph offset " + f"({min_off}, {max_off}) would lift it off its rail" + ) + + if station.marker is not None: + _render_marker_station( + d, + station.marker, + theme, + station, + r, + min_off, + max_off, + is_tb_vert, + station_data, + ) + if station.is_terminus: + _append_terminus_icons(d, station, graph, theme, r, min_off, max_off) + return + + x, y, w, h = _pill_box(station, r, min_off, max_off, is_tb_vert) + + # Blank terminus stations get an unrounded nub; everything else a pill. + if station.is_blank_terminus: + _draw_blank_terminus_nub( + d, station, r, min_off, max_off, station_data, theme, is_tb_vert + ) + else: + d.append( + draw.Rectangle( + x, + y, + w, + h, + rx=r, + ry=r, + fill=theme.station_fill, + stroke=theme.station_stroke, + stroke_width=theme.station_stroke_width, + **station_data, + ) + ) + + if station.is_terminus: + _append_terminus_icons(d, station, graph, theme, r, min_off, max_off) + + +def caption_aware_icon_step( + names: list[str], + name_widths: list[float], + terminus_width: float, +) -> float: + """Return the horizontal centre-to-centre step for adjacent icons. + + The default step is ``terminus_width + ICON_INTER_GAP``. When two + adjacent icons both carry a caption whose estimated width would + overrun that step (causing captions to overlap on the same row), + widen the step so the wider of the two captions fits with a small + visual gap on each side. The widened step is shared by every icon + in the row, keeping spacing uniform. + """ + default_step = terminus_width + ICON_INTER_GAP + required = default_step + for i in range(len(names) - 1): + if not names[i] or not names[i + 1]: + continue + pair_max = max(name_widths[i], name_widths[i + 1]) + # Allow a small gap each side of the wider caption before its + # neighbour caption starts. ICON_INTER_GAP gives us a uniform + # min visual breathing room. + needed = pair_max + ICON_INTER_GAP + if needed > required: + required = needed + return required + + +def _terminus_icon_marching( + theme: Theme, names: list[str], is_vertical_flow: bool +) -> tuple[float, list[float]]: + """Per-icon centre-to-centre step along the flow axis, and caption widths. + + TB/BT stack icons by height (plus a caption row when captioned); LR/RL + march by a caption-aware width. Returns the step and each caption's + estimated width, shared by the icon-placement helper and the renderer's + caption-stagger logic so the two stay in lockstep. + """ + caption_font_size = theme.label_font_size * ICON_NAME_FONT_SCALE + name_widths = [len(n) * caption_font_size * 0.55 if n else 0.0 for n in names] + if is_vertical_flow: + caption_room = caption_font_size + ICON_NAME_GAP if any(names) else 0.0 + step = theme.terminus_height + ICON_INTER_GAP + caption_room + else: + step = caption_aware_icon_step(names, name_widths, theme.terminus_width) + return step, name_widths + + +def _terminus_icon_centers_for( + station: Station, + graph: MetroGraph, + theme: Theme, + min_off: float, + max_off: float, +) -> list[tuple[float, float]]: + """Drawn centre of each of *station*'s terminus icons. + + Single source of truth for terminus-icon placement, shared by the + renderer (to draw the icons) and the obstacle / clearance logic (to + reason about where they land). Derives the flow axis, marching step, + and bundle offset the same way the renderer does, then delegates to + :func:`_terminus_icon_centers`. ``min_off``/``max_off`` carry the + station's bundle span so each caller supplies the offsets it already + has. Returns an empty list for non-terminus stations. + """ + if not station.is_terminus or not station.terminus_labels: + return [] + + section = graph.sections.get(station.section_id) if station.section_id else None + is_source = not graph.edges_to(station.id) + section_dir = section.direction if section else "LR" + is_vertical_flow = lanes_run_along_x(section_dir) + + r = theme.station_radius + icon_gap = r + ICON_STATION_GAP + icon_half_w = theme.terminus_width / 2 + icon_half_h = theme.terminus_height / 2 + icon_half_flow = icon_half_h if is_vertical_flow else icon_half_w + + bundle_center = (min_off + max_off) / 2 + + names = station.terminus_names or [""] * len(station.terminus_labels) + icon_step, _ = _terminus_icon_marching(theme, names, is_vertical_flow) + + is_rail = graph.station_is_rail(station.id) + offtrack_nub_lift = ( + OFFTRACK_TERMINUS_NUB_CLEARANCE + if (station.off_track and is_rail and station.is_captioned_terminus) + else 0.0 + ) + + return _terminus_icon_centers( + station, + section_dir, + is_source, + len(station.terminus_labels), + icon_gap + icon_half_flow + offtrack_nub_lift, + icon_step, + bundle_center, + is_rail=is_rail, + ) + + +def _terminus_icon_centers( + station: Station, + section_dir: str, + is_source: bool, + n: int, + first_offset: float, + step: float, + bundle_center: float, + is_rail: bool = False, +) -> list[tuple[float, float]]: + """Centre coordinates for a terminus station's file icons. + + Icons march away from the station along the section's *flow* axis + (X for LR/RL, Y for TB/BT) and stay centred on the station's bundle + on the *cross* axis. Sinks extend in the forward flow direction, + sources in the reverse; RL/BT mirror that so icons always point to + the outside of the diagram. + """ + is_vertical_flow = lanes_run_along_x(section_dir) + # A rail-mode off-track input parks above the rails and feeds straight down + # into its consumer's rail (see routing/rail.py), so its icon sits directly + # on the station coordinate (centred on the drop X) rather than marching + # sideways. Gated on the rail flag so normal-mode off-track feeders (which + # the standard router handles) are untouched. + if station.off_track and is_rail: + return [(station.x, station.y - (first_offset + i * step)) for i in range(n)] + # Sinks sit at the end of the flow and extend forwards; sources sit at + # the start and extend backwards. RL/BT reverse the forward direction. + extends_forward = is_source if section_dir in ("RL", "BT") else not is_source + sign = 1.0 if extends_forward else -1.0 + centers: list[tuple[float, float]] = [] + for i in range(n): + flow = sign * (first_offset + i * step) + if is_vertical_flow: + centers.append((station.x + bundle_center, station.y + flow)) + else: + centers.append((station.x + flow, station.y + bundle_center)) + return centers + + +def _render_terminus_icons( + d: draw.Drawing, + station: Station, + graph: MetroGraph, + theme: Theme, + r: float, + min_off: float, + max_off: float, +) -> None: + """Render file icon(s) adjacent to a terminus station. + + Multiple icons march away from the station along the section's flow + axis (a horizontal row for LR/RL, a vertical stack for TB/BT), with + the first icon closest to the station pill. + """ + section: Section | None = ( + graph.sections.get(station.section_id) if station.section_id else None + ) + section_dir = section.direction if section else "LR" + is_vertical_flow = lanes_run_along_x(section_dir) + icon_half_w = theme.terminus_width / 2 + icon_half_h = theme.terminus_height / 2 + + icon_types = station.terminus_icon_types or [ICON_TYPE_FILE] * len( + station.terminus_labels + ) + names = station.terminus_names or [""] * len(station.terminus_labels) + banners = station.terminus_icon_banners or [False] * len(station.terminus_labels) + + caption_font_size = theme.label_font_size * ICON_NAME_FONT_SCALE + icon_step, name_widths = _terminus_icon_marching(theme, names, is_vertical_flow) + + centers = _terminus_icon_centers_for(station, graph, theme, min_off, max_off) + + # Captions sitting at the same Y overlap when their estimated + # widths exceed icon_step; in that case, every other caption is + # dropped to the next row. + stagger_captions = False + for i in range(len(names) - 1): + if not names[i] or not names[i + 1]: + continue + max_w = max(name_widths[i], name_widths[i + 1]) + if max_w > icon_step - 2.0: + stagger_captions = True + break + + for i, label in enumerate(station.terminus_labels): + icon_type = icon_types[i] if i < len(icon_types) else ICON_TYPE_FILE + name = names[i] if i < len(names) else "" + banner = banners[i] if i < len(banners) else False + + icon_cx, icon_cy = centers[i] + + # Clamp to stay within the section bbox, on whichever axis the + # icons march along. + if section and is_vertical_flow and section.bbox_h > 0: + top = section.bbox_y + icon_half_h + ICON_BBOX_MARGIN + bottom = section.bbox_y + section.bbox_h - icon_half_h - ICON_BBOX_MARGIN + icon_cy = max(top, min(icon_cy, bottom)) + elif section and not is_vertical_flow and section.bbox_w > 0: + icon_right = ( + section.bbox_x + section.bbox_w - icon_half_w - ICON_BBOX_MARGIN + ) + icon_cx = max( + section.bbox_x + icon_half_w + ICON_BBOX_MARGIN, + min(icon_cx, icon_right), + ) + + common: dict[str, Any] = dict( + cx=icon_cx, + cy=icon_cy, + width=theme.terminus_width, + height=theme.terminus_height, + fill=theme.terminus_fill or theme.station_fill, + stroke=theme.terminus_stroke or theme.station_stroke, + stroke_width=theme.terminus_stroke_width, + corner_radius=theme.terminus_corner_radius, + label=label, + font_size=theme.terminus_font_size, + font_color=TERMINUS_FONT_COLOR, + font_family=theme.label_font_family, + ) + + if icon_type == ICON_TYPE_DIR: + render_folder_icon(d, **common) + elif icon_type == ICON_TYPE_FILES: + render_files_icon( + d, **common, fold_size=theme.terminus_fold_size, banner=banner + ) + else: + render_file_icon( + d, **common, fold_size=theme.terminus_fold_size, banner=banner + ) + + # Optional caption rendered below the icon so the type chip + # inside the icon stays readable. + if name: + caption_y = icon_cy + theme.terminus_height / 2 + ICON_NAME_GAP + # When adjacent icon captions would overlap horizontally + # (their estimated width exceeds the per-icon X step), drop + # odd-indexed captions to a second row so each name is + # legible. + if stagger_captions and i % 2 == 1: + caption_y += caption_font_size * 1.4 + caption_cx = icon_cx + if section and section.bbox_w > 0: + # Estimate caption width and clamp so it stays inside the + # section bbox right edge (and left edge for symmetry). + approx_w = len(name) * caption_font_size * 0.55 + left_bound = section.bbox_x + approx_w / 2 + ICON_BBOX_MARGIN + right_bound = ( + section.bbox_x + section.bbox_w - approx_w / 2 - ICON_BBOX_MARGIN + ) + if right_bound > left_bound: + caption_cx = max(left_bound, min(caption_cx, right_bound)) + d.append( + draw.Text( + name, + caption_font_size, + caption_cx, + caption_y, + fill=theme.label_color, + font_family=theme.label_font_family, + font_weight=theme.label_font_weight, + text_anchor="middle", + dominant_baseline="hanging", + ) + ) + + +def _label_halo_color(theme: Theme) -> str | None: + """Resolve the halo colour, or ``None`` when haloing is disabled. + + Haloing is disabled by a non-positive ``label_halo_width`` or an explicit + ``label_halo_color`` of ``"none"`` (matching the SVG ``fill="none"`` + convention). An empty colour resolves to the background, so the name + punches a knockout through any route it crosses, or white on transparent + themes. + """ + if theme.label_halo_width <= 0 or theme.label_halo_color == "none": + return None + if theme.label_halo_color: + return theme.label_halo_color + bg = theme.background_color + return bg if bg and bg != "none" else "#ffffff" + + +def _render_labels( + d: draw.Drawing, + labels: list[LabelPlacement], theme: Theme, ) -> None: """Render station name labels.""" - for label in labels: - if label.dominant_baseline: - # Custom placement (e.g. TB vertical stations: right-side labels) - d.append(draw.Text( - label.text, + halo_color = _label_halo_color(theme) + + def emit(text: str, x: float, y: float, **style: object) -> None: + # The halo is a stroked copy drawn underneath the glyph fill. A second + # paint pass (rather than paint-order on a single element) keeps the + # knockout correct in renderers that ignore the paint-order property. + if halo_color is not None: + d.append( + draw.Text( + text, + theme.label_font_size, + x, + y, + fill=halo_color, + stroke=halo_color, + stroke_width=theme.label_halo_width, + stroke_linejoin="round", + font_family=theme.label_font_family, + font_weight=theme.label_font_weight, + line_height=LABEL_LINE_HEIGHT, + aria_hidden="true", + class_=_ns("nf-metro-label-halo"), + **style, + ) + ) + d.append( + draw.Text( + text, theme.label_font_size, - label.x, label.y, + x, + y, fill=theme.label_color, font_family=theme.label_font_family, + font_weight=theme.label_font_weight, + line_height=LABEL_LINE_HEIGHT, + **style, + **label_data, + ) + ) + + for label in labels: + text = label.text + n_lines = text.count("\n") + 1 + + # For multi-line labels, adjust y so the text block stays on + # the correct side of the station. + y = label.y + if n_lines > 1: + line_spacing = theme.label_font_size * LABEL_LINE_HEIGHT + if label.dominant_baseline == "central": + # Center the block vertically on y + y -= (n_lines - 1) * line_spacing / 2 + elif label.above: + # Keep the bottom line near the station + y -= (n_lines - 1) * line_spacing + + # Skip emitting data-station-id for synthetic obstacle placements. + label_data: dict[str, str] = {} + if label.station_id and not label.station_id.startswith("__"): + label_data["data-station-id"] = label.station_id + label_data["class_"] = _ns("nf-metro-station-label") + + if label.angle: + # Diagonal labels: anchor at the pill and rotate about + # the anchor. text-anchor=start so the tilted text trails + # away from the station. + emit( + text, + label.x, + label.y, + text_anchor=label.text_anchor or "start", + dominant_baseline="auto", + transform=f"rotate({label.angle},{label.x},{label.y})", + ) + elif label.dominant_baseline: + # Custom placement (e.g. TB vertical stations: right-side labels) + emit( + text, + label.x, + y, text_anchor=label.text_anchor, dominant_baseline=label.dominant_baseline, - )) + ) else: baseline = "auto" if label.above else "hanging" - d.append(draw.Text( - label.text, - theme.label_font_size, - label.x, label.y, - fill=theme.label_color, - font_family=theme.label_font_family, + emit( + text, + label.x, + y, text_anchor="middle", dominant_baseline=baseline, - )) + ) + + +def _station_marker_extent( + station: Station, + graph: MetroGraph, + theme: Theme, + station_offsets: dict[tuple[str, str], float], +) -> tuple[float, float, float, float]: + """Return ``(x_left, x_right, y_top, y_bottom)`` of a station's marker. + + Mirrors the pill geometry in ``_render_stations`` so group captions can + clear the actual rendered marker, including the per-line offset spread. + """ + r = theme.station_radius + is_vertical_flow = False + if station.section_id: + sec = graph.sections.get(station.section_id) + if sec and lanes_run_along_x(sec.direction): + is_vertical_flow = True + + line_offsets = [ + station_offsets.get((station.id, lid), 0.0) + for lid in graph.station_lines(station.id) + ] + min_off = min(line_offsets) if line_offsets else 0.0 + max_off = max(line_offsets) if line_offsets else 0.0 + + x, y, w, h = _pill_box(station, r, min_off, max_off, is_vertical_flow) + return (x, x + w, y, y + h) + + +class _GroupBand(NamedTuple): + """Resolved render geometry for one annotative station-group caption. + + ``rule_y`` is the bracket rule (drawn directly against the spanned run); + ``tick_dy`` is the signed length of the inward end-ticks (pointing back + towards the stations); ``text_y``/``baseline`` place the caption clear of + the rule on the far side; ``band_far_y`` is the band's outermost edge + (largest ``y`` for a below band, smallest for an above band) used for + bbox/canvas reservation. + """ + + label: str + x_left: float + x_right: float + rule_y: float + tick_dy: float + text_y: float + baseline: str + band_far_y: float + section_id: str | None + + +class _RawGroup(NamedTuple): + """A group's resolved horizontal span and outer reference Y, before the + bracket gap and common-rule alignment are applied.""" + + label: str + x_left: float + x_right: float + section_id: str | None + position: str + ref: float + ref_is_label: bool + + +def _group_bands( + graph: MetroGraph, + theme: Theme, + station_offsets: dict[tuple[str, str], float], + label_extents: dict[str, tuple[float, float]] | None = None, +) -> list[_GroupBand]: + """Resolve per-group band geometry. + + For a ``below`` band the bracket rule hugs the bottom of the spanned + run, its end-ticks point up towards the stations, and the caption sits + beneath the rule; an ``above`` band mirrors this. Groups whose members + are all missing/hidden are skipped. + + ``label_extents`` maps a station id to its rendered label's ``(top, bottom)`` + Y. When given, a below band is dropped beneath the deepest member label + (and an above band lifted above the highest), so diagonal station labels + that hang past the markers do not collide with the band. + """ + caption_font = theme.label_font_size * GROUP_LABEL_FONT_SCALE + + # First pass: resolve each group's horizontal span and the natural outer + # reference (deepest member label/marker for a below band, highest for an + # above band) before the bracket gap is applied. + raw: list[_RawGroup] = [] + for group in graph.groups: + members = [ + graph.stations[sid] + for sid in group.station_ids + if sid in graph.stations + and not graph.stations[sid].is_port + and not graph.stations[sid].is_hidden + ] + if not members: + continue + extents = [ + _station_marker_extent(s, graph, theme, station_offsets) for s in members + ] + + x_left = min(e[0] for e in extents) + x_right = max(e[1] for e in extents) + section_id = members[0].section_id + + # Member label extremes, so the band clears the (possibly diagonal) + # station labels rather than just the markers. + member_label_tops = [ + label_extents[s.id][0] + for s in members + if label_extents and s.id in label_extents + ] + member_label_bottoms = [ + label_extents[s.id][1] + for s in members + if label_extents and s.id in label_extents + ] + + if group.position == "above": + marker_top = min(e[2] for e in extents) + label_ref = min(member_label_tops) if member_label_tops else None + ref = min([marker_top, *member_label_tops]) + ref_is_label = label_ref is not None and label_ref <= marker_top + else: + marker_bottom = max(e[3] for e in extents) + label_ref = max(member_label_bottoms) if member_label_bottoms else None + ref = max([marker_bottom, *member_label_bottoms]) + ref_is_label = label_ref is not None and label_ref >= marker_bottom + raw.append( + _RawGroup( + label=group.label, + x_left=x_left, + x_right=x_right, + section_id=section_id, + position=group.position, + ref=ref, + ref_is_label=ref_is_label, + ) + ) + + # Align all bands sharing a (section, side) to a common rule line, so a + # row of group captions reads off one level rather than stepping with each + # group's own member-label depth. Below bands align to the deepest ref, + # above bands to the highest. Track whether that common extreme is a + # station label (vs a bare marker): a label already carries its full + # footprint, so the band hugs it with a small clearance instead of the + # wider marker-row gap, which over-shoots for diagonal labels. + common_ref: dict[tuple[str | None, str], float] = {} + common_is_label: dict[tuple[str | None, str], bool] = {} + for rec in raw: + key = (rec.section_id, rec.position) + ref = rec.ref + more_extreme = ( + key not in common_ref + or (rec.position == "above" and ref < common_ref[key]) + or (rec.position != "above" and ref > common_ref[key]) + ) + if rec.position == "above": + common_ref[key] = min(common_ref.get(key, ref), ref) + else: + common_ref[key] = max(common_ref.get(key, ref), ref) + if more_extreme: + common_is_label[key] = rec.ref_is_label + + out: list[_GroupBand] = [] + for rec in raw: + key = (rec.section_id, rec.position) + ref = common_ref[key] + gap = ( + GROUP_LABEL_LABEL_CLEARANCE if common_is_label.get(key) else GROUP_LABEL_GAP + ) + if rec.position == "above": + rule_y = ref - gap + tick_dy = GROUP_LABEL_TICK_LENGTH # ticks point down to stations + text_y = rule_y - GROUP_LABEL_UNDERLINE_GAP + baseline = "auto" + band_far_y = text_y - caption_font + else: + rule_y = ref + gap + tick_dy = -GROUP_LABEL_TICK_LENGTH # ticks point up to stations + text_y = rule_y + GROUP_LABEL_UNDERLINE_GAP + baseline = "hanging" + band_far_y = text_y + caption_font + out.append( + _GroupBand( + rec.label, + rec.x_left, + rec.x_right, + rule_y, + tick_dy, + text_y, + baseline, + band_far_y, + rec.section_id, + ) + ) + return out + + +def _group_caption_bounds(bands: list[_GroupBand]) -> tuple[float, float]: + """Return the max ``(x, y)`` reached by any group band.""" + max_x = 0.0 + max_y = 0.0 + for band in bands: + max_x = max(max_x, band.x_right) + max_y = max(max_y, band.rule_y, band.text_y, band.band_far_y) + return max_x, max_y + + +def _reserve_section_space_for_groups( + graph: MetroGraph, + bands: list[_GroupBand], +) -> None: + """Grow section bboxes so each ``below`` group band sits inside its box. + + Annotative bands are placed at render time from station coordinates, so + the layout engine has no chance to reserve room for them. Without this + the caption and bracket overlap (or fall outside) the section's bottom + edge. + """ + needed_bottom: dict[str, float] = {} + for band in bands: + if band.section_id is None or band.tick_dy >= 0: + continue # above bands grow upward; handled via canvas bounds + needed_bottom[band.section_id] = max( + needed_bottom.get(band.section_id, band.band_far_y), + band.band_far_y, + ) + for sid, far_y in needed_bottom.items(): + sec = graph.sections.get(sid) + if sec is None or sec.is_implicit: + continue + target_bottom = far_y + GROUP_LABEL_BAND_PADDING + if target_bottom > sec.bbox_y + sec.bbox_h: + sec.bbox_h = target_bottom - sec.bbox_y + + +def _reserve_rail_space_for_termini(graph: MetroGraph, theme: Theme) -> None: + """Grow rail-section boxes to contain their terminus file icons. + + Rail-section bboxes are sized to the station columns only, so a terminus + station's icons (which march outward past the last station) can be cut by + the box edge. Grow the box so the icons sit inside with clearance. Gated + on rail sections, leaving normal-mode fixtures byte-identical. + """ + if not graph.has_rail_sections: + return + clearance = ICON_STATION_GAP * 2 + r = theme.station_radius + hw = theme.terminus_width / 2 + hh = theme.terminus_height / 2 + caption_font_size = theme.label_font_size * ICON_NAME_FONT_SCALE + for station in graph.stations.values(): + if not (graph.station_is_rail(station.id) and station.is_terminus): + continue + sec = graph.sections.get(station.section_id) if station.section_id else None + if sec is None or sec.is_implicit: + continue + n = len(station.terminus_labels) + names = station.terminus_names or [""] * n + name_widths = [ + len(nm) * caption_font_size * 0.55 if nm else 0.0 for nm in names + ] + is_vertical_flow = lanes_run_along_x(sec.direction) + if is_vertical_flow: + step = theme.terminus_height + ICON_INTER_GAP + half_flow = hh + else: + step = caption_aware_icon_step(names, name_widths, theme.terminus_width) + half_flow = hw + centers = _terminus_icon_centers( + station, + sec.direction, + not graph.edges_to(station.id), + n, + r + ICON_STATION_GAP + half_flow, + step, + 0.0, + is_rail=True, + ) + for cx, cy in centers: + left, right = cx - hw - clearance, cx + hw + clearance + top, bot = cy - hh - clearance, cy + hh + clearance + if left < sec.bbox_x: + sec.bbox_w = sec.bbox_x + sec.bbox_w - left + sec.bbox_x = left + if right > sec.bbox_x + sec.bbox_w: + sec.bbox_w = right - sec.bbox_x + if top < sec.bbox_y: + sec.bbox_h = sec.bbox_y + sec.bbox_h - top + sec.bbox_y = top + if bot > sec.bbox_y + sec.bbox_h: + sec.bbox_h = bot - sec.bbox_y + + +def _render_station_groups( + d: draw.Drawing, + theme: Theme, + bands: list[_GroupBand], +) -> None: + """Render annotative captions spanning groups of stations. + + Each group's caption is centred on the x-extent of its (visible) member + stations. A bracket rule (with inward end-ticks) hugs the spanned run so + the band reads as embracing exactly those stations, with the caption set + clear of the rule on the far side. Coordinates are read-only: this never + moves stations. + """ + caption_font = theme.label_font_size * GROUP_LABEL_FONT_SCALE + for band in bands: + cx = (band.x_left + band.x_right) / 2 + # Bracket: a horizontal rule across the run with short inward end-ticks + # pointing back towards the stations. + bracket = draw.Path( + stroke=theme.section_label_color, + stroke_width=GROUP_LABEL_UNDERLINE_WIDTH, + stroke_opacity=GROUP_LABEL_UNDERLINE_OPACITY, + fill="none", + stroke_linecap="round", + stroke_linejoin="round", + class_=_ns("nf-metro-group-underline"), + ) + bracket.M(band.x_left, band.rule_y + band.tick_dy) + bracket.L(band.x_left, band.rule_y) + bracket.L(band.x_right, band.rule_y) + bracket.L(band.x_right, band.rule_y + band.tick_dy) + d.append(bracket) + d.append( + draw.Text( + band.label, + caption_font, + cx, + band.text_y, + fill=theme.section_label_color, + font_family=theme.label_font_family, + font_weight="bold", + text_anchor="middle", + dominant_baseline=band.baseline, + class_=_ns("nf-metro-group-label"), + ) + ) + + +def _grid_bbox_bounds( + sections: list[Section], +) -> tuple[dict[int, tuple[float, float]], dict[int, tuple[float, float]]]: + """Collect per-column X bounds and per-row Y bounds from section bboxes. + + Spanning sections (``grid_col_span > 1`` or ``grid_row_span > 1``) are + excluded from the corresponding axis - their extent across multiple + cells would distort a single-cell measurement. + """ + col_bounds: dict[int, tuple[float, float]] = {} + row_bounds: dict[int, tuple[float, float]] = {} + for sec in sections: + x0, x1 = sec.bbox_x, sec.bbox_x + sec.bbox_w + y0, y1 = sec.bbox_y, sec.bbox_y + sec.bbox_h + if sec.grid_col_span == 1: + cx0, cx1 = col_bounds.get(sec.grid_col, (x0, x1)) + col_bounds[sec.grid_col] = (min(cx0, x0), max(cx1, x1)) + if sec.grid_row_span == 1: + ry0, ry1 = row_bounds.get(sec.grid_row, (y0, y1)) + row_bounds[sec.grid_row] = (min(ry0, y0), max(ry1, y1)) + return col_bounds, row_bounds + + +def _sections_by_grid_cell( + sections: list[Section], +) -> dict[tuple[int, int], Section]: + """Index non-spanning sections by ``(grid_col, grid_row)``.""" + out: dict[tuple[int, int], Section] = {} + for sec in sections: + if sec.grid_col_span == 1 and sec.grid_row_span == 1: + out[(sec.grid_col, sec.grid_row)] = sec + return out + + +def _compute_row_boundary_segments( + sections: list[Section], + col_bounds: dict[int, tuple[float, float]], +) -> list[tuple[int, int, float, float, float]]: + """Return row-boundary segments as ``(row_a, row_b, x_start, x_end, y)``. + + For each consecutive grid-row pair, pick a boundary Y and draw a + canvas-wide horizontal line at that Y, broken around bboxes the + line would cut: + + 1. If rows don't overlap globally (max bbox-bottom of row a is + above min bbox-top of row b), use the global midpoint - the + natural row separator that sits below every section in the + upper row and above every section in the lower row. + 2. Otherwise (a fold extends one row into the other's band), emit + one per-column segment at each cell's local midpoint, dropping + cells where the bboxes locally overlap. Fold columns and + columns missing one of the two rows produce visible gaps. + """ + if not col_bounds: + return [] + sec_by_cell = _sections_by_grid_cell(sections) + canvas_x0 = min(b[0] for b in col_bounds.values()) - 20 + canvas_x1 = max(b[1] for b in col_bounds.values()) + 20 + sections_by_row: dict[int, list[Section]] = {} + for sec in sections: + if sec.grid_row_span == 1: + sections_by_row.setdefault(sec.grid_row, []).append(sec) + rows = sorted(sections_by_row) + segments: list[tuple[int, int, float, float, float]] = [] + for i in range(len(rows) - 1): + ra, rb = rows[i], rows[i + 1] + row_a_secs = sections_by_row.get(ra, []) + row_b_secs = sections_by_row.get(rb, []) + if not row_a_secs or not row_b_secs: + continue + max_bottom = max(s.bbox_y + s.bbox_h for s in row_a_secs) + min_top = min(s.bbox_y for s in row_b_secs) + if max_bottom < min_top: + # Rows are globally separable: one canvas-wide line at the + # natural midpoint (below every row a section, above every + # row b section). No bbox is cut by construction. + y = (max_bottom + min_top) / 2 + segments.append((ra, rb, canvas_x0, canvas_x1, y)) + continue + # Rows overlap (a fold extends one row into the other's band). + # Emit per-column segments only at cells where both rows have + # a non-spanning section and the sections don't locally overlap, + # so the line appears only where the boundary is unambiguous. + for c, (x_start, x_end) in col_bounds.items(): + sa = sec_by_cell.get((c, ra)) + sb = sec_by_cell.get((c, rb)) + if sa is None or sb is None: + continue + a_bot = sa.bbox_y + sa.bbox_h + b_top = sb.bbox_y + if a_bot >= b_top: + continue + segments.append((ra, rb, x_start, x_end, (a_bot + b_top) / 2)) + return segments + + +def _compute_col_boundary_xs( + col_bounds: dict[int, tuple[float, float]], + sections: list[Section] | None = None, +) -> list[tuple[int, int, float]]: + """Return ``(col_a, col_b, mid_x)`` triples for consecutive grid columns + whose bbox X ranges don't overlap. + + Columns don't overlap like rows do within a single shared grid (there's + no column-axis analogue of a fold), so a single canvas-spanning line per + pair normally suffices. When the section graph splits into independent + components, each component is placed in its own local column grid and the + components reuse the same ``grid_col`` indices in different X bands; a + midpoint computed from the merged per-column X bounds can then land + inside another component's section. Any such boundary is dropped so the + overlay never cuts a section bbox. + """ + result: list[tuple[int, int, float]] = [] + sorted_cols = sorted(col_bounds) + for i in range(len(sorted_cols) - 1): + ca, cb = sorted_cols[i], sorted_cols[i + 1] + right = col_bounds[ca][1] + left = col_bounds[cb][0] + if right >= left: + continue + mid_x = (right + left) / 2 + if sections is not None and any( + sec.grid_col_span == 1 and sec.bbox_x < mid_x < sec.bbox_x + sec.bbox_w + for sec in sections + ): + continue + result.append((ca, cb, mid_x)) + return result + + +def _row_grid_anchor_ys(graph: MetroGraph, station_ids: Iterable[str]) -> list[float]: + """The distinct placement-row Ys among the given stations. + + A station is positioned by ``station.y`` -- the row anchor (the offset-0 + slot, the top of the bundle), not the centre of its rendered pill, which is + offset downward by the bundle mid. The debug grid marks these anchors so a + line shows where the engine placed a row; same-row stations share their + anchor and collapse to one line, while a station the engine drifted onto a + slightly different Y splits off its own line. Hidden stations (bypass + junctions and the like) occupy real rows too, so they anchor a line; only + ports, which ride a neighbouring station's row, are skipped. + """ + return sorted( + { + round(st.y, 1) + for sid in station_ids + if (st := graph.stations.get(sid)) and not st.is_port + } + ) + + +def _draw_debug_y_grid( + d: draw.Drawing, + *, + x_start: float, + x_end: float, + row_ys: list[float], + label: str, + debug_font: str, + debug_font_size: float, + color: str = DEBUG_ROW_GRID_COLOR, +) -> None: + """Draw one horizontal line per row Y, labelling the topmost one.""" + for i, y in enumerate(row_ys): + d.append( + draw.Line( + x_start, + y, + x_end, + y, + stroke=color, + stroke_width=0.75, + stroke_dasharray="4,6", + ) + ) + if i == 0: + d.append( + draw.Text( + label, + debug_font_size, + x_start - 4, + y, + fill=color, + font_family=debug_font, + text_anchor="end", + ) + ) + + +def _render_debug_overlay( + d: draw.Drawing, + graph: MetroGraph, + routes: list[RoutedPath], + station_offsets: dict[tuple[str, str], float], + theme: Theme, +) -> None: + """Render debug markers for ports, hidden stations, and edge waypoints.""" + debug_font = theme.label_font_family + debug_font_size = DEBUG_FONT_SIZE + is_light = theme.mode == "light" + waypoint_color = DEBUG_WAYPOINT_COLOR_LIGHT if is_light else DEBUG_WAYPOINT_COLOR + grid_color = DEBUG_GRID_COLOR_LIGHT if is_light else DEBUG_GRID_COLOR + row_grid_color = DEBUG_ROW_GRID_COLOR_LIGHT if is_light else DEBUG_ROW_GRID_COLOR + + # Edge waypoints: small filled circles at intermediate points + for route in routes: + if len(route.points) <= 2: + continue + pts = apply_route_offsets(route, station_offsets) + # Draw intermediate waypoints (skip first/last which are at stations) + for px, py in pts[1:-1]: + d.append(draw.Circle(px, py, DEBUG_WAYPOINT_RADIUS, fill=waypoint_color)) + + # Port stations: diamond markers with labels + for station in graph.stations.values(): + if not station.is_port: + continue + port = graph.ports.get(station.id) + is_entry = port.is_entry if port else True + color = DEBUG_ENTRY_PORT_COLOR if is_entry else DEBUG_EXIT_PORT_COLOR + # Diamond (rotated square) + r = DEBUG_DIAMOND_RADIUS + diamond = draw.Path(fill=color, stroke="none") + diamond.M(station.x, station.y - r) + diamond.L(station.x + r, station.y) + diamond.L(station.x, station.y + r) + diamond.L(station.x - r, station.y) + diamond.Z() + d.append(diamond) + # Label: port ID + side + side_str = port.side.value if port else "?" + label_text = f"{station.id} ({side_str})" + d.append( + draw.Text( + label_text, + debug_font_size, + station.x, + station.y - r - DEBUG_LABEL_OFFSET, + fill=color, + font_family=debug_font, + text_anchor="middle", + dominant_baseline="auto", + ) + ) + + # Grid lines: dashed lines at boundaries between grid rows/columns + sections = list(graph.sections.values()) + if sections: + col_bounds, row_bounds = _grid_bbox_bounds(sections) + + # Global extents for full-canvas column lines and row label anchor. + if not col_bounds or not row_bounds: + all_x0 = min(s.bbox_x for s in sections) - 20 + all_y0 = min(s.bbox_y for s in sections) - 20 + all_y1 = max(s.bbox_y + s.bbox_h for s in sections) + 20 + else: + all_x0 = min(b[0] for b in col_bounds.values()) - 20 + all_y0 = min(b[0] for b in row_bounds.values()) - 20 + all_y1 = max(b[1] for b in row_bounds.values()) + 20 + # grid_color already computed above from theme.mode + + for ca, cb, mid_x in _compute_col_boundary_xs(col_bounds, sections): + d.append( + draw.Line( + mid_x, + all_y0, + mid_x, + all_y1, + stroke=grid_color, + stroke_width=1, + stroke_dasharray="6,4", + ) + ) + d.append( + draw.Text( + f"col {ca}|{cb}", + debug_font_size, + mid_x, + all_y0 - 4, + fill=grid_color, + font_family=debug_font, + text_anchor="middle", + ) + ) + + row_segments = _compute_row_boundary_segments(sections, col_bounds) + for _ra, _rb, x_start, x_end, y in row_segments: + d.append( + draw.Line( + x_start, + y, + x_end, + y, + stroke=grid_color, + stroke_width=1, + stroke_dasharray="6,4", + ) + ) + # One label per row pair, anchored at the first segment's Y. + row_pair_label_ys: dict[tuple[int, int], float] = {} + for ra, rb, _xs, _xe, y in row_segments: + row_pair_label_ys.setdefault((ra, rb), y) + for (ra, rb), y in row_pair_label_ys.items(): + d.append( + draw.Text( + f"row {ra}|{rb}", + debug_font_size, + all_x0 - 4, + y, + fill=grid_color, + font_family=debug_font, + text_anchor="end", + ) + ) + + # Horizontal row lines at each section's placement-row anchors (the distinct + # station.y values, see _row_grid_anchor_ys). Multi-section row bands share + # one full-width set of lines; every other section draws its own. + grouped_sec_ids: set[str] = set() + for row, info in graph._row_y_grid_info.items(): + ref_secs = [ + graph.sections[sid] for sid in info["section_ids"] if sid in graph.sections + ] + if not ref_secs: + continue + grouped_sec_ids.update(s.id for s in ref_secs) + row_ys = _row_grid_anchor_ys( + graph, (sid for sec in ref_secs for sid in sec.station_ids) + ) + if not row_ys: + continue + _draw_debug_y_grid( + d, + x_start=min(s.bbox_x for s in ref_secs) - 10, + x_end=max(s.bbox_x + s.bbox_w for s in ref_secs) + 10, + row_ys=row_ys, + label=f"row {row} grid", + debug_font=debug_font, + debug_font_size=debug_font_size, + color=row_grid_color, + ) + + for sec in sections: + if sec.id in grouped_sec_ids: + continue + row_ys = _row_grid_anchor_ys(graph, sec.station_ids) + if not row_ys: + continue + _draw_debug_y_grid( + d, + x_start=sec.bbox_x - 10, + x_end=sec.bbox_x + sec.bbox_w + 10, + row_ys=row_ys, + label=f"row {sec.grid_row} grid", + debug_font=debug_font, + debug_font_size=debug_font_size, + color=row_grid_color, + ) + + # Hidden stations: dashed-outline circles with labels + for station in graph.stations.values(): + if not station.is_hidden or station.is_port: + continue + color = DEBUG_HIDDEN_STATION_COLOR + d.append( + draw.Circle( + station.x, + station.y, + DEBUG_DIAMOND_RADIUS, + fill="none", + stroke=color, + stroke_width=DEBUG_STROKE_WIDTH, + stroke_dasharray="3,2", + ) + ) + d.append( + draw.Text( + station.id, + debug_font_size, + station.x, + station.y - DEBUG_HIDDEN_LABEL_OFFSET, + fill=color, + font_family=debug_font, + text_anchor="middle", + dominant_baseline="auto", + ) + ) diff --git a/src/nf_metro/render/validate.py b/src/nf_metro/render/validate.py new file mode 100644 index 000000000..41f866052 --- /dev/null +++ b/src/nf_metro/render/validate.py @@ -0,0 +1,522 @@ +"""Render-geometry guards that read the rendered SVG as their own oracle. + +The layout guards in :mod:`nf_metro.layout.phases.guards` and the routing +invariants validate geometry *before* the render-time regimes run -- the +per-line offsets applied by :func:`~nf_metro.render.svg.apply_route_offsets`, +the multi-line label Y-shifts, and the wrapped-label lift off foreign trunks. +The picture the user actually sees only exists in the emitted SVG. + +:func:`validate_render` closes that gap from the other side: it parses the +finished artifact back into node markers (from the embedded manifest), route +polylines (from the drawn ```` ink), and label ink boxes +(from the drawn ```` ink), then runs render-geometry checks on what was +drawn. Because the predicate is the project's authoritative one +(:func:`~nf_metro.layout.labels.segment_strikes_label`) applied to the parsed +ink, a finding means the rendered image is wrong, not that a re-derivation +diverged. + +Three checks run on the drawn ink. The **label-strike** and **marker-cross** +checks are pure artifact oracles -- they need only the SVG string, so they +validate a produced file standalone without re-running layout. The +**offset-collapse** check is offset-pitch-aware: telling an acceptable +same-slot bundle (distinct lines the regime put on one offset, drawn flush by +design) from a real collapse (lines the regime spread apart, drawn flush) +needs the assigned offsets, which the bare artifact cannot supply. It +therefore runs only when the laid-out ``graph`` is passed alongside the SVG; +the standalone path runs the two artifact-only checks. + +All three see the render-only geometry (the offset regime, label Y-shifts, the +wrapped-label lift) that the pre-render layout guards never observe. +""" + +from __future__ import annotations + +import re +from typing import TYPE_CHECKING, Any, NamedTuple + +from nf_metro.layout.constants import LABEL_FONT_SIZE, LABEL_LINE_HEIGHT, OFFSET_STEP +from nf_metro.layout.geometry import segment_intersects_bbox +from nf_metro.layout.labels import ( + LabelPlacement, + font_scale_context, + segment_strikes_label, +) +from nf_metro.manifest import read_manifest + +if TYPE_CHECKING: + from nf_metro.parser.model import MetroGraph + +# The defect family of a finding; one per render-geometry check. +LABEL_STRIKE = "label-strike" +MARKER_CROSS = "marker-cross" +OFFSET_COLLAPSE = "offset-collapse" + +# A drawn run shorter than this reads as a corner nub, not a parallel stretch; +# two lines closer than ``_FLUSH_TOL`` perpendicular read as a single stroke. +_RUN_MIN = 8.0 +_FLUSH_TOL = 1.5 +# A pair the offset regime spread by a full step (allowing diagonal foreshorten +# and rounding) is meant to read as two lines; drawn flush, it has collapsed. +_PITCH_MIN = OFFSET_STEP - 0.5 + +_Point = tuple[float, float] +_Segment = tuple[_Point, _Point] +_Subpaths = list[list[_Point]] + + +class RenderFinding(NamedTuple): + """One render-geometry defect read back out of the drawn SVG. + + Captured from the rendered ink (after the offset and label-lift regimes), + so a finding is a real visual defect in the user's output. ``segment`` is + the drawn line segment ``((x1, y1), (x2, y2))`` that triggered it. + """ + + kind: str + line_id: str + station_id: str + message: str + segment: tuple[tuple[float, float], tuple[float, float]] + + +class _Label(NamedTuple): + placement: LabelPlacement + font_size: float + + +# A single route renders as one element per metro line; ``metro-direction-*`` +# chevrons (the optional directional markers) also carry ``data-line-id`` but +# are not the route, so the route class substring gates them out. +_ROUTE_CLASS = "metro-line-" +_NUM = re.compile(r"-?\d+(?:\.\d+)?") +_ELEMENT = re.compile(r"<(path|line)\b([^>]*?)/?>", re.DOTALL) +_TEXT = re.compile(r"]*?)>(.*?)", re.DOTALL) +_TSPAN = re.compile(r"]*>(.*?)", re.DOTALL) +_TAG = re.compile(r"<[^>]+>") + + +def _attr(attrs: str, name: str, default: str | None = None) -> str | None: + match = re.search(rf'\b{name}="([^"]*)"', attrs) + return match.group(1) if match else default + + +def parse_route_polylines( + svg: str, +) -> list[tuple[str, list[list[tuple[float, float]]]]]: + """Reconstruct each drawn route's polylines from the SVG ink. + + Returns ``(line_id, subpaths)`` per drawn route element, where each subpath + is a list of ``(x, y)`` vertices. A route splits into several subpaths at + every ``M`` after the first, so a bridged edge's hop gap is a real break + rather than a phantom segment spanning it. Each smoothing ``Q`` is + collapsed back to its corner (the control point), which is the exact + pre-smoothing vertex, so the polyline equals the logical routed path. + """ + routes: list[tuple[str, list[list[tuple[float, float]]]]] = [] + for tag, attrs in _ELEMENT.findall(svg): + cls = _attr(attrs, "class") or "" + if _ROUTE_CLASS not in cls: + continue + line_id = _attr(attrs, "data-line-id") or "" + if tag == "line": + x1, y1, x2, y2 = ( + float(_attr(attrs, k) or 0.0) for k in ("x1", "y1", "x2", "y2") + ) + routes.append((line_id, [[(x1, y1), (x2, y2)]])) + continue + d = _attr(attrs, "d") or "" + subpaths: list[list[tuple[float, float]]] = [] + current: list[tuple[float, float]] = [] + for cmd, body in re.findall(r"([MLQ])([^MLQ]*)", d): + nums = [float(n) for n in _NUM.findall(body)] + if cmd == "M": + if current: + subpaths.append(current) + current = [(nums[0], nums[1])] + elif cmd == "L": + current.append((nums[0], nums[1])) + elif cmd == "Q": + if current: + current.pop() + current.append((nums[0], nums[1])) + if current: + subpaths.append(current) + routes.append((line_id, subpaths)) + return routes + + +def drawn_segments( + routes: list[tuple[str, _Subpaths]], +) -> list[tuple[str, _Point, _Point]]: + """Flatten parsed route subpaths into ``(line_id, p1, p2)`` drawn segments.""" + return [ + (line_id, subpath[i], subpath[i + 1]) + for line_id, subpaths in routes + for subpath in subpaths + for i in range(len(subpath) - 1) + ] + + +def parse_station_labels(svg: str) -> list[_Label]: + """Reconstruct station-label ink placements from the drawn ```` ink. + + Inverts :func:`~nf_metro.render.svg._render_labels`' emission: the + ``dominant-baseline`` attribute names the side (``auto`` above, ``hanging`` + below, ``central`` centred), the multi-line block's anchor Y is recovered + from the per-line ``dy`` stacking the renderer applied, and a ``rotate`` + transform restores the diagonal angle. The resulting + :class:`~nf_metro.layout.labels.LabelPlacement` feeds the authoritative + glyph-ink predicates so the box matches what was drawn. + """ + labels: list[_Label] = [] + for attrs, body in _TEXT.findall(svg): + station_id = _attr(attrs, "data-station-id") + cls = _attr(attrs, "class") or "" + if station_id is None or "station-label" not in cls: + continue + spans = _TSPAN.findall(body) + text = ( + "\n".join(_TAG.sub("", s) for s in spans) if spans else _TAG.sub("", body) + ) + text = text.strip("\n") + x = float(_attr(attrs, "x") or 0.0) + y = float(_attr(attrs, "y") or 0.0) + font_size = float(_attr(attrs, "font-size") or LABEL_FONT_SIZE) + anchor = _attr(attrs, "text-anchor") or "start" + baseline = _attr(attrs, "dominant-baseline") or "" + rotate = re.search(r"rotate\(([-\d.]+)", attrs) + angle = float(rotate.group(1)) if rotate else 0.0 + + # A rotated label is emitted at its anchor already; only the upright + # baselines carry the multi-line Y stacking that has to be undone. + n_lines = text.count("\n") + 1 + line_spacing = font_size * LABEL_LINE_HEIGHT + above = False + dominant = "" + if not angle: + if baseline == "auto": + above = True + y += (n_lines - 1) * line_spacing + elif baseline == "central": + dominant = "central" + y += (n_lines - 1) * line_spacing / 2 + elif baseline and baseline != "hanging": + dominant = baseline + + labels.append( + _Label( + LabelPlacement( + station_id=station_id, + text=text, + x=x, + y=y, + above=above, + angle=angle, + text_anchor=anchor, + dominant_baseline=dominant, + ), + font_size, + ) + ) + return labels + + +def _nodes_by_id(manifest: dict[str, Any]) -> dict[str, dict[str, Any]]: + return {node["id"]: node for node in manifest.get("nodes", [])} + + +# Rail-mode markers (knob, knob outline, connector bar) all carry both an +# ``...-rail-...`` class and the station id; a line threading an interchange +# knob is the intended rail idiom, so the station id signals a marker-cross +# exemption straight from the artifact (the manifest carries no rail flag). +_RAIL_MARKER = re.compile(r"<\w+\b[^>]*?\brail\b[^>]*?/?>", re.DOTALL) + + +def parse_rail_station_ids(svg: str) -> set[str]: + """Recover the set of rail-station ids from the drawn rail markers. + + A line passing through a rail interchange's knob is the deliberate rail + idiom (the same reason the hanging-route guard skips rail endpoints), so + :func:`check_marker_crossings` reads these ids back from the SVG to exempt + rail stations without a manifest schema addition. + """ + ids: set[str] = set() + for match in _RAIL_MARKER.finditer(svg): + element = match.group(0) + cls = _attr(element, "class") or "" + if "rail" not in cls: + continue + sid = _attr(element, "data-station-id") + if sid is not None: + ids.add(sid) + return ids + + +def check_label_strikes( + svg: str, + manifest: dict[str, Any], + routes: list[tuple[str, list[list[tuple[float, float]]]]], +) -> list[RenderFinding]: + """A drawn route segment striking through a station name's glyph ink. + + A line painting over a label reads as a strike-through, and a pixel oracle + false-negatives on it because the line covers the text. A segment is exempt + when its line is one the labelled station carries (the + manifest ``groups``, which subsumes the case of the station being that + edge's own endpoint). Uses the authoritative glyph-ink footprint at the + label's drawn font scale, so it fires only on the inked glyphs, not the + reserved margin around them. + """ + nodes = _nodes_by_id(manifest) + findings: list[RenderFinding] = [] + for placement, font_size in parse_station_labels(svg): + node = nodes.get(placement.station_id) + if node is None: + continue + carried = set(node.get("groups", ())) + scale = font_size / LABEL_FONT_SIZE + with font_scale_context(scale): + for line_id, subpaths in routes: + if line_id in carried: + continue + for subpath in subpaths: + hit = _first_striking_segment(subpath, placement) + if hit is not None: + findings.append( + RenderFinding( + LABEL_STRIKE, + line_id, + placement.station_id, + f"line {line_id!r} strikes through the label of " + f"{placement.station_id!r} ({placement.text!r})", + hit, + ) + ) + break + return findings + + +def _first_striking_segment( + subpath: list[tuple[float, float]], placement: LabelPlacement +) -> tuple[tuple[float, float], tuple[float, float]] | None: + for i in range(len(subpath) - 1): + (x1, y1), (x2, y2) = subpath[i], subpath[i + 1] + if segment_strikes_label(x1, y1, x2, y2, placement): + return ((x1, y1), (x2, y2)) + return None + + +def check_marker_crossings( + svg: str, + manifest: dict[str, Any], + routes: list[tuple[str, _Subpaths]], +) -> list[RenderFinding]: + """A drawn route segment passing through a non-consumer station's marker. + + A line raking across a station marker reads as the route running through + that station, so it must touch only the markers of stations that carry it. + A segment is exempt when its line is one the marker's station carries (the + manifest ``groups``, which subsumes the station being that edge's own + endpoint). Rail-interchange stations are exempt too: a line threading an + interchange knob is the intended rail idiom, and their ids are read back + from the drawn rail markers. The render-side companion to the layout + guard ``_guard_no_line_crosses_non_consumer``, read from the artifact so + it also catches any marker crossing introduced after the offset regime. + """ + nodes = _nodes_by_id(manifest) + rail = parse_rail_station_ids(svg) + findings: list[RenderFinding] = [] + for line_id, subpaths in routes: + for sid, node in nodes.items(): + if sid in rail or line_id in node.get("groups", ()): + continue + radius = node.get("r", 0.0) + bbox = ( + node["x"] - radius, + node["y"] - radius, + node["x"] + radius, + node["y"] + radius, + ) + hit = _first_crossing_segment(subpaths, bbox) + if hit is not None: + findings.append( + RenderFinding( + MARKER_CROSS, + line_id, + sid, + f"line {line_id!r} crosses the marker of non-consumer " + f"station {sid!r}", + hit, + ) + ) + return findings + + +def _first_crossing_segment( + subpaths: _Subpaths, bbox: tuple[float, float, float, float] +) -> _Segment | None: + for subpath in subpaths: + for i in range(len(subpath) - 1): + (x1, y1), (x2, y2) = subpath[i], subpath[i + 1] + if segment_intersects_bbox(x1, y1, x2, y2, bbox): + return ((x1, y1), (x2, y2)) + return None + + +def check_offset_collapse( + graph: MetroGraph, + routes: list[tuple[str, _Subpaths]], +) -> list[RenderFinding]: + """Distinct lines drawn flush where the offset regime spread them apart. + + Two lines the regime assigned the same offset slot legitimately draw flush + (a shared-trunk bundle), so a bare perpendicular-distance floor cannot + distinguish that from a real collapse. This compares the *drawn* gap on a + shared run against the gap the offset regime *assigned* the pair there: a + pair drawn flush whose assigned gap is at least one offset step has + collapsed into a single stroke. The assigned geometry comes from the + engine, the drawn geometry from the artifact, so a finding is a real + render-time merge, not a re-derivation mismatch. + """ + expected = _expected_line_segments(graph) + if not expected: + return [] + drawn = drawn_segments(routes) + findings: list[RenderFinding] = [] + seen: set[tuple[str, str, int, int]] = set() + for i, (line_a, a1, a2) in enumerate(drawn): + for line_b, b1, b2 in drawn[i + 1 :]: + if line_b == line_a: + continue + midpoint = _flush_run((a1, a2), (b1, b2)) + if midpoint is None: + continue + anchor = _nearest_vertex(expected.get(line_a, ()), midpoint) + if anchor is None: + continue + assigned = _perp_gap(anchor, expected.get(line_b, ())) + if assigned is None or assigned < _PITCH_MIN: + continue + pair = tuple(sorted((line_a, line_b))) + key = (pair[0], pair[1], round(midpoint[0]), round(midpoint[1])) + if key in seen: + continue + seen.add(key) + findings.append( + RenderFinding( + OFFSET_COLLAPSE, + line_a, + "", + f"lines {pair[0]!r} and {pair[1]!r} draw flush near " + f"({midpoint[0]:.1f},{midpoint[1]:.1f}) but the offset regime " + f"spread them by {assigned:.1f}px", + (a1, a2), + ) + ) + return findings + + +def _expected_line_segments(graph: MetroGraph) -> dict[str, list[_Segment]]: + """The post-offset routed segments the engine assigns, grouped by line.""" + from nf_metro.layout.routing import compute_station_offsets, route_edges + from nf_metro.layout.routing.common import apply_route_offsets + + offsets = compute_station_offsets(graph) + try: + routes = route_edges(graph, station_offsets=offsets) + except Exception: # noqa: BLE001 - routing failure surfaces on the render path + return {} + segments: dict[str, list[_Segment]] = {} + for routed in routes: + pts = apply_route_offsets(routed, offsets) + line = segments.setdefault(routed.line_id, []) + for i in range(len(pts) - 1): + line.append((pts[i], pts[i + 1])) + return segments + + +def _flush_run(a: _Segment, b: _Segment) -> _Point | None: + """Midpoint of the stretch where *a* and *b* run collinear and flush. + + ``None`` unless the two segments are parallel, perpendicular-closer than + ``_FLUSH_TOL``, and overlap for at least ``_RUN_MIN`` along their shared + direction (so a mere corner touch never counts). + """ + (ax1, ay1), (ax2, ay2) = a + ux, uy = ax2 - ax1, ay2 - ay1 + length = (ux * ux + uy * uy) ** 0.5 + if length < _RUN_MIN: + return None + ux, uy = ux / length, uy / length + (bx1, by1), (bx2, by2) = b + if abs((bx2 - bx1) * uy - (by2 - by1) * ux) > 1e-3 * length: + return None + if abs((bx1 - ax1) * (-uy) + (by1 - ay1) * ux) >= _FLUSH_TOL: + return None + t0 = (bx1 - ax1) * ux + (by1 - ay1) * uy + t1 = (bx2 - ax1) * ux + (by2 - ay1) * uy + lo = max(0.0, min(t0, t1)) + hi = min(length, max(t0, t1)) + if hi - lo < _RUN_MIN: + return None + mid = (lo + hi) / 2 + return (ax1 + ux * mid, ay1 + uy * mid) + + +def _nearest_vertex( + segments: tuple[_Segment, ...] | list[_Segment], point: _Point +) -> _Point | None: + best: _Point | None = None + best_d = 0.0 + for (x1, y1), (x2, y2) in segments: + for vx, vy in ((x1, y1), (x2, y2)): + d = (vx - point[0]) ** 2 + (vy - point[1]) ** 2 + if best is None or d < best_d: + best, best_d = (vx, vy), d + return best + + +def _perp_gap( + point: _Point, segments: tuple[_Segment, ...] | list[_Segment] +) -> float | None: + """Shortest distance from *point* to any segment it projects onto.""" + best: float | None = None + px, py = point + for (x1, y1), (x2, y2) in segments: + dx, dy = x2 - x1, y2 - y1 + length_sq = dx * dx + dy * dy + if length_sq < 1e-9: + continue + t = ((px - x1) * dx + (py - y1) * dy) / length_sq + if t < -0.05 or t > 1.05: + continue + cx, cy = x1 + t * dx, y1 + t * dy + d = ((px - cx) ** 2 + (py - cy) ** 2) ** 0.5 + if best is None or d < best: + best = d + return best + + +def validate_render( + svg: str, *, graph: MetroGraph | None = None +) -> list[RenderFinding]: + """Run the render-geometry guards on a rendered SVG and return findings. + + Reads the embedded manifest for node identities and parses the drawn route + and label ink, then checks the geometry as drawn for label strikes and + non-consumer marker crossings (both pure artifact oracles). When the + laid-out *graph* is supplied it additionally checks for offset-pitch + collapse, which needs the engine's assigned offsets to tell an intended + same-slot bundle from a real merge. Returns an empty list for a clean + render, or when the SVG carries no manifest (nothing addressable to + validate). + """ + manifest = read_manifest(svg) + if manifest is None: + return [] + routes = parse_route_polylines(svg) + findings = check_label_strikes(svg, manifest, routes) + findings += check_marker_crossings(svg, manifest, routes) + if graph is not None: + findings += check_offset_collapse(graph, routes) + return findings diff --git a/src/nf_metro/themes/__init__.py b/src/nf_metro/themes/__init__.py index 9da17e204..c16ae0c64 100644 --- a/src/nf_metro/themes/__init__.py +++ b/src/nf_metro/themes/__init__.py @@ -1,11 +1,74 @@ -"""Theme definitions for metro maps.""" +"""Theme definitions for metro maps. -from nf_metro.themes.nfcore import NFCORE_THEME +Brand and mode are orthogonal axes. ``THEMES`` is the flat by-name registry +(every brand and every concrete variant, for ``--theme``/``style:`` lookup). +``THEME_MODES`` groups brands into their ``{light, dark}`` pairs so a brand can +be resolved against an independently chosen mode, and so the renderer can emit +both palettes from a single render. +""" + +from nf_metro.render.style import Theme from nf_metro.themes.light import LIGHT_THEME +from nf_metro.themes.nfcore import ( + NFCORE_DARK_THEME, + NFCORE_LIGHT_THEME, + NFCORE_THEME, +) +from nf_metro.themes.seqera import ( + SEQERA_DARK_THEME, + SEQERA_LIGHT_THEME, + SEQERA_THEME, +) + +# Mode used when a single concrete palette must be baked and none was chosen +# (e.g. PNG raster). Applies equally to every brand - no brand is intrinsically +# light or dark. SVG output carries both palettes and adapts at view time, so +# this only governs raster/standalone fallback. +DEFAULT_MODE = "dark" + +# Brand -> mode -> Theme. The renderer reads a resolved theme's ``brand`` here to +# recover both mode palettes for ``light-dark()`` emission; the resolver reads it +# to combine a brand with an independently chosen mode. +THEME_MODES: dict[str, dict[str, Theme]] = { + "nfcore": {"dark": NFCORE_DARK_THEME, "light": NFCORE_LIGHT_THEME}, + "seqera": {"dark": SEQERA_DARK_THEME, "light": SEQERA_LIGHT_THEME}, +} +# Flat by-name registry for direct ``--theme`` / ``style:`` selection. Bare brand +# names resolve to the brand at ``DEFAULT_MODE``; the suffixed names pin a mode. THEMES = { - "nfcore": NFCORE_THEME, + "nfcore": THEME_MODES["nfcore"][DEFAULT_MODE], + "nfcore-light": NFCORE_LIGHT_THEME, + "nfcore-dark": NFCORE_DARK_THEME, + "seqera": THEME_MODES["seqera"][DEFAULT_MODE], + "seqera-light": SEQERA_LIGHT_THEME, + "seqera-dark": SEQERA_DARK_THEME, "light": LIGHT_THEME, } -__all__ = ["THEMES", "NFCORE_THEME", "LIGHT_THEME"] + +def mode_pair(theme: Theme) -> tuple[Theme, Theme] | None: + """Return ``(light_theme, dark_theme)`` for *theme*'s brand family. + + ``None`` when the theme has no registered light/dark family (e.g. the + transparent ``light`` theme), so callers fall back to a single palette. + """ + family = THEME_MODES.get(theme.brand) + if family is None or "light" not in family or "dark" not in family: + return None + return family["light"], family["dark"] + + +__all__ = [ + "THEMES", + "THEME_MODES", + "DEFAULT_MODE", + "mode_pair", + "LIGHT_THEME", + "NFCORE_THEME", + "NFCORE_DARK_THEME", + "NFCORE_LIGHT_THEME", + "SEQERA_THEME", + "SEQERA_LIGHT_THEME", + "SEQERA_DARK_THEME", +] diff --git a/src/nf_metro/themes/light.py b/src/nf_metro/themes/light.py index d894aca7b..a3ef448b9 100644 --- a/src/nf_metro/themes/light.py +++ b/src/nf_metro/themes/light.py @@ -4,22 +4,26 @@ LIGHT_THEME = Theme( name="light", - background_color="#f5f5f5", + background_color="none", station_fill="#ffffff", station_stroke="#333333", station_radius=6.0, station_stroke_width=2.0, - line_width=4.0, + line_width=3.0, label_color="#333333", label_font_family="'Helvetica Neue', Helvetica, Arial, sans-serif", - label_font_size=11.0, + label_font_size=14.0, + label_font_weight="bold", title_color="#111111", - title_font_size=20.0, - section_fill="rgba(0, 0, 0, 0.03)", - section_stroke="rgba(0, 0, 0, 0.1)", + title_font_size=26.0, + section_fill="#ededed", + section_stroke="#e6e6e6", section_label_color="#666666", - section_label_font_size=13.0, + section_label_font_size=17.0, legend_background="rgba(255, 255, 255, 0.8)", legend_text_color="#333333", - legend_font_size=12.0, + legend_font_size=16.0, + animation_ball_color="#ffffff", + animation_ball_stroke="#333333", + animation_ball_stroke_width=1.5, ) diff --git a/src/nf_metro/themes/nfcore.py b/src/nf_metro/themes/nfcore.py index ed228ad14..10a9a3ac8 100644 --- a/src/nf_metro/themes/nfcore.py +++ b/src/nf_metro/themes/nfcore.py @@ -1,25 +1,55 @@ -"""nf-core dark grey theme (matching reference metro map style).""" +"""nf-core brand theme (the reference metro-map look), in light and dark modes. + +Brand identity (fonts, weights, line/station geometry) is shared across modes; +the light variant is the dark one with only its chrome palette - the surfaces +and ink behind the routes - swapped, so the two stay in lockstep by construction. +""" + +from dataclasses import replace from nf_metro.render.style import Theme -NFCORE_THEME = Theme( - name="nfcore", +NFCORE_DARK_THEME = Theme( + name="nfcore-dark", + brand="nfcore", + mode="dark", background_color="#2b2b2b", station_fill="#ffffff", station_stroke="#333333", - station_radius=5.0, + marker_stroke="#f0f0f0", station_stroke_width=1.5, line_width=3.0, label_color="#e0e0e0", label_font_family="'Helvetica Neue', Helvetica, Arial, sans-serif", - label_font_size=10.0, + label_font_size=13.0, + label_font_weight="bold", title_color="#ffffff", - title_font_size=18.0, - section_fill="rgba(255, 255, 255, 0.06)", - section_stroke="rgba(255, 255, 255, 0.2)", - section_label_color="#aaaaaa", - section_label_font_size=10.0, + title_font_size=24.0, + section_fill="#373737", + section_stroke="#595959", + section_label_color="#c8c8c8", + section_label_font_size=16.0, legend_background="rgba(0, 0, 0, 0.3)", legend_text_color="#e0e0e0", - legend_font_size=11.0, + legend_font_size=14.0, + animation_ball_color="#ffffff", + animation_ball_stroke="#333333", + animation_ball_stroke_width=1.5, ) + +NFCORE_LIGHT_THEME = replace( + NFCORE_DARK_THEME, + name="nfcore-light", + mode="light", + background_color="#f5f5f5", + marker_stroke="#333333", + label_color="#333333", + title_color="#111111", + section_fill="#ededed", + section_stroke="#e6e6e6", + section_label_color="#666666", + legend_background="rgba(255, 255, 255, 0.8)", + legend_text_color="#333333", +) + +NFCORE_THEME = NFCORE_DARK_THEME diff --git a/src/nf_metro/themes/seqera.py b/src/nf_metro/themes/seqera.py new file mode 100644 index 000000000..a07e675c4 --- /dev/null +++ b/src/nf_metro/themes/seqera.py @@ -0,0 +1,70 @@ +"""Seqera Platform brand theme, in light and dark modes. + +Light-mode colors are sourced from the Seqera Platform design system +(tower-web/src/styles/_variables.scss): + + $app-brand-seqera: #160F26 - Seqera brand dark navy (title color) + $body-background: #f8f9fa - Platform body background + $app-purple-neutral-1: #F3F3F4 - lightest Seqera-tinted neutral (section fill) + $app-purple-neutral-2: #E8E7E9 - second step (section border) + $app-purple-neutral-10: #2D273C - dark brand purple (station stroke) + $app-purple-neutral-3: #D0CFD4 - mid neutral (section border) + $clr-border: #dee2e6 - Platform default border + $app-grey-neutral-black: #242424 - Platform primary text + $app-text-muted: #6c757d - Platform muted/secondary text + +The dark variant keeps the Inter type and the brand station/line identity, +swapping only the chrome palette: it steps down from the same brand navy +(#160F26) into deep purple-greys. +""" + +from dataclasses import replace + +from nf_metro.render.style import Theme + +SEQERA_LIGHT_THEME = Theme( + name="seqera-light", + brand="seqera", + mode="light", + background_color="#f8f9fa", + station_fill="#ffffff", + station_stroke="#2D273C", + marker_stroke="#2D273C", + station_stroke_width=2.0, + line_width=4.0, + label_color="#242424", + label_font_family=( + "'Inter Variable', Inter, 'Helvetica Neue', Helvetica, Arial, sans-serif" + ), + label_font_size=14.0, + label_font_weight="600", + title_color="#160F26", + title_font_size=26.0, + section_fill="#F3F3F4", + section_stroke="#D0CFD4", + section_label_color="#6c757d", + section_label_font_size=17.0, + legend_background="rgba(248, 249, 250, 0.9)", + legend_text_color="#242424", + legend_font_size=16.0, + animation_ball_color="#ffffff", + animation_ball_stroke="#2D273C", + animation_ball_stroke_width=1.5, +) + +SEQERA_DARK_THEME = replace( + SEQERA_LIGHT_THEME, + name="seqera-dark", + mode="dark", + background_color="#1a1625", + marker_stroke="#7b6ea6", + label_color="#e0d9f7", + title_color="#f0ecff", + section_fill="#231e30", + section_stroke="#3d3650", + section_label_color="#9d94b8", + legend_background="rgba(0, 0, 0, 0.4)", + legend_text_color="#e0d9f7", +) + +SEQERA_THEME = SEQERA_DARK_THEME diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..50a88988d --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,182 @@ +"""Shared test fixtures and helpers for nf-metro test suite.""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.convert import convert_nextflow_dag +from nf_metro.layout.engine import compute_layout +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import MetroGraph + +# --- Graph text constants --- + +SIMPLE_LINEAR_TEXT = ( + "%%metro line: main | Main | #ff0000\n" + "graph LR\n" + " a[A]\n" + " b[B]\n" + " c[C]\n" + " a -->|main| b\n" + " b -->|main| c\n" +) + +DIAMOND_TEXT = ( + "%%metro line: main | Main | #ff0000\n" + "%%metro line: alt | Alt | #0000ff\n" + "graph LR\n" + " a[A]\n" + " b[B]\n" + " c[C]\n" + " d[D]\n" + " a -->|main| b\n" + " b -->|main| d\n" + " a -->|alt| c\n" + " c -->|alt| d\n" +) + +TWO_SECTION_TEXT = ( + "%%metro line: main | Main | #ff0000\n" + "graph LR\n" + " subgraph sec1 [Section One]\n" + " a[A]\n" + " b[B]\n" + " a -->|main| b\n" + " end\n" + " subgraph sec2 [Section Two]\n" + " c[C]\n" + " d[D]\n" + " c -->|main| d\n" + " end\n" + " b -->|main| c\n" +) + + +# --- Shared constants --- + +# The content-placement phases wrapped by _run_placement / _run_placement_per_row +# in _compute_section_layout (the set guarded by _guard_anchors_frozen). Shared so +# the anchor-frozen test and the idempotence test enumerate the same set and a new +# phase can't be added to one without the other. +CONTENT_PLACEMENT_PHASES = ( + "_redistribute_fanout_siblings", # Stage 4.9 + "_redistribute_full_bundle_columns", # Stage 4.10 + "_fan_free_content_upward", # Stage 6.1 + "_fan_source_inputs_upward", # Stage 6.2 + "_apply_half_grid_2branch_symfan", # Stage 6.3 + "_recenter_full_bundle_columns", # Stage 6.7 + "_balance_section_content_around_trunk", # Stage 6.11 + "_recenter_loop_side_stations", # Stage 6.12 +) + + +# --- Render corpus --- + +_ROOT = Path(__file__).parent.parent +_EXAMPLES = _ROOT / "examples" +_NEXTFLOW = _ROOT / "tests" / "fixtures" / "nextflow" + + +def content_corpus() -> list[tuple[str, Path, bool]]: + """``(fixture_id, path, is_nextflow)`` for every ``.mmd`` in the render + corpus -- the gallery examples, topology/guide fixtures, test fixtures and + the Nextflow-DAG fixtures (which need ``convert_nextflow_dag`` first). + + Shared by the declarative-property tests (idempotence and purity) so they + exercise the same fixtures. + + Fixtures with a ``rails`` line-spread section are excluded: a rail section's + internal geometry is produced by the self-contained rail pipeline (which + overwrites the normal content-placement phases), so the per-phase + idempotence/purity contract those tests assert does not apply to it. + """ + + def _uses_rails(path: Path) -> bool: + return "line_spread: rails" in path.read_text() + + items: list[tuple[str, Path, bool]] = [] + for d, tag in [ + (_EXAMPLES, "examples"), + (_EXAMPLES / "topologies", "topologies"), + (_EXAMPLES / "guide", "guide"), + (_ROOT / "tests" / "fixtures", "tests"), + ]: + for p in sorted(d.glob("*.mmd")): + if _uses_rails(p): + continue + items.append((f"{tag}/{p.stem}", p, False)) + for p in sorted(_NEXTFLOW.glob("*.mmd")): + items.append((f"nextflow/{p.stem}", p, True)) + return items + + +def compute_corpus_layout(path: Path, is_nextflow: bool) -> MetroGraph: + """Parse a corpus ``.mmd`` (converting from a Nextflow DAG first when + ``is_nextflow``) and run the validated layout, returning the graph.""" + text = path.read_text() + if is_nextflow: + text = convert_nextflow_dag(text) + graph = parse_metro_mermaid(text) + compute_layout(graph, validate=True) + return graph + + +# --- Mutable-geometry snapshot/restore --- + +Coords = dict[str, tuple[float, float]] + + +def snapshot_graph_state(graph: MetroGraph) -> tuple[Coords, Coords]: + """Capture every station ``(x, y)`` and section ``(bbox_y, bbox_h)``.""" + stations = {sid: (s.x, s.y) for sid, s in graph.stations.items()} + bboxes = {sec.id: (sec.bbox_y, sec.bbox_h) for sec in graph.sections.values()} + return stations, bboxes + + +def restore_graph_state(graph: MetroGraph, snap: tuple[Coords, Coords]) -> None: + """Write a :func:`snapshot_graph_state` result back onto ``graph``.""" + stations, bboxes = snap + for sid, (x, y) in stations.items(): + st = graph.stations.get(sid) + if st is not None: + st.x, st.y = x, y + for sid, (y, h) in bboxes.items(): + sec = graph.sections.get(sid) + if sec is not None: + sec.bbox_y, sec.bbox_h = y, h + + +# --- Parse/layout helpers --- + + +def parse_and_layout(text: str, **kwargs) -> MetroGraph: + """Parse Mermaid text and run the full layout pipeline. + + Accepts keyword arguments passed to compute_layout (e.g. x_spacing, y_spacing). + """ + graph = parse_metro_mermaid(text) + compute_layout(graph, **kwargs) + return graph + + +# --- Pytest fixtures --- + + +@pytest.fixture +def simple_linear_graph() -> MetroGraph: + """A 3-node linear chain: a -> b -> c on one line.""" + return parse_metro_mermaid(SIMPLE_LINEAR_TEXT) + + +@pytest.fixture +def diamond_graph() -> MetroGraph: + """A 4-node diamond: a -> {b, c} -> d on two lines.""" + return parse_metro_mermaid(DIAMOND_TEXT) + + +@pytest.fixture +def two_section_graph() -> MetroGraph: + """Two sections with one inter-section edge, laid out.""" + return parse_and_layout(TWO_SECTION_TEXT) diff --git a/tests/data/guard_golden_baseline.json b/tests/data/guard_golden_baseline.json new file mode 100644 index 000000000..a98bf6bb7 --- /dev/null +++ b/tests/data/guard_golden_baseline.json @@ -0,0 +1,49889 @@ +{ + "examples/centered_tracks.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/cross_track_interchange.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/diagonal_labels.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/differentialabundance.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/differentialabundance_default.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/directional_flow.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/disconnected_components.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/epitopeprediction.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/file_icons.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/genomeassembly.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/genomeassembly_staggered.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/genomic_pipeline.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/group_labels.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/01_minimal.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/02_sections.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/03_fan_out.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/03b_fan_in_merge.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/04_directions.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/05_file_icons.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/05b_multi_icons.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/05c_files_icon.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/05d_folder_icon.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/05f_banner_labels.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/06a_without_hidden.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/06b_with_hidden.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/guide/07_track_gap.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/hlatyping.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/legend_combo.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/legend_logo_placement.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/line_spread.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/longread_variant_calling.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/marker_styles.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/off_track_outputs.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/rail_mode.mmd": { + "raised": null, + "trace": [] + }, + "examples/rail_section.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/rnaseq_auto.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/rnaseq_sections.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/rnaseq_sections_manual.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/sarek_metro.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/simple_pipeline.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/tb_file_termini.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/aligner_row_pinned_continuation.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/around_below_ep_col_gt0.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/around_section_below.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/asymmetric_tree.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bottom_row_climb_clear_corridor.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/branch_fold_forward.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/branch_fold_stability.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bt_chain.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bt_exit_top_above.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bt_exit_top_above_2line.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bt_fork.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bt_perp_entry_below.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bt_to_lr.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bt_to_tb.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bundle_terminator_continuation.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_fan_in_outer_slot.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_gap2_rightward_overflow.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_label_rake.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_label_rake_left.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_label_rake_wide.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_leftward_far_side_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_leftward_overflow.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/bypass_v_tight.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/clear_channel_target_aware_push.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/compact_gap_peer_conflict.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/compact_hidden_passthrough.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/complex_multipath.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/convergence_fold_diamond.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/convergence_sink_fold.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/convergence_stacked_sink.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/convergent_offrow_exit_climb.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/corridor_narrow_gap_fallback.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/cross_col_top_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/cross_column_perp_drop.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/cross_column_perp_drop_far_exit.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/cross_row_gap_wrap.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/deep_linear.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/disconnected_components_fold.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/disjoint_sameline_trunks.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/divergent_fanout_split.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/dogleg_exempt_distinct.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/dogleg_exempt_sameline.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/dogleg_twoline_fanout.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/exit_corner_offset_dogleg.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fan_bypass_nesting.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fan_in_merge.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fold_bypass_creep.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fold_bypass_creep_tight.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fold_double.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fold_fan_across.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fold_left_exit_right_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fold_split_targets.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/fold_stacked_branch.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/foldback_exit_peeloff.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/funcprofiler_upstream.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/header_nudge.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/header_side_rotated.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/inrow_skip_breeze.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/inter_row_wrap_clearance.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/interchange_lane_reorder.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/internal_source_equal_sibling_2fan.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/junction_entry_align.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/junction_entry_collision.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/junction_entry_reversed_fold.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/junction_fanout_convergence.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/left_entry_up_wrap.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/left_exit_sink_below.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_bottom_exit_rl_top_entry_jog.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_perp_bottom_exit_perp_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_perp_bottom_exit_side_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_perp_top_exit_perp_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_perp_top_exit_perp_entry_diverging.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_perp_top_exit_side_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_to_tb_top_cross_col.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_to_tb_top_drop.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_to_tb_top_drop_two_lines.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_to_tb_top_near_vertical.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_to_tb_top_two_lines.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_top_entry_cross_column.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/lr_top_entry_cross_column_two_line.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/manual_rl_row_nonconsumer_bypass.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_around_below_leftmost.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_bottom_row_bypass.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_leftmost_sink_branch.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_offrow_continuation.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_port_above_approach.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_pullaway.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_right_entry.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_trunk_out_of_range_section.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/merge_trunk_over_low_section.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/mismatched_tracks.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/mixed_bundle_column.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/mixed_port_sides.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/multi_input_convergence.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/multi_line_bundle.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/multi_section_cell.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/multicarrier_offrow_exit_climb.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/near_vertical_junction_hook.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/off_track_convergence.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/off_track_convergence_multiline.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/off_track_input_above_consumer.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/packed_cell_cellmate_bypass.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/packed_cell_cellmate_bypass_adjacent.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/parallel_independent.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/peeloff_extra_line_consumer.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/peeloff_riser_respace.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/post_convergence_trunk.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/rail_inter_section.mmd": { + "raised": null, + "trace": [] + }, + "examples/topologies/rail_offtrack_fan.mmd": { + "raised": null, + "trace": [] + }, + "examples/topologies/rail_offtrack_io.mmd": { + "raised": null, + "trace": [] + }, + "examples/topologies/rail_offtrack_plain_io.mmd": { + "raised": null, + "trace": [] + }, + "examples/topologies/reconverge_reversed_fold.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/right_entry_from_above.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/right_entry_from_above_far.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/right_entry_gap_above_empty_row.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/right_entry_wrap_no_fan.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/rl_entry_runway.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/rnaseq_lite.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/route_around_intervening.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/same_side_culdesac.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/section_diamond.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/sectionless_skip_breeze.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/self_crossing_bridge.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/serpentine_grid_tall_bundle.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/serpentine_grid_wide_bundle.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/serpentine_rl_bundle.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/shared_sink_parallel.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/single_section.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/stacked_left_exit_drop.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/stacked_lr_serpentine.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/symmetric_diamond_beside_wide_fan.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_bottom_entry_flow_start.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_bottom_exit_bundle_jog.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_bottom_exit_fork_diamond.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_column_continuation_two_lines.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_convergence_straight_drop.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_fork_lane_transpose.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_internal_diagonal.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_left_exit_step.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_lr_exit_left.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_lr_exit_right.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_passthrough_continuation.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_passthrough_trunk.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_perp_exit_side_neighbour.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_right_entry_stack.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_trunk_through_fan.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/tb_two_line_vert_seam.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/terminal_symmetric_fan.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/terminus_join.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/top_entry_header_clash.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/trunk_through_fan.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/u_turn_fold.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/uneven_diamond.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/upward_bypass.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/variant_calling.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/wide_fan_in.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/wide_fan_out.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/wide_label_fan.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/topologies/wrapped_label_trunk.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/variant_calling.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/variant_calling_tuned.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/variantbenchmarking.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/variantbenchmarking_auto.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "examples/variantprioritization.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/bubble_forced_label_clears_diagonal.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/bubble_label_clears_diagonal.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/bubble_output_above.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/captioned_sibling_outputs.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/da_pipeline.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/diagonal_single_trunk_off_track.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/file_icon_fanin.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/font_scale.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/genomeassembly_organellar.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/icon_caption_wrap.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/leaf_file_icon_on_trunk.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/multiline_labels.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/off_track_output_branched.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/off_track_outputs_along_trunk.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/rail_diagonal_labels.mmd": { + "raised": null, + "trace": [] + }, + "tests/fixtures/rail_marked_single_line.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/rail_marker_fill.mmd": { + "raised": null, + "trace": [] + }, + "tests/fixtures/rail_marker_subset_interchange.mmd": { + "raised": null, + "trace": [] + }, + "tests/fixtures/rail_pitch_vs_labels.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/rail_single_line_callers.mmd": { + "raised": null, + "trace": [] + }, + "tests/fixtures/rnaseq_sections.mmd": { + "raised": [ + "PhaseInvariantError", + "after Stage 6.4: station 'fastp' marker bbox (x=456.5, y=60.0..70.0, half_h=5.0) outside section 'preprocessing' bbox (22.0, 70.0, w=772.5, h=140.0)" + ], + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4" + ] + }, + "tests/fixtures/rnaseq_simple.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/tb_right_exit_feeder_slots.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/topologies/twoline_fanout_up.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/trunk_align_matching_bundle.mmd": { + "raised": null, + "trace": [ + "_guard_no_same_row_backward_feed|None", + "_guard_no_mixed_entry_directions|None", + "_guard_section_bboxes_positive|after Stage 1.1", + "_guard_no_negative_grid_columns|after Stage 1.1", + "_guard_explicit_grid_directions|after Stage 1.1", + "_guard_fold_relocated_flow_ports_face_connections|after Stage 1.1", + "_guard_tall_anchor_stack_well_formed|after Stage 1.1", + "_guard_independent_components_disjoint|after Stage 1.3", + "_guard_multi_section_cell_packed|after Stage 1.3", + "_guard_coordinates_finite|after Stage 2.1", + "_guard_stations_in_sections|after Stage 2.1", + "_guard_section_bboxes_positive|after Stage 2.1", + "_guard_ports_on_boundaries|after Stage 3.1", + "_guard_ports_on_boundaries|after top-align", + "_guard_anchors_frozen_during_placement|Stage 4.9 _redistribute_fanout_siblings", + "_guard_anchors_frozen_during_placement|Stage 4.10 _redistribute_full_bundle_columns", + "_guard_coordinates_finite|after Stage 5.2", + "_guard_section_bboxes_positive|after Stage 5.2", + "_guard_ports_on_boundaries|after Stage 5.2", + "_guard_station_x_column_drift|after Stage 5.2", + "_guard_coordinates_finite|after Stage 5.3", + "_guard_section_bboxes_positive|after Stage 5.3", + "_guard_stations_in_sections|after Stage 5.3", + "_guard_ports_on_boundaries|after Stage 5.3", + "_guard_station_x_column_drift|after Stage 5.3", + "_guard_coordinates_finite|after Stage 5.4", + "_guard_section_bboxes_positive|after Stage 5.4", + "_guard_stations_in_sections|after Stage 5.4", + "_guard_ports_on_boundaries|after Stage 5.4", + "_guard_station_x_column_drift|after Stage 5.4", + "_guard_coordinates_finite|after Stage 5.5", + "_guard_section_bboxes_positive|after Stage 5.5", + "_guard_stations_in_sections|after Stage 5.5", + "_guard_ports_on_boundaries|after Stage 5.5", + "_guard_station_x_column_drift|after Stage 5.5", + "_guard_anchors_frozen_during_placement|Stage 6.1 _fan_free_content_upward", + "_guard_coordinates_finite|after Stage 6.1", + "_guard_section_bboxes_positive|after Stage 6.1", + "_guard_stations_in_sections|after Stage 6.1", + "_guard_ports_on_boundaries|after Stage 6.1", + "_guard_station_x_column_drift|after Stage 6.1", + "_guard_anchors_frozen_during_placement|Stage 6.2 _fan_source_inputs_upward", + "_guard_coordinates_finite|after Stage 6.2", + "_guard_section_bboxes_positive|after Stage 6.2", + "_guard_stations_in_sections|after Stage 6.2", + "_guard_ports_on_boundaries|after Stage 6.2", + "_guard_station_x_column_drift|after Stage 6.2", + "_guard_anchors_frozen_during_placement|Stage 6.3 _apply_half_grid_2branch_symfan", + "_guard_coordinates_finite|after Stage 6.3", + "_guard_section_bboxes_positive|after Stage 6.3", + "_guard_stations_in_sections|after Stage 6.3", + "_guard_ports_on_boundaries|after Stage 6.3", + "_guard_station_x_column_drift|after Stage 6.3", + "_guard_coordinates_finite|after Stage 6.4", + "_guard_section_bboxes_positive|after Stage 6.4", + "_guard_stations_in_sections|after Stage 6.4", + "_guard_ports_on_boundaries|after Stage 6.4", + "_guard_no_station_overlap|after Stage 6.4", + "_guard_no_coincident_station_coords|after Stage 6.4", + "_guard_station_x_column_drift|after Stage 6.4", + "_guard_coordinates_finite|after Stage 6.5", + "_guard_section_bboxes_positive|after Stage 6.5", + "_guard_stations_in_sections|after Stage 6.5", + "_guard_ports_on_boundaries|after Stage 6.5", + "_guard_no_station_overlap|after Stage 6.5", + "_guard_no_coincident_station_coords|after Stage 6.5", + "_guard_station_x_column_drift|after Stage 6.5", + "_guard_coordinates_finite|after Stage 6.6", + "_guard_section_bboxes_positive|after Stage 6.6", + "_guard_stations_in_sections|after Stage 6.6", + "_guard_ports_on_boundaries|after Stage 6.6", + "_guard_no_station_overlap|after Stage 6.6", + "_guard_no_coincident_station_coords|after Stage 6.6", + "_guard_station_x_column_drift|after Stage 6.6", + "_guard_anchors_frozen_during_placement|Stage 6.7 _recenter_full_bundle_columns", + "_guard_coordinates_finite|after Stage 6.9", + "_guard_section_bboxes_positive|after Stage 6.9", + "_guard_stations_in_sections|after Stage 6.9", + "_guard_ports_on_boundaries|after Stage 6.9", + "_guard_no_station_overlap|after Stage 6.9", + "_guard_no_coincident_station_coords|after Stage 6.9", + "_guard_station_x_column_drift|after Stage 6.9", + "_guard_coordinates_finite|after Stage 6.10", + "_guard_section_bboxes_positive|after Stage 6.10", + "_guard_stations_in_sections|after Stage 6.10", + "_guard_ports_on_boundaries|after Stage 6.10", + "_guard_no_station_overlap|after Stage 6.10", + "_guard_no_coincident_station_coords|after Stage 6.10", + "_guard_station_x_column_drift|after Stage 6.10", + "_guard_anchors_frozen_during_placement|Stage 6.11 _balance_section_content_around_trunk", + "_guard_coordinates_finite|after Stage 6.11", + "_guard_section_bboxes_positive|after Stage 6.11", + "_guard_stations_in_sections|after Stage 6.11", + "_guard_ports_on_boundaries|after Stage 6.11", + "_guard_no_station_overlap|after Stage 6.11", + "_guard_no_coincident_station_coords|after Stage 6.11", + "_guard_station_x_column_drift|after Stage 6.11", + "_guard_anchors_frozen_during_placement|Stage 6.12 _recenter_loop_side_stations", + "_guard_coordinates_finite|after Stage 6.12", + "_guard_section_bboxes_positive|after Stage 6.12", + "_guard_stations_in_sections|after Stage 6.12", + "_guard_ports_on_boundaries|after Stage 6.12", + "_guard_no_station_overlap|after Stage 6.12", + "_guard_no_coincident_station_coords|after Stage 6.12", + "_guard_station_x_column_drift|after Stage 6.12", + "_guard_coordinates_finite|after Stage 6.13", + "_guard_section_bboxes_positive|after Stage 6.13", + "_guard_stations_in_sections|after Stage 6.13", + "_guard_ports_on_boundaries|after Stage 6.13", + "_guard_no_station_overlap|after Stage 6.13", + "_guard_no_coincident_station_coords|after Stage 6.13", + "_guard_station_x_column_drift|after Stage 6.13", + "_guard_coordinates_finite|after Stage 6.14", + "_guard_section_bboxes_positive|after Stage 6.14", + "_guard_stations_in_sections|after Stage 6.14", + "_guard_ports_on_boundaries|after Stage 6.14", + "_guard_no_station_overlap|after Stage 6.14", + "_guard_no_coincident_station_coords|after Stage 6.14", + "_guard_no_line_crosses_non_consumer|after Stage 6.14", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.14", + "_guard_station_x_column_drift|after Stage 6.14", + "_guard_coordinates_finite|after Stage 6.15", + "_guard_section_bboxes_positive|after Stage 6.15", + "_guard_stations_in_sections|after Stage 6.15", + "_guard_ports_on_boundaries|after Stage 6.15", + "_guard_no_station_overlap|after Stage 6.15", + "_guard_no_coincident_station_coords|after Stage 6.15", + "_guard_no_line_crosses_non_consumer|after Stage 6.15", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.15", + "_guard_station_x_column_drift|after Stage 6.15", + "_guard_coordinates_finite|after Stage 6.16", + "_guard_section_bboxes_positive|after Stage 6.16", + "_guard_stations_in_sections|after Stage 6.16", + "_guard_ports_on_boundaries|after Stage 6.16", + "_guard_no_station_overlap|after Stage 6.16", + "_guard_no_coincident_station_coords|after Stage 6.16", + "_guard_no_line_crosses_non_consumer|after Stage 6.16", + "_guard_sparse_loop_station_clears_column_neighbour|after Stage 6.16", + "_guard_station_x_column_drift|after Stage 6.16", + "_guard_coordinates_finite|after final", + "_guard_section_bboxes_positive|after final", + "_guard_stations_in_sections|after final", + "_guard_ports_on_boundaries|after final", + "_guard_no_station_overlap|after final", + "_guard_no_coincident_station_coords|after final", + "_guard_no_line_crosses_non_consumer|after final", + "_guard_sparse_loop_station_clears_column_neighbour|after final", + "_guard_station_x_column_drift|after final", + "_guard_row_trunk_cy_consistent|after final", + "_guard_off_track_clear_of_anchor|after final", + "_guard_fanout_junction_shares_exit_port_y|after final", + "_guard_fanout_junction_resolves_upstream|after final", + "_guard_entry_port_fed_only_by_ports|after final", + "_guard_flow_exit_anchored_to_carrier|after final", + "_guard_fold_lr_exit_follows_target|after final", + "_guard_fold_lr_exit_sections_share_bbox_bottom|after final", + "_guard_stacked_rows_fill_rowspan_band|after final", + "_guard_perp_fed_entry_anchored_to_consumer|after final", + "_guard_corridor_fed_solo_rides_trunk|after final", + "_guard_perp_entry_clears_vertical_trunk_head|after final", + "_guard_post_convergence_trunk_continues|after final", + "_guard_perp_entry_feed_not_collinear|after final", + "_guard_merge_port_approach_side|after final", + "_guard_convergence_shallow_feeder_concentric|after final", + "_guard_merge_port_outgoing_side_preserved|after final", + "_guard_exit_inherits_entry_bundle_order|after final", + "_guard_bypass_port_no_slot_gaps|after final", + "_guard_partial_branch_offset_gaps|after final", + "_guard_row_gaps|after final", + "_guard_section_top_padding|after final", + "_guard_terminus_icons_within_bbox|after final", + "_guard_inter_section_routes_in_row_band|after final", + "_guard_topmost_row_top_entry_hugs_section|after final", + "_guard_off_track_output_clears_non_producer|after final", + "_guard_tb_exit_corner_column_order|after final", + "_guard_no_split_same_line_fanout_descents|after final", + "_guard_no_distinct_line_fanout_crossing|after final", + "_guard_fan_merge_no_partition_crossing|after final", + "_guard_trunk_continuation_drops_straight|after final", + "_guard_no_dogleg_crosses_exempt_trunk|after final", + "_guard_no_stacked_elbow_graze|after final", + "_guard_fanout_tail_join|after final", + "_guard_perp_entry_boundary_consistent|after final", + "_guard_perp_exit_over_leadin_no_overdip|after final", + "_guard_right_entry_drop_in_when_clear|after final", + "_guard_right_entry_corridor_descent_no_jog|after final", + "_guard_inter_section_route_no_backtrack|after final", + "_guard_inter_section_route_no_full_width_backtrack|after final", + "_guard_routes_enter_sections_at_ports|after final", + "_guard_rail_connector_ports_no_stub|after final", + "_guard_no_route_through_section|after final", + "_guard_inter_section_route_clears_own_section_interior|after final", + "_guard_feeder_exits_section_through_side|after final", + "_guard_entry_approach_from_port_side|after final", + "_guard_no_opposing_line_overlap|after final", + "_guard_serpentine_no_backtrack|after final", + "_guard_no_artefactual_counter_flow|after final", + "_guard_inter_row_run_clearance|after final", + "_guard_trunk_bands_crossing_optimal|after final", + "_guard_inter_section_descent_edge_clearance|after final", + "_guard_fan_bundles_coincide_or_separate|after final", + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + }, + "tests/fixtures/uneven_diamond.mmd": { + "raised": null, + "trace": [ + "_guard_no_label_overlap|final", + "_guard_no_diagonal_strikes_horizontal_label|final", + "_guard_no_line_strikes_label|final", + "_guard_bypass_v_flat_visible|final", + "_guard_no_wrapped_label_trunk_strike|final", + "_guard_file_icon_no_name_label|final", + "_guard_no_line_crosses_file_icon|final", + "_guard_centered_line_spread_balanced|final", + "_guard_rail_above_label_band|final", + "_guard_rail_stations_seat_on_rails|final", + "_guard_rail_one_station_per_column|final", + "_guard_single_trunk_off_track_step|final", + "_guard_off_track_consumer_on_trunk|final", + "_guard_off_track_input_column_stack|final", + "_guard_interchange_bar_clears_non_members|final", + "_guard_tb_top_entry_drop_hugs_top|final", + "_guard_symmetric_diamond_branches_straddle_trunk|final", + "_guard_symmetric_diamond_branches_half_pitch|final" + ] + } +} diff --git a/tests/data/routing_gate_coverage_baseline.json b/tests/data/routing_gate_coverage_baseline.json new file mode 100644 index 000000000..96ae1bf5f --- /dev/null +++ b/tests/data/routing_gate_coverage_baseline.json @@ -0,0 +1,327 @@ +[ + "bundle.py::if abs(dx) > COORD_TOLERANCE and abs(dy) > COORD_TOLERANCE:::#1", + "bundle.py::if n_legs < 1:::#1", + "bundle.py::if n_legs < 1:::#2", + "bundle.py::if n_legs < 1:::#3", + "bundle.py::if not 0 <= transition_leg <= n_legs:::#1", + "common.py::elif tgt_sec:::#1", + "common.py::for e in graph.edges:::#1", + "common.py::for e in graph.edges_to(station.id):::#1", + "common.py::for i in range(len(pts) - 1):::#1", + "common.py::if abs(point[0] - ax) <= tol and abs(point[1] - ay) <= tol:::#1", + "common.py::if abs(point[0] - proj_x) <= tol and abs(point[1] - proj_y) <= tol:::#1", + "common.py::if abs(pts[k + 2][0] - x1) > COORD_TOLERANCE:::#1", + "common.py::if abs(pts[k - 1][0] - x0) > COORD_TOLERANCE:::#1", + "common.py::if abs(y4 - y3) > COORD_TOLERANCE or abs(x4 - x3) <= COORD_TOLERANCE:::#1", + "common.py::if all_in_range:::#1", + "common.py::if bundle_index < 0 or bundle_index >= n:::#1", + "common.py::if dx > 0:::#1", + "common.py::if dy > 0:::#2", + "common.py::if dy > 0:::#3", + "common.py::if e.source == station.id:::#1", + "common.py::if endpoints:::#1", + "common.py::if len(signs) != 1:::#1", + "common.py::if n == 0:::#1", + "common.py::if not facing:::#1", + "common.py::if not secs:::#2", + "common.py::if not src or not tgt:::#1", + "common.py::if other and other.section_id:::#1", + "common.py::if other and other.section_id:::#2", + "common.py::if right > left and left - tol <= x <= right + tol:::#1", + "common.py::if s.bbox_h <= 0:::#1", + "common.py::if sec.bbox_w <= 0:::#1", + "common.py::if sec:::#1", + "common.py::if sec:::#2", + "common.py::if seg_len2 == 0:::#1", + "common.py::if src and not src.is_port:::#1", + "common.py::if src_row is not None:::#1", + "common.py::if st is not None and st.is_port:::#1", + "common.py::if station is None:::#1", + "common.py::if t < -0.01 or t > 1.01:::#1", + "common.py::if top is None or bottom is None:::#1", + "common.py::if trunk_ys[-1] - trunk_ys[0] <= COORD_TOLERANCE:::#1", + "context.py::for e in graph.edges:::#3", + "context.py::for e in graph.edges_from(mjid):::#1", + "context.py::for pid in section.entry_ports:::#1", + "context.py::for sid in section.station_ids:::#1", + "context.py::if _has_intervening_sections(::#1", + "context.py::if ctx.station_offsets:::#1", + "context.py::if edge.line_id in line_pos:::#1", + "context.py::if ep and ep.is_entry:::#1", + "context.py::if ep and ep.is_entry:::#2", + "context.py::if jst is None:::#1", + "context.py::if len(reach) < 2:::#1", + "context.py::if len(sources) != 1:::#1", + "context.py::if len({d > 0 for d in drow.values()}) != 1:::#1", + "context.py::if line_id in graph.station_lines(pid):::#1", + "context.py::if m_col is not None:::#1", + "context.py::if m_col is not None:::#2", + "context.py::if not ctx.station_offsets:::#1", + "context.py::if not jst:::#1", + "context.py::if not mst:::#1", + "context.py::if not pred:::#1", + "context.py::if not src or not tgt:::#1", + "context.py::if not station.is_port:::#1", + "context.py::if not tgt or not (tgt.is_port or edge.target in junction_ids):::#1", + "context.py::if port is not None:::#1", + "context.py::if port.section_id is None:::#1", + "context.py::if port_st is None:::#1", + "context.py::if psec is None or pst is None:::#1", + "context.py::if psec is None:::#1", + "context.py::if sec and sec.grid_col >= 0:::#1", + "context.py::if sec and sec.grid_row >= 0:::#1", + "context.py::if sec is None:::#1", + "context.py::if section is None:::#1", + "context.py::if src_col is None or src_row is None:::#1", + "context.py::if src_col is None:::#1", + "context.py::if st is None:::#1", + "context.py::if succ_port and succ_port.is_entry:::#1", + "context.py::if tcol is None or trow is None:::#1", + "context.py::if tgt is None or not (tgt.is_port or edge.target in graph.junction_ids):::#1", + "context.py::if tgt_col is None:::#1", + "context.py::if tgt_col is None:::#2", + "core.py::if not src or not tgt:::#1", + "core.py::if result is not None:::#1", + "inter_section.py::for prev, curr in zip(self.corners, self.corners[1:]):::#1", + "inter_section.py::if (self.in_tangent, self.out_tangent) in _CW_TURNS:::#1", + "inter_section.py::if pair not in _CW_TURNS and pair not in _CCW_TURNS:::#1", + "inter_section.py::if prev.handedness != curr.handedness:::#1", + "inter_section_handlers.py::and f.src_row is not None::#1", + "inter_section_handlers.py::and f.tgt_row is not None::#1", + "inter_section_handlers.py::and gap_right - around_xmax >= SECTION_ROUTE_CLEARANCE::#1", + "inter_section_handlers.py::and src_sec is not None::#1", + "inter_section_handlers.py::and tgt_sec is not None::#1", + "inter_section_handlers.py::elif abs(dx) > ctx.curve_radius:::#1", + "inter_section_handlers.py::elif gap_bottom > gap_top:::#1", + "inter_section_handlers.py::for je in ctx.graph.edges_to(src.id):::#1", + "inter_section_handlers.py::if (::#2", + "inter_section_handlers.py::if _corridor_is_viable(ctx, src, ep):::#1", + "inter_section_handlers.py::if _corridor_is_viable(ctx, src, tgt):::#1", + "inter_section_handlers.py::if _v_segment_crosses_other_section(graph, corner_x, src.y, ey, exclude):::#1", + "inter_section_handlers.py::if _v_segment_crosses_other_section(graph, dx, src.y, tgt.y, exclude):::#1", + "inter_section_handlers.py::if _would_route_around_section_below(other, ctx):::#1", + "inter_section_handlers.py::if abs(ep.y - f.sy) < ctx.curve_radius:::#1", + "inter_section_handlers.py::if abs(js.x - src.x) <= COORD_TOLERANCE:::#1", + "inter_section_handlers.py::if col_left <= 0.0:::#1", + "inter_section_handlers.py::if ctx.station_offsets:::#1", + "inter_section_handlers.py::if cur in graph.junctions:::#1", + "inter_section_handlers.py::if entry_port is None:::#1", + "inter_section_handlers.py::if entry_port is None:::#2", + "inter_section_handlers.py::if ep_port and ep_port.side == PortSide.LEFT:::#1", + "inter_section_handlers.py::if ep_port is None or ep_port.side != PortSide.LEFT:::#2", + "inter_section_handlers.py::if ep_section and ep_section.bbox_w > 0:::#1", + "inter_section_handlers.py::if f.horizontal is Direction.L:::#1", + "inter_section_handlers.py::if fan is None and gap_bottom > gap_top:::#1", + "inter_section_handlers.py::if fan is not None and ep_col is not None:::#1", + "inter_section_handlers.py::if fan is not None:::#4", + "inter_section_handlers.py::if gap_right <= gap_left:::#1", + "inter_section_handlers.py::if js and js.is_port:::#1", + "inter_section_handlers.py::if min(drop_xs) < _section_right_edge(graph, tgt) - COORD_TOLERANCE:::#1", + "inter_section_handlers.py::if not _inter_row_band_fits(gap_top, gap_bottom):::#1", + "inter_section_handlers.py::if not normalize_exempt:::#1", + "inter_section_handlers.py::if port.side == PortSide.LEFT:::#1", + "inter_section_handlers.py::if route is None:::#1", + "inter_section_handlers.py::if route is None:::#2", + "inter_section_handlers.py::if route is not None:::#1", + "inter_section_handlers.py::if route is not None:::#2", + "inter_section_handlers.py::if section and section.bbox_w > 0:::#1", + "inter_section_handlers.py::if section and section.bbox_w > 0:::#2", + "inter_section_handlers.py::if shared_vx is not None:::#1", + "inter_section_handlers.py::if src is None or tgt is None:::#1", + "inter_section_handlers.py::if src.id in ctx.graph.junctions:::#1", + "inter_section_handlers.py::if src_col is not None and src_col > 0:::#1", + "inter_section_handlers.py::if src_row is None or ep_row is None or src_col is None or ep_col is None:::#1", + "inter_section_handlers.py::if src_sec is not None and src_sec.bbox_w > 0:::#1", + "inter_section_handlers.py::if sx >= (left_edge + right_edge) / 2:::#1", + "inter_section_handlers.py::if tgt is None:::#1", + "inter_section_handlers.py::if tgt_col is not None:::#1", + "inter_section_handlers.py::if trunk_src is None or trunk_src == edge.source:::#1", + "inter_section_handlers.py::if trunk_v_up_pull_away:::#1", + "inter_section_handlers.py::if vx is None:::#1", + "inter_section_handlers.py::this_xmin - gap_left >= SECTION_ROUTE_CLEARANCE::#1", + "inter_section_handlers.py::while cur is not None and cur not in seen:::#1", + "intra_handlers.py::elif section.direction == \"RL\" and tx < st.x < sx:::#1", + "intra_handlers.py::if abs(tgt.x - src.x) >= COORD_TOLERANCE:::#1", + "intra_handlers.py::if first_x is None or st.x > first_x:::#1", + "intra_handlers.py::if not (same_sec or is_exit_port):::#1", + "intra_handlers.py::if not (tgt.x - src.x <= 0 and abs(dy) > CROSS_ROW_THRESHOLD and not same_section):::#1", + "intra_handlers.py::if not section:::#1", + "intra_handlers.py::if not st or st.is_port:::#1", + "intra_handlers.py::if room < src_min + ctx.diagonal_run:::#1", + "intra_handlers.py::if section.direction == \"RL\" and port.side != PortSide.RIGHT:::#1", + "intra_handlers.py::if section.direction not in (\"LR\", \"RL\"):::#1", + "normalize.py::and gt is not None::#1", + "normalize.py::elif above_ok:::#1", + "normalize.py::elif below_ok and (not above_ok or prefer_below):::#1", + "normalize.py::elif down_ok and (not up_ok or prefer_down):::#1", + "normalize.py::elif far_y < t.y - COORD_TOLERANCE:::#1", + "normalize.py::elif right_ok:::#1", + "normalize.py::elif up_ok:::#1", + "normalize.py::for _ in range(8):::#1", + "normalize.py::for grp in groups:::#3", + "normalize.py::for k, x, y_lo, y_hi, seg_down in iter_vertical_segments(rp):::#1", + "normalize.py::for sign in (1, -1):::#1", + "normalize.py::go is not None::#1", + "normalize.py::if 0 <= k - 1 < len(rp.curve_radii):::#1", + "normalize.py::if 0 <= k - 1 < len(rp.curve_radii):::#2", + "normalize.py::if 0 <= radius_idx < len(rp.curve_radii):::#1", + "normalize.py::if abs(dx) > COORD_TOLERANCE:::#1", + "normalize.py::if abs(ly - pts[1][1]) < COORD_TOLERANCE:::#1", + "normalize.py::if abs(x3 - x2) > COORD_TOLERANCE or abs(y3 - y2) <= COORD_TOLERANCE:::#1", + "normalize.py::if band is not None:::#1", + "normalize.py::if band is not None:::#2", + "normalize.py::if below_ok and above_ok and (cross_below is None) != (cross_above is None):::#1", + "normalize.py::if best < cur:::#1", + "normalize.py::if ch is None:::#3", + "normalize.py::if ch is not None:::#1", + "normalize.py::if col is None:::#1", + "normalize.py::if down is None or len(up.points) < 2:::#1", + "normalize.py::if down_ok and up_ok and (cross_down is None) != (cross_up is None):::#1", + "normalize.py::if feats is None:::#1", + "normalize.py::if gap_right <= gap_left:::#1", + "normalize.py::if k < len(rp.curve_radii) and k + 2 < len(pts):::#1", + "normalize.py::if k < len(rp.curve_radii) and k + 2 < len(pts):::#2", + "normalize.py::if len(pts) < 2:::#1", + "normalize.py::if len(slots) < 2 or len(slots) > _MAX_BAND_PERMUTE:::#1", + "normalize.py::if len(trunks) < 2:::#1", + "normalize.py::if len({id(t.route) for t in grp}) < 2:::#2", + "normalize.py::if not 0 <= far < len(pts):::#1", + "normalize.py::if not any(not t.route.normalize_exempt for t in grp):::#2", + "normalize.py::if not votes:::#1", + "normalize.py::if rep_x[a] != rep_x[b]:::#1", + "normalize.py::if right <= left:::#1", + "normalize.py::if rp is None:::#1", + "normalize.py::if rp.curve_radii is None:::#1", + "normalize.py::if rp.curve_radii is None:::#2", + "normalize.py::if rp.curve_radii is None:::#3", + "normalize.py::if s.bbox_w <= 0:::#1", + "normalize.py::if s.bbox_w <= 0:::#2", + "normalize.py::if s.bbox_w <= 0:::#3", + "normalize.py::if sg[0].sign_x != t.sign_x:::#1", + "normalize.py::if trunk_ch is None:::#1", + "normalize.py::if trunk_rp is None or trunk_src_st is None:::#1", + "offsets.py::elif feeding_exit != edge.source:::#1", + "offsets.py::for _ in range(max_iterations):::#1", + "offsets.py::for edge in graph.edges_from(port_id):::#1", + "offsets.py::for edge in graph.edges_to(jid):::#2", + "offsets.py::for edge in graph.edges_to(pid):::#2", + "offsets.py::for lid, off in desired.items():::#1", + "offsets.py::for lid, off in desired.items():::#2", + "offsets.py::for other in lines:::#1", + "offsets.py::for other_lid in nbr_lines:::#1", + "offsets.py::for pid in section.entry_ports:::#2", + "offsets.py::for succ in dag.successors.get(stack.pop(), ()):::#1", + "offsets.py::if (::#3", + "offsets.py::if (cur_sid, cur_lid) in visited:::#1", + "offsets.py::if (tgt_id, lid) not in ctx.offsets:::#1", + "offsets.py::if abs(exit_st.y - j_st.y) <= _SAME_Y_TOLERANCE:::#1", + "offsets.py::if abs(nbr_cur - new_off) < _OFFSET_EQ_TOLERANCE:::#1", + "offsets.py::if all(::#1", + "offsets.py::if anchor_feeders:::#1", + "offsets.py::if col is None:::#1", + "offsets.py::if consumer is not None and not consumer.is_port:::#1", + "offsets.py::if cur in seen:::#1", + "offsets.py::if dag is not None:::#1", + "offsets.py::if e.line_id != lid:::#1", + "offsets.py::if edge.source in outbound:::#1", + "offsets.py::if edge.target in inbound:::#1", + "offsets.py::if entry.side not in (PortSide.LEFT, PortSide.RIGHT):::#1", + "offsets.py::if entry_port is None:::#1", + "offsets.py::if entry_section is None:::#1", + "offsets.py::if exit_lines == set(j_lines):::#1", + "offsets.py::if feeders is None:::#1", + "offsets.py::if feeding_exit is None:::#1", + "offsets.py::if graph.stations[peer_sid].is_hidden:::#1", + "offsets.py::if internal_offs:::#1", + "offsets.py::if len(nbr_lines) < 2:::#1", + "offsets.py::if len(set(feeder_row.values())) < 2:::#1", + "offsets.py::if len(shared) < 2:::#1", + "offsets.py::if lid in new_off:::#1", + "offsets.py::if lid not in seen:::#1", + "offsets.py::if max_steps <= 0:::#1", + "offsets.py::if max_steps <= 0:::#2", + "offsets.py::if neighbour is None:::#1", + "offsets.py::if new_order is None:::#2", + "offsets.py::if not all(lid in feeder_off for lid in continuing):::#1", + "offsets.py::if not all(lid in feeder_off for lid in primary_lines):::#1", + "offsets.py::if not any(::#1", + "offsets.py::if not offs:::#1", + "offsets.py::if not sec_stations:::#1", + "offsets.py::if not src or not src.is_port:::#1", + "offsets.py::if not src or not src.is_port:::#2", + "offsets.py::if not src or not tgt:::#1", + "offsets.py::if not src:::#1", + "offsets.py::if not target_id:::#1", + "offsets.py::if not target_st:::#1", + "offsets.py::if ordered != expected:::#1", + "offsets.py::if other_lid == cur_lid:::#1", + "offsets.py::if paired_off is not None:::#1", + "offsets.py::if port_off is not None:::#1", + "offsets.py::if port_st is None:::#1", + "offsets.py::if reverse:::#3", + "offsets.py::if seam is None:::#1", + "offsets.py::if sec_a is None and id_a in graph.ports:::#1", + "offsets.py::if sec_b is None and id_b in graph.ports:::#1", + "offsets.py::if section is None:::#1", + "offsets.py::if section is not None:::#1", + "offsets.py::if single_exit and feeding_exit is not None:::#1", + "offsets.py::if slot is None:::#1", + "offsets.py::if src and not src.is_port and src.section_id == sec_id:::#1", + "offsets.py::if src is None:::#1", + "offsets.py::if src_port and not src_port.is_entry:::#2", + "offsets.py::if src_st and not src_st.is_port:::#1", + "offsets.py::if src_st and not src_st.is_port:::#2", + "offsets.py::if succ not in affected:::#1", + "offsets.py::if swap_lid is None:::#1", + "offsets.py::if tgt_col is None:::#1", + "offsets.py::if tgt_st and not tgt_st.is_port:::#1", + "offsets.py::if trunk_feeder_id is not None:::#2", + "offsets.py::sec is None::#1", + "offsets.py::while cur is not None and cur not in seen:::#1", + "offsets.py::while stack:::#1", + "perp.py::if entry_port is None or not entry_port.is_entry:::#1", + "perp.py::if needs_perp_approach_fan(graph, entry_port.id):::#1", + "perp.py::if not feeders:::#1", + "postprocess.py::if abs(dx_diag) <= COORD_TOLERANCE_FINE:::#1", + "postprocess.py::if abs(other.y - station.y) > 1:::#1", + "postprocess.py::if abs(rp.points[-1][0] - old_x) < STATION_MOVE_TOLERANCE:::#1", + "postprocess.py::if abs(rp.points[0][0] - old_x) < STATION_MOVE_TOLERANCE:::#1", + "postprocess.py::if any(_is_chain_predecessor(graph, ctx, r.edge.source) for r in flat_in):::#1", + "postprocess.py::if any(_is_internal_station(graph, r.edge.target) for r in flat_out):::#1", + "postprocess.py::if ctx.station_offsets is None:::#1", + "postprocess.py::if in_rp and len(ctx.diag_out_targets.get(in_rp.edge.source, set())) > 1:::#1", + "postprocess.py::if majority_count <= len(moved) / 2:::#1", + "postprocess.py::if max(moved_xs) - min(moved_xs) <= 1.0:::#1", + "postprocess.py::if multi_diag:::#1", + "postprocess.py::if multi_diag:::#2", + "postprocess.py::if not is_fork_join and (::#1", + "postprocess.py::if not multi_diag:::#1", + "postprocess.py::if not other or other.is_port or other.is_hidden:::#1", + "postprocess.py::if not outliers:::#1", + "postprocess.py::if ox is None:::#1", + "rail.py::if conn is not None:::#1", + "rail.py::if exit_port.side is not PortSide.RIGHT or entry_port.side is not PortSide.LEFT:::#1", + "rail.py::if line_id in section_rails:::#1", + "rail.py::if line_id in served and len(st.rail_used_ys) == len(served):::#1", + "rail.py::if sib_rails:::#1", + "rail.py::if src is None or tgt is None:::#1", + "rail.py::if st is None:::#1", + "rail.py::if up is None or down is None:::#1", + "reversal.py::elif src.is_port:::#1", + "reversal.py::if entry and entry.section_id and entry.section_id != src.section_id:::#1", + "reversal.py::if jid in seen:::#1", + "reversal.py::if not s2 or not s2.is_port:::#1", + "reversal.py::if not section:::#1", + "reversal.py::if not src or not src.is_port:::#1", + "reversal.py::if not src or not tgt:::#1", + "reversal.py::if not src:::#1", + "reversal.py::if not succ:::#1", + "reversal.py::if port and port.is_entry:::#1", + "reversal.py::if receiver not in reversed_secs:::#1", + "reversal.py::or (sec_id, succ_id) in horizontal_succ_pairs::#1", + "seam.py::if feeder is None or consumer is None:::#1", + "tb_handlers.py::if crossing_x is not None:::#1", + "tb_handlers.py::if diag_end < diag_start:::#1", + "tb_handlers.py::if diag_end > diag_start:::#1", + "tb_handlers.py::if tgt_sec is not None and tgt_sec.direction not in (\"TB\", \"BT\"):::#1" +] diff --git a/tests/data/routing_gate_triage.json b/tests/data/routing_gate_triage.json new file mode 100644 index 000000000..25c59ef5b --- /dev/null +++ b/tests/data/routing_gate_triage.json @@ -0,0 +1,990 @@ +{ + "bundle.py::if n_legs < 1:::#1": { + "note": "Defensive guard: build_concentric_bundle rejects a centreline of fewer than two vertices. Every caller (route_along / route_straight and the handler centrelines) builds a >=2-vertex polyline, so the raise arm is never taken.", + "status": "defensive" + }, + "bundle.py::if n_legs < 1:::#2": { + "note": "Defensive guard: build_tapered_bundle rejects a centreline of fewer than two vertices, mirroring build_concentric_bundle. Every caller passes a >=2-vertex centreline, so the raise arm is never taken.", + "status": "defensive" + }, + "bundle.py::if n_legs < 1:::#3": { + "note": "Defensive guard: build_offset_bundle rejects a centreline of fewer than two vertices, mirroring build_concentric_bundle and build_tapered_bundle. Every caller passes a >=2-vertex centreline, so the raise arm is never taken.", + "status": "defensive" + }, + "bundle.py::if not 0 <= transition_leg <= n_legs:::#1": { + "note": "Defensive guard: build_tapered_bundle rejects a transition_leg outside [0, n_legs]. Handlers pass a literal 1 against a 3- or 4-vertex centreline, so the raise arm is never taken.", + "status": "defensive" + }, + "common.py::elif tgt_sec:::#1": { + "note": "The else (col_key=round(sx)) needs an L-shaped (dx!=0,dy!=0) inter edge whose target resolves to no section. Only exit_port->junction edges lack a target section, and junction positioning makes those axis-aligned (same-X RIGHT exit or same-Y BOTTOM exit), never L-shaped, so the else is unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "common.py::for e in graph.edges:::#1": { + "note": "No-preference graph.edges scan loop-exit: a fan-out junction always has a sectioned incident port (its exit/entry ports carry a section_id), so the loop always returns and never exhausts graph.edges; the fall-through to the type-contract return None is the never-taken no-neighbour fallback.", + "status": "defensive" + }, + "common.py::for e in graph.edges_to(station.id):::#1": { + "note": "Upstream edges_to loop-exit: every fan-out junction is emitted with an exit_port->junction edge whose source carries the source section id, so the upstream loop always returns; the fall-through to the type-contract return None is the never-taken no-upstream fallback.", + "status": "defensive" + }, + "common.py::for i in range(len(pts) - 1):::#1": { + "note": "point_on_polyline is used only by the --animate renderer (render/animate.py); the matrix's render-path coverage sweep calls render_svg without animation, so none of its branches are reached. Exercised instead by test_animation.py / test_routing.py.", + "status": "defensive" + }, + "common.py::if abs(point[0] - ax) <= tol and abs(point[1] - ay) <= tol:::#1": { + "note": "point_on_polyline zero-length-segment hit test, reached only via the --animate renderer; the render-path coverage sweep doesn't animate. Exercised by test_animation.py / test_routing.py.", + "status": "defensive" + }, + "common.py::if abs(point[0] - proj_x) <= tol and abs(point[1] - proj_y) <= tol:::#1": { + "note": "point_on_polyline projection hit test, reached only via the --animate renderer; the render-path coverage sweep doesn't animate. Exercised by test_animation.py / test_routing.py.", + "status": "defensive" + }, + "common.py::if abs(pts[k + 2][0] - x1) > COORD_TOLERANCE:::#1": { + "note": "Mirror of the prev-flank guard: a bypass trunk's trailing flank is always vertical, so the next-flank-non-vertical reject in iter_horizontal_trunks is unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "common.py::if abs(pts[k - 1][0] - x0) > COORD_TOLERANCE:::#1": { + "note": "Interior horizontal segments only occur in 6-point bypass U-shapes whose flanking legs are always vertical (same x on each side); routes with non-vertical flanks are normalize_exempt and filtered out. The prev-flank-non-vertical reject in iter_horizontal_trunks is unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "common.py::if abs(y4 - y3) > COORD_TOLERANCE or abs(x4 - x3) <= COORD_TOLERANCE:::#1": { + "note": "Trunk-not-horizontal guard in port_peeloff_tail, reached only after the earlier port-lead and riser checks returned early. In an orthogonal route segments alternate H/V, so the segment preceding a vertical riser is always horizontal; instrumenting the corpus the guard is reached but the non-horizontal-trunk arm never fires. Defensive against a degenerate collinear tail the router does not produce.", + "status": "defensive" + }, + "common.py::if all_in_range:::#1": { + "note": "cross_row bypass guard: the False arm (no sections in the column range -> return clearance) needs an empty [lo,hi] column span, which a valid multi-section pipeline routing cross_row never has; a degenerate-range guard.", + "status": "defensive" + }, + "common.py::if bundle_index < 0 or bundle_index >= n:::#1": { + "note": "Contract guard raising IndexError on an out-of-range bundle_index. Callers always pass an in-range index (0<=i 0:::#1": { + "note": "Leftward (dx<=0) near-source fallback: the symmetric mirror of the rightward fallback. Reached only when section info is unavailable AND no adjacent column resolves; valid layouts take the rightward fallback, but the leftward mirror is kept for robustness.", + "status": "defensive" + }, + "common.py::if dy > 0:::#2": { + "note": "Multi-row upward-crossing arm: grid rows are assigned topologically and upward inter-section routes take other handlers (a same-row/around-section path), never reaching inter_row_channel_y's multi-row branch with dy<=0; verified by an upward multi-row fixture that bypasses this code.", + "status": "defensive" + }, + "common.py::if dy > 0:::#3": { + "note": "Near-target fallback block, gated behind the L801 resolve guard: since every call resolves to different-row sections (see that entry), the fallback is never reached, so neither dy arm fires.", + "status": "defensive" + }, + "common.py::if e.source == station.id:::#1": { + "note": "Junction-as-source arm of the no-preference scan: fan-out junctions are emitted exit_port->junction before junction->entry_port, so graph.edges encounters the junction as a target (elif arm) first and returns; the source arm is a cheap structural guard whose deadness rests on emit order, not a hard type invariant.", + "status": "defensive" + }, + "common.py::if endpoints:::#1": { + "note": "Non-cross_row bypass guard: the endpoints list always includes the source and target sections (both in src_row), so it is never empty; the default-clearance arm only guards a degenerate empty endpoint set.", + "status": "defensive" + }, + "common.py::if len(signs) != 1:::#1": { + "note": "Mixed-peel-end guard in iter_port_peeloff_bundles: a concentric peel-off bundle into a LEFT entry port is always fed from the left, so every member's trunk traverses toward the peel corner with the same trunk_sign. Lines approaching from the right of the port form an entry-wrap route, not a peel-off tail (verified: a right-side source produces zero peel tails), so the bundle never mixes signs. Belt-and-suspenders beyond the contiguity check.", + "status": "defensive" + }, + "common.py::if n == 0:::#1": { + "note": "Empty-bundle guard: all callers (normalize.py 291/1648, inter_section_handlers.py 783/796/2132) derive bundle_widths from a non-empty bundle line count, so n is always >=1; the empty-list arm is never taken.", + "status": "defensive" + }, + "common.py::if not secs:::#2": { + "note": "row_bottom_edge empty-result guard: every caller passes a grid row (optionally col-filtered) that contains the routed source/target section after layout, so the section list is never empty; the default-return arm is a guard valid layouts never take.", + "status": "defensive" + }, + "common.py::if not src or not tgt:::#1": { + "note": "Null-endpoint guard: the parser creates a Station for every edge endpoint, so graph.stations.get() never returns None for a real edge; the continue arm only guards a malformed graph.", + "status": "defensive" + }, + "common.py::if other and other.section_id:::#1": { + "note": "edges_to upstream guard: a junction's incoming neighbour is always an exit_port with section_id set, so the False (continue) arm only guards a junction-to-junction edge that valid construction never produces.", + "status": "defensive" + }, + "common.py::if other and other.section_id:::#2": { + "note": "prefer_upstream=False neighbour guard: a junction's neighbours are always sectioned ports, so the False (continue) arm only guards a junction-to-junction edge valid construction never produces.", + "status": "defensive" + }, + "common.py::if sec.bbox_w <= 0:::#1": { + "note": "Zero-width-section guard: the loop scans all graph.sections, but after compute_layout every placed section has bbox_w>0, so the skip arm only guards an empty/unplaced section that valid layouts don't produce.", + "status": "defensive" + }, + "common.py::if sec:::#1": { + "note": "edges_to section-lookup guard: graph.sections.get(section_id) returning None requires a section_id absent from graph.sections, a corrupted state no valid parse produces; null-guard.", + "status": "defensive" + }, + "common.py::if sec:::#2": { + "note": "prefer_upstream=False section-lookup guard: graph.sections.get(section_id) returning None requires a missing section_id (corrupted state); null-guard.", + "status": "defensive" + }, + "common.py::if seg_len2 == 0:::#1": { + "note": "point_on_polyline degenerate-segment branch, reached only via the --animate renderer (render/animate.py); the render-path coverage sweep doesn't animate. Exercised by test_animation.py / test_routing.py, not the corpus.", + "status": "defensive" + }, + "common.py::if src and not src.is_port:::#1": { + "note": "Null/port-source guard: edges to an exit port always originate at an internal (non-port) station after _resolve_sections, so the continue arm (None or port source) only guards a malformed pre-resolve graph.", + "status": "defensive" + }, + "common.py::if src_row is not None:::#1": { + "note": "Header-clamp guard: the False arm (src_row is None) needs an unresolvable source section, but inter-section bypass sources always resolve to a grid row after layout; a guard against an unresolved source that doesn't occur.", + "status": "defensive" + }, + "common.py::if st is not None and st.is_port:::#1": { + "note": "Null/non-port guard: after _resolve_sections both endpoints of an inter-section edge are ports/junctions and graph.stations.get() resolves them, so the False (None or non-port) arm only guards a malformed pre-resolve graph.", + "status": "defensive" + }, + "common.py::if station is None:::#1": { + "note": "None-station guard: every production caller passes a concrete Station (grep-verified); the None arm only guards the typed Station|None parameter.", + "status": "defensive" + }, + "common.py::if t < -0.01 or t > 1.01:::#1": { + "note": "point_on_polyline parameter-range branch, reached only via the --animate renderer; the render-path coverage sweep doesn't animate. Exercised by test_animation.py / test_routing.py.", + "status": "defensive" + }, + "common.py::if trunk_ys[-1] - trunk_ys[0] <= COORD_TOLERANCE:::#1": { + "note": "Degenerate single-Y trunk band in iter_port_peeloff_bundles: a peel-off bundle is yielded only when its members ride trunks at distinct depths, so the equal-depth arm guards a same-Y bundle the trunk-slot materialization never leaves; render-diff confirms no visual change.", + "status": "needs-review" + }, + "context.py::for e in graph.edges:::#3": { + "note": "In the public compute_junction_fan_info, called only from _guard_fan_bundles_coincide_or_separate (a validate=True guard). The coverage sweep renders with validate=False, so this function never runs on the render path; it is exercised by the layout-invariant test surface instead.", + "status": "defensive" + }, + "context.py::for e in graph.edges_from(mjid):::#1": { + "note": "The entry-port search finds the merge junction's sole entry-port successor on the first edge and breaks (real exit arc 139->147), so the loop never runs to exhaustion and the for-completion arm never fires.", + "status": "defensive" + }, + "context.py::if ctx.station_offsets:::#1": { + "note": "compute_station_offsets returns a 0.0 entry for every (station, line) of any graph with edges, so the render path always passes a non-empty dict; the falsy-return arm guards only the route_edges(station_offsets=None) call path used by tests, which the sweep never exercises.", + "status": "defensive" + }, + "context.py::if edge.line_id in line_pos:::#1": { + "note": "line_pos is built from the line IDs of the very all_outgoing list this loop iterates, so the membership test is always true: the reject/loop-back arm (L684) is an unreachable tautology and the enter-body static arc (L686) is a phantom of the real 685->687. Vestigial tautological guard. The deliberate gap is pinned by test_genuine_dead_arm_not_masked_as_covered (arc normalization must not merge the never-taken branch onto the live one). Reclassified defensive (#762).", + "status": "defensive" + }, + "context.py::if ep and ep.is_entry:::#1": { + "note": "The merge junction's only outgoing edge targets its entry port, so the first iteration matches and breaks; the loop-back arm (a non-entry edge before the entry port) never fires.", + "status": "defensive" + }, + "context.py::if ep and ep.is_entry:::#2": { + "note": "Same merge-junction invariant in the skip-edge pass: the junction's lone successor is its entry port, so the loop-back over a non-entry edge never fires.", + "status": "defensive" + }, + "context.py::if m_col is not None:::#1": { + "note": "Reached only for junctions in trunk_source, which by construction resolved a column, so m_col is never None and the no-column skip arm never fires.", + "status": "defensive" + }, + "context.py::if m_col is not None:::#2": { + "note": "As the first occurrence, in the index-exclude pass: a trunk-source junction always has a resolved column, so the no-column skip arm never fires.", + "status": "defensive" + }, + "context.py::if not ctx.station_offsets:::#1": { + "note": "Pairs with _get_offset's guard: compute_station_offsets is never empty on the render path, so _max_offset_at's early-return arm guards only the route_edges(station_offsets=None) call path used by tests.", + "status": "defensive" + }, + "context.py::if not jst:::#1": { + "note": "jid ranges over junction_ids, all present in graph.stations; the missing-station continue never fires.", + "status": "defensive" + }, + "context.py::if not mst:::#1": { + "note": "mjid ranges over junctions, a subset of junction_ids all present in graph.stations; the missing-station continue never fires.", + "status": "defensive" + }, + "context.py::if not pred:::#1": { + "note": "edge.source for an edge into the junction is always a present station; the missing-predecessor continue never fires.", + "status": "defensive" + }, + "context.py::if not src or not tgt:::#1": { + "note": "Edge endpoints are always present stations; the missing-endpoint continue never fires.", + "status": "defensive" + }, + "context.py::if not tgt or not (tgt.is_port or edge.target in junction_ids):::#1": { + "note": "A junction's outgoing inter-section edges always target a port or another junction (junctions are synthesised only on exit-port -> entry-port chains); the skip arm for a plain-station target never fires.", + "status": "defensive" + }, + "context.py::if port_st is None:::#1": { + "note": "Ports listed in a section's entry_ports/exit_ports always have a backing station; the missing-station continue never fires.", + "status": "defensive" + }, + "context.py::if sec and sec.grid_col >= 0:::#1": { + "note": "After section placement every resolved section carries a non-negative grid_col, so the None-return for an unplaced/missing column never fires.", + "status": "defensive" + }, + "context.py::if sec and sec.grid_row >= 0:::#1": { + "note": "After section placement every resolved section carries a non-negative grid_row, so the None-return for an unplaced/missing row never fires.", + "status": "defensive" + }, + "context.py::if sec is None:::#1": { + "note": "_resolve_section_colrow is called for ports/junctions that always resolve to a section; the None-section early-return never fires (mirrors the grid-sentinel guards at L395/L403).", + "status": "defensive" + }, + "context.py::if src_col is None:::#1": { + "note": "A fan-out junction always resolves to a grid column; the unresolved-column continue never fires.", + "status": "defensive" + }, + "context.py::if st is None:::#1": { + "note": "_col_for_id looks up junction and predecessor IDs that are always present in graph.stations; the missing-station early-return never fires.", + "status": "defensive" + }, + "context.py::if succ_port and succ_port.is_entry:::#1": { + "note": "A merge junction is defined as one whose single successor is the section entry port it was inserted before, so succ_port is always a present entry port; the reject arm (successor absent or non-entry) never fires.", + "status": "defensive" + }, + "context.py::if tgt_col is None:::#1": { + "note": "A merge junction always resolves to a grid column (it sits adjacent to its entry-port section); the unresolved-column continue never fires.", + "status": "defensive" + }, + "context.py::if tgt_col is None:::#2": { + "note": "A junction's port/junction target always resolves to a grid column; the unresolved-column continue never fires.", + "status": "defensive" + }, + "core.py::if not src or not tgt:::#1": { + "note": "Main edge-loop guard against a missing endpoint station. After section resolution every edge endpoint exists in graph.stations (parse _ensure_station's all referenced nodes; resolved chains insert their own ports/junctions), so the guard never fires and only the proceed-to-routing arm is reachable.", + "status": "defensive" + }, + "core.py::if result is not None:::#1": { + "note": "Append-guard after the priority-ordered handler chain. The final handler _route_intra_section is total: its three early returns and its _route_diagonal fallback (annotated -> RoutedPath, single return statement) always yield a RoutedPath, so result is never None and every edge appends. The None arm is unreachable.", + "status": "defensive" + }, + "inter_section.py::for prev, curr in zip(self.corners, self.corners[1:]):::#1": { + "note": "TurnSequence.parity loop over consecutive corners. parity is descriptor-level documentation (runtime wrap handlers preserve bundle ordering via per-corner offset propagation regardless of this value); nothing on the render path reads it, and the module is never imported during the sweep. Exercised by test_inter_section_descriptor.py.", + "status": "defensive" + }, + "inter_section.py::if (self.in_tangent, self.out_tangent) in _CW_TURNS:::#1": { + "note": "Corner.handedness property. Same module-load story: inter_section.py is never imported on the render path, so neither the CW nor the CCW arm is reachable by any render topology. Both branches are exercised by test_inter_section_descriptor.py.", + "status": "defensive" + }, + "inter_section.py::if pair not in _CW_TURNS and pair not in _CCW_TURNS:::#1": { + "note": "Corner.__post_init__ turn-validity check. inter_section.py is the descriptor/documentation module (distinct from inter_section_handlers.py); no src module imports it, so it never loads during the render-corpus sweep (confirmed absent from sys.modules after rendering the whole corpus) and both arms show 0 hits. Corner instances are module-level constants built from valid right-angle turns, so the raise can only fire on a source edit. Exercised by test_inter_section_descriptor.py.", + "status": "defensive" + }, + "inter_section.py::if prev.handedness != curr.handedness:::#1": { + "note": "Handedness-change counter inside TurnSequence.parity. Off the render path for the same reason (inter_section.py never loaded during rendering); both arms are exercised by test_inter_section_descriptor.py's parity-contract tests.", + "status": "defensive" + }, + "inter_section_handlers.py::elif gap_bottom > gap_top:::#1": { + "note": "Reachable only via a defective render (inter-row corridor on a <78px gap); see #722.", + "status": "needs-review" + }, + "inter_section_handlers.py::if _corridor_is_viable(ctx, src, ep):::#1": { + "note": "Reachable only via a defective render (route skirts/crosses section boundary); see #724.", + "status": "needs-review" + }, + "inter_section_handlers.py::if _corridor_is_viable(ctx, src, tgt):::#1": { + "note": "Reachable only via a defective render (inter-row corridor grazes the source section); see #722.", + "status": "needs-review" + }, + "inter_section_handlers.py::if _would_route_around_section_below(other, ctx):::#1": { + "note": "Competing-sibling detection in _has_around_section_sibling, routed through the dispatch table (#813). A non-bypass sibling feeding the same merge junction sits in an adjacent column or a gap with no same-row intervening section, so it dispatches to an L-shape, not the around-below loop; corpus instrumentation across the fixtures confirms the arm is never taken. Defensive.", + "status": "defensive" + }, + "inter_section_handlers.py::if _v_segment_crosses_other_section(graph, corner_x, src.y, ey, exclude):::#1": { + "note": "Drop-in viability test in _right_entry_drop_in_is_clear (#889). The cross-row RIGHT-entry rule fires only when the earlier bypass / plough rules ceded the edge, i.e. no section sits between source and port, so the outward-side descent runs clear; the not-clear arm covers only an exotic descent blocked by a wide same-column sibling no corpus fixture builds. Defensive.", + "status": "defensive" + }, + "inter_section_handlers.py::if not _inter_row_band_fits(gap_top, gap_bottom):::#1": { + "note": "Band-fit test in _right_entry_gap_above_is_clear (#889), reached only when the cross-row RIGHT-entry drop-in is not clear (the exotic blocked-descent case above). The corpus always takes the drop-in, so neither arm of the gap-above fallback is exercised. Defensive.", + "status": "defensive" + }, + "inter_section_handlers.py::if src is None or tgt is None:::#1": { + "note": "Endpoint lookup guard in _would_route_around_section_below; every edge endpoint is a registered station after parse+resolve, so graph.stations.get never returns None here. Defensive.", + "status": "defensive" + }, + "inter_section_handlers.py::if abs(ep.y - f.sy) < ctx.curve_radius:::#1": { + "note": "Merge entry-port Y tracks the source/junction Y, so a sub-curve_radius exit->entry gap never arises (the same-Y rule already handles dy defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "inter_section_handlers.py::if entry_port is None:::#1": { + "note": "_route_around_section_below is always called with a non-None entry_port (both dispatch sites pass a checked station).", + "status": "defensive" + }, + "inter_section_handlers.py::if entry_port is None:::#2": { + "note": "Every caller of _corridor_is_viable passes a non-None entry_port.", + "status": "defensive" + }, + "inter_section_handlers.py::if ep_port and ep_port.side == PortSide.LEFT:::#1": { + "note": "Contract guard in _route_inter_section: a merge entry port always resolves to a Port on the LEFT side here, so the non-LEFT/None arm (fall through to _route_l_shape at L344) is never taken (0/128). The earlier 'multiline phantom' note was inaccurate -- this is a recorded gate whose arm is never taken. Defensive guard. Reclassified defensive (#762).", + "status": "defensive" + }, + "inter_section_handlers.py::if ep_port is None or ep_port.side != PortSide.LEFT:::#2": { + "note": "Reachable only via a defective render (route skirts/crosses section boundary); see #724.", + "status": "needs-review" + }, + "inter_section_handlers.py::if ep_section and ep_section.bbox_w > 0:::#1": { + "note": "entry_port.section_id is always set and the section has bbox_w>0 after layout; the else arm never fires.", + "status": "defensive" + }, + "inter_section_handlers.py::if f.horizontal is Direction.L:::#1": { + "note": "Near-vertical same-column junction channel push: the junction always sits right of its same-column LEFT entry, so horizontal is always Direction.L; the Direction.R arm never fires (#762). Defensive.", + "status": "defensive" + }, + "inter_section_handlers.py::if fan is None and gap_bottom > gap_top:::#1": { + "note": "Reachable only via a defective render (inter-row corridor on a <78px gap); see #722.", + "status": "needs-review" + }, + "inter_section_handlers.py::if fan is not None and ep_col is not None:::#1": { + "note": "Reachable only via a defective render (inter-row corridor on a <78px gap); see #722.", + "status": "needs-review" + }, + "inter_section_handlers.py::if fan is not None:::#4": { + "note": "Reachable only via a defective render (inter-row corridor on a <78px gap); see #722.", + "status": "needs-review" + }, + "inter_section_handlers.py::if gap_right <= gap_left:::#1": { + "note": "The column-gap enforcer keeps inter-column gaps positive, so gap_right>gap_left always holds at the target row.", + "status": "defensive" + }, + "inter_section_handlers.py::if js and js.is_port:::#1": { + "note": "Reachable only via a defective render (LR->TB TOP-entry routing); see #720.", + "status": "needs-review" + }, + "inter_section_handlers.py::if shared_vx is not None:::#1": { + "note": "_fan_left_entry_descent_x returns None only when col_left<=0; col_left_edge for the target's own column is always >0.", + "status": "defensive" + }, + "inter_section_handlers.py::if src.id in ctx.graph.junctions:::#1": { + "note": "Reachable only via a defective render (LR->TB TOP-entry routing); see #720.", + "status": "needs-review" + }, + "inter_section_handlers.py::if src_row is None or ep_row is None or src_col is None or ep_col is None:::#1": { + "note": "_resolve_section_colrow returns (None,None) only for a station with no section; valid entry ports always have a section with non-negative grid coords.", + "status": "defensive" + }, + "inter_section_handlers.py::if src_sec is not None and src_sec.bbox_w > 0:::#1": { + "note": "A bypass source section always resolves and has bbox_w>0 (the parser never emits an empty section); the None/zero-width arm never fires.", + "status": "defensive" + }, + "inter_section_handlers.py::if tgt is None:::#1": { + "note": "Edge targets are always registered stations after resolve; the None arm never fires.", + "status": "defensive" + }, + "inter_section_handlers.py::if tgt_col is not None:::#1": { + "note": "tgt_col from _resolve_section_col on a valid LEFT entry port is always non-None (sections get grid_col>=0 after auto-layout).", + "status": "defensive" + }, + "inter_section_handlers.py::if trunk_src is None or trunk_src == edge.source:::#1": { + "note": "Reachable only via a defective render (merge-junction tangle); see #721.", + "status": "needs-review" + }, + "inter_section_handlers.py::if trunk_v_up_pull_away:::#1": { + "note": "Reachable only via a defective render (merge-junction tangle); see #721.", + "status": "needs-review" + }, + "inter_section_handlers.py::if vx is None:::#1": { + "note": "Reachable only via a defective render (inter-row corridor on a <78px gap); see #722.", + "status": "needs-review" + }, + "intra_handlers.py::if abs(tgt.x - src.x) >= COORD_TOLERANCE:::#1": { + "note": "_route_near_zero_gap_straight: a same-section, non-TB intra edge with |tgt.x - src.x| < COORD_TOLERANCE (1px) and non-zero dy is not constructible, so the straight-return (False) arm is never taken: layering assigns increasing X along edges so the minimum |dx| at _route_intra_section across the corpus is 50px (port spacing / off-track output lead). TB same-track edges that could reach |dx|=0 are intercepted by _route_tb_internal before this handler. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "intra_handlers.py::if not (tgt.x - src.x <= 0 and abs(dy) > CROSS_ROW_THRESHOLD and not same_section):::#1": { + "note": "_route_fold_edge: the not-same_section precondition is never satisfied at the intra-section handlers, so the fold (False) arm is never taken: cross-section edges are consumed by _route_inter_section upstream (0/391 corpus fixtures reach this branch with differing sections), and a sectionless flat graph's serpentine fold is routed before this handler too (verified: a flat fold over the threshold does not reach the arm). The cross-row fold branch is shadowed. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "intra_handlers.py::if not (same_sec or is_exit_port):::#1": { + "note": "_is_side_branch_ascent reaches this classification (44/391 corpus fixtures) but no fixture takes the reject arm: a target sitting within offset_step*2 of the source section's trunk Y is always a same-section internal station or that section's exit port. The arm needs a target at the source's trunk Y that belongs to a different section or is a non-exit port, which the trunk-alignment geometry does not produce. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "intra_handlers.py::if not section:::#1": { + "note": "_route_entry_runway only runs on an entry-port -> internal-station edge; the target of such an edge always carries a section_id that resolves, so the guard's return-None arm protects against a malformed graph rather than a topology.", + "status": "defensive" + }, + "intra_handlers.py::if not st or st.is_port:::#1": { + "note": "The loop already skips edge.target and every id in section.port_ids, so a surviving id resolves to a non-port internal station; the not-st / is_port re-check is belt-and-suspenders against a port absent from port_ids.", + "status": "defensive" + }, + "intra_handlers.py::if room < src_min + ctx.diagonal_run:::#1": { + "note": "The entry-runway 'too tight' return cannot fire: room = |first_x - entry_port_x| is floored at SECTION_X_PADDING (50px, the entry port sits at section.bbox_x = min(internal_station_x) - SECTION_X_PADDING), while the threshold src_min + diagonal_run = CURVE_RADIUS(10) + MIN_STRAIGHT_PORT(5) + DIAGONAL_RUN(30) = 45px. Since 50 >= 45 the guard is always False; SECTION_X_PADDING is not exposed as a directive. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "intra_handlers.py::if section.direction not in (\"LR\", \"RL\"):::#1": { + "note": "No TB/BT entry reaches _route_entry_runway: TB LEFT/RIGHT entries are consumed by _route_tb_lr_entry and TB/BT TOP/BOTTOM entries by _route_perp_entry (both earlier in the dispatch chain), and a BT section is never produced (the direction directive accepts only LR/RL/TB; 0/391 corpus sections are BT). Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "normalize.py::elif above_ok:::#1": { + "note": "Distinct-line dogleg move-up/skip branch: unreachable because the below branch is always taken (t.y == hit.y, below_ok true); covers both the move-up and the gap-too-tight continue.", + "status": "defensive" + }, + "normalize.py::elif below_ok and (not above_ok or prefer_below):::#1": { + "note": "Distinct-line dogleg tie fallback, reached only after L1341 is false (a tie), which a clean topology never produces (see that gate). The true arm (->1344, lean below) would fire on such a tie; the false arm (->1345) is unreachable because below_ok always holds and prefer_below is always true (t.y == hit.y in this regime).", + "status": "defensive" + }, + "normalize.py::elif down_ok and (not up_ok or prefer_down):::#1": { + "note": "Same-line dogleg tie / out-of-band fallback, reached only after the L1296 if is false, which a clean topology never produces (see that gate): the true arm (->1299, lean down on a tie) needs a crossing-free tie that requires degenerate risers, and the false arm (->1300) needs down_ok False, which the regime's fixed inter-row band (down_room >= min_sep) never yields.", + "status": "defensive" + }, + "normalize.py::elif far_y < t.y - COORD_TOLERANCE:::#1": { + "note": "Degenerate-leg guard in _trunk_slot_features: a trunk's flanking legs are genuine vertical legs (far_y differs from the trunk y), so neither the below nor the above classification is skipped; the fall-through arm needs a zero-height leg the layout never produces.", + "status": "defensive" + }, + "normalize.py::elif right_ok:::#1": { + "note": "The both-bounds-fail return of _clear_channel_x_in_band requires a blocking section spanning the entire inter-column gap (so neither cleared edge fits within bound_left/bound_right); a cross-row section cannot span a gap defined as the space between same-row sections. Unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "normalize.py::elif up_ok:::#1": { + "note": "Same-line dogleg move-up / give-up fallback, reached only when both L1296 and L1298 are false. The true arm (->1301, move up because the lower gap is too tight) needs down_ok False and the else arm (->1303, leave fused) needs both rooms below min_sep; the reachable regime's inter-row band is auto-widened so both rooms stay >= min_sep=6 (observed 14/26), so neither is reached by a valid topology.", + "status": "defensive" + }, + "normalize.py::for _ in range(8):::#1": { + "note": "The 8-iteration exhaustion arm of _clear_channel_x_in_band requires 9+ sections chained across a single column band to shift the channel x eight times without resolving, which no constructible topology produces. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "normalize.py::for grp in groups:::#3": { + "note": "_suboptimal_trunk_bands diagnostic loop: validate-only, not reached by the render-path coverage sweep (see the len(trunks)<2 note).", + "status": "defensive" + }, + "normalize.py::for sign in (1, -1):::#1": { + "note": "_suboptimal_trunk_bands direction loop: validate-only, not on the render path.", + "status": "defensive" + }, + "normalize.py::if 0 <= k - 1 < len(rp.curve_radii):::#1": { + "note": "Bounds guard in _restack_htrunk: trunk index k >= 1 so k-1 >= 0 is always in range; the skip arm is defensive.", + "status": "defensive" + }, + "normalize.py::if 0 <= k - 1 < len(rp.curve_radii):::#2": { + "note": "Bounds guard in _restack_channel: the skip arm fires only for k==0 (channel at the route start), which the restacked gap channels (interior verticals after a horizontal lead-in) never are.", + "status": "defensive" + }, + "normalize.py::if 0 <= radius_idx < len(rp.curve_radii):::#1": { + "note": "Bounds guard in _set_vchannel_x: radius_idx in (k-1, k) for a real channel stays in range; the out-of-range skip arm is defensive.", + "status": "defensive" + }, + "normalize.py::if abs(ly - pts[1][1]) < COORD_TOLERANCE:::#1": { + "note": "A re-stacked gap channel at points-index 1 always has a horizontal lead-in (L-shape and bypass routes open with a horizontal segment); routes opening non-horizontally are normalize_exempt and skipped by the materialization. The non-horizontal-lead return in _restack_channel is unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "normalize.py::if abs(x3 - x2) > COORD_TOLERANCE or abs(y3 - y2) <= COORD_TOLERANCE:::#1": { + "note": "Every non-exempt inter-section route ends with a vertical descent into the target Y then a short horizontal port lead (V->H tail); routes with non-V tails are normalize_exempt. The second-to-last-not-vertical reject in _final_port_approach is unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "normalize.py::if band is not None:::#1": { + "note": "Same-line dogleg: the band-found arm is exercised by dogleg_exempt_sameline; the band-is-None arm is defensive (both colliding trunks route through _center_inter_row_channel, so the trunk Y always resolves to a gap band).", + "status": "defensive" + }, + "normalize.py::if band is not None:::#2": { + "note": "Distinct-line dogleg: the band-found arm (->1327) is exercised by dogleg_exempt_distinct (#702). The remaining band-is-None arm (->1331) is defensive: a trunk reaching this second loop collides with an exempt bypass obstacle that lives in an inter-row gap, so _inter_row_gap_band(ctx, t.y) always resolves to a band - the same mechanism already accepted for the sibling 'if band is not None:::#1'.", + "status": "defensive" + }, + "normalize.py::if below_ok and above_ok and (cross_below is None) != (cross_above is None):::#1": { + "note": "Distinct-line dogleg side selection. The crossing-decided true arm (->1342) is exercised by dogleg_exempt_distinct. The false fall-through (->1343) needs a crossing-equal tie; a crossing-free tie requires degenerate zero-length exempt risers and the only realizable tie is both-cross, which trips _guard_no_dogleg_crosses_exempt_trunk plus the section-crossing guards and is never a shippable render.", + "status": "defensive" + }, + "normalize.py::if best < cur:::#1": { + "note": "_suboptimal_trunk_bands crossing-comparison: validate-only, not on the render path.", + "status": "defensive" + }, + "normalize.py::if down is None or len(up.points) < 2:::#1": { + "note": "Every line entering a fan-out junction also exits it to an entry port, so _fanout_route_maps always pairs a downstream route for each (jid, line_id) upstream; all handlers emit >=2-point routes. The skip arm in _join_fanout_upstream_tails is unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "normalize.py::if down_ok and up_ok and (cross_down is None) != (cross_up is None):::#1": { + "note": "Same-line dogleg side selection. The crossing-decided true arm (->1297, pick the side whose riser does not pierce the exempt run) is exercised by dogleg_exempt_sameline. The false fall-through (->1298) needs either an out-of-band side or a crossing-equal tie, neither reachable by a clean topology: the reachable dogleg regime rigidly fixes the inter-row band so down_room/up_room stay >= min_sep=6 (observed 14/26 across the corpus and every constructed variant; perturbing the grid loses the regime), and the only realizable tie is both-cross (a crossing-free tie needs degenerate zero-length exempt risers) which co-occurs with section-crossing / dogleg-crosses-exempt guard failures and is never a shippable render.", + "status": "defensive" + }, + "normalize.py::if feats is None:::#1": { + "note": "Unused default-arg branch: all three callers of _band_order_crossings pass feats explicitly, so the feats-is-None compute-it arm is never taken.", + "status": "defensive" + }, + "normalize.py::if k < len(rp.curve_radii) and k + 2 < len(pts):::#1": { + "note": "Bounds guard in _restack_htrunk: for a real interior trunk k and k+2 are in range; the skip arm is defensive.", + "status": "defensive" + }, + "normalize.py::if k < len(rp.curve_radii) and k + 2 < len(pts):::#2": { + "note": "Bounds guard in _restack_channel: the skip arm guards k or k+2 out of range for a real interior channel; defensive.", + "status": "defensive" + }, + "normalize.py::if len(slots) < 2 or len(slots) > _MAX_BAND_PERMUTE:::#1": { + "note": "_suboptimal_trunk_bands slot-count guard: validate-only, not on the render path.", + "status": "defensive" + }, + "normalize.py::if len(trunks) < 2:::#1": { + "note": "Early-return in _suboptimal_trunk_bands, called only from the _guard_* validator (phases/guards.py) and a unit test, never on the production render path. The coverage sweep renders with validate=False, so neither arm registers. Defensive (exercised via the validate=True guard / test surface; cf. #728 validate-only precedent).", + "status": "defensive" + }, + "normalize.py::if len({id(t.route) for t in grp}) < 2:::#2": { + "note": "Single-route-group skip in _suboptimal_trunk_bands, validate-only: called from the _guard_* validator and a unit test, not the production render path the validate=False sweep exercises. Defensive.", + "status": "defensive" + }, + "normalize.py::if not any(not t.route.normalize_exempt for t in grp):::#2": { + "note": "_suboptimal_trunk_bands diagnostic guard: validate-only, not on the render path.", + "status": "defensive" + }, + "normalize.py::if rep_x[a] != rep_x[b]:::#1": { + "note": "The routing system assigns distinct x offsets to every line sharing a column gap, so two distinct lines in one gap-bundle corridor never share a representative x; the equal-rep_x tiebreak fall-through in _distinct_line_order is unreachable (exhaustive corpus scan confirms). Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "normalize.py::if rp.curve_radii is None:::#1": { + "note": "curve_radii is always a concrete list for inter-section routes (every inter-section handler sets it); the None arm in _set_vchannel_x is a belt-and-suspenders guard.", + "status": "defensive" + }, + "normalize.py::if rp.curve_radii is None:::#2": { + "note": "curve_radii is always set for inter-section routes; the None arm in _restack_htrunk is a defensive guard.", + "status": "defensive" + }, + "normalize.py::if rp.curve_radii is None:::#3": { + "note": "curve_radii is always set for inter-section routes; the None arm in _restack_channel is a defensive guard.", + "status": "defensive" + }, + "common.py::if s.bbox_h <= 0:::#1": { + "note": "Degenerate-bbox guard in _grid_row_bands: a laid-out section always has bbox_h > 0, so the skip arm only protects against a zero/negative-height section that the layout never produces.", + "status": "defensive" + }, + "normalize.py::if s.bbox_w <= 0:::#1": { + "note": "Degenerate-bbox guard in _section_intrudes: a laid-out section always has bbox_w > 0; the skip arm guards a zero/negative-width section the layout never produces.", + "status": "defensive" + }, + "normalize.py::if s.bbox_w <= 0:::#2": { + "note": "Degenerate-bbox guard in _h_segment_crosses_other_section: mirror of the bbox_w<=0 guard; sections always have positive width.", + "status": "defensive" + }, + "normalize.py::if s.bbox_w <= 0:::#3": { + "note": "Degenerate-bbox guard in _v_segment_crosses_other_section: mirror of the _h_segment_crosses_other_section guard; sections always have positive width.", + "status": "defensive" + }, + "normalize.py::if sg[0].sign_x != t.sign_x:::#1": { + "note": "Both callers of _coincident_trunk_slots pre-filter input to a single traversal direction (band = [t for t in grp if t.sign_x == sign]), so within the function sg[0].sign_x != t.sign_x is always False; the opposing-direction continue is unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "common.py::if top is None or bottom is None:::#1": { + "note": "Defensive in iter_inter_row_gaps (consumed by inter_row_gap_upper_row and _inter_row_gap_band): adjacent rows in the sorted section-row set both contain sections, so row_bottom_edge / row_top_edge resolve; the None skip arm guards a row with no sections that the iteration never yields.", + "status": "defensive" + }, + "inter_section_handlers.py::if route is None:::#2": { + "note": "Defensive in _declare_trunk: _route_inter_section only reaches the declaration after a matched rule (or the L-shape fall-through) produced a route, so the None guard never fires on the corpus; it mirrors _declare_channel's same guard for a handler that returns None.", + "status": "defensive" + }, + "offsets.py::elif feeding_exit != edge.source:::#1": { + "note": "This arm (single_exit=False due to multiple distinct exit ports feeding one junction) requires one junction to receive edges from two different exit ports. But _rewrite_edges_with_junctions in resolve.py creates exactly one junction per exit port fan-out, wired exclusively from that exit port's edges. A junction always has a single upstream exit port; the elif is structurally unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "offsets.py::for _ in range(max_iterations):::#1": { + "note": "_reconcile_horizontal_offsets iterates at most 10 times and breaks early when no change occurs. The arc L1338->(-1310) represents loop exhaustion without early-break (all 10 iterations consumed). On any valid parsed graph, the reconciliation converges in at most a handful of iterations because each iteration resolves at least one edge conflict or reaches a fixed point. The 10-iteration ceiling is a backstop against hypothetical oscillating graphs; normal topologies stabilize in 1-3 passes.", + "status": "defensive" + }, + "offsets.py::for edge in graph.edges_to(jid):::#2": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive.", + "status": "defensive" + }, + "offsets.py::for lid, off in desired.items():::#1": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive.", + "status": "defensive" + }, + "offsets.py::for lid, off in desired.items():::#2": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive.", + "status": "defensive" + }, + "offsets.py::for other in lines:::#1": { + "note": "In _reorder_one_exit_line, the loop over `lines` always finds the swap partner: desired_off is the min or max of all_offs, which by construction is held by another line, so the loop-exhausted-without-match arm is never taken (0/128). Defensive. Reclassified defensive (#762).", + "status": "defensive" + }, + "offsets.py::for other_lid in nbr_lines:::#1": { + "note": "In the exit-only-line reorder / same-Y offset propagation; reachable only via a multi-line LR/RL section with a perpendicular (TOP/BOTTOM) exit port, which the engine lays out as a station-as-elbow + collinear overlay PhaseInvariantError (#706). Exercise with a clean fixture once #706 is fixed.", + "status": "needs-review" + }, + "offsets.py::if (::#3": { + "note": "Inside _propagate_offset_swap's same-Y collision-swap block: across the corpus no same-Y adjacent multi-line neighbour needs an offset swap, so the inner collision check never executes (0/128). Defensive guard for a same-Y multi-line offset collision absent from current topologies. Reclassified defensive (#762).", + "status": "defensive" + }, + "offsets.py::if (cur_sid, cur_lid) in visited:::#1": { + "note": "In the exit-only-line reorder / same-Y offset propagation; reachable only via a multi-line LR/RL section with a perpendicular (TOP/BOTTOM) exit port, which the engine lays out as a station-as-elbow + collinear overlay PhaseInvariantError (#706). Exercise with a clean fixture once #706 is fixed.", + "status": "needs-review" + }, + "offsets.py::if (tgt_id, lid) not in ctx.offsets:::#1": { + "note": "The True branch (missing entry-port offset -> ok=False) is unreachable because phase 7 (_compute_entry_port_offsets) runs before this function (phase 8a) and assigns an offset for every (entry_port_id, line_id) pair in the graph. By the time _align_junction_to_entry_port runs, ctx.offsets is populated for all entry ports, so the guard never fires. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "offsets.py::if abs(exit_st.y - j_st.y) <= _SAME_Y_TOLERANCE:::#1": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive. Its Y-differs arm (->1147) is additionally defensive: only a BOTTOM-exit junction is offset in Y from its exit, but such a junction sits below the consumer row and never meets the body's all-entries-within-tolerance precondition.", + "status": "defensive" + }, + "offsets.py::if abs(nbr_cur - new_off) < _OFFSET_EQ_TOLERANCE:::#1": { + "note": "In the exit-only-line reorder / same-Y offset propagation; reachable only via a multi-line LR/RL section with a perpendicular (TOP/BOTTOM) exit port, which the engine lays out as a station-as-elbow + collinear overlay PhaseInvariantError (#706). Exercise with a clean fixture once #706 is fixed.", + "status": "needs-review" + }, + "offsets.py::if all(::#1": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive. The already-aligned arm (->1190) is exercised by the corpus; the body arm (->1192) is the reachable-but-defective one.", + "status": "defensive" + }, + "offsets.py::if cur in seen:::#1": { + "note": "In the exit-only-line reorder / same-Y offset propagation; reachable only via a multi-line LR/RL section with a perpendicular (TOP/BOTTOM) exit port, which the engine lays out as a station-as-elbow + collinear overlay PhaseInvariantError (#706). Exercise with a clean fixture once #706 is fixed.", + "status": "needs-review" + }, + "offsets.py::if edge.source in outbound:::#1": { + "note": "outbound is pre-built from graph.stations keys identically to inbound. All edge sources are registered stations by construction (regular nodes, ports, junctions), so edge.source is always found in outbound and the False branch (56->53) is never taken.", + "status": "defensive" + }, + "offsets.py::if edge.target in inbound:::#1": { + "note": "inbound is pre-built as {sid: set() for sid in graph.stations}, so every station id in the graph is a key. All edge endpoints are guaranteed to be in graph.stations after parsing (regular nodes via register_station, ports via add_port->add_station, junctions via add_station), so edge.target is always found in inbound and the False branch (54->56) is never taken.", + "status": "defensive" + }, + "offsets.py::if entry.side not in (PortSide.LEFT, PortSide.RIGHT):::#1": { + "note": "In _align_flat_tb_exit_to_entry: scopes the flat-seam exit/entry reconciliation to horizontal (LEFT/RIGHT) entry ports, whose per-line offsets are Y like the TB exit's. A TOP/BOTTOM entry stores X-offsets, so copying across would be a category error. No corpus fixture routes a TB LEFT/RIGHT exit directly into a TOP/BOTTOM entry at the same Y, so the skip arm is never taken; defensive against that cross-axis seam.", + "status": "defensive" + }, + "offsets.py::if exit_lines == set(j_lines):::#1": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive. Its lines-differ arm (->1147) is additionally defensive: a fan-out junction carries exactly its single exit port's fanned lines, so exit_lines == j_lines always.", + "status": "defensive" + }, + "offsets.py::if feeding_exit is None:::#1": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive.", + "status": "defensive" + }, + "offsets.py::if graph.stations[peer_sid].is_hidden:::#1": { + "note": "For this arm to fire, the compaction BFS must arrive at a neighbor N whose same-layer peers include a hidden station (bypass-V or converge). Bypass-V stations get their layer from the predecessor P (P.layer+1), so a bypass-V at N.layer requires P at N.layer-1. But P must carry the bypassed line (not in the gap), while the gap seed must NOT carry that line. These constraints force P and the gap seed to be at the same layer (seed.layer = P.layer = N.layer-1) but connected through independent chains to N, a topologically exotic arrangement no standard mmd pattern produces. In all tested bypass+gap topologies, the bypass-V ends up co-layer with the gap seed, not with the BFS neighbor.", + "status": "defensive" + }, + "offsets.py::if internal_offs:::#1": { + "note": "Exit ports are only created when inter-section edges exist (resolve.py `_create_port_stations` iterates `exit_group_edges` which is populated only from actual edges). Every TB LEFT/RIGHT exit port therefore has at least one edge from an internal station, so `internal_offs` is never empty when the loop is entered. The false arm is a defensive guard against an impossible empty-feeder state.", + "status": "defensive" + }, + "offsets.py::if len(nbr_lines) < 2:::#1": { + "note": "In the exit-only-line reorder / same-Y offset propagation; reachable only via a multi-line LR/RL section with a perpendicular (TOP/BOTTOM) exit port, which the engine lays out as a station-as-elbow + collinear overlay PhaseInvariantError (#706). Exercise with a clean fixture once #706 is fixed.", + "status": "needs-review" + }, + "offsets.py::if len(shared) < 2:::#1": { + "note": "In _align_flat_tb_exit_to_entry: scopes the flat-seam reconciliation to multi-line bundles, where a constant per-line offset delta means the lines share an order and only the bundle anchoring differs (the auto-folded serpentine case in #1198). A single shared line carries no bundle order to preserve and is left to the single-line corridor passes; no corpus fixture reaches the pass with fewer than two shared lines, so the skip arm is never taken.", + "status": "defensive" + }, + "offsets.py::if lid not in seen:::#1": { + "note": "The iterator at L554 is `sorted(set(sec_entry_lines), ...)`. The outer `set()` deduplicates the list before iteration, so each `lid` appears exactly once and `seen` never contains it when processed. The false arm (lid already in seen) is logically unreachable — the dedup happens at set construction, making the `seen` guard dead code. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "offsets.py::if max_steps <= 0:::#1": { + "note": "max_steps = len(graph.stations) * len(graph.lines). Each BFS iteration dequeues one (station, line) pair and marks it visited; visited pairs are skipped on re-encounter. The number of distinct (station, line) pairs is bounded by |stations| * |lines|, so the BFS can perform at most that many productive steps before the queue empties. The `while queue and max_steps > 0` condition therefore always exits via the queue-empty branch; max_steps reaches zero only if more productive steps occur than unique pairs, which is impossible in a finite graph.", + "status": "defensive" + }, + "offsets.py::if max_steps <= 0:::#2": { + "note": "max_steps = n_sec_stations * len(graph.lines). The BFS visits each (station_id, line_id) pair at most once (the visited set at L1017 prevents revisits). The total distinct pairs is bounded by n_sec_stations * len(graph.lines) = max_steps. Since max_steps decrements by 1 per loop iteration and the loop exits when the queue is empty (naturally after at most max_steps unique visits), the condition max_steps <= 0 is never True; the while-loop guard already prevents the body from executing when the queue is empty.", + "status": "defensive" + }, + "offsets.py::if not any(::#1": { + "note": "The L920 check returns None when offsets are EXACTLY equal to expected (exact float ==). The L926 check returns None when differences are less than _OFFSET_EQ_TOLERANCE (0.001). Since all offsets are integer multiples of OFFSET_STEP (3.0px), any non-zero difference is exactly 3.0 or more, which is >> 0.001. So L920 catches exact matches and L926 can never catch a case L920 missed; the near-equal window (0,0.001) is unreachable with 3.0px discrete steps.", + "status": "defensive" + }, + "offsets.py::if not sec_stations:::#1": { + "note": "The parser calls _remove_empty_sections() (resolve.py:26) which deletes any section whose station_ids list is empty before port creation. Ports are only added to station_ids during _create_port_stations() (resolve.py:527), which runs AFTER _remove_empty_sections(). Therefore every section in graph.sections at layout time has at least one non-port station; sec_stations is never empty.", + "status": "defensive" + }, + "offsets.py::if not src or not src.is_port:::#1": { + "note": "In the resolved graph, all edges to entry ports come from either exit ports or junctions, both of which are is_port=True stations. A direct internal-station-to-entry-port edge does not exist after _resolve_sections rewrites inter-section edges into port-chain form. There is no valid topology where an edge to a TOP entry port has a source that is not a port.", + "status": "defensive" + }, + "offsets.py::if not src or not src.is_port:::#2": { + "note": "_propagate_lr_rl_exit_to_entry iterates edges_to(port_id) for LEFT/RIGHT entry ports. In the resolved graph, all edges to entry ports originate from exit ports or junctions, which are always is_port=True stations. A direct internal-station-to-entry-port edge does not exist after resolution. The true arm (775->776) requires a source that is not a station or not a port, which no valid resolved topology produces.", + "status": "defensive" + }, + "offsets.py::if not src or not tgt:::#1": { + "note": "_build_same_y_adj calls graph.stations.get(edge.source/target). All edge endpoints are registered stations after _resolve_sections (regular nodes, ports, junctions all go through add_station), so both .get() calls always return non-None Station objects and the `if not src or not tgt` branch is never taken.", + "status": "defensive" + }, + "offsets.py::if not src:::#1": { + "note": "_section_line_feeders calls graph.stations.get(edge.source) for edges feeding an entry port. All edge sources are registered stations after _resolve_sections (exit ports, junctions, and merge junctions are all added via add_station), so .get() always returns a non-None Station and `if not src` is never True.", + "status": "defensive" + }, + "offsets.py::if not target_id:::#1": { + "note": "An exit-only line at station sid is identified by being present in station_lines(sid) but absent from ctx.inbound[sid]. station_lines() returns lines appearing in any edge whose source or target is sid. For a line to be exit-only at sid, it must appear in at least one outbound edge from sid; otherwise it would not appear in station_lines(sid) at all. If an outbound edge exists, outbound_target[(sid, lid)] is always set, so target_id is never None when execution reaches L422. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "offsets.py::if not target_st:::#1": { + "note": "After parse and layout, every edge target ID in a MetroGraph maps to a station in graph.stations. The guard protects against a structurally malformed graph where an edge references a nonexistent station ID, which cannot occur with valid .mmd input processed through the parser and _resolve_sections().", + "status": "defensive" + }, + "offsets.py::if ordered != expected:::#1": { + "note": "The raise arm of _assert_sections_anchored_on_trunk, a backstop on the postcondition of _reindex_section_local: an independent section (no flat-frame neighbour) always lands on the contiguous top-anchored levels 0,step,...,(m-1)*step by construction, so the mismatch arm never fires across the corpus. It guards against a future change that stops re-anchoring such a section.", + "status": "defensive" + }, + "offsets.py::if other_lid == cur_lid:::#1": { + "note": "Inside _propagate_offset_swap's same-Y collision-swap block: across the corpus no same-Y adjacent multi-line neighbour needs an offset swap, so the loop body (incl. this self-skip guard) never executes (0/128). Defensive guard for a same-Y multi-line offset collision absent from current topologies. Reclassified defensive (#762).", + "status": "defensive" + }, + "offsets.py::if paired_off is not None:::#1": { + "note": "_compute_base_offsets sets ctx.offsets[(sid, lid)] for every station-line pair before _propagate_lr_rl_exit_to_entry runs. Exit ports are stations. The for-loop at L791 iterates graph.station_lines(port_id) which equals graph.station_lines(exit_port_id) (enforced by the exit_lines != entry_lines guard at L788). For each lid, ctx.offsets.get((exit_port_id, lid)) is therefore never None. The loop-back arc (793,791) for the paired_off-is-None case is structurally unreachable.", + "status": "defensive" + }, + "offsets.py::if port_off is not None:::#1": { + "note": "_compute_base_offsets runs before _propagate_to_junctions and sets ctx.offsets[(sid, lid)] for every station-line pair in the graph; exit ports are stations, so ctx.offsets.get((exit_port_id, lid)) is never None for any lid in graph.station_lines(jid). The loop-back arm (714->712) requires a junction line with no exit-port offset, which base-offset initialization makes structurally impossible.", + "status": "defensive" + }, + "offsets.py::if reverse:::#3": { + "note": "Reachable only on a reconvergence section that is also a serpentine fold, where the fold corner crosses lines mid-curve and the return-row bundle sits one offset too low (#705). Exercise with a clean fixture once #705 is fixed.", + "status": "needs-review" + }, + "offsets.py::if sec_a is None and id_a in graph.ports:::#1": { + "note": "The true arm requires sec_a is None AND id_a in graph.ports simultaneously. Junction stations (section_id=None) are added only via graph.add_junction() which calls graph.add_station() but NOT graph.add_port(). graph.add_port() (model.py:483) requires a Port object with a non-None section_id (Port.section_id is typed str, not Optional[str], per model.py:218). Therefore no station with section_id=None can ever be in graph.ports; the conjunction sec_a is None AND id_a in graph.ports is unsatisfiable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "offsets.py::if sec_b is None and id_b in graph.ports:::#1": { + "note": "Same argument as L1084: id_b in graph.ports requires the station to have been registered via graph.add_port(), which always supplies a non-None section_id for the created station. A station with section_id=None (sec_b is None) is a junction created by add_junction(), which never calls add_port(). The precondition sec_b is None AND id_b in graph.ports is therefore unsatisfiable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "offsets.py::if single_exit and feeding_exit is not None:::#1": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive. Its False arm (->1147) is additionally defensive: a >=2-line junction reaching this body is always a single-exit-port-fed fan-out junction (merge junctions carry one line and are skipped by len(j_lines)<2).", + "status": "defensive" + }, + "offsets.py::if src and not src.is_port and src.section_id == sec_id:::#1": { + "note": "The false arm fires when an edge source is an internal station (not a port) whose section_id differs from sec_id. After _resolve_sections(), all inter-section edges run through port stations; no direct edge from an internal station of section A to an internal station of section B exists. DFS back-walk via edges_to() from within a section can only reach: (a) entry ports (return True), (b) same-section internal stations (pushed), or (c) other-section ports (is_port=True, skipped by `port and port.is_entry` check). Cross-section internal stations are structurally unreachable via direct edges after resolution.", + "status": "defensive" + }, + "offsets.py::if src_port and not src_port.is_entry:::#2": { + "note": "Reaches the realignment body of _align_junction_to_entry_port only via a TB-reversed two-line bundle fanning into a junction (the #704 boundary fix is in, so this body is now provably reachable). The junction_entry_reversed_fold fixture now ships that topology; with the bundle order carried concentrically through the reversal corners the junction offsets already match their entry ports, so the realignment body short-circuits before its offset-writing arms and they stay un-exercised corpus-wide. Defensive. Its else arm (->1203) is additionally defensive: the sole feeder of a >=2-line fan-out junction is its exit port, a non-entry port.", + "status": "defensive" + }, + "offsets.py::if src_st and not src_st.is_port:::#1": { + "note": "In `_rewrite_edges_with_junctions` (resolve.py L594), edges to exit ports are always created as `Edge(source=edge.source, target=exit_port_id)` where `edge.source` is the original inter-section edge's source — an internal section station, not a port. So `src_st` is never None and `src_st.is_port` is always False. The false arm cannot be taken by any valid parsed graph.", + "status": "defensive" + }, + "offsets.py::if src_st and not src_st.is_port:::#2": { + "note": "Same invariant as L602: edges to LR/RL exit ports are always from internal (non-port) stations, created by `_rewrite_edges_with_junctions` (resolve.py L594-595). The false arm (`src_st` is None or `src_st.is_port`) cannot be taken by any valid parsed graph.", + "status": "defensive" + }, + "offsets.py::if swap_lid is None:::#1": { + "note": "In _reorder_one_exit_line, swap_lid is None only if the loop over `lines` exhausts without a match, but desired_off (min or max of all_offs) is always held by another line, so the early-return guard never fires (0/128). Defensive. Reclassified defensive (#762).", + "status": "defensive" + }, + "offsets.py::if tgt_st and not tgt_st.is_port:::#1": { + "note": "edges_from(port_id) for an entry port yields edges to internal section stations. In the resolved graph, entry ports are connected directly to internal (non-port) stations; there are no entry-port-to-entry-port or entry-port-to-exit-port edges. So tgt_st is always a valid non-port station, and the loop-back arm (799->797) where tgt_st is None or is_port is unreachable for any valid resolved graph.", + "status": "defensive" + }, + "offsets.py::if trunk_feeder_id is not None:::#2": { + "note": "len(unique_ys) < 2 means every port line's feeder stations average to a single Y. Under track-per-line layout, distinct lines occupy distinct tracks, so a shared Y across >=2 lines implies one trunk feeder carrying all of them (trunk_feeder_id set); the no-trunk arm is therefore not reached by a track-separated topology.", + "status": "defensive" + }, + "offsets.py::while stack:::#1": { + "note": "In the exit-only-line reorder / same-Y offset propagation; reachable only via a multi-line LR/RL section with a perpendicular (TOP/BOTTOM) exit port, which the engine lays out as a station-as-elbow + collinear overlay PhaseInvariantError (#706). Exercise with a clean fixture once #706 is fixed.", + "status": "needs-review" + }, + "perp.py::if entry_port is None or not entry_port.is_entry:::#1": { + "note": "_aligned_horizontal_drop_entry only fires for a TOP/BOTTOM exit on a horizontal-flow section (the rest of _perp_riser_lateral's callers are caught earlier). The return-None arm is taken when such an exit feeds a junction or several targets rather than one entry port; corpus instrumentation across every examples/ fixture finds no horizontal-flow perp exit feeding a non-single-entry, so the arm is never taken and the riser falls back to the perp reflection.", + "status": "defensive" + }, + "perp.py::if needs_perp_approach_fan(graph, entry_port.id):::#1": { + "note": "_aligned_horizontal_drop_entry exempts a distinct-line approach fan, whose intra drop fans onto per-line channels (_perp_approach_fan_x) rather than the entry's single per-line offset. Reaching it needs a horizontal-flow perp exit dropping straight into a single approach-fan entry; corpus instrumentation finds none, so the arm is never taken and the riser keeps the perp reflection.", + "status": "defensive" + }, + "perp.py::if not feeders:::#1": { + "note": "No-feeder guard in _perp_entry_crossing_x: the helper is called only from _route_perp_entry when a multi-line bundle shares the port with a per-line stagger, and a TOP/BOTTOM entry port in that case is always reached by a bundled inter-section feeder (dy!=0, so compute_bundle_info indexes it). The empty-feeders return-None arm is a contract guard, never taken across the corpus.", + "status": "defensive" + }, + "postprocess.py::if abs(other.y - station.y) > 1:::#1": { + "note": "The loop-back arm (skip appending a column companion) fires only when another non-port station in the same section shares the moving station's x (within 1px) and its y (within 1px) - two near-coincident distinct stations, forbidden by the no-overlap invariant.", + "status": "defensive" + }, + "postprocess.py::if abs(rp.points[-1][0] - old_x) < STATION_MOVE_TOLERANCE:::#1": { + "note": "Per-route anchor guard: only an incoming route whose end sits at the dragged station's old x is re-pointed to the new x. The skip arm protects against re-pointing a route not anchored at the station; dragged stations in the corpus only carry position-anchored routes, so it never fires.", + "status": "defensive" + }, + "postprocess.py::if abs(rp.points[0][0] - old_x) < STATION_MOVE_TOLERANCE:::#1": { + "note": "Per-route anchor guard: only an outgoing route whose start sits at the dragged station's old x is re-pointed to the new x. The skip arm protects against re-pointing a route not anchored at the station (e.g. an L-shape or bypass leg not snapped by _apply_station_moves); dragged stations in the corpus only carry position-anchored routes, so it never fires.", + "status": "defensive" + }, + "postprocess.py::if any(_is_chain_predecessor(graph, ctx, r.edge.source) for r in flat_in):::#1": { + "note": "Inside the multi_diag block of _flat_connects_to_internal_chain, which is never entered because multi_diag is structurally unsatisfiable. Both arms unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if any(_is_internal_station(graph, r.edge.target) for r in flat_out):::#1": { + "note": "Inside the multi_diag block of _flat_connects_to_internal_chain, never entered because multi_diag is structurally unsatisfiable. Both arms unreachable. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if ctx.station_offsets is None:::#1": { + "note": "Null guard in _spread_diagonal_bundles. compute_station_offsets returns a non-Optional dict and every render-path route_edges call passes it; the only caller leaving station_offsets at its None default is the validate-only _ensure_routes (guards.py), which the render sweep does not run. The early return never fires on a rendered topology, mirroring the matching assert in _apply_diagonal_spread.", + "status": "defensive" + }, + "postprocess.py::if majority_count <= len(moved) / 2:::#1": { + "note": "The no-clear-majority arm. Movers in a column either converge to one consensus x or sit off it only via hub/exit-port collinearity at a fixed >=20px quantum; the consensus cluster is always the strict majority, so majority_count is never <= half (0 of corpus, no probe topology reproduces a split). Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if max(moved_xs) - min(moved_xs) <= 1.0:::#1": { + "note": "Early-exit for the agree case: all movers land within 1px of each other. Unreachable for natural pipelines because the engine always seats one fan branch on the hub's trunk row, vetoing companion consensus for the whole column, so moved is empty and the outer guard fires first.", + "status": "defensive" + }, + "postprocess.py::if multi_diag:::#1": { + "note": "multi_diag branch of _flat_connects_to_internal_chain; multi_diag is structurally unsatisfiable (see the _classify_centering_routes gate at the same line text), so the function is only ever called with multi_diag False. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if multi_diag:::#2": { + "note": "multi_diag branch selecting the flat-segment X extent in _centering_candidate; multi_diag is structurally unsatisfiable (see the _classify_centering_routes gate). Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if not is_fork_join and (::#1": { + "note": "Enters the multi_diag block, which needs a non-fork-join station (<=1 distinct predecessor and successor) carrying both a 4-point diagonal and a 2-point flat incoming route. Raw route shape is a pure function of endpoint coordinates, so all lines on one edge share one shape: n_unique_in and n_unique_flat_in can never both be >=1 for a single-predecessor station, and n_unique_in/out are <=1 when not fork-join. multi_diag is unsatisfiable (0 of 6173 corpus calls). Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if not multi_diag:::#1": { + "note": "The skip-this-block arm fires only when multi_diag is True, which is structurally unsatisfiable (see the _classify_centering_routes gate). Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if not other or other.is_port or other.is_hidden:::#1": { + "note": "Companion scan in _apply_station_moves iterates original_x, which holds only non-port stations, so `other` is never None and never a port (both operands unreachable); `other.is_hidden` is a coincidence guard skipping a hidden station that happens to share a moving station's column, which no corpus topology produces.", + "status": "defensive" + }, + "postprocess.py::if not outliers:::#1": { + "note": "The no-outliers arm in the movers-disagree branch. Disagreement only arises from hub/exit-port collinearity at a >=20px quantum, never sub-pixel, so whenever spread exceeds 1px at least one mover rounds >1px from the majority x. outliers is never empty here. Reclassified candidate-dead -> defensive (#762): corpus instrumentation across 128 fixtures confirms the un-exercised arm is never taken.", + "status": "defensive" + }, + "postprocess.py::if ox is None:::#1": { + "note": "Null guard in _align_uncentered_siblings. The loop iterates visible non-port stations and original_x is built from every non-port station, so ox is always present; the guard never fires.", + "status": "defensive" + }, + "rail.py::if conn is not None:::#1": { + "note": "Skips the straight-rail fallback when _route_inter_section_connector handled a port-to-port bundle. The connector returns a route for every whole-graph rail inter-section edge (always a RIGHT exit feeding a LEFT entry), so the None arm (fall through to straight-rail routing) is a structural fallback no rail topology reaches.", + "status": "defensive" + }, + "rail.py::if exit_port.side is not PortSide.RIGHT or entry_port.side is not PortSide.LEFT:::#1": { + "note": "Whole-graph rail mode stacks sections vertically and resolve.py always sides an inter-section edge as a RIGHT exit feeding a LEFT entry, so the early-return arm (an unmodelled side pairing) is a structural fallback no rail topology reaches.", + "status": "defensive" + }, + "rail.py::if line_id in section_rails:::#1": { + "note": "The whole-graph rail connector routes port-to-port edges through _line_rail_y, exercising the in-rails arm. The fall-through (a port carrying a line absent from its own section's rail map) cannot occur: a port carries only lines its section's stations carry, all present in per_line_y. Defensive fallback.", + "status": "defensive" + }, + "rail.py::if line_id in served and len(st.rail_used_ys) == len(served):::#1": { + "note": "Reached only for a non-port spanning station, whose rail_used_ys is station_lines_ordered filtered to the section's per_line_y - itself built from the same _section_lines_in_order. So a served line is always in per_line_y (lengths match) and _line_rail_y is only called with a line the touching edge carries (always served). The fall-through return st.y is a defensive fallback no render-path call reaches.", + "status": "defensive" + }, + "rail.py::if sib_rails:::#1": { + "note": "_off_track_drop_order is only called for an off-track elbow edge that exists in graph.edges, so the feeder<->consumer set it scans always contains at least that edge; the empty-sib_rails arm (skip the mirror-corner reversal) is a contract guard no render-path call reaches.", + "status": "defensive" + }, + "rail.py::if src is None or tgt is None:::#1": { + "note": "Null guard over an edge's endpoints; every graph.edges endpoint exists in graph.stations, so the continue arm is a contract guard no render-path call reaches.", + "status": "defensive" + }, + "rail.py::if st is None:::#1": { + "note": "_line_rail_y is only ever called with a real station id (on_rail.id, edge.source/target, or a sibling edge endpoint), all of which exist in graph.stations - the route loop pre-filters None endpoints at the src/tgt guard. The None arm is a contract guard no render-path call reaches.", + "status": "defensive" + }, + "rail.py::if up is None or down is None:::#1": { + "note": "Null guard over the two ports' sections in the rail inter-section connector; a boundary port's section_id always resolves in graph.sections, so the early-return arm is a contract guard no render-path call reaches.", + "status": "defensive" + }, + "reversal.py::elif src.is_port:::#1": { + "note": "Edge feeding a LEFT/RIGHT entry port whose source is not a junction; src is then always an exit port (is_port=True), because resolved chains feed entry ports only from exit ports or junctions. The elif is always true, so the implicit fall-through to the loop (->223) is a structural-contract guard no valid topology reaches.", + "status": "defensive" + }, + "reversal.py::if entry and entry.section_id and entry.section_id != src.section_id:::#1": { + "note": "_build_section_adjacency records a section successor reached through a peel-off junction. entry_id comes from _entry_ports_through_junctions, which returns only registered entry-port stations, so graph.stations.get(entry_id) is always present and carries a section_id. The only un-exercised arm is entry.section_id == src.section_id -- a junction fanning back into its own source section -- which a resolved peel-off fan never produces. Defensive structural-contract guard.", + "status": "defensive" + }, + "reversal.py::if jid in seen:::#1": { + "note": "Cycle guard in _entry_ports_through_junctions' junction walk. The True arm fires only if a junction is reached twice while walking out from one exit-port-fed junction (a junction reachable by two paths). Resolved peel-off fans are trees, so no junction is revisited and the arm is unreached; the guard keeps the walk terminating should chained junctions ever form a cycle.", + "status": "defensive" + }, + "reversal.py::if not s2 or not s2.is_port:::#1": { + "note": "Junction look-through: s2 is the source of an edge feeding a fold junction. Junctions are synthetic resolution nodes fed only by exit ports or upstream junctions (both is_port=True), so s2 is always present and port-like. The continue is a structural-contract guard no valid topology reaches.", + "status": "defensive" + }, + "reversal.py::if not section:::#1": { + "note": "_propagate_reversal_along_rows iterates sec_id values drawn from reversed_secs, which only ever holds real section ids added from graph.sections. graph.sections.get(sec_id) is never None; the continue is a defensive null guard.", + "status": "defensive" + }, + "reversal.py::if not src or not src.is_port:::#1": { + "note": "Phase 1a (_detect_tb_bottom_top_entries) iterates edges feeding a TOP entry port. Entry ports are synthetic nodes created by section resolution; the only edges targeting them are the resolved chain's exit_port->entry_port and junction->entry_port links, so edge.source is always a registered port or junction station (both is_port=True). The continue (missing or non-port source) is a structural-contract guard no valid topology reaches.", + "status": "defensive" + }, + "reversal.py::if not src or not tgt:::#1": { + "note": "_build_section_adjacency iterates graph.edges; every edge endpoint is a registered station, so graph.stations.get never returns None for edge.source or edge.target. The continue is a defensive null guard no valid graph reaches.", + "status": "defensive" + }, + "reversal.py::if not src:::#1": { + "note": "_section_fed_by_tb_lr_exit iterates edges feeding a LEFT/RIGHT entry port; edge.source is always a registered station, so graph.stations.get is never None. Defensive null guard.", + "status": "defensive" + }, + "reversal.py::if not succ:::#1": { + "note": "succ_id comes from sec_successors, built only from real tgt.section_id values, so graph.sections.get(succ_id) is never None and the continue (->187) is a defensive null guard. The fall-through static arm (->188) is phantom: control falls into the following multi-line `if (`, whose first operand line carries the real arc L186->189.", + "status": "defensive" + }, + "offsets.py::if entry_section is None:::#1": { + "note": "Defensive null guard: every port in graph.ports is created by the resolver with a valid section_id, so graph.sections.get(port_obj.section_id) is never None at routing time. The continue branch is a safety net against a malformed port that no valid graph produces.", + "status": "defensive" + }, + "reversal.py::if port and port.is_entry:::#1": { + "note": "_entry_ports_through_junctions collects the entry ports a peel-off junction fan lands on. Each junction out-edge targets either another junction (consumed by the prior `edge.target in junction_ids` continue) or an entry port; no junction fans directly to a station or exit port across the corpus. The non-entry arm is therefore a structural-contract guard never reached.", + "status": "defensive" + }, + "reversal.py::if receiver not in reversed_secs:::#1": { + "note": "BFS dedup guard in _detect_tb_bottom_top_entries: the False arm fires when a TB section is queued as a vertical receiver via two different positive_fan paths. The detection only registers a receiver when a BOTTOM exit PORT directly feeds a TOP entry port (edge.source is the exit port). A TB section reached by two upstream sections is fed through a fork/merge junction, so the edges into its TOP entry originate at the junction, not a port -- the detection skips them and the receiver is never queued twice. A diamond renders (examples/topologies/tb_bottom_exit_fork_diamond.mmd) but does not drive this arm. The guard is correct and necessary to prevent double-queueing and ensure BFS termination should a direct double-feed ever arise.", + "status": "defensive" + }, + "tb_handlers.py::if crossing_x is not None:::#1": { + "note": "Pair of context.py::if not indices: - the helper returns None only when no bundled feeder reaches the port, but a horizontal-flow section taking a perpendicular entry is always fed by a bundled inter-section edge, so crossing_x resolves. The crossing_x-is-None fall-through is a defensive guard, never taken across the corpus.", + "status": "defensive" + }, + "tb_handlers.py::if diag_end < diag_start:::#1": { + "note": "Degenerate-collapse clamp for an ascending diagonal: fires only when the run is shorter than 2*MIN_STRAIGHT_EDGE (20px). Every caller feeds grid-placed station coordinates whose run-axis separation is at least one grid pitch (Y_SPACING=40 / X_SPACING=60); _route_entry_runway additionally pre-guards with `room < src_min + diagonal_run`. The 20px collapse threshold is never reached.", + "status": "defensive" + }, + "tb_handlers.py::if diag_end > diag_start:::#1": { + "note": "Descending-run mirror of the ascending collapse clamp (#1 of `if diag_end < diag_start:`): fires only when |run| < 2*MIN_STRAIGHT_EDGE (20px), but connected diagonal endpoints are always >= one grid pitch (40/60px) apart on the run axis. Unreachable degenerate-geometry guard.", + "status": "defensive" + }, + "tb_handlers.py::if tgt_sec is not None and tgt_sec.direction not in (\"TB\", \"BT\"):::#1": { + "note": "Perp-entry drop crossing-X override: the edge's target is always a sectioned station, so tgt_sec resolves and the `tgt_sec is None` short-circuit to the plain drop is never taken; the `direction in (TB, BT)` arm (a drop continuing into a vertical-flow trunk) and the horizontal-target arm are both exercised.", + "status": "defensive" + }, + "inter_section_handlers.py::if sx >= (left_edge + right_edge) / 2:::#1": { + "note": "Defensive symmetry: a merge feeder junction sits in the inter-column gap downstream of its fork, i.e. right of its source section's centre, so the exit-right arm always fires in the corpus. The exit-left arm mirrors it for a junction sitting left of centre; no fixture places a merge feeder there.", + "status": "defensive" + }, + "inter_section_handlers.py::and f.src_row is not None::#1": { + "note": "LEFT-entry inter-row L-shape guard. Every LEFT-entry inter-section edge reaching this condition has a resolved source grid row (f.src_col/f.tgt_col are asserted non-None just above and the row resolves alongside), so the `f.src_row is None` short-circuit out of the L-shape branch is never taken.", + "status": "defensive" + }, + "inter_section_handlers.py::and f.tgt_row is not None::#1": { + "note": "Companion guard to f.src_row in the same LEFT-entry inter-row L-shape condition: the target grid row is likewise always resolved here, so the `f.tgt_row is None` short-circuit out of the branch is never taken.", + "status": "defensive" + }, + "inter_section_handlers.py::and src_sec is not None::#1": { + "note": "Inter-row exit mid-Y clearance bump (the n>1 multi-line branch). When more than one line shares the exit the source section always resolves, so the `src_sec is None` short-circuit past the clearance bump is never taken.", + "status": "defensive" + }, + "inter_section_handlers.py::and tgt_sec is not None::#1": { + "note": "Companion to src_sec in the same n>1 mid-Y clearance branch: the target section always resolves there, so the `tgt_sec is None` short-circuit past the bump is never taken.", + "status": "defensive" + }, + "normalize.py::if trunk_rp is None or trunk_src_st is None:::#1": { + "note": "Defensive guard in _merge_feeder_groups: a merge with a trunk_source always has a routed trunk edge and a resolvable trunk station, so the skip arm is never taken.", + "status": "defensive" + }, + "normalize.py::if trunk_ch is None:::#1": { + "note": "Defensive guard: the merge trunk route opens horizontal-then-vertical (lead into the gap, then descend), so its initial fan-out descent is always found; the skip arm is never taken.", + "status": "defensive" + }, + "normalize.py::if rp is None:::#1": { + "note": "Defensive guard: every merge feeder edge is routed, so the by-key lookup in _merge_feeder_groups always resolves; the skip arm is never taken.", + "status": "defensive" + }, + "normalize.py::if ch is None:::#3": { + "note": "Defensive guard: a merge branch route opens horizontal-then-vertical (lead, then descent onto the trunk channel), so its initial fan-out descent is always found; the skip arm is never taken.", + "status": "defensive" + }, + "normalize.py::if col is None:::#1": { + "note": "Defensive guard in _convergence_line_order: a peel-off riser channel always resolves to a source-section column, so the unresolved-column early return is never taken on the corpus.", + "status": "defensive" + }, + "offsets.py::if src is None:::#1": { + "note": "Defensive guard in _convergence_feeders: every edge feeding an entry port has a source station, so the missing-source early return is never taken.", + "status": "defensive" + }, + "offsets.py::if col is None:::#1": { + "note": "Defensive guard in _convergence_feeders: every edge feeding a LEFT entry port has a source whose section resolves to a grid column after placement, so the unresolved-source-column early return is never taken.", + "status": "defensive" + }, + "offsets.py::if tgt_col is None:::#1": { + "note": "Defensive guard in _convergence_feeders: a LEFT entry port section always has a grid column after placement, so the unresolved-target-column early return is never taken.", + "status": "defensive" + }, + "offsets.py::sec is None::#1": { + "note": "Bypass-convergence LEFT-entry feeder scan: the loop only inspects existing LEFT entry ports, whose section always resolves, so the leading `sec is None` short-circuit that skips the port is never taken.", + "status": "defensive" + }, + "postprocess.py::if abs(dx_diag) <= COORD_TOLERANCE_FINE:::#1": { + "note": "Defensive guard: a near-vertical baked diagonal (dx_diag ~ 0) already separates near-fully along the baked X axis, so it needs no Y spread and the divide-by-dx_diag is skipped. No corpus fixture bakes a near-vertical diagonal, so the guard arm is never taken.", + "status": "defensive" + } +} diff --git a/tests/fixtures/bubble_forced_label_clears_diagonal.mmd b/tests/fixtures/bubble_forced_label_clears_diagonal.mmd new file mode 100644 index 000000000..c41ad7750 --- /dev/null +++ b/tests/fixtures/bubble_forced_label_clears_diagonal.mmd @@ -0,0 +1,25 @@ +%%metro title: Forced bubble label clears the convergence diagonal +%%metro label_angle: 45 +%%metro line: core | Core | #2e8b57 +%%metro file: mapped_out | BAM/CRAM +%%metro off_track: mapped_out +%%metro marker: convert | square, solid +%%metro marker: markdup | square, solid + +graph LR + subgraph proc [Processing] + prep[prep] + mapping[mapping] + convert[convert] + markdup[markduplicates] + mosdepth[mosdepth] + mapped_out[ ] + + prep -->|core| mapping + mapping -->|core| convert + mapping -->|core| markdup + convert -->|core| mosdepth + markdup -->|core| mosdepth + + mapping -->|core| mapped_out + end diff --git a/tests/fixtures/bubble_label_clears_diagonal.mmd b/tests/fixtures/bubble_label_clears_diagonal.mmd new file mode 100644 index 000000000..2beb64afb --- /dev/null +++ b/tests/fixtures/bubble_label_clears_diagonal.mmd @@ -0,0 +1,25 @@ +%%metro title: Bubble label clears the convergence diagonal +%%metro label_angle: 45 +%%metro line: core | Core | #2e8b57 +%%metro files: bam_out | BAM/CRAM +%%metro off_track: bam_out +%%metro marker: convert | square, solid +%%metro marker: markdup | square, solid + +graph LR + subgraph proc [Processing] + bbsplit[BBsplit] + mapping[mapping] + convert[convert] + markdup[markduplicates] + merge[mosdepth] + bam_out[ ] + + bbsplit -->|core| mapping + mapping -->|core| convert + mapping -->|core| markdup + convert -->|core| merge + markdup -->|core| merge + + bbsplit -->|core| bam_out + end diff --git a/tests/fixtures/bubble_output_above.mmd b/tests/fixtures/bubble_output_above.mmd new file mode 100644 index 000000000..7eecb9233 --- /dev/null +++ b/tests/fixtures/bubble_output_above.mmd @@ -0,0 +1,21 @@ +%%metro title: Output above a fork/join bubble +%%metro line: main | Main | #3b82f6 +%%metro off_track: bam_out + +%%metro file: bam_out | BAM + +graph LR + subgraph proc [Processing] + mapping[Mapping] + convert[Convert] + markdups[MarkDuplicates] + mosdepth[Mosdepth] + bam_out[ ] + + mapping -->|main| convert + mapping -->|main| markdups + convert -->|main| mosdepth + markdups -->|main| mosdepth + + convert -->|main| bam_out + end diff --git a/tests/fixtures/captioned_sibling_outputs.mmd b/tests/fixtures/captioned_sibling_outputs.mmd new file mode 100644 index 000000000..4c58050a4 --- /dev/null +++ b/tests/fixtures/captioned_sibling_outputs.mmd @@ -0,0 +1,20 @@ +%%metro title: Captioned sibling outputs +%%metro line: main | Main | #3b82f6 +%%metro off_track: cram_normal, cram_tumor +%%metro file: cram_normal | CRAM | normal +%%metro file: cram_tumor | CRAM | tumor + +graph LR + subgraph proc [Processing] + align[Align] + markdup[MarkDup] + ready[Ready] + cram_normal[ ] + cram_tumor[ ] + + align -->|main| markdup + markdup -->|main| ready + + markdup -->|main| cram_normal + markdup -->|main| cram_tumor + end diff --git a/tests/fixtures/curve_invariant_repros/rl_return_row_convergence.mmd b/tests/fixtures/curve_invariant_repros/rl_return_row_convergence.mmd new file mode 100644 index 000000000..7ea16045f --- /dev/null +++ b/tests/fixtures/curve_invariant_repros/rl_return_row_convergence.mmd @@ -0,0 +1,156 @@ +%%metro title: RL return-row convergence +%%metro style: dark +%%metro files: fastq_in | FASTQ +%%metro files: bam_in | BAM +%%metro files: ubam_in | uBAM +%%metro line: ubam | uBAM | #0570b0 +%%metro line: fastq | FASTQ | #2db572 +%%metro line: bam | BAM | #f5c542 +%%metro line: other | Other | #ff8c00 +%%metro line: snvvcf | SNV VCF | #e63946 +%%metro line: svvcf | SV VCF | #9d4edd +%%metro legend: tl +%%metro grid: preprocessing | 0,0 +%%metro grid: small_variants | 1,0 +%%metro grid: phasing | 2,0 +%%metro grid: structural_variants | 3,0 +%%metro grid: jointcalling | 4,0 +%%metro grid: annotation | 4,1 +%%metro grid: cnv_calling | 3,1 +%%metro grid: tr_calling | 2,1 +%%metro grid: reports | 0,1 + +graph LR + subgraph preprocessing [Pre-processing] + + fastq_in[ ] + bam_in[ ] + ubam_in[ ] + cat_fastq[cat FASTQ] + samtools_merge[samtools\nmerge] + minimap2_align[minimap2] + samtools_sort_index[samtools\nsort/index] + mosdepth[mosdepth] + + fastq_in -->|fastq| cat_fastq + ubam_in -->|ubam| samtools_merge + bam_in -->|bam| samtools_merge + cat_fastq -->|fastq| minimap2_align + samtools_merge -->|ubam| minimap2_align + minimap2_align -->|bam| samtools_sort_index + samtools_merge -->|bam| samtools_sort_index + samtools_sort_index -->|bam| mosdepth + end + + subgraph small_variants [Small variant calling] + + clair3[Clair3] + deepvariant[Deepvariant] + end + + subgraph cnv_calling [CNVs] + %%metro direction: RL + + ontspectre_cnvcaller[ont-spectre CNVCaller] + end + + subgraph tr_calling [Repeats] + %%metro direction: RL + + longtr[LongTR] + straglr[Straglr] + trgt[TRGT] + end + + subgraph phasing [Phasing] + + whatshap_phase[WhatsHap Phase] + whatshap_haplotag[WhatsHap Haplotag] + + whatshap_phase -->|bam,snvvcf| whatshap_haplotag + end + + subgraph structural_variants [Structural Variants] + + sniffles[Sniffles] + cutesv[CuteSV] + jasminesv_callers[Jasmine merge callers] + + sniffles -->|svvcf,bam| jasminesv_callers + cutesv -->|svvcf,bam| jasminesv_callers + end + + subgraph jointcalling [Joint Calling] + + jasminesv_samples[Jasmine merge samples] + glnexus[GLNexus] + end + + subgraph annotation [Annotation] + %%metro direction: RL + + vep[VEP] + snpeff[SnpEff] + annotsv[AnnotSV] + end + + subgraph reports [Reports] + %%metro direction: RL + + geneyx[Geneyx] + sv_report[SV Report] + end + + + %% Inter-section edges + samtools_sort_index -->|bam| clair3 + samtools_sort_index -->|bam| deepvariant + samtools_sort_index -->|bam| longtr + samtools_sort_index -->|bam| straglr + samtools_sort_index -->|bam| trgt + + mosdepth -->|other| ontspectre_cnvcaller + + straglr -->|other| geneyx + + clair3 -->|snvvcf| ontspectre_cnvcaller + deepvariant -->|snvvcf| ontspectre_cnvcaller + + clair3 -->|bam,snvvcf| whatshap_phase + deepvariant -->|bam,snvvcf| whatshap_phase + + clair3 -->|snvvcf| glnexus + deepvariant -->|snvvcf| glnexus + + clair3 -->|snvvcf| vep + deepvariant -->|snvvcf| vep + + whatshap_haplotag -->|bam| sniffles + whatshap_haplotag -->|bam| cutesv + whatshap_haplotag -->|bam| jasminesv_samples + + ontspectre_cnvcaller -->|other| geneyx + + sniffles -->|svvcf| jasminesv_samples + sniffles -->|svvcf| vep + sniffles -->|svvcf| snpeff + sniffles -->|svvcf| annotsv + sniffles -->|svvcf| geneyx + + cutesv -->|svvcf| jasminesv_samples + cutesv -->|svvcf| vep + cutesv -->|svvcf| snpeff + cutesv -->|svvcf| annotsv + cutesv -->|svvcf| geneyx + + jasminesv_callers -->|svvcf| jasminesv_samples + jasminesv_callers -->|svvcf| vep + jasminesv_callers -->|svvcf| snpeff + jasminesv_callers -->|svvcf| annotsv + jasminesv_callers -->|svvcf| geneyx + jasminesv_callers -->|svvcf| sv_report + + snpeff -->|svvcf| sv_report + annotsv -->|svvcf| sv_report + + glnexus -->|snvvcf| vep diff --git a/tests/fixtures/da_pipeline.mmd b/tests/fixtures/da_pipeline.mmd new file mode 100644 index 000000000..36443f06a --- /dev/null +++ b/tests/fixtures/da_pipeline.mmd @@ -0,0 +1,132 @@ +%%metro title: nf-core/differentialabundance +%%metro style: dark +%%metro legend: bl +%%metro line_order: definition +%%metro compact_offsets: true +%%metro file: meta_in | YAML | Contrasts +%%metro file: meta_in | CSV | Samples +%%metro file: matrix_in | TSV | Matrix +%%metro file: cel_in | CEL | Affy CEL +%%metro file: mq_in | TSV | MaxQuant +%%metro file: geo_in | STR | GEO ID +%%metro file: gtf_in | GTF | GTF +%%metro file: gmt_in | GMT | Gene sets +%%metro file: net_in | TSV | Network +%%metro file: report_html | HTML | Report +%%metro file: bundle_zip | ZIP | Bundle +%%metro file: shiny_html | HTML | Shiny +%%metro file: plots_png | PNG | Plots +%%metro line: rnaseq | RNA-seq counts | #2db572 +%%metro line: affy | Affymetrix microarray | #e6550d +%%metro line: maxquant | MaxQuant proteomics | #0570b0 +%%metro line: geo | GEO SOFT file | #756bb1 +%%metro grid: data_prep | 0,0,2,1 +%%metro grid: differential | 1,0,1,1 +%%metro grid: functional | 2,0,1,1 +%%metro grid: reporting | 3,0,1,1 +%%metro grid: plots | 2,1,1,1 +%%metro off_track: gmt_in, net_in + +graph LR + subgraph data_prep [Data import and preparation] + %%metro exit: right | rnaseq, affy, maxquant, geo + meta_in[ ] + matrix_in[ ] + gtf_in[ ] + cel_in[ ] + mq_in[ ] + geo_in[ ] + gtf_to_table[GTF to table] + affy_load[Affy load] + proteus[Proteus] + geoquery[GEOquery] + validator[Validate] + matrix_filter[Filter matrix] + + meta_in -->|rnaseq,affy,maxquant,geo| validator + matrix_in -->|rnaseq| validator + gtf_in -->|rnaseq,maxquant| gtf_to_table + gtf_to_table -->|rnaseq,maxquant| validator + cel_in -->|affy| affy_load + affy_load -->|affy| validator + mq_in -->|maxquant| proteus + proteus -->|maxquant| validator + geo_in -->|geo| geoquery + geoquery -->|geo| validator + validator -->|rnaseq,affy,maxquant,geo| matrix_filter + end + + subgraph differential [Differential analysis] + %%metro entry: left | rnaseq, affy, maxquant, geo + %%metro exit: right | rnaseq, affy, maxquant, geo + limma[limma] + deseq2[DESeq2] + dream[dream] + propd[propd] + annotate[Annotate results] + + limma -->|rnaseq,affy| annotate + deseq2 -->|rnaseq| annotate + dream -->|rnaseq| annotate + propd -->|rnaseq| annotate + end + + subgraph functional [Functional enrichment] + %%metro entry: left | rnaseq, affy, maxquant, geo + %%metro exit: right | rnaseq, affy, maxquant, geo + gmt_in[ ] + net_in[ ] + gsea[GSEA] + gprofiler2[gprofiler2] + decoupler[decoupler] + grea[grea] + + gmt_in -->|rnaseq,affy,maxquant,geo| gsea + net_in -->|rnaseq,affy,maxquant,geo| decoupler + end + + subgraph reporting [Reporting] + %%metro entry: left | rnaseq, affy, maxquant, geo + shinyngs[Shiny app] + quarto[Quarto report] + bundle[Zip bundle] + shiny_html[ ] + report_html[ ] + bundle_zip[ ] + + shinyngs -->|rnaseq,affy,maxquant,geo| shiny_html + quarto -->|rnaseq,affy,maxquant,geo| report_html + quarto -->|rnaseq,affy,maxquant,geo| bundle + bundle -->|rnaseq,affy,maxquant,geo| bundle_zip + end + + subgraph plots [Plots] + %%metro entry: left | rnaseq, affy, maxquant, geo + plot_expl[Exploratory] + plot_diff[Differential] + plots_png[ ] + + plot_expl -->|rnaseq,affy,maxquant,geo| plots_png + plot_diff -->|rnaseq,affy,maxquant,geo| plots_png + end + + %% Inter-section edges + matrix_filter -->|rnaseq,affy,maxquant,geo| limma + matrix_filter -->|rnaseq| deseq2 + matrix_filter -->|rnaseq| dream + matrix_filter -->|rnaseq| propd + %% Section 2 -> Section 3 (functional from differential results) + limma -->|rnaseq,affy,maxquant,geo| gsea + limma -->|rnaseq,affy,maxquant,geo| gprofiler2 + limma -->|rnaseq,affy,maxquant,geo| decoupler + propd -->|rnaseq| grea + %% Section 2 -> Section 4 (plots are parallel, both from differential trunk) + limma -->|rnaseq,affy,maxquant,geo| plot_expl + limma -->|rnaseq,affy,maxquant,geo| plot_diff + %% Section 2/3 -> Section 5 (reporting from differential + functional) + limma -->|rnaseq,affy,maxquant,geo| shinyngs + limma -->|rnaseq,affy,maxquant,geo| quarto + gsea -->|rnaseq,affy,maxquant,geo| quarto + gprofiler2 -->|rnaseq,affy,maxquant,geo| quarto + decoupler -->|rnaseq,affy,maxquant,geo| quarto + grea -->|rnaseq| quarto diff --git a/tests/fixtures/diagonal_single_trunk_off_track.mmd b/tests/fixtures/diagonal_single_trunk_off_track.mmd new file mode 100644 index 000000000..d92a7420f --- /dev/null +++ b/tests/fixtures/diagonal_single_trunk_off_track.mmd @@ -0,0 +1,65 @@ +%%metro title: Diagonal Labels (dense trunk) +%%metro style: dark +%%metro label_angle: 45 +%%metro line: germline | Germline | #0570b0 +%%metro line: tumor_only | Tumor only | #d62728 +%%metro line: somatic | Tumor-normal pair | #756bb1 +%%metro file: fastq_in | FASTQ +%%metro file: vcf_out | VCF +%%metro off_track: bam_out +%%metro file: bam_out | BAM +%%metro grid: preprocessing | 0,0 +%%metro grid: variant_calling | 0,1 + +graph LR + subgraph preprocessing [Pre-processing] + %%metro exit: right | germline, tumor_only, somatic + fastq_in[ ] + fastqc[FastQC] + fastp[FastP] + umi[UMI consensus] + bwa[BWA-MEM] + merge_index[samtools merge/index] + markdup[MarkDuplicates] + bqsr[BaseRecalibrator] + applybqsr[ApplyBQSR] + mosdepth[mosdepth] + ngscheckmate[NGSCheckmate] + + fastq_in -->|germline,tumor_only,somatic| fastqc + fastqc -->|germline,tumor_only,somatic| fastp + fastp -->|germline,tumor_only,somatic| umi + umi -->|germline,tumor_only,somatic| bwa + bwa -->|germline,tumor_only,somatic| merge_index + bwa -->|germline| bam_out + bam_out[ ] + merge_index -->|germline,tumor_only,somatic| markdup + markdup -->|germline,tumor_only,somatic| bqsr + bqsr -->|germline,tumor_only,somatic| applybqsr + applybqsr -->|germline,tumor_only,somatic| mosdepth + mosdepth -->|germline,tumor_only,somatic| ngscheckmate + end + + subgraph variant_calling [Variant calling] + %%metro entry: left | germline, tumor_only, somatic + split[split by analysis] + deepvariant[GATK] + mutect[Mutect2] + strelka[Strelka2] + merge_vcf[merge VCFs] + vcf_out[ ] + + split -->|germline| deepvariant + split -->|tumor_only| mutect + split -->|somatic| strelka + deepvariant -->|germline| merge_vcf + mutect -->|tumor_only| merge_vcf + strelka -->|somatic| merge_vcf + merge_vcf -->|germline,tumor_only,somatic| vcf_out + end + + %% The dense angled-label trunk feeds the variant-calling section in the + %% row below, which fans out to three callers (one per line) and fans + %% back in at merge VCFs -- exercising the vertical room the hanging + %% angled labels need above the row below. + ngscheckmate -->|germline,tumor_only,somatic| split diff --git a/tests/fixtures/file_icon_fanin.mmd b/tests/fixtures/file_icon_fanin.mmd new file mode 100644 index 000000000..d5dea0ea7 --- /dev/null +++ b/tests/fixtures/file_icon_fanin.mmd @@ -0,0 +1,42 @@ +%%metro title: Reference Bundle Fan-In +%%metro style: dark +%%metro line: sample | Sample | #2db572 +%%metro line: somatic | Somatic | #e63946 +%%metro line: germline | Germline | #457b9d +%%metro file: ref_fa | FASTA | Reference +%%metro file: dbsnp | VCF | dbSNP +%%metro file: intervals | BED | Targets +%%metro file: pon | VCF | PoN + +graph LR + subgraph prep [Read Prep] + reads[Reads] + trim[Trim] + reads -->|sample,somatic,germline| trim + end + + subgraph refbuild [Reference Resources] + ref_fa[Reference] + dbsnp[dbSNP] + intervals[Targets] + pon[PoN] + index[Build Index] + ref_fa -->|sample,somatic,germline| index + dbsnp -->|somatic,germline| index + intervals -->|sample,somatic,germline| index + pon -->|somatic| index + end + + subgraph call [Variant Calling] + align[Align] + somatic_call[Mutect2] + germline_call[HaplotypeCaller] + merge[Merge] + align -->|sample,somatic,germline| somatic_call + align -->|germline| germline_call + somatic_call -->|somatic| merge + germline_call -->|germline| merge + end + + trim -->|sample,somatic,germline| align + index -->|sample,somatic,germline| align diff --git a/tests/fixtures/font_scale.mmd b/tests/fixtures/font_scale.mmd new file mode 100644 index 000000000..a4801a4b2 --- /dev/null +++ b/tests/fixtures/font_scale.mmd @@ -0,0 +1,18 @@ +%%metro title: Font Scale Fixture +%%metro line: main | Main | #3b82f6 +%%metro line: alt | Alternative | #e63946 +%%metro file: report | QC + +graph LR + subgraph proc [Processing] + load[Load Samples] + align[Align Reads] + filter[Filter\nVariants] + report[ ] + + load -->|main| align + load -->|alt| align + align -->|main| filter + align -->|alt| filter + filter -->|main| report + end diff --git a/tests/fixtures/genomeassembly_organellar.mmd b/tests/fixtures/genomeassembly_organellar.mmd new file mode 100644 index 000000000..6f3967b10 --- /dev/null +++ b/tests/fixtures/genomeassembly_organellar.mmd @@ -0,0 +1,104 @@ +%%metro title: sanger-tol/genomeassembly +%%metro style: dark +%%metro line: long_reads | Long reads | #3d95fd +%%metro line: hic_reads | Hi-C reads | #FA6863 +%%metro line: i10x_reads | 10X reads | #EB7AEB +%%metro line: assemblies | Assembly | #24B064 +%%metro file: input_long_reads | FASTX +%%metro file: input_long_reads_organelle | FASTX +%%metro file: input_hic_reads | CRAM +%%metro file: input_10x_reads | FASTQ +%%metro grid: raw_asm | 0, 0, 2 +%%metro grid: purging | 1, 0, 2 +%%metro grid: polishing | 2, 0, 2 +%%metro grid: scaffolding | 3, 0, 4 +%%metro grid: genome_statistics | 4, 0, 4 +%%metro grid: organellar_assembly | 1, 4, 2 +%%metro line_order: span +%%metro compact_offsets: true +%%metro legend: bl + +graph LR + subgraph raw_asm [Raw assembly] + %%metro exit: bottom | hic_reads + %%metro exit: right | assemblies,long_reads + input_long_reads[ ] + input_hic_reads[ ] + hifiasm[hifiasm] + input_long_reads -->|long_reads| hifiasm + input_hic_reads -->|hic_reads| hifiasm + end + + subgraph purging [Purging] + %%metro entry: left | assemblies,long_reads + %%metro exit: right | assemblies + purging_minimap2[minimap2] + purge_dups[purge_dups] + purging_minimap2 -->|assemblies,long_reads| purge_dups + end + + subgraph polishing [Polishing] + %%metro entry: left | assemblies + %%metro exit: right | assemblies + input_10x_reads[ ] + longranger[Longranger] + freebayes[FreeBayes] + input_10x_reads -->|i10x_reads| longranger + longranger -->|i10x_reads,assemblies| freebayes + end + + subgraph scaffolding [Scaffolding] + %%metro entry: left | assemblies + %%metro entry: bottom | hic_reads + %%metro exit: right | assemblies + scaffolding_bwamem2[bwa-mem2] + scaffolding_minimap2[minimap2] + yahs[YaHS] + pretextmap[PretextMap] + juicer[Juicer] + cooler[Cooler] + scaffolding_bwamem2 -->|assemblies,hic_reads| yahs + scaffolding_minimap2 -->|assemblies,hic_reads| yahs + yahs -->|assemblies,hic_reads| pretextmap + yahs -->|assemblies,hic_reads| juicer + yahs -->|assemblies,hic_reads| cooler + end + + subgraph genome_statistics [Genome QC] + %%metro entry: left | assemblies + asmstats[asmstats] + gfastats[GFAStats] + busco[BUSCO] + merquryfk[MerquryFK] + asmstats -->|assemblies| gfastats + asmstats -->|assemblies| busco + asmstats -->|assemblies| merquryfk + end + + subgraph organellar_assembly [Organellar assembly] + %%metro entry: left | assemblies, long_reads + input_long_reads_organelle[ ] + mitohifi[MitoHiFi] + oatk[oatk] + + input_long_reads_organelle -->|long_reads| mitohifi + input_long_reads_organelle -->|long_reads| oatk + end + + %% Inter-section edges + hifiasm -->|assemblies,long_reads| purging_minimap2 + hifiasm -->|hic_reads| scaffolding_bwamem2 + hifiasm -->|hic_reads| scaffolding_minimap2 + hifiasm -->|assemblies| longranger + hifiasm -->|assemblies| scaffolding_bwamem2 + hifiasm -->|assemblies| scaffolding_minimap2 + purge_dups -->|assemblies| longranger + purge_dups -->|assemblies| scaffolding_bwamem2 + purge_dups -->|assemblies| scaffolding_minimap2 + freebayes -->|assemblies| scaffolding_bwamem2 + freebayes -->|assemblies| scaffolding_minimap2 + hifiasm -->|assemblies| asmstats + purge_dups -->|assemblies| asmstats + freebayes -->|assemblies| asmstats + yahs -->|assemblies| asmstats + hifiasm -->|assemblies| mitohifi diff --git a/tests/fixtures/icon_caption_wrap.mmd b/tests/fixtures/icon_caption_wrap.mmd new file mode 100644 index 000000000..25c98a10c --- /dev/null +++ b/tests/fixtures/icon_caption_wrap.mmd @@ -0,0 +1,9 @@ +%%metro title: icon wrap +graph LR + subgraph s [S] + a[Start] + out[ ] + a -->|main| out + end +%%metro line: main | Main | #3b82f6 +%%metro files: out | BAM/CRAM diff --git a/tests/fixtures/invalid/backward_feed_rl.mmd b/tests/fixtures/invalid/backward_feed_rl.mmd new file mode 100644 index 000000000..54f8e94a0 --- /dev/null +++ b/tests/fixtures/invalid/backward_feed_rl.mmd @@ -0,0 +1,21 @@ +%%metro title: Backward Feed RL +%%metro style: dark +%%metro line: main | Main | #0570b0 +%%metro grid: rl_a | 1,0 +%%metro grid: rl_b | 2,0 + +graph LR + subgraph rl_a [Source] + %%metro direction: RL + a1[Input] + a2[Process] + a1 -->|main| a2 + end + subgraph rl_b [Target] + %%metro direction: RL + b1[Collect] + b2[Report] + b1 -->|main| b2 + end + + a2 -->|main| b1 diff --git a/tests/fixtures/invalid/merge_trunk_rightward_source.mmd b/tests/fixtures/invalid/merge_trunk_rightward_source.mmd new file mode 100644 index 000000000..7eaf6ea7e --- /dev/null +++ b/tests/fixtures/invalid/merge_trunk_rightward_source.mmd @@ -0,0 +1,41 @@ +%%metro title: Merge Trunk Col Outside Range +%%metro style: dark +%%metro line: main | Main | #0570b0 +%%metro grid: sec_a | 0,0 +%%metro grid: sec_mid | 1,0 +%%metro grid: sec_c | 2,0 +%%metro grid: sec_b | 3,0 +%%metro grid: sec_extra | 4,1 + +graph LR + subgraph sec_a [Source A] + a1[Input A] + a2[Process A] + a1 -->|main| a2 + end + subgraph sec_mid [Middle] + m1[Transform] + m2[Validate] + m1 -->|main| m2 + end + subgraph sec_c [Collector] + c1[Collect] + c2[Report] + c1 -->|main| c2 + end + subgraph sec_b [Source B] + b1[Input B] + b2[Process B] + b1 -->|main| b2 + end + subgraph sec_extra [Extra] + e1[Side] + e2[Store] + e1 -->|main| e2 + end + + a2 -->|main| m1 + b2 -->|main| m1 + a2 -->|main| c1 + b2 -->|main| c1 + m2 -->|main| c1 diff --git a/tests/fixtures/invalid/mixed_entry_opposing.mmd b/tests/fixtures/invalid/mixed_entry_opposing.mmd new file mode 100644 index 000000000..17943e852 --- /dev/null +++ b/tests/fixtures/invalid/mixed_entry_opposing.mmd @@ -0,0 +1,28 @@ +%%metro title: Opposing Entry (LEFT + RIGHT) +%%metro style: dark +%%metro line: a | Line A | #0570b0 +%%metro line: b | Line B | #d7301f +%%metro grid: up | 0,0 +%%metro grid: srcL | 0,1 +%%metro grid: dest | 1,1 + +graph LR + subgraph up [Source Above] + u1[In U] + u2[Out U] + u1 -->|b| u2 + end + subgraph srcL [Source Left] + s1[In L] + s2[Out L] + s1 -->|a| s2 + end + subgraph dest [Destination] + %%metro entry: right | b + d1[Collect] + d2[Report] + d1 -->|a| d2 + d1 -->|b| d2 + end + s2 -->|a| d1 + u2 -->|b| d1 diff --git a/tests/fixtures/invalid/mixed_entry_perpendicular.mmd b/tests/fixtures/invalid/mixed_entry_perpendicular.mmd new file mode 100644 index 000000000..f7bee42a8 --- /dev/null +++ b/tests/fixtures/invalid/mixed_entry_perpendicular.mmd @@ -0,0 +1,28 @@ +%%metro title: Perpendicular Entry (LEFT + TOP) +%%metro style: dark +%%metro line: a | Line A | #0570b0 +%%metro line: b | Line B | #d7301f +%%metro grid: up | 1,0 +%%metro grid: srcL | 0,1 +%%metro grid: dest | 1,1 + +graph LR + subgraph up [Source Above] + u1[In U] + u2[Out U] + u1 -->|b| u2 + end + subgraph srcL [Source Left] + s1[In L] + s2[Out L] + s1 -->|a| s2 + end + subgraph dest [Destination] + %%metro entry: top | b + d1[Collect] + d2[Report] + d1 -->|a| d2 + d1 -->|b| d2 + end + s2 -->|a| d1 + u2 -->|b| d1 diff --git a/tests/fixtures/leaf_file_icon_on_trunk.mmd b/tests/fixtures/leaf_file_icon_on_trunk.mmd new file mode 100644 index 000000000..57141c0e9 --- /dev/null +++ b/tests/fixtures/leaf_file_icon_on_trunk.mmd @@ -0,0 +1,18 @@ +%%metro title: Leaf file icon on a continuing trunk +%%metro line: main | Main | #3b82f6 +%%metro line: index | Index | #e63946 +%%metro file: bam_out | BAM + +graph LR + subgraph proc [Processing] + align[Align] + bam_out[ ] + sort[Sort] + report[Report] + markdup[MarkDup] + + align -->|index| bam_out + align -->|main| sort + sort -->|main| report + sort -->|index| markdup + end diff --git a/tests/fixtures/multiline_labels.mmd b/tests/fixtures/multiline_labels.mmd new file mode 100644 index 000000000..728350b21 --- /dev/null +++ b/tests/fixtures/multiline_labels.mmd @@ -0,0 +1,30 @@ +%%metro title: Multi-line Label Test +%%metro style: dark +%%metro line: shortreads | Short reads | #004b86 +%%metro line: longreads | Long reads | #d9aa00 + +graph LR + subgraph input [Input Processing] + %%metro exit: right | shortreads, longreads + input_fastq[.fq] + input_fasta[.fa] + short_clipper[fastp \n AdapterRemoval] + long_clipper[Porechop ABI \n Porechop] + + input_fastq -->|shortreads| short_clipper + input_fasta -->|longreads| long_clipper + + end + + subgraph qc [Quality Control] + %%metro entry: left | shortreads, longreads + %%metro exit: right | shortreads, longreads + fastqc[FastQC \n falco] + multiqc[MultiQC] + + fastqc -->|shortreads| multiqc + fastqc -->|longreads| multiqc + end + + short_clipper -->|shortreads| fastqc + long_clipper -->|longreads| fastqc diff --git a/tests/fixtures/nextflow/duplicate_processes.mmd b/tests/fixtures/nextflow/duplicate_processes.mmd new file mode 100644 index 000000000..b9c07cee5 --- /dev/null +++ b/tests/fixtures/nextflow/duplicate_processes.mmd @@ -0,0 +1,18 @@ +flowchart TB + subgraph " " + v0["Channel.of"] + end + subgraph "NFCORE_RNASEQ:BAM_SORT_STATS_SAMTOOLS [BAM_SORT_STATS_SAMTOOLS]" + v1(["SAMTOOLS_SORT"]) + v2(["SAMTOOLS_INDEX"]) + end + subgraph "NFCORE_RNASEQ:BAM_SORT_STATS_SAMTOOLS_UNFILTERED [BAM_SORT_STATS_SAMTOOLS_UNFILTERED]" + v3(["SAMTOOLS_SORT"]) + v4(["SAMTOOLS_INDEX"]) + end + v5(["MULTIQC"]) + v0 --> v1 + v1 --> v2 + v2 --> v3 + v3 --> v4 + v4 --> v5 diff --git a/tests/fixtures/nextflow/flat_pipeline.mmd b/tests/fixtures/nextflow/flat_pipeline.mmd new file mode 100644 index 000000000..988322aa4 --- /dev/null +++ b/tests/fixtures/nextflow/flat_pipeline.mmd @@ -0,0 +1,27 @@ +flowchart TB + subgraph " " + v0["Channel.of"] + v1["Channel.of"] + end + v2(["FASTQC"]) + subgraph " " + v3[" "] + v12[" "] + end + v4(["TRIM_READS"]) + v6(["ALIGN"]) + v7(["SORT_BAM"]) + v11(["MULTIQC"]) + v5(( )) + v8(( )) + v0 --> v2 + v0 --> v4 + v1 --> v5 + v2 --> v3 + v2 --> v8 + v4 --> v6 + v5 --> v6 + v6 --> v7 + v7 --> v8 + v8 --> v11 + v11 --> v12 diff --git a/tests/fixtures/nextflow/flat_pipeline.nf b/tests/fixtures/nextflow/flat_pipeline.nf new file mode 100644 index 000000000..61e92b293 --- /dev/null +++ b/tests/fixtures/nextflow/flat_pipeline.nf @@ -0,0 +1,95 @@ +#!/usr/bin/env nextflow + +// A simple flat pipeline: FASTQC + trim + align + sort + multiqc + +params.reads = "reads/*_{1,2}.fastq.gz" +params.reference = "genome.fa" + +process FASTQC { + input: + tuple val(sample_id), path(reads) + + output: + path("*.html"), emit: html + path("*.zip"), emit: zip + + script: + """ + echo fastqc ${reads} + touch ${sample_id}_fastqc.html ${sample_id}_fastqc.zip + """ +} + +process TRIM_READS { + input: + tuple val(sample_id), path(reads) + + output: + tuple val(sample_id), path("*_trimmed.fastq.gz") + + script: + """ + echo trim ${reads} + touch ${sample_id}_1_trimmed.fastq.gz ${sample_id}_2_trimmed.fastq.gz + """ +} + +process ALIGN { + input: + tuple val(sample_id), path(reads) + path(reference) + + output: + tuple val(sample_id), path("*.bam") + + script: + """ + echo align ${reads} to ${reference} + touch ${sample_id}.bam + """ +} + +process SORT_BAM { + input: + tuple val(sample_id), path(bam) + + output: + tuple val(sample_id), path("*.sorted.bam") + + script: + """ + echo sort ${bam} + touch ${sample_id}.sorted.bam + """ +} + +process MULTIQC { + input: + path(reports) + + output: + path("multiqc_report.html") + + script: + """ + echo multiqc . + touch multiqc_report.html + """ +} + +workflow { + reads_ch = Channel.of( + ["sample1", [file("reads/s1_1.fq.gz"), file("reads/s1_2.fq.gz")]] + ) + reference_ch = Channel.of(file("genome.fa")) + + FASTQC(reads_ch) + TRIM_READS(reads_ch) + ALIGN(TRIM_READS.out, reference_ch.collect()) + SORT_BAM(ALIGN.out) + MULTIQC( + FASTQC.out.zip + .mix(SORT_BAM.out.map { it[1] }) + .collect() + ) +} diff --git a/tests/fixtures/nextflow/unquoted_labels.mmd b/tests/fixtures/nextflow/unquoted_labels.mmd new file mode 100644 index 000000000..b69378a24 --- /dev/null +++ b/tests/fixtures/nextflow/unquoted_labels.mmd @@ -0,0 +1,27 @@ +flowchart TB + subgraph " " + v0["Channel.of"] + v1["Channel.of"] + end + v2([FASTQC]) + subgraph " " + v3[" "] + v12[" "] + end + v4([TRIM_READS]) + v6([ALIGN]) + v7([SORT_BAM]) + v11([MULTIQC]) + v5(( )) + v8(( )) + v0 --> v2 + v0 --> v4 + v1 --> v5 + v2 --> v3 + v2 --> v8 + v4 --> v6 + v5 --> v6 + v6 --> v7 + v7 --> v8 + v8 --> v11 + v11 --> v12 diff --git a/tests/fixtures/nextflow/variant_calling.mmd b/tests/fixtures/nextflow/variant_calling.mmd new file mode 100644 index 000000000..31040ee26 --- /dev/null +++ b/tests/fixtures/nextflow/variant_calling.mmd @@ -0,0 +1,52 @@ +flowchart TB + subgraph " " + v0["Channel.of"] + v1["Channel.of"] + end + subgraph "PREPROCESS [PREPROCESS]" + v2(["FASTQC"]) + v3(["FASTP"]) + end + subgraph "ALIGNMENT [ALIGNMENT]" + v4(["BWA_INDEX"]) + v6(["BWA_MEM"]) + v7(["SAMTOOLS_SORT"]) + v8(["SAMTOOLS_INDEX"]) + v5(( )) + end + subgraph "VARIANT_CALLING [VARIANT_CALLING]" + v11(["GATK_HAPLOTYPECALLER"]) + v12(["DEEPVARIANT"]) + v14(["BCFTOOLS_STATS"]) + v9(( )) + v10(( )) + v13(( )) + end + v18(["MULTIQC"]) + subgraph " " + v19[" "] + end + v15(( )) + v0 --> v2 + v0 --> v3 + v1 --> v4 + v1 --> v10 + v2 --> v15 + v3 --> v6 + v3 --> v15 + v4 --> v5 + v5 --> v6 + v6 --> v7 + v7 --> v8 + v7 --> v9 + v8 --> v9 + v9 --> v11 + v10 --> v11 + v11 --> v13 + v9 --> v12 + v10 --> v12 + v12 --> v13 + v13 --> v14 + v14 --> v15 + v15 --> v18 + v18 --> v19 diff --git a/tests/fixtures/nextflow/variant_calling.nf b/tests/fixtures/nextflow/variant_calling.nf new file mode 100644 index 000000000..31b37e753 --- /dev/null +++ b/tests/fixtures/nextflow/variant_calling.nf @@ -0,0 +1,212 @@ +#!/usr/bin/env nextflow + +// Variant calling pipeline with diamonds (two callers -> merge) + +params.reads = "reads/*_{1,2}.fastq.gz" +params.genome = "genome.fa" + +process FASTQC { + input: + tuple val(sample_id), path(reads) + + output: + path("*.zip"), emit: zip + + script: + """ + touch ${sample_id}_fastqc.zip + """ +} + +process FASTP { + input: + tuple val(sample_id), path(reads) + + output: + tuple val(sample_id), path("*_trimmed.fq.gz"), emit: reads + path("*.json"), emit: json + + script: + """ + touch ${sample_id}_1_trimmed.fq.gz ${sample_id}_2_trimmed.fq.gz + touch ${sample_id}.fastp.json + """ +} + +process BWA_INDEX { + input: + path(genome) + + output: + path("bwa_index"), emit: index + + script: + """ + mkdir bwa_index + touch bwa_index/genome.fa.bwt + """ +} + +process BWA_MEM { + input: + tuple val(sample_id), path(reads) + path(index) + + output: + tuple val(sample_id), path("*.bam"), emit: bam + + script: + """ + touch ${sample_id}.bam + """ +} + +process SAMTOOLS_SORT { + input: + tuple val(sample_id), path(bam) + + output: + tuple val(sample_id), path("*.sorted.bam"), emit: bam + + script: + """ + touch ${sample_id}.sorted.bam + """ +} + +process SAMTOOLS_INDEX { + input: + tuple val(sample_id), path(bam) + + output: + tuple val(sample_id), path("*.bai"), emit: bai + + script: + """ + touch ${sample_id}.sorted.bam.bai + """ +} + +process GATK_HAPLOTYPECALLER { + input: + tuple val(sample_id), path(bam), path(bai) + path(genome) + + output: + tuple val(sample_id), path("*.vcf.gz"), emit: vcf + + script: + """ + touch ${sample_id}.gatk.vcf.gz + """ +} + +process DEEPVARIANT { + input: + tuple val(sample_id), path(bam), path(bai) + path(genome) + + output: + tuple val(sample_id), path("*.vcf.gz"), emit: vcf + + script: + """ + touch ${sample_id}.deepvariant.vcf.gz + """ +} + +process BCFTOOLS_STATS { + input: + tuple val(sample_id), path(vcf) + + output: + path("*.stats.txt"), emit: stats + + script: + """ + touch ${sample_id}.stats.txt + """ +} + +process MULTIQC { + input: + path(reports) + + output: + path("multiqc_report.html") + + script: + """ + touch multiqc_report.html + """ +} + +workflow PREPROCESS { + take: + reads + + main: + FASTQC(reads) + FASTP(reads) + + emit: + reads = FASTP.out.reads + fastqc_zip = FASTQC.out.zip + fastp_json = FASTP.out.json +} + +workflow ALIGNMENT { + take: + reads + genome + + main: + BWA_INDEX(genome) + BWA_MEM(reads, BWA_INDEX.out.index.collect()) + SAMTOOLS_SORT(BWA_MEM.out.bam) + SAMTOOLS_INDEX(SAMTOOLS_SORT.out.bam) + + emit: + bam = SAMTOOLS_SORT.out.bam + bai = SAMTOOLS_INDEX.out.bai +} + +workflow VARIANT_CALLING { + take: + bam + bai + genome + + main: + bam_bai = bam.join(bai) + genome_ch = genome.collect() + + GATK_HAPLOTYPECALLER(bam_bai, genome_ch) + DEEPVARIANT(bam_bai, genome_ch) + + BCFTOOLS_STATS( + GATK_HAPLOTYPECALLER.out.vcf + .mix(DEEPVARIANT.out.vcf) + ) + + emit: + stats = BCFTOOLS_STATS.out.stats +} + +workflow { + reads_ch = Channel.of( + ["sample1", [file("reads/s1_1.fq.gz"), file("reads/s1_2.fq.gz")]] + ) + genome_ch = Channel.of(file("genome.fa")) + + PREPROCESS(reads_ch) + ALIGNMENT(PREPROCESS.out.reads, genome_ch) + VARIANT_CALLING(ALIGNMENT.out.bam, ALIGNMENT.out.bai, genome_ch) + + MULTIQC( + PREPROCESS.out.fastqc_zip + .mix(PREPROCESS.out.fastp_json) + .mix(VARIANT_CALLING.out.stats) + .collect() + ) +} diff --git a/tests/fixtures/nextflow/with_subworkflows.mmd b/tests/fixtures/nextflow/with_subworkflows.mmd new file mode 100644 index 000000000..e0e3609f3 --- /dev/null +++ b/tests/fixtures/nextflow/with_subworkflows.mmd @@ -0,0 +1,44 @@ +flowchart TB + subgraph " " + v0["Channel.of"] + v1["Channel.of"] + v2["Channel.of"] + end + subgraph "PREPROCESS [PREPROCESS]" + v3(["FASTQC"]) + v4(["TRIMGALORE"]) + end + subgraph "ALIGNMENT [ALIGNMENT]" + v5(["STAR_GENOMEGENERATE"]) + v7(["STAR_ALIGN"]) + v8(["SAMTOOLS_SORT"]) + v9(["SAMTOOLS_INDEX"]) + v6(( )) + end + subgraph " " + v10["bai"] + v17[" "] + end + subgraph "QUANTIFICATION [QUANTIFICATION]" + v11(["SALMON_QUANT"]) + end + v16(["MULTIQC"]) + v12(( )) + v0 --> v3 + v0 --> v4 + v1 --> v5 + v2 --> v5 + v2 --> v11 + v3 --> v12 + v4 --> v7 + v4 --> v12 + v5 --> v6 + v6 --> v7 + v7 --> v8 + v8 --> v12 + v8 --> v9 + v8 --> v11 + v9 --> v10 + v11 --> v12 + v12 --> v16 + v16 --> v17 diff --git a/tests/fixtures/nextflow/with_subworkflows.nf b/tests/fixtures/nextflow/with_subworkflows.nf new file mode 100644 index 000000000..54386070a --- /dev/null +++ b/tests/fixtures/nextflow/with_subworkflows.nf @@ -0,0 +1,184 @@ +#!/usr/bin/env nextflow + +// Pipeline with subworkflows: preprocessing -> alignment -> quantification + +params.reads = "reads/*_{1,2}.fastq.gz" +params.genome = "genome.fa" +params.gtf = "genes.gtf" + +process FASTQC { + input: + tuple val(sample_id), path(reads) + + output: + path("*.zip"), emit: zip + + script: + """ + touch ${sample_id}_fastqc.zip + """ +} + +process TRIMGALORE { + input: + tuple val(sample_id), path(reads) + + output: + tuple val(sample_id), path("*_trimmed.fq.gz"), emit: reads + path("*_report.txt"), emit: log + + script: + """ + touch ${sample_id}_1_trimmed.fq.gz ${sample_id}_2_trimmed.fq.gz + touch ${sample_id}_trimming_report.txt + """ +} + +process STAR_GENOMEGENERATE { + input: + path(genome) + path(gtf) + + output: + path("star_index"), emit: index + + script: + """ + mkdir star_index + touch star_index/SA + """ +} + +process STAR_ALIGN { + input: + tuple val(sample_id), path(reads) + path(index) + + output: + tuple val(sample_id), path("*.bam"), emit: bam + path("*.Log.final.out"), emit: log + + script: + """ + touch ${sample_id}.Aligned.sortedByCoord.out.bam + touch ${sample_id}.Log.final.out + """ +} + +process SAMTOOLS_SORT { + input: + tuple val(sample_id), path(bam) + + output: + tuple val(sample_id), path("*.sorted.bam"), emit: bam + + script: + """ + touch ${sample_id}.sorted.bam + """ +} + +process SAMTOOLS_INDEX { + input: + tuple val(sample_id), path(bam) + + output: + tuple val(sample_id), path("*.bai"), emit: bai + + script: + """ + touch ${sample_id}.sorted.bam.bai + """ +} + +process SALMON_QUANT { + input: + tuple val(sample_id), path(bam) + path(gtf) + + output: + path("${sample_id}_quant"), emit: results + + script: + """ + mkdir ${sample_id}_quant + touch ${sample_id}_quant/quant.sf + """ +} + +process MULTIQC { + input: + path(reports) + + output: + path("multiqc_report.html") + + script: + """ + touch multiqc_report.html + """ +} + +workflow PREPROCESS { + take: + reads + + main: + FASTQC(reads) + TRIMGALORE(reads) + + emit: + reads = TRIMGALORE.out.reads + fastqc_zip = FASTQC.out.zip + trim_log = TRIMGALORE.out.log +} + +workflow ALIGNMENT { + take: + reads + genome + gtf + + main: + STAR_GENOMEGENERATE(genome, gtf) + STAR_ALIGN(reads, STAR_GENOMEGENERATE.out.index.collect()) + SAMTOOLS_SORT(STAR_ALIGN.out.bam) + SAMTOOLS_INDEX(SAMTOOLS_SORT.out.bam) + + emit: + bam = SAMTOOLS_SORT.out.bam + bai = SAMTOOLS_INDEX.out.bai + star_log = STAR_ALIGN.out.log +} + +workflow QUANTIFICATION { + take: + bam + gtf + + main: + SALMON_QUANT(bam, gtf) + + emit: + results = SALMON_QUANT.out.results +} + +workflow { + reads_ch = Channel.of( + ["sample1", [file("reads/s1_1.fq.gz"), file("reads/s1_2.fq.gz")]] + ) + genome_ch = Channel.of(file("genome.fa")) + gtf_ch = Channel.of(file("genes.gtf")) + + PREPROCESS(reads_ch) + ALIGNMENT(PREPROCESS.out.reads, genome_ch, gtf_ch) + QUANTIFICATION(ALIGNMENT.out.bam, gtf_ch) + + MULTIQC( + PREPROCESS.out.fastqc_zip + .mix(PREPROCESS.out.trim_log) + .mix(ALIGNMENT.out.star_log) + .mix(QUANTIFICATION.out.results) + .collect() + ) +} diff --git a/tests/fixtures/off_track_output_branched.mmd b/tests/fixtures/off_track_output_branched.mmd new file mode 100644 index 000000000..f07079ac5 --- /dev/null +++ b/tests/fixtures/off_track_output_branched.mmd @@ -0,0 +1,22 @@ +%%metro title: Off-track output from a low branch +%%metro line: top | Top | #1f77b4 +%%metro line: mid | Mid | #2ca02c +%%metro line: bot | Bot | #d62728 +%%metro off_track: bam_out + +graph LR + subgraph preprocess [Pre-processing] + start[Start] + t1[TopStep] + m1[MidStep] + b1[BotA] + b2[BotB] + markdup[MarkDup] + start -->|top| t1 + start -->|mid| m1 + start -->|bot| b1 + b1 -->|bot| b2 + b2 -->|bot| markdup + markdup -->|bot| bam_out + bam_out[bam/cram] + end diff --git a/tests/fixtures/off_track_outputs_along_trunk.mmd b/tests/fixtures/off_track_outputs_along_trunk.mmd new file mode 100644 index 000000000..355fa2742 --- /dev/null +++ b/tests/fixtures/off_track_outputs_along_trunk.mmd @@ -0,0 +1,28 @@ +%%metro title: Off-track outputs along a single trunk +%%metro line: core | Core | #2e8b57 +%%metro files: cram_a | CRAM +%%metro files: cram_b | CRAM +%%metro files: cram_c | CRAM +%%metro off_track: cram_a +%%metro off_track: cram_b +%%metro off_track: cram_c + +graph LR + subgraph proc [Recalibration] + samtools[samtools] + prepare_recal[prepare recalibration] + applybqsr[applybqsr] + done[mosdepth] + + samtools -->|core| prepare_recal + prepare_recal -->|core| applybqsr + applybqsr -->|core| done + + samtools -->|core| cram_a + prepare_recal -->|core| cram_b + applybqsr -->|core| cram_c + + cram_a[ ] + cram_b[ ] + cram_c[ ] + end diff --git a/tests/fixtures/rail_diagonal_labels.mmd b/tests/fixtures/rail_diagonal_labels.mmd new file mode 100644 index 000000000..ebdcd3d47 --- /dev/null +++ b/tests/fixtures/rail_diagonal_labels.mmd @@ -0,0 +1,19 @@ +%%metro title: Rail diagonal labels +%%metro style: dark +%%metro line_spread: rails +%%metro label_angle: 45 +%%metro line: germline | Germline | #2db572 +%%metro line: tumor | Tumour | #f4a300 +%%metro line: pair | Pair | #0570b0 + +graph LR + subgraph calling [Variant calling] + bqsr[BQSR] + callvar[Call variants] + somatic[Somatic filter] + concord[Concordance] + + bqsr -->|germline,tumor,pair| callvar + callvar -->|germline,tumor,pair| somatic + somatic -->|germline,tumor,pair| concord + end diff --git a/tests/fixtures/rail_marked_single_line.mmd b/tests/fixtures/rail_marked_single_line.mmd new file mode 100644 index 000000000..cf220b536 --- /dev/null +++ b/tests/fixtures/rail_marked_single_line.mmd @@ -0,0 +1,32 @@ +%%metro title: Rail marked single-line caller +%%metro style: dark +%%metro line_spread: rails | calling +%%metro label_angle: 45 +%%metro line: core | Core | #2db572 +%%metro line: germline | Germline | #0570b0 +%%metro line: tumor | Tumour | #f4a300 +%%metro line: pair | Pair | #d62728 +%%metro marker: haplo | circle, #1b3a6b + +graph LR + subgraph prep [Preprocessing] + input[Input] + recal[Recalibrate] + + input -->|core,germline,tumor,pair| recal + end + subgraph calling [Variant calling] + bqsr[BQSR] + haplo[HaplotypeCaller] + mutect[Mutect2] + strelka[Strelka] + merge[Merge] + + bqsr -->|germline| haplo + bqsr -->|tumor| mutect + bqsr -->|pair| strelka + haplo -->|germline| merge + mutect -->|tumor| merge + strelka -->|pair| merge + end + recal -->|core,germline,tumor,pair| bqsr diff --git a/tests/fixtures/rail_marker_fill.mmd b/tests/fixtures/rail_marker_fill.mmd new file mode 100644 index 000000000..2733023cb --- /dev/null +++ b/tests/fixtures/rail_marker_fill.mmd @@ -0,0 +1,16 @@ +%%metro title: Rail interchange with coloured marker +%%metro style: dark +%%metro line_spread: rails +%%metro line: line_a | Line A | #2db572 +%%metro line: line_b | Line B | #f4a300 +%%metro marker: interchange | circle, #1f4e79 + +graph LR + subgraph proc [Process] + src[Source] + interchange[Interchange] + sink[Sink] + + src -->|line_a,line_b| interchange + interchange -->|line_a,line_b| sink + end diff --git a/tests/fixtures/rail_marker_subset_interchange.mmd b/tests/fixtures/rail_marker_subset_interchange.mmd new file mode 100644 index 000000000..f345057ce --- /dev/null +++ b/tests/fixtures/rail_marker_subset_interchange.mmd @@ -0,0 +1,24 @@ +%%metro title: Coloured subset interchange on rails +%%metro style: dark +%%metro line_spread: rails +%%metro line: line_a | Line A | #2db572 +%%metro line: line_b | Line B | #f4a300 +%%metro line: line_c | Line C | #e4509a +%%metro marker: hub | circle, #1f4e79 + +graph LR + subgraph proc [Process] + src_a[SrcA] + src_b[SrcB] + src_c[SrcC] + hub[Hub] + sink_a[SinkA] + sink_b[SinkB] + sink_c[SinkC] + + src_a -->|line_a| hub + src_c -->|line_c| hub + hub -->|line_a| sink_a + hub -->|line_c| sink_c + src_b -->|line_b| sink_b + end diff --git a/tests/fixtures/rail_pitch_vs_labels.mmd b/tests/fixtures/rail_pitch_vs_labels.mmd new file mode 100644 index 000000000..16e43ea69 --- /dev/null +++ b/tests/fixtures/rail_pitch_vs_labels.mmd @@ -0,0 +1,39 @@ +%%metro title: rail pitch vs labels +%%metro label_angle: 45 +%%metro line_spread: rails | calling +%%metro grid: intro | 0,0 +%%metro grid: calling | 0,1 +%%metro line: core | Core | #2db572 +%%metro line: g | Germline | #0570b0 +%%metro line: t | Tumour | #d62728 + +%%metro files: bam_out | BAM/CRAM +%%metro off_track: bam_out +%%metro marker: bx | square, solid +%%metro marker: by | square, solid + +graph LR + subgraph intro [Intro] + a[Map] + bx[Convert] + by[MarkDup] + z[Merge] + bam_out[ ] + a -->|core| bx + a -->|core| by + bx -->|core| z + by -->|core| z + a -->|core| bam_out + end + subgraph calling [Calling] + c0[ ] + gc[Germline Caller] + tc[Tumour Caller] + sh[Shared] + sink[ ] + c0 -->|g| gc + gc -->|g| sh + c0 -->|t| tc + tc -->|t| sh + sh -->|g,t| sink + end diff --git a/tests/fixtures/rail_single_line_callers.mmd b/tests/fixtures/rail_single_line_callers.mmd new file mode 100644 index 000000000..3b98f139d --- /dev/null +++ b/tests/fixtures/rail_single_line_callers.mmd @@ -0,0 +1,23 @@ +%%metro title: Rail single-line callers +%%metro style: dark +%%metro line_spread: rails +%%metro label_angle: 45 +%%metro line: germline | Germline | #2db572 +%%metro line: tumor | Tumour | #f4a300 +%%metro line: pair | Pair | #0570b0 + +graph LR + subgraph calling [Variant calling] + bqsr[BQSR] + haplo[HaplotypeCaller] + mutect[Mutect2] + strelka[Strelka] + merge[Merge] + + bqsr -->|germline| haplo + bqsr -->|tumor| mutect + bqsr -->|pair| strelka + haplo -->|germline| merge + mutect -->|tumor| merge + strelka -->|pair| merge + end diff --git a/tests/fixtures/regressions/away_exit_wrap_interior_left.mmd b/tests/fixtures/regressions/away_exit_wrap_interior_left.mmd new file mode 100644 index 000000000..334c883d8 --- /dev/null +++ b/tests/fixtures/regressions/away_exit_wrap_interior_left.mmd @@ -0,0 +1,25 @@ +%%metro title: Away-facing exit wraps back through interior (target left) +%%metro line: main | Main | #e64980 +%%metro grid: feed | 1,0 +%%metro grid: post | 1,1 +%%metro grid: report | 0,1 + +graph LR + subgraph feed [Feed] + f1[F1] -->|main| f2[F2] + end + subgraph post [Post] + %%metro direction: TB + %%metro entry: top | main + %%metro exit: bottom | main + p1[P1] -->|main| p2[P2] + p2 -->|main| p3[P3] + end + subgraph report [Report] + %%metro direction: RL + %%metro entry: top | main + r1[R1] -->|main| r2[R2] + r2 -->|main| r3[R3] + end + f2 -->|main| p1 + p3 -->|main| r1 diff --git a/tests/fixtures/regressions/away_exit_wrap_interior_right.mmd b/tests/fixtures/regressions/away_exit_wrap_interior_right.mmd new file mode 100644 index 000000000..950db8268 --- /dev/null +++ b/tests/fixtures/regressions/away_exit_wrap_interior_right.mmd @@ -0,0 +1,25 @@ +%%metro title: Away-facing exit wraps back through interior (target right) +%%metro line: main | Main | #e64980 +%%metro grid: feed | 0,0 +%%metro grid: post | 0,1 +%%metro grid: report | 1,1 + +graph LR + subgraph feed [Feed] + f1[F1] -->|main| f2[F2] + end + subgraph post [Post] + %%metro direction: TB + %%metro entry: top | main + %%metro exit: bottom | main + p1[P1] -->|main| p2[P2] + p2 -->|main| p3[P3] + end + subgraph report [Report] + %%metro direction: LR + %%metro entry: top | main + r1[R1] -->|main| r2[R2] + r2 -->|main| r3[R3] + end + f2 -->|main| p1 + p3 -->|main| r1 diff --git a/tests/fixtures/regressions/cross_column_perp_entry_overflow.mmd b/tests/fixtures/regressions/cross_column_perp_entry_overflow.mmd new file mode 100644 index 000000000..e03b74a26 --- /dev/null +++ b/tests/fixtures/regressions/cross_column_perp_entry_overflow.mmd @@ -0,0 +1,169 @@ +%%metro title: Variant Calling Pipeline +%%metro style: dark +%%metro legend: br +%%metro line_order: definition +%%metro center_ports: true +%%metro compact_offsets: true +%%metro file: fastq_in | FASTQ +%%metro file: bam_in | BAM +%%metro file: cram_in | CRAM +%%metro file: vcf_out | VCF +%%metro file: report_out | HTML +%%metro line: germline | Germline | #0570b0 +%%metro line: tumor_only | Tumor only | #d62728 +%%metro line: somatic | Tumor-normal pair | #756bb1 + +graph LR + subgraph preprocessing [Pre-processing] + %%metro direction: TB + %%metro exit: right | germline, tumor_only, somatic + fastq_in[ ] + bam_in[ ] + fastqc[FastQC] + fastp[FastP] + umi[UMI consensus] + bwa[BWA-MEM] + bwa2[BWA-MEM2] + dragmap[DragMap] + sentieon_bwa[Sentieon BWA] + merge_index[samtools merge/index] + markdup[MarkDuplicates] + sentieon_dedup[Sentieon Dedup] + bqsr[BaseRecalibrator] + applybqsr[ApplyBQSR] + mosdepth[mosdepth] + ngscheckmate[NGSCheckmate] + + fastq_in -->|germline,tumor_only,somatic| fastqc + fastq_in -->|germline,tumor_only,somatic| fastp + bam_in -->|germline,tumor_only,somatic| fastp + fastp -->|germline,tumor_only,somatic| umi + umi -->|germline,tumor_only,somatic| bwa + umi -->|germline,tumor_only,somatic| bwa2 + umi -->|germline,tumor_only,somatic| dragmap + umi -->|germline,tumor_only,somatic| sentieon_bwa + bwa -->|germline,tumor_only,somatic| merge_index + bwa2 -->|germline,tumor_only,somatic| merge_index + dragmap -->|germline,tumor_only,somatic| merge_index + sentieon_bwa -->|germline,tumor_only,somatic| merge_index + merge_index -->|germline,tumor_only,somatic| markdup + merge_index -->|germline,tumor_only,somatic| sentieon_dedup + markdup -->|germline,tumor_only,somatic| bqsr + sentieon_dedup -->|germline,tumor_only,somatic| bqsr + bqsr -->|germline,tumor_only,somatic| applybqsr + applybqsr -->|germline,tumor_only,somatic| mosdepth + applybqsr -->|germline,tumor_only,somatic| ngscheckmate + end + + subgraph variant_calling [Variant calling] + %%metro entry: left | germline, tumor_only, somatic + %%metro exit: right | germline, tumor_only, somatic + cram_in[ ] + haplotypecaller[HaplotypeCaller] + deepvariant[DeepVariant] + sentieon_dnascope[Sentieon DNAscope] + sentieon_haplotyper[Sentieon Haplotyper] + freebayes[FreeBayes] + strelka[Strelka] + mpileup[bcftools mpileup] + mutect2[Mutect2] + lofreq[LoFreq] + muse[MuSE] + sentieon_tnscope[Sentieon TNscope] + manta[Manta] + tiddit[TIDDIT] + ascat[ASCAT] + cnvkit[CNVkit] + controlfreec[Control-FREEC] + indexcov[indexcov] + msisensor2[MSIsensor2] + msisensorpro[MSIsensor-pro] + vcfs[ ] + + cram_in -->|germline| haplotypecaller + cram_in -->|germline| deepvariant + cram_in -->|germline| sentieon_dnascope + cram_in -->|germline| sentieon_haplotyper + cram_in -->|germline,tumor_only,somatic| freebayes + cram_in -->|germline,somatic| strelka + cram_in -->|germline,tumor_only,somatic| mpileup + cram_in -->|tumor_only,somatic| mutect2 + cram_in -->|tumor_only| lofreq + cram_in -->|somatic| muse + cram_in -->|tumor_only,somatic| sentieon_tnscope + cram_in -->|germline,tumor_only,somatic| manta + cram_in -->|germline,tumor_only,somatic| tiddit + cram_in -->|somatic| ascat + cram_in -->|germline,tumor_only,somatic| cnvkit + cram_in -->|tumor_only,somatic| controlfreec + cram_in -->|germline,somatic| indexcov + cram_in -->|tumor_only| msisensor2 + cram_in -->|somatic| msisensorpro + + haplotypecaller -->|germline| vcfs + deepvariant -->|germline| vcfs + sentieon_dnascope -->|germline| vcfs + sentieon_haplotyper -->|germline| vcfs + freebayes -->|germline,tumor_only,somatic| vcfs + strelka -->|germline,somatic| vcfs + mpileup -->|germline,tumor_only,somatic| vcfs + mutect2 -->|tumor_only,somatic| vcfs + lofreq -->|tumor_only| vcfs + muse -->|somatic| vcfs + sentieon_tnscope -->|tumor_only,somatic| vcfs + manta -->|germline,tumor_only,somatic| vcfs + tiddit -->|germline,tumor_only,somatic| vcfs + ascat -->|somatic| vcfs + cnvkit -->|germline,tumor_only,somatic| vcfs + controlfreec -->|tumor_only,somatic| vcfs + indexcov -->|germline,somatic| vcfs + msisensor2 -->|tumor_only| vcfs + msisensorpro -->|somatic| vcfs + end + + subgraph post_vc [Post-processing] + filter_vcfs[Filter VCFs] + normalize[Normalize] + concatenate[Concatenate] + consensus[Consensus] + varlociraptor[Varlociraptor] + bcftools_stats[bcftools stats] + vcftools[VCFtools] + + filter_vcfs -->|germline,tumor_only,somatic| normalize + normalize -->|germline,tumor_only,somatic| concatenate + concatenate -->|germline,tumor_only,somatic| consensus + consensus -->|germline,tumor_only,somatic| varlociraptor + varlociraptor -->|germline,tumor_only,somatic| bcftools_stats + bcftools_stats -->|germline,tumor_only,somatic| vcftools + end + + subgraph annotation [Annotation] + snpeff[snpEff] + vep[VEP] + bcftools_ann[bcftools annotate] + snpsift[SnpSift] + + snpeff -->|germline,tumor_only,somatic| vep + vep -->|germline,tumor_only,somatic| bcftools_ann + bcftools_ann -->|germline,tumor_only,somatic| snpsift + end + + subgraph reporting [Reporting] + multiqc[MultiQC] + vcf_out[ ] + report_out[ ] + + multiqc -->|germline,tumor_only,somatic| report_out + snpsift_to_vcf[ ] + snpsift_to_vcf -->|germline,tumor_only,somatic| vcf_out + end + + %% Inter-section edges + applybqsr -->|germline,tumor_only,somatic| cram_in + vcfs -->|germline,tumor_only,somatic| filter_vcfs + vcftools -->|germline,tumor_only,somatic| snpeff + snpsift -->|germline,tumor_only,somatic| snpsift_to_vcf + fastqc -->|germline,tumor_only,somatic| multiqc + mosdepth -->|germline,tumor_only,somatic| multiqc + bcftools_stats -->|germline,tumor_only,somatic| multiqc diff --git a/tests/fixtures/regressions/lr_perpendicular_ports_overflow.mmd b/tests/fixtures/regressions/lr_perpendicular_ports_overflow.mmd new file mode 100644 index 000000000..23d079b04 --- /dev/null +++ b/tests/fixtures/regressions/lr_perpendicular_ports_overflow.mmd @@ -0,0 +1,31 @@ +%%metro title: LR section with both ports forced perpendicular +%%metro line: l1 | Line 1 | #e64980 | solid +%%metro grid: upstream | 0,0 +%%metro grid: annotation | 0,1 +%%metro grid: downstream | 0,2 + +graph LR + subgraph upstream [Upstream] + u1[U1] + u2[U2] + u1 -->|l1| u2 + end + subgraph annotation [Annotation] + %%metro direction: LR + %%metro entry: top | l1 + %%metro exit: bottom | l1 + snpeff[snpEff] + vep[VEP] + bcftools_ann[bcftools] + snpsift[SnpSift] + snpeff -->|l1| vep + vep -->|l1| bcftools_ann + bcftools_ann -->|l1| snpsift + end + subgraph downstream [Downstream] + d1[D1] + d2[D2] + d1 -->|l1| d2 + end + u2 -->|l1| snpeff + snpsift -->|l1| d1 diff --git a/tests/fixtures/regressions/rnaseq_branch_fold_wrap.mmd b/tests/fixtures/regressions/rnaseq_branch_fold_wrap.mmd new file mode 100644 index 000000000..7738f5531 --- /dev/null +++ b/tests/fixtures/regressions/rnaseq_branch_fold_wrap.mmd @@ -0,0 +1,152 @@ +%%metro title: rnaseq branch-fold regression (#1080/#1081) +%%metro style: dark +%%metro line: star_rsem | Aligner: STAR, Quantification: RSEM | #0570b0 +%%metro line: star_salmon | Aligner: STAR, Quantification: Salmon (default) | #2db572 +%%metro line: hisat2 | Aligner: HISAT2, Quantification: None | #f5c542 +%%metro line: bowtie2_salmon | Aligner: Bowtie2, Quantification: Salmon | #ff8c00 +%%metro line: pseudo_salmon | Pseudo-aligner: Salmon, Quantification: Salmon | #e63946 +%%metro line: pseudo_kallisto | Pseudo-aligner: Kallisto, Quantification: Kallisto | #7b2d3b + +%% Pre-processing + +%% Genome alignment & quantification + +%% Pseudo-alignment & quantification + +%% Post-processing + +%% Quality control & reporting + +graph LR + subgraph preprocessing [Pre-processing] + %%metro exit: right | star_salmon, star_rsem, hisat2, bowtie2_salmon + %%metro exit: bottom | pseudo_salmon, pseudo_kallisto + fastq_in[ ] + cat_fastq[cat FASTQ] + fastqc_raw[FastQC] + umi_tools_extract[UMI-tools Extract] + fastp[fastp] + trimgalore[Trim Galore!] + fastqc_trimmed[FastQC] + bbsplit[BBSplit] + sortmerna[SortMeRNA] + ribodetector[RiboDetector] + bowtie2_rrna[Bowtie2] + fastqc_filtered[FastQC] + infer_strandedness[Infer Strand.] + + fastq_in -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| cat_fastq + cat_fastq -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_raw + fastqc_raw -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| umi_tools_extract + + umi_tools_extract -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastp + umi_tools_extract -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| trimgalore + fastp -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_trimmed + trimgalore -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_trimmed + + fastqc_trimmed -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| bbsplit + bbsplit -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| sortmerna + bbsplit -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| ribodetector + bbsplit -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| bowtie2_rrna + sortmerna -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + ribodetector -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + bowtie2_rrna -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + fastqc_filtered -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| infer_strandedness + end + + subgraph genome_align [Genome alignment & quantification] + %%metro entry: left | star_salmon, star_rsem, hisat2, bowtie2_salmon + %%metro exit: right | star_salmon, star_rsem, bowtie2_salmon + %%metro exit: right | hisat2 + star[STAR] + hisat2_align[HISAT2] + bowtie2_align[Bowtie2] + rsem[RSEM] + salmon_quant[Salmon] + umi_tools_dedup[UMI-tools Dedup] + tximport_ga[tximport] + summarized_exp_ga[Sum. Exp.] + _h1[hidden] + _h2[hidden] + _h3[hidden] + + star -->|star_rsem,star_salmon| umi_tools_dedup + hisat2_align -->|hisat2| umi_tools_dedup + bowtie2_align -->|bowtie2_salmon| umi_tools_dedup + umi_tools_dedup -->|star_rsem| rsem + umi_tools_dedup -->|star_salmon,bowtie2_salmon| salmon_quant + umi_tools_dedup -->|hisat2| _h1 + _h1 -->|hisat2| _h2 + _h2 -->|hisat2| _h3 + salmon_quant -->|star_salmon,bowtie2_salmon| tximport_ga + rsem -->|star_rsem| tximport_ga + tximport_ga -->|star_salmon,star_rsem,bowtie2_salmon| summarized_exp_ga + end + + subgraph pseudo_align [Pseudo-alignment & quantification] + %%metro entry: left | pseudo_salmon, pseudo_kallisto + salmon_pseudo[Salmon] + kallisto[Kallisto] + tximport_pa[tximport] + summarized_exp_pa[Sum. Exp.] + deseq2_pca_pseudo[DESeq2 PCA] + multiqc_quant[MultiQC] + report_quant[ ] + + salmon_pseudo -->|pseudo_salmon| tximport_pa + kallisto -->|pseudo_kallisto| tximport_pa + tximport_pa -->|pseudo_salmon,pseudo_kallisto| summarized_exp_pa + summarized_exp_pa -->|pseudo_salmon,pseudo_kallisto| deseq2_pca_pseudo + deseq2_pca_pseudo -->|pseudo_salmon,pseudo_kallisto| multiqc_quant + multiqc_quant -->|pseudo_salmon,pseudo_kallisto| report_quant + end + + subgraph postprocessing [Post-processing] + %%metro direction: TB + %%metro entry: left | star_salmon, star_rsem, hisat2, bowtie2_salmon + %%metro exit: bottom | star_salmon, star_rsem, hisat2, bowtie2_salmon + picard[Picard] + bedtools[BEDTools] + bedgraph[bedGraphToBigWig] + stringtie[StringTie] + + picard -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| bedtools + bedtools -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| bedgraph + bedgraph -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| stringtie + end + + subgraph qc_report [Quality control & reporting] + %%metro direction: RL + %%metro entry: top | star_salmon, star_rsem, hisat2, bowtie2_salmon + rseqc[RSeQC] + preseq[Preseq] + qualimap[Qualimap] + dupradar[dupRadar] + featurecounts[featureCounts] + deseq2_pca[DESeq2 PCA] + kraken2[Kraken2/Bracken] + sylph[Sylph] + multiqc_final[MultiQC] + report_final[ ] + + rseqc -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| preseq + preseq -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| qualimap + qualimap -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| dupradar + dupradar -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| featurecounts + featurecounts -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| deseq2_pca + deseq2_pca -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| kraken2 + deseq2_pca -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| sylph + kraken2 -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| multiqc_final + sylph -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| multiqc_final + multiqc_final -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| report_final + end + + %% Inter-section edges + infer_strandedness -->|star_salmon,star_rsem| star + infer_strandedness -->|hisat2| hisat2_align + infer_strandedness -->|bowtie2_salmon| bowtie2_align + infer_strandedness -->|pseudo_salmon| salmon_pseudo + infer_strandedness -->|pseudo_kallisto| kallisto + summarized_exp_ga -->|star_salmon,star_rsem,bowtie2_salmon| picard + _h3 -->|hisat2| picard + stringtie -->|star_salmon,star_rsem,hisat2,bowtie2_salmon| rseqc diff --git a/tests/fixtures/regressions/stacked_collector_fanin.mmd b/tests/fixtures/regressions/stacked_collector_fanin.mmd new file mode 100644 index 000000000..c052655b3 --- /dev/null +++ b/tests/fixtures/regressions/stacked_collector_fanin.mmd @@ -0,0 +1,173 @@ +%%metro title: Stacked Collector Fan-in +%%metro style: dark +%%metro legend: br +%%metro line_order: definition +%%metro center_ports: true +%%metro compact_offsets: true +%%metro file: fastq_in | FASTQ +%%metro file: bam_in | BAM +%%metro file: cram_in | CRAM +%%metro file: vcf_out | VCF +%%metro file: report_out | HTML +%%metro line: germline | Germline | #0570b0 +%%metro line: tumor_only | Tumor only | #d62728 +%%metro line: somatic | Tumor-normal pair | #756bb1 +%%metro grid: preprocessing | 0,0,1,2 +%%metro grid: variant_calling | 0,1,3,1 +%%metro grid: post_vc | 1,1,1,1 +%%metro grid: annotation | 1,2,1,1 +%%metro grid: reporting | 1,3,1,1 + +graph LR + subgraph preprocessing [Pre-processing] + %%metro exit: right | germline, tumor_only, somatic + fastq_in[ ] + bam_in[ ] + fastqc[FastQC] + fastp[FastP] + umi[UMI consensus] + bwa[BWA-MEM] + bwa2[BWA-MEM2] + dragmap[DragMap] + sentieon_bwa[Sentieon BWA] + merge_index[samtools merge/index] + markdup[MarkDuplicates] + sentieon_dedup[Sentieon Dedup] + bqsr[BaseRecalibrator] + applybqsr[ApplyBQSR] + mosdepth[mosdepth] + ngscheckmate[NGSCheckmate] + + fastq_in -->|germline,tumor_only,somatic| fastqc + fastq_in -->|germline,tumor_only,somatic| fastp + bam_in -->|germline,tumor_only,somatic| fastp + fastp -->|germline,tumor_only,somatic| umi + umi -->|germline,tumor_only,somatic| bwa + umi -->|germline,tumor_only,somatic| bwa2 + umi -->|germline,tumor_only,somatic| dragmap + umi -->|germline,tumor_only,somatic| sentieon_bwa + bwa -->|germline,tumor_only,somatic| merge_index + bwa2 -->|germline,tumor_only,somatic| merge_index + dragmap -->|germline,tumor_only,somatic| merge_index + sentieon_bwa -->|germline,tumor_only,somatic| merge_index + merge_index -->|germline,tumor_only,somatic| markdup + merge_index -->|germline,tumor_only,somatic| sentieon_dedup + markdup -->|germline,tumor_only,somatic| bqsr + sentieon_dedup -->|germline,tumor_only,somatic| bqsr + bqsr -->|germline,tumor_only,somatic| applybqsr + applybqsr -->|germline,tumor_only,somatic| mosdepth + applybqsr -->|germline,tumor_only,somatic| ngscheckmate + end + + subgraph variant_calling [Variant calling] + %%metro entry: left | germline, tumor_only, somatic + %%metro exit: right | germline, tumor_only, somatic + cram_in[ ] + haplotypecaller[HaplotypeCaller] + deepvariant[DeepVariant] + sentieon_dnascope[Sentieon DNAscope] + sentieon_haplotyper[Sentieon Haplotyper] + freebayes[FreeBayes] + strelka[Strelka] + mpileup[bcftools mpileup] + mutect2[Mutect2] + lofreq[LoFreq] + muse[MuSE] + sentieon_tnscope[Sentieon TNscope] + manta[Manta] + tiddit[TIDDIT] + ascat[ASCAT] + cnvkit[CNVkit] + controlfreec[Control-FREEC] + indexcov[indexcov] + msisensor2[MSIsensor2] + msisensorpro[MSIsensor-pro] + vcfs[ ] + + cram_in -->|germline| haplotypecaller + cram_in -->|germline| deepvariant + cram_in -->|germline| sentieon_dnascope + cram_in -->|germline| sentieon_haplotyper + cram_in -->|germline,tumor_only,somatic| freebayes + cram_in -->|germline,somatic| strelka + cram_in -->|germline,tumor_only,somatic| mpileup + cram_in -->|tumor_only,somatic| mutect2 + cram_in -->|tumor_only| lofreq + cram_in -->|somatic| muse + cram_in -->|tumor_only,somatic| sentieon_tnscope + cram_in -->|germline,tumor_only,somatic| manta + cram_in -->|germline,tumor_only,somatic| tiddit + cram_in -->|somatic| ascat + cram_in -->|germline,tumor_only,somatic| cnvkit + cram_in -->|tumor_only,somatic| controlfreec + cram_in -->|germline,somatic| indexcov + cram_in -->|tumor_only| msisensor2 + cram_in -->|somatic| msisensorpro + + haplotypecaller -->|germline| vcfs + deepvariant -->|germline| vcfs + sentieon_dnascope -->|germline| vcfs + sentieon_haplotyper -->|germline| vcfs + freebayes -->|germline,tumor_only,somatic| vcfs + strelka -->|germline,somatic| vcfs + mpileup -->|germline,tumor_only,somatic| vcfs + mutect2 -->|tumor_only,somatic| vcfs + lofreq -->|tumor_only| vcfs + muse -->|somatic| vcfs + sentieon_tnscope -->|tumor_only,somatic| vcfs + manta -->|germline,tumor_only,somatic| vcfs + tiddit -->|germline,tumor_only,somatic| vcfs + ascat -->|somatic| vcfs + cnvkit -->|germline,tumor_only,somatic| vcfs + controlfreec -->|tumor_only,somatic| vcfs + indexcov -->|germline,somatic| vcfs + msisensor2 -->|tumor_only| vcfs + msisensorpro -->|somatic| vcfs + end + + subgraph post_vc [Post-processing] + filter_vcfs[Filter VCFs] + normalize[Normalize] + concatenate[Concatenate] + consensus[Consensus] + varlociraptor[Varlociraptor] + bcftools_stats[bcftools stats] + vcftools[VCFtools] + + filter_vcfs -->|germline,tumor_only,somatic| normalize + normalize -->|germline,tumor_only,somatic| concatenate + concatenate -->|germline,tumor_only,somatic| consensus + consensus -->|germline,tumor_only,somatic| varlociraptor + varlociraptor -->|germline,tumor_only,somatic| bcftools_stats + bcftools_stats -->|germline,tumor_only,somatic| vcftools + end + + subgraph annotation [Annotation] + snpeff[snpEff] + vep[VEP] + bcftools_ann[bcftools annotate] + snpsift[SnpSift] + + snpeff -->|germline,tumor_only,somatic| vep + vep -->|germline,tumor_only,somatic| bcftools_ann + bcftools_ann -->|germline,tumor_only,somatic| snpsift + end + + subgraph reporting [Reporting] + multiqc[MultiQC] + vcf_out[ ] + report_out[ ] + + multiqc -->|germline,tumor_only,somatic| report_out + snpsift_to_vcf[ ] + snpsift_to_vcf -->|germline,tumor_only,somatic| vcf_out + end + + %% Inter-section edges + applybqsr -->|germline,tumor_only,somatic| cram_in + vcfs -->|germline,tumor_only,somatic| filter_vcfs + vcftools -->|germline,tumor_only,somatic| snpeff + snpsift -->|germline,tumor_only,somatic| snpsift_to_vcf + fastqc -->|germline,tumor_only,somatic| multiqc + mosdepth -->|germline,tumor_only,somatic| multiqc + bcftools_stats -->|germline,tumor_only,somatic| multiqc diff --git a/tests/fixtures/rnaseq_sections.mmd b/tests/fixtures/rnaseq_sections.mmd new file mode 100644 index 000000000..5ac522846 --- /dev/null +++ b/tests/fixtures/rnaseq_sections.mmd @@ -0,0 +1,151 @@ +%%metro title: nf-core/rnaseq +%%metro logo: examples/nf-core-rnaseq_logo_dark.png +%%metro style: dark +%%metro file: fastq_in | FASTQ +%%metro file: report_final | HTML +%%metro file: report_quant | HTML +%%metro file: report_bowtie2 | HTML +%%metro line: star_rsem | Aligner: STAR, Quantification: RSEM | #0570b0 +%%metro line: star_salmon | Aligner: STAR, Quantification: Salmon (default) | #2db572 +%%metro line: hisat2 | Aligner: HISAT2, Quantification: None | #f5c542 +%%metro line: bowtie2_salmon | Aligner: Bowtie2, Quantification: Salmon | #ff8c00 +%%metro line: pseudo_salmon | Pseudo-aligner: Salmon, Quantification: Salmon | #e63946 +%%metro line: pseudo_kallisto | Pseudo-aligner: Kallisto, Quantification: Kallisto | #7b2d3b +%%metro legend: bl + +graph LR + subgraph preprocessing [Pre-processing] + %%metro exit: right | star_salmon, star_rsem, hisat2, bowtie2_salmon + %%metro exit: bottom | pseudo_salmon, pseudo_kallisto + fastq_in[ ] + cat_fastq[Cat FASTQ] + fastqc_raw[FastQC] + infer_strandedness[Infer Strandedness] + umi_tools_extract[UMI-tools Extract] + fastp[fastp] + trimgalore[Trim Galore!] + fastqc_trimmed[FastQC] + bbsplit[BBSplit] + sortmerna[SortMeRNA] + ribodetector[RiboDetector] + fastqc_filtered[FastQC] + + fastq_in -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| cat_fastq + cat_fastq -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_raw + fastqc_raw -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| infer_strandedness + infer_strandedness -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| umi_tools_extract + + umi_tools_extract -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastp + umi_tools_extract -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| trimgalore + fastp -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_trimmed + trimgalore -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_trimmed + + fastqc_trimmed -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| bbsplit + fastqc_trimmed -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| sortmerna + fastqc_trimmed -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| ribodetector + bbsplit -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + sortmerna -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + ribodetector -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + end + + subgraph genome_align [Genome alignment & quantification] + %%metro entry: left | star_salmon, star_rsem, hisat2, bowtie2_salmon + %%metro exit: right | star_salmon, star_rsem + %%metro exit: right | hisat2 + star[STAR] + hisat2_align[HISAT2] + bowtie2_align[Bowtie2] + rsem[RSEM] + salmon_quant[Salmon] + umi_tools_dedup[UMI-tools Dedup] + tximport_ga[tximport] + summarized_exp_ga[Sum. Exp.] + multiqc_bowtie2[MultiQC] + report_bowtie2[ ] + _h1[hidden] + _h2[hidden] + _h3[hidden] + + star -->|star_rsem| rsem + star -->|star_salmon| umi_tools_dedup + hisat2_align -->|hisat2| umi_tools_dedup + bowtie2_align -->|bowtie2_salmon| umi_tools_dedup + umi_tools_dedup -->|star_salmon| salmon_quant + umi_tools_dedup -->|hisat2| _h1 + _h1 -->|hisat2| _h2 + _h2 -->|hisat2| _h3 + salmon_quant -->|star_salmon| tximport_ga + rsem -->|star_rsem| tximport_ga + tximport_ga -->|star_salmon,star_rsem| summarized_exp_ga + umi_tools_dedup -->|bowtie2_salmon| salmon_quant + salmon_quant -->|bowtie2_salmon| multiqc_bowtie2 + multiqc_bowtie2 -->|bowtie2_salmon| report_bowtie2 + end + + subgraph pseudo_align [Pseudo-alignment & quantification] + %%metro entry: left | pseudo_salmon, pseudo_kallisto + salmon_pseudo[Salmon] + kallisto[Kallisto] + tximport_pa[tximport] + summarized_exp_pa[Sum. Exp.] + multiqc_quant[MultiQC] + report_quant[ ] + + salmon_pseudo -->|pseudo_salmon| tximport_pa + kallisto -->|pseudo_kallisto| tximport_pa + tximport_pa -->|pseudo_salmon,pseudo_kallisto| summarized_exp_pa + summarized_exp_pa -->|pseudo_salmon,pseudo_kallisto| multiqc_quant + multiqc_quant -->|pseudo_salmon,pseudo_kallisto| report_quant + end + + subgraph postprocessing [Post-processing] + %%metro direction: TB + %%metro entry: left | star_salmon, star_rsem, hisat2 + %%metro exit: bottom | star_salmon, star_rsem, hisat2 + samtools[SAMtools] + picard[Picard] + bedtools[BEDTools] + bedgraph[bedGraphToBigWig] + stringtie[StringTie] + + samtools -->|star_salmon,star_rsem,hisat2| picard + picard -->|star_salmon,star_rsem,hisat2| bedtools + bedtools -->|star_salmon,star_rsem,hisat2| bedgraph + bedgraph -->|star_salmon,star_rsem,hisat2| stringtie + end + + subgraph qc_report [Quality control & reporting] + %%metro direction: RL + %%metro entry: top | star_salmon, star_rsem, hisat2 + rseqc[RSeQC] + preseq[Preseq] + qualimap[Qualimap] + dupradar[dupRadar] + featurecounts[featureCounts] + deseq2_pca[DESeq2 PCA] + kraken2[Kraken2/Bracken] + sylph[Sylph] + multiqc_final[MultiQC] + report_final[ ] + + rseqc -->|star_salmon,star_rsem,hisat2| preseq + preseq -->|star_salmon,star_rsem,hisat2| qualimap + qualimap -->|star_salmon,star_rsem,hisat2| dupradar + dupradar -->|star_salmon,star_rsem,hisat2| featurecounts + featurecounts -->|star_salmon,star_rsem,hisat2| deseq2_pca + deseq2_pca -->|star_salmon,star_rsem,hisat2| kraken2 + deseq2_pca -->|star_salmon,star_rsem,hisat2| sylph + kraken2 -->|star_salmon,star_rsem,hisat2| multiqc_final + sylph -->|star_salmon,star_rsem,hisat2| multiqc_final + multiqc_final -->|star_salmon,star_rsem,hisat2| report_final + end + + %% Inter-section edges + fastqc_filtered -->|star_salmon,star_rsem| star + fastqc_filtered -->|hisat2| hisat2_align + fastqc_filtered -->|bowtie2_salmon| bowtie2_align + fastqc_filtered -->|pseudo_salmon| salmon_pseudo + fastqc_filtered -->|pseudo_kallisto| kallisto + summarized_exp_ga -->|star_salmon,star_rsem| samtools + _h3 -->|hisat2| samtools + stringtie -->|star_salmon,star_rsem,hisat2| rseqc diff --git a/tests/fixtures/tb_right_exit_feeder_slots.mmd b/tests/fixtures/tb_right_exit_feeder_slots.mmd new file mode 100644 index 000000000..8954a8ce8 --- /dev/null +++ b/tests/fixtures/tb_right_exit_feeder_slots.mmd @@ -0,0 +1,34 @@ +%%metro title: TB right-exit two-feeder slot collision +%%metro line: l1 | L1 | #e6194b +%%metro line: l2 | L2 | #3cb44b +%%metro line: l3 | L3 | #4363d8 +%%metro line: l4 | L4 | #f58231 + +graph LR + subgraph src [Source] + %%metro exit: right | l1, l2, l4 + %%metro exit: right | l3 + s0[Start] + s0 -->|l1,l2,l4| sa[Main in] + s0 -->|l3| sb[Side in] + end + subgraph sec [Sec] + %%metro direction: TB + %%metro entry: left | l1, l2, l4 + %%metro entry: left | l3 + %%metro exit: right | l1, l2, l3, l4 + main[Main] + sink[Sink] + h1[ ] + h2[ ] + main -->|l1,l2,l4| sink + h1 -->|l3| h2 + end + subgraph dst [Dest] + %%metro entry: left | l1, l2, l3, l4 + d1[End] + end + sa -->|l1,l2,l4| main + sb -->|l3| h1 + sink -->|l1,l2,l4| d1 + h2 -->|l3| d1 diff --git a/tests/fixtures/topologies/twoline_fanout_up.mmd b/tests/fixtures/topologies/twoline_fanout_up.mmd new file mode 100644 index 000000000..04b1f83f5 --- /dev/null +++ b/tests/fixtures/topologies/twoline_fanout_up.mmd @@ -0,0 +1,27 @@ +%%metro title: Two flows rising from one section +%%metro style: dark +%%metro line: to_src | To Source | #e7298a +%%metro line: to_new | To New | #0570b0 + +%%metro grid: left_tgt | 0,1 +%%metro grid: right_src | 1,0 +%%metro grid: new_tgt | 2,0 + +graph LR + subgraph left_tgt [Left Target] + lt1[Collect] + lt2[Output] + lt1 -->|to_src,to_new| lt2 + end + subgraph right_src [Right Source] + rs1[Input R] + rs2[Hub R] + rs1 -->|to_src| rs2 + end + subgraph new_tgt [New Target] + nt1[Hub N] + nt2[Out N] + nt1 -->|to_new| nt2 + end + lt2 -->|to_src| rs1 + lt2 -->|to_new| nt1 diff --git a/tests/fixtures/trunk_align_matching_bundle.mmd b/tests/fixtures/trunk_align_matching_bundle.mmd new file mode 100644 index 000000000..7a8061179 --- /dev/null +++ b/tests/fixtures/trunk_align_matching_bundle.mmd @@ -0,0 +1,26 @@ +%%metro title: Trunk align - matching bundle +%%metro style: dark +%%metro line: a | Line A | #ff0000 +%%metro line: b | Line B | #00ff00 +%%metro grid: secA | 0,0 +%%metro grid: secB | 1,0 +%%metro grid: secC | 2,0 + +graph LR + subgraph secA [Section A] + a_main[A main] + end + subgraph secB [Section B] + b_above1[B above 1] + b_above2[B above 2] + b_main[B main] + b_above1 -->|a| b_main + b_above2 -->|b| b_main + end + subgraph secC [Section C] + c_main[C main] + end + a_main -->|a| b_main + a_main -->|b| b_main + b_main -->|a| c_main + b_main -->|b| c_main diff --git a/tests/fixtures/uneven_diamond.mmd b/tests/fixtures/uneven_diamond.mmd new file mode 100644 index 000000000..1646f24a2 --- /dev/null +++ b/tests/fixtures/uneven_diamond.mmd @@ -0,0 +1,18 @@ +%%metro title: Uneven Diamond +%%metro style: dark +%%metro line: vc | Variant Calling | #ff0000 + +graph LR + samtools_vc[Samtools] + varlociraptor[Varlociraptor] + finalise[Finalise] + normalise[Normalise] + consensus[Consensus] + merge[Merge] + + samtools_vc -->|vc| varlociraptor + samtools_vc -->|vc| finalise + varlociraptor -->|vc| merge + finalise -->|vc| normalise + normalise -->|vc| consensus + consensus -->|vc| merge diff --git a/tests/layout_metrics.py b/tests/layout_metrics.py new file mode 100644 index 000000000..f705d1006 --- /dev/null +++ b/tests/layout_metrics.py @@ -0,0 +1,177 @@ +"""Passive layout-quality metrics for the CI render-diff. + +Computes a small scorecard of geometric quality scores from a laid-out +``MetroGraph`` so the render-diff page can report per-render *deltas* alongside +the visual comparison. + +Strictly an instrument: nothing in the layout engine reads these scores and CI +never fails on them. The defect counts reuse the same detectors as the layout +validator (crossings, near-horizontal segments, single-segment diagonals, +excessive column gaps) and the label-strike count reuses the engine's own +strike definition (``iter_line_label_strikes``), so a score only moves when a +real geometric property of the render moves. + +Module-level imports are kept stdlib-only so the spec and formatting helpers +can be imported by ``build_render_diff.py`` without pulling in the layout +engine; the heavy ``nf_metro`` imports live inside ``compute_metrics``. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from nf_metro.layout.routing.common import RoutedPath + from nf_metro.parser.model import MetroGraph + + +@dataclass(frozen=True) +class MetricSpec: + """One layout-quality score: its JSON key, display label, and value kind.""" + + key: str + label: str + kind: str # "count" or "ratio" + + +# Every metric is oriented so LOWER IS BETTER: a negative delta is an +# improvement. This list is the canonical schema for ``metrics.json`` and the +# column order of the render-diff metrics table. +METRICS: list[MetricSpec] = [ + MetricSpec("crossings", "Crossings", "count"), + MetricSpec("near_horizontal", "Near-horiz.", "count"), + MetricSpec("single_diagonals", "Lone diag.", "count"), + MetricSpec("label_strikes", "Label strikes", "count"), + MetricSpec("excessive_gaps", "Excess gaps", "count"), + MetricSpec("wasted_canvas", "Wasted canvas", "ratio"), +] + +METRIC_KEYS: list[str] = [m.key for m in METRICS] + + +def compute_metrics( + graph: MetroGraph, *, canvas: tuple[float, float] | None = None +) -> dict[str, float]: + """Compute the layout-quality scorecard for one laid-out graph. + + ``canvas`` is the rendered SVG ``(width, height)`` in user units; when + omitted (unit tests) the canvas extent is estimated from the laid-out + geometry. + """ + from collections import Counter + + from layout_validator import validate_layout + + from nf_metro.layout.phases.guards import iter_line_label_strikes + from nf_metro.layout.routing import compute_station_offsets, route_edges + + counts = Counter(v.check for v in validate_layout(graph)) + + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception: # noqa: BLE001 - routing failure surfaces in the validator + offsets, routes = {}, [] + + # Distinct (line, station) strikes: one visual mark per line crossing a + # label, not one per route segment that happens to clip it. + strikes = { + (s.line_id, s.station_id) + for s in iter_line_label_strikes(graph, offsets=offsets, routes=routes) + } + + return { + "crossings": float( + counts["route_segment_crossing"] + counts["inter_section_line_crossing"] + ), + "near_horizontal": float(counts["almost_horizontal_edge"]), + "single_diagonals": float(counts["single_segment_diagonal"]), + "label_strikes": float(len(strikes)), + "excessive_gaps": float(counts["excessive_column_gap"]), + "wasted_canvas": _wasted_canvas_ratio(graph, routes, canvas), + } + + +def _wasted_canvas_ratio( + graph: MetroGraph, + routes: list[RoutedPath], + canvas: tuple[float, float] | None, +) -> float: + """Fraction of the canvas area not enclosed by the content bounding box. + + Content spans the visible stations, section boxes, and routed waypoints; + the canvas is the rendered ``(width, height)``. A diagram whose content + fills the canvas scores ~0; one stranded in a corner of a large canvas + scores high. + """ + xs: list[float] = [] + ys: list[float] = [] + for s in graph.stations.values(): + if s.is_port or s.is_hidden: + continue + xs.append(s.x) + ys.append(s.y) + for sec in graph.sections.values(): + if sec.bbox_w > 0: + xs.extend((sec.bbox_x, sec.bbox_x + sec.bbox_w)) + ys.extend((sec.bbox_y, sec.bbox_y + sec.bbox_h)) + for r in routes: + for px, py in r.points: + xs.append(px) + ys.append(py) + if not xs or not ys: + return 0.0 + + content_w = max(xs) - min(xs) + content_h = max(ys) - min(ys) + if canvas is not None: + canvas_w, canvas_h = canvas + else: + from nf_metro.render.constants import CANVAS_PADDING + + canvas_w = max(xs) + CANVAS_PADDING + canvas_h = max(ys) + CANVAS_PADDING + if canvas_w <= 0 or canvas_h <= 0: + return 0.0 + + used = (content_w * content_h) / (canvas_w * canvas_h) + return round(max(0.0, min(1.0, 1.0 - used)), 3) + + +def _format_magnitude(kind: str, value: float) -> str: + """Format a non-negative magnitude as a percentage (ratio) or integer (count).""" + if kind == "ratio": + return f"{value:.0%}" + return f"{value:.0f}" + + +def format_value(spec: MetricSpec, value: float | None) -> str: + """Render a metric value for display (``n/a`` when missing).""" + if value is None: + return "n/a" + return _format_magnitude(spec.kind, value) + + +def format_delta(spec: MetricSpec, base: float | None, pr: float | None) -> str: + """Render a base->PR delta as a signed magnitude, or ``""`` when undefined.""" + if base is None or pr is None: + return "" + delta = pr - base + if abs(delta) < 1e-9: + return "0" + sign = "+" if delta > 0 else "−" + return f"{sign}{_format_magnitude(spec.kind, abs(delta))}" + + +def delta_direction(base: float | None, pr: float | None) -> int: + """Sign of a base->PR change: ``-1`` better, ``+1`` worse, ``0`` flat/undefined. + + Every metric is lower-is-better, so a drop is an improvement. + """ + if base is None or pr is None: + return 0 + delta = pr - base + if abs(delta) < 1e-9: + return 0 + return 1 if delta > 0 else -1 diff --git a/tests/layout_validator.py b/tests/layout_validator.py new file mode 100644 index 000000000..3af432079 --- /dev/null +++ b/tests/layout_validator.py @@ -0,0 +1,1696 @@ +"""Layout validator: programmatic checks for layout defects. + +Runs a suite of checks against a laid-out MetroGraph and returns +a list of Violation objects describing any problems found. +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from enum import Enum + +from nf_metro.layout.constants import Y_SPACING +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.common import RoutedPath +from nf_metro.parser.model import MetroGraph, PortSide +from nf_metro.render.svg import apply_route_offsets + + +class Severity(Enum): + ERROR = "error" + WARNING = "warning" + + +@dataclass +class Violation: + check: str + severity: Severity + message: str + context: dict = field(default_factory=dict) + + +def _compute_routes( + graph: MetroGraph, +) -> tuple[dict[tuple[str, str], float], list[RoutedPath]] | None: + """Compute offsets and routes once for all routing-dependent checks.""" + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return offsets, routes + except Exception: + return None + + +def validate_layout(graph: MetroGraph) -> list[Violation]: + """Run all layout checks and return violations.""" + violations: list[Violation] = [] + violations.extend(check_section_overlap(graph)) + violations.extend(check_station_containment(graph)) + violations.extend(check_port_boundary(graph)) + violations.extend(check_coordinate_sanity(graph)) + violations.extend(check_coincident_stations(graph)) + violations.extend(check_minimum_section_spacing(graph)) + + # Compute offsets + routes once for all routing-dependent checks. + precomputed = _compute_routes(graph) + violations.extend(check_edge_waypoints(graph, _precomputed=precomputed)) + if precomputed is not None: + violations.extend(check_label_overlap(graph, _precomputed=precomputed)) + violations.extend(check_edge_section_crossing(graph, _precomputed=precomputed)) + violations.extend( + check_bypass_section_clearance(graph, _precomputed=precomputed) + ) + violations.extend( + check_almost_horizontal_edges(graph, _precomputed=precomputed) + ) + violations.extend(check_single_layer_centering(graph)) + violations.extend(check_station_as_elbow(graph)) + violations.extend(check_intra_section_chain_alignment(graph)) + violations.extend(check_exit_port_feeder_alignment(graph)) + violations.extend(check_inter_section_line_crossings(graph)) + violations.extend(check_excessive_column_gaps(graph)) + if precomputed is not None: + violations.extend( + check_single_segment_diagonals(graph, _precomputed=precomputed) + ) + violations.extend( + check_route_segment_crossings(graph, _precomputed=precomputed) + ) + violations.extend( + check_serpentine_no_backtrack(graph, _precomputed=precomputed) + ) + return violations + + +def check_section_overlap( + graph: MetroGraph, tolerance: float = -1.0 +) -> list[Violation]: + """Check that no two section bounding boxes overlap. + + A small negative tolerance allows sections to be flush (touching) + but not overlapping. Positive tolerance would require a gap. + """ + violations: list[Violation] = [] + sections = [ + (sid, s) for sid, s in graph.sections.items() if s.bbox_w > 0 and s.bbox_h > 0 + ] + + for i in range(len(sections)): + sid_a, a = sections[i] + ax1, ay1 = a.bbox_x, a.bbox_y + ax2, ay2 = ax1 + a.bbox_w, ay1 + a.bbox_h + + for j in range(i + 1, len(sections)): + sid_b, b = sections[j] + bx1, by1 = b.bbox_x, b.bbox_y + bx2, by2 = bx1 + b.bbox_w, by1 + b.bbox_h + + # AABB overlap test with tolerance + overlap_x = ax2 - tolerance > bx1 and bx2 - tolerance > ax1 + overlap_y = ay2 - tolerance > by1 and by2 - tolerance > ay1 + if overlap_x and overlap_y: + violations.append( + Violation( + check="section_overlap", + severity=Severity.ERROR, + message=( + f"Sections '{sid_a}' and '{sid_b}' overlap: " + f"A=({ax1:.0f},{ay1:.0f},{ax2:.0f},{ay2:.0f}) " + f"B=({bx1:.0f},{by1:.0f},{bx2:.0f},{by2:.0f})" + ), + context={"section_a": sid_a, "section_b": sid_b}, + ) + ) + + return violations + + +def check_station_containment( + graph: MetroGraph, margin: float = 5.0 +) -> list[Violation]: + """Check that non-port stations are within their section bbox (with margin).""" + violations: list[Violation] = [] + + for sid, station in graph.stations.items(): + if station.is_port or station.section_id is None: + continue + + section = graph.sections.get(station.section_id) + if not section or section.bbox_w == 0: + continue + + sx1 = section.bbox_x - margin + sy1 = section.bbox_y - margin + sx2 = section.bbox_x + section.bbox_w + margin + sy2 = section.bbox_y + section.bbox_h + margin + + if not (sx1 <= station.x <= sx2 and sy1 <= station.y <= sy2): + violations.append( + Violation( + check="station_containment", + severity=Severity.ERROR, + message=( + f"Station '{sid}' at ({station.x:.1f},{station.y:.1f}) " + f"is outside section '{station.section_id}' " + f"bbox ({section.bbox_x:.0f},{section.bbox_y:.0f}," + f"{section.bbox_x + section.bbox_w:.0f}," + f"{section.bbox_y + section.bbox_h:.0f})" + ), + context={"station": sid, "section": station.section_id}, + ) + ) + + return violations + + +def check_port_boundary(graph: MetroGraph, tolerance: float = 5.0) -> list[Violation]: + """Check that port stations are on their section's boundary edge.""" + violations: list[Violation] = [] + + for pid, port in graph.ports.items(): + station = graph.stations.get(pid) + if not station: + continue + + section = graph.sections.get(port.section_id) + if not section or section.bbox_w == 0: + continue + + left = section.bbox_x + right = section.bbox_x + section.bbox_w + top = section.bbox_y + bottom = section.bbox_y + section.bbox_h + + on_boundary = False + if port.side == PortSide.LEFT: + on_boundary = abs(station.x - left) <= tolerance + elif port.side == PortSide.RIGHT: + on_boundary = abs(station.x - right) <= tolerance + elif port.side == PortSide.TOP: + on_boundary = abs(station.y - top) <= tolerance + elif port.side == PortSide.BOTTOM: + on_boundary = abs(station.y - bottom) <= tolerance + + if not on_boundary: + violations.append( + Violation( + check="port_boundary", + severity=Severity.WARNING, + message=( + f"Port '{pid}' (side={port.side.value}) at " + f"({station.x:.1f},{station.y:.1f}) is not on " + f"section '{port.section_id}' boundary " + f"(L={left:.0f},R={right:.0f},T={top:.0f},B={bottom:.0f})" + ), + context={"port": pid, "section": port.section_id}, + ) + ) + + return violations + + +def check_coordinate_sanity( + graph: MetroGraph, max_coord: float = 10000.0 +) -> list[Violation]: + """Check for NaN, Inf, or extreme coordinates.""" + violations: list[Violation] = [] + + for sid, station in graph.stations.items(): + for coord_name, value in [("x", station.x), ("y", station.y)]: + if value != value: # NaN check + violations.append( + Violation( + check="coordinate_sanity", + severity=Severity.ERROR, + message=f"Station '{sid}' has NaN {coord_name}", + context={"station": sid, "coordinate": coord_name}, + ) + ) + elif abs(value) == float("inf"): + violations.append( + Violation( + check="coordinate_sanity", + severity=Severity.ERROR, + message=f"Station '{sid}' has Inf {coord_name}", + context={"station": sid, "coordinate": coord_name}, + ) + ) + elif abs(value) > max_coord: + violations.append( + Violation( + check="coordinate_sanity", + severity=Severity.WARNING, + message=( + f"Station '{sid}' has extreme {coord_name}={value:.0f} " + f"(>{max_coord})" + ), + context={"station": sid, "coordinate": coord_name}, + ) + ) + + return violations + + +def check_coincident_stations( + graph: MetroGraph, tolerance: float = 1.0 +) -> list[Violation]: + """Check that no two distinct visible stations share a coordinate. + + Two real (non-port, non-hidden) stations placed within *tolerance* of + the same ``(x, y)`` render their pill markers on top of each other. + Rail-mode stations are exempt: their markers render as per-rail knobs + distributed across the rail bundle, so a shared station centre is not a + visual collision there. + """ + violations: list[Violation] = [] + + placed: list[tuple[str, float, float]] = [] + for sid, station in graph.stations.items(): + if station.is_port or station.is_hidden: + continue + if graph.station_is_rail(sid): + continue + for other, ox, oy in placed: + if abs(station.x - ox) <= tolerance and abs(station.y - oy) <= tolerance: + violations.append( + Violation( + check="coincident_stations", + severity=Severity.ERROR, + message=( + f"Stations '{other}' and '{sid}' share coordinate " + f"({station.x:.1f}, {station.y:.1f})" + ), + context={"stations": [other, sid]}, + ) + ) + break + placed.append((sid, station.x, station.y)) + + return violations + + +def check_minimum_section_spacing( + graph: MetroGraph, min_gap: float = 5.0 +) -> list[Violation]: + """Check that adjacent sections have a minimum gap between them.""" + violations: list[Violation] = [] + sections = [ + (sid, s) for sid, s in graph.sections.items() if s.bbox_w > 0 and s.bbox_h > 0 + ] + + for i in range(len(sections)): + sid_a, a = sections[i] + ax1, ay1 = a.bbox_x, a.bbox_y + ax2, ay2 = ax1 + a.bbox_w, ay1 + a.bbox_h + + for j in range(i + 1, len(sections)): + sid_b, b = sections[j] + bx1, by1 = b.bbox_x, b.bbox_y + bx2, by2 = bx1 + b.bbox_w, by1 + b.bbox_h + + # Compute gap on each axis + gap_x = max(bx1 - ax2, ax1 - bx2) + gap_y = max(by1 - ay2, ay1 - by2) + + # If they're separated on one axis, no adjacency concern + if gap_x > min_gap or gap_y > min_gap: + continue + + # They're near each other - check the minimum gap + actual_gap = max(gap_x, gap_y) + if actual_gap < min_gap and actual_gap >= -1.0: + # Close but not deeply overlapping (overlap is caught elsewhere) + violations.append( + Violation( + check="minimum_section_spacing", + severity=Severity.WARNING, + message=( + f"Sections '{sid_a}' and '{sid_b}' are only " + f"{actual_gap:.1f}px apart (min={min_gap}px)" + ), + context={ + "section_a": sid_a, + "section_b": sid_b, + "gap": actual_gap, + }, + ) + ) + + return violations + + +def check_label_overlap( + graph: MetroGraph, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Check that no station label overlaps another label or a marker. + + Mirrors the runtime guard: label/label overlap is never allowed; + label/marker grazes within ``LABEL_OVERLAP_TOL`` are tolerated. Uses the + same detector the engine and wrapping pass use, so this reports exactly + what the final render would draw. + """ + from nf_metro.layout.labels import find_label_overlaps, place_labels + + violations: list[Violation] = [] + if _precomputed is not None: + offsets, routes = _precomputed + else: + precomputed = _compute_routes(graph) + if precomputed is None: + return violations + offsets, routes = precomputed + + try: + placements = place_labels( + graph, + station_offsets=offsets, + routes=routes, + label_angle=graph.label_angle or 0.0, + ) + except Exception as e: + return [ + Violation( + check="label_overlap", + severity=Severity.ERROR, + message=f"Label placement failed: {e}", + ) + ] + + for ov in find_label_overlaps(graph, placements, offsets): + target = "label" if ov.kind == "label" else "marker" + violations.append( + Violation( + check="label_overlap", + severity=Severity.ERROR, + message=( + f"Label {ov.a!r} overlaps {target} {ov.b!r} by " + f"({ov.ox:.1f}, {ov.oy:.1f})px" + ), + context={"a": ov.a, "b": ov.b, "kind": ov.kind}, + ) + ) + return violations + + +def check_edge_waypoints( + graph: MetroGraph, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Check that routed edges have valid waypoints.""" + violations: list[Violation] = [] + + if _precomputed is not None: + offsets, routes = _precomputed + else: + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception as e: + violations.append( + Violation( + check="edge_waypoints", + severity=Severity.ERROR, + message=f"Edge routing failed: {e}", + ) + ) + return violations + + for route in routes: + if len(route.points) < 2: + violations.append( + Violation( + check="edge_waypoints", + severity=Severity.ERROR, + message=( + f"Edge {route.edge.source}->{route.edge.target} " + f"(line={route.line_id}) has only {len(route.points)} " + f"waypoint(s), need >= 2" + ), + context={ + "source": route.edge.source, + "target": route.edge.target, + "line": route.line_id, + }, + ) + ) + + for k, (px, py) in enumerate(route.points): + if px != px or py != py: # NaN + violations.append( + Violation( + check="edge_waypoints", + severity=Severity.ERROR, + message=( + f"Edge {route.edge.source}->{route.edge.target} " + f"waypoint {k} has NaN: ({px}, {py})" + ), + context={ + "source": route.edge.source, + "target": route.edge.target, + }, + ) + ) + + return violations + + +def _segment_crosses_bbox( + x1: float, + y1: float, + x2: float, + y2: float, + bx: float, + by: float, + bw: float, + bh: float, + margin: float = 2.0, +) -> bool: + """Test if a line segment passes through (not just touches) an AABB. + + Uses an inset margin so segments running along a bbox edge don't + trigger false positives. Handles axis-aligned segments (common in + metro routing) as simple range overlaps. + """ + # Inset the bbox by margin so edge-touching doesn't count + bx1 = bx + margin + by1 = by + margin + bx2 = bx + bw - margin + by2 = by + bh - margin + + if bx1 >= bx2 or by1 >= by2: + return False # Section too small after inset + + # Normalise segment endpoints + seg_x_min, seg_x_max = min(x1, x2), max(x1, x2) + seg_y_min, seg_y_max = min(y1, y2), max(y1, y2) + + # Quick reject: no overlap on either axis + if seg_x_max <= bx1 or seg_x_min >= bx2: + return False + if seg_y_max <= by1 or seg_y_min >= by2: + return False + + # Horizontal segment + if abs(y1 - y2) < 0.5: + return by1 < y1 < by2 + + # Vertical segment + if abs(x1 - x2) < 0.5: + return bx1 < x1 < bx2 + + # Diagonal / general segment: use parametric clipping (Liang-Barsky) + dx = x2 - x1 + dy = y2 - y1 + t_min, t_max = 0.0, 1.0 + + for p, q in [ + (-dx, x1 - bx1), + (dx, bx2 - x1), + (-dy, y1 - by1), + (dy, by2 - y1), + ]: + if abs(p) < 1e-9: + if q < 0: + return False + else: + t = q / p + if p < 0: + t_min = max(t_min, t) + else: + t_max = min(t_max, t) + if t_min > t_max: + return False + + return t_min < t_max + + +def _edge_home_sections(graph: MetroGraph, source_id: str, target_id: str) -> set[str]: + """Return section IDs that own the source and target of an edge.""" + home: set[str] = set() + for station_id in (source_id, target_id): + station = graph.stations.get(station_id) + if not station: + continue + if station.section_id: + home.add(station.section_id) + elif station_id in graph.ports: + home.add(graph.ports[station_id].section_id) + else: + # Junction: trace through edges to find connected port sections + for e in graph.edges: + other_id = None + if e.source == station_id: + other_id = e.target + elif e.target == station_id: + other_id = e.source + if other_id: + other = graph.stations.get(other_id) + if other and other.section_id: + home.add(other.section_id) + elif other_id in graph.ports: + home.add(graph.ports[other_id].section_id) + return home + + +def check_edge_section_crossing( + graph: MetroGraph, + margin: float = 2.0, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Check no routed edge segment passes through a non-home section.""" + violations: list[Violation] = [] + + if _precomputed is not None: + offsets, routes = _precomputed + else: + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception: + return violations + + # Pre-collect sections with valid bboxes + sections = [ + (sid, s) for sid, s in graph.sections.items() if s.bbox_w > 0 and s.bbox_h > 0 + ] + + for route in routes: + if not route.is_inter_section: + continue + + home = _edge_home_sections(graph, route.edge.source, route.edge.target) + + for k in range(len(route.points) - 1): + x1, y1 = route.points[k] + x2, y2 = route.points[k + 1] + + for sid, sec in sections: + if sid in home: + continue + + if _segment_crosses_bbox( + x1, + y1, + x2, + y2, + sec.bbox_x, + sec.bbox_y, + sec.bbox_w, + sec.bbox_h, + margin=margin, + ): + violations.append( + Violation( + check="edge_section_crossing", + severity=Severity.ERROR, + message=( + f"Edge {route.edge.source}->{route.edge.target} " + f"(line={route.line_id}) segment {k} " + f"({x1:.0f},{y1:.0f})->({x2:.0f},{y2:.0f}) " + f"crosses section '{sid}' " + f"bbox ({sec.bbox_x:.0f},{sec.bbox_y:.0f}," + f"{sec.bbox_x + sec.bbox_w:.0f}," + f"{sec.bbox_y + sec.bbox_h:.0f})" + ), + context={ + "source": route.edge.source, + "target": route.edge.target, + "line": route.line_id, + "segment": k, + "crossed_section": sid, + }, + ) + ) + + return violations + + +def check_bypass_section_clearance( + graph: MetroGraph, + min_clearance: float = 5.0, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Check that vertical bypass segments maintain clearance from section edges. + + Bypass routes should not run right along a section bbox boundary. + Vertical segments of inter-section routes must be at least + *min_clearance* pixels away from the left/right edge of any + non-home section they pass alongside. + """ + violations: list[Violation] = [] + + if _precomputed is not None: + offsets, routes = _precomputed + else: + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception: + return violations + + sections = [ + (sid, s) for sid, s in graph.sections.items() if s.bbox_w > 0 and s.bbox_h > 0 + ] + + for route in routes: + if not route.is_inter_section: + continue + + home = _edge_home_sections(graph, route.edge.source, route.edge.target) + + for k in range(len(route.points) - 1): + x1, y1 = route.points[k] + x2, y2 = route.points[k + 1] + + # Only check vertical segments (same X, different Y) + if abs(x1 - x2) > 0.5: + continue + + seg_x = (x1 + x2) / 2 + seg_y_min = min(y1, y2) + seg_y_max = max(y1, y2) + + for sid, sec in sections: + if sid in home: + continue + + # Check Y overlap: segment must span some vertical + # range that overlaps the section's Y extent + sec_y_top = sec.bbox_y + sec_y_bot = sec.bbox_y + sec.bbox_h + if seg_y_max <= sec_y_top or seg_y_min >= sec_y_bot: + continue + + # Check X proximity to left/right bbox edges + left_dist = abs(seg_x - sec.bbox_x) + right_dist = abs(seg_x - (sec.bbox_x + sec.bbox_w)) + + near_dist = min(left_dist, right_dist) + if near_dist < min_clearance: + violations.append( + Violation( + check="bypass_section_clearance", + severity=Severity.ERROR, + message=( + f"Edge {route.edge.source}->" + f"{route.edge.target} " + f"(line={route.line_id}) " + f"vertical segment {k} at " + f"x={seg_x:.0f} is only " + f"{near_dist:.1f}px from " + f"section '{sid}' edge " + f"(min {min_clearance}px)" + ), + context={ + "source": route.edge.source, + "target": route.edge.target, + "line": route.line_id, + "segment": k, + "near_section": sid, + "clearance": near_dist, + }, + ) + ) + + return violations + + +def check_single_layer_centering( + graph: MetroGraph, tolerance: float = 5.0 +) -> list[Violation]: + """Check that single-layer sections have stations centered in bbox. + + For LR/RL sections where all internal stations share the same layer + (single column of stations), the station X should be approximately + at the horizontal center of the section bounding box. A drift + indicates asymmetric bbox expansion without recentering. + """ + violations: list[Violation] = [] + junction_ids = set(graph.junctions) + + for sec_id, section in graph.sections.items(): + if section.bbox_w == 0 or section.direction not in ("LR", "RL"): + continue + + # Collect internal (non-port, non-junction) stations + internals = [ + st + for sid, st in graph.stations.items() + if st.section_id == sec_id and not st.is_port and sid not in junction_ids + ] + if not internals: + continue + + # Only check single-layer sections (all stations at same X) + xs = [st.x for st in internals] + if max(xs) - min(xs) > tolerance: + continue + + station_x = sum(xs) / len(xs) + bbox_center = section.bbox_x + section.bbox_w / 2 + offset = abs(station_x - bbox_center) + + if offset > tolerance: + violations.append( + Violation( + check="single_layer_centering", + severity=Severity.WARNING, + message=( + f"Section {sec_id!r}: single-layer stations at " + f"x={station_x:.1f} are {offset:.1f}px from " + f"bbox center ({bbox_center:.1f})" + ), + context={ + "section": sec_id, + "station_x": station_x, + "bbox_center": bbox_center, + "offset": offset, + }, + ) + ) + + return violations + + +def check_station_as_elbow( + graph: MetroGraph, tolerance: float = 10.0 +) -> list[Violation]: + """Check that perpendicular ports don't align with internal stations. + + Only flags ports that are perpendicular to the section's flow direction, + where the line must bend and could pass through a station: + - LEFT/RIGHT ports on TB sections (horizontal entry into vertical flow) + - TOP/BOTTOM ports on LR/RL sections (vertical entry into horizontal flow) + + Ports along the flow direction (e.g. LEFT entry on LR section) naturally + share coordinates with stations on the main track and are not checked. + + The default tolerance of 10px accounts for station marker diameter + (station_radius is typically 5-6px). + """ + violations: list[Violation] = [] + + # Group internal (non-port) stations by section + section_stations: dict[str, list[tuple[str, float, float]]] = {} + for sid, station in graph.stations.items(): + if station.is_port or station.section_id is None: + continue + sec_id = station.section_id + if sec_id not in section_stations: + section_stations[sec_id] = [] + section_stations[sec_id].append((sid, station.x, station.y)) + + for pid, port in graph.ports.items(): + port_station = graph.stations.get(pid) + if not port_station: + continue + + section = graph.sections.get(port.section_id) + if not section: + continue + direction = section.direction + + internals = section_stations.get(port.section_id, []) + if not internals: + continue + + # Only check perpendicular ports (where a bend is required) + is_perpendicular = False + if direction == "TB" and port.side in (PortSide.LEFT, PortSide.RIGHT): + is_perpendicular = True + elif direction in ("LR", "RL") and port.side in ( + PortSide.TOP, + PortSide.BOTTOM, + ): + is_perpendicular = True + + if not is_perpendicular: + continue + + # LEFT/RIGHT ports: line runs horizontally at port.y, check Y + # TOP/BOTTOM ports: line runs vertically at port.x, check X + if port.side in (PortSide.LEFT, PortSide.RIGHT): + for st_id, st_x, st_y in internals: + if abs(port_station.y - st_y) <= tolerance: + violations.append( + Violation( + check="station_as_elbow", + severity=Severity.ERROR, + message=( + f"Port '{pid}' ({port.side.value}, " + f"y={port_station.y:.1f}) aligns with " + f"station '{st_id}' (y={st_y:.1f}) in " + f"section '{port.section_id}' - line " + f"would route through the station" + ), + context={ + "port": pid, + "station": st_id, + "section": port.section_id, + "axis": "y", + "port_coord": port_station.y, + "station_coord": st_y, + }, + ) + ) + else: # TOP / BOTTOM + for st_id, st_x, st_y in internals: + if abs(port_station.x - st_x) <= tolerance: + violations.append( + Violation( + check="station_as_elbow", + severity=Severity.ERROR, + message=( + f"Port '{pid}' ({port.side.value}, " + f"x={port_station.x:.1f}) aligns with " + f"station '{st_id}' (x={st_x:.1f}) in " + f"section '{port.section_id}' - line " + f"would route through the station" + ), + context={ + "port": pid, + "station": st_id, + "section": port.section_id, + "axis": "x", + "port_coord": port_station.x, + "station_coord": st_x, + }, + ) + ) + + return violations + + +def check_almost_horizontal_edges( + graph: MetroGraph, + slope_threshold: float = 0.1, + min_dx: float = 10.0, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Check for almost-horizontal edge segments after offset application. + + Checks both intra-section and inter-section edges. Intra-section + slopes indicate offset mismatches that should be flat. Inter-section + slopes (outside the L-shaped vertical segments) indicate offset + reordering regressions. + + Flags segments where abs(dy) > 0.5 AND abs(dx) >= abs(dy) / slope_threshold, + i.e. a shallow slope that should be perfectly flat. + """ + violations: list[Violation] = [] + + if _precomputed is not None: + offsets, routes = _precomputed + else: + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception: + return violations + + for route in routes: + pts = apply_route_offsets(route, offsets) + for k in range(len(pts) - 1): + x1, y1 = pts[k] + x2, y2 = pts[k + 1] + dx = abs(x2 - x1) + dy = abs(y2 - y1) + if dy > 0.5 and dx >= min_dx and dx >= dy / slope_threshold: + violations.append( + Violation( + check="almost_horizontal_edge", + severity=Severity.WARNING, + message=( + f"Edge {route.edge.source}->{route.edge.target} " + f"(line={route.line_id}) segment {k} is almost " + f"horizontal: dx={dx:.1f}, dy={dy:.1f} " + f"(slope={dy / dx:.4f})" + ), + context={ + "source": route.edge.source, + "target": route.edge.target, + "line": route.line_id, + "segment": k, + "dx": dx, + "dy": dy, + }, + ) + ) + + return violations + + +def check_excessive_column_gaps( + graph: MetroGraph, + max_unit_gap: float = 1.5, +) -> list[Violation]: + """Flag consecutive same-column stations separated by an empty row. + + Within a section, two interior stations sharing an X coordinate (i.e. + the same column / layer) should sit on adjacent grid rows when nothing + else occupies the rows between them. A vertical gap larger than + `max_unit_gap` x `Y_SPACING` indicates wasted vertical space - e.g. + variant_calling's GATK HaplotypeCaller and DeepVariant placed two + grid units apart with an empty row between, when they could be + adjacent. + + Multi-line hubs and ports are excluded; only non-port stations sharing + a column within the same section are compared. + """ + violations: list[Violation] = [] + threshold = Y_SPACING * max_unit_gap + + from collections import defaultdict + + # Group stations by (section_id, rounded x). + columns: dict[tuple[str, int], list] = defaultdict(list) + for st in graph.stations.values(): + if st.is_port or st.section_id is None: + continue + columns[(st.section_id, round(st.x))].append(st) + + for (sec_id, col_x), col_stations in columns.items(): + if len(col_stations) < 2: + continue + col_stations.sort(key=lambda s: s.y) + for i in range(len(col_stations) - 1): + a = col_stations[i] + b = col_stations[i + 1] + gap = b.y - a.y + if gap > threshold: + violations.append( + Violation( + check="excessive_column_gap", + severity=Severity.WARNING, + message=( + f"Stations '{a.id}' (y={a.y:.0f}) and '{b.id}' " + f"(y={b.y:.0f}) share column x={col_x} in " + f"section '{sec_id}' but are {gap:.0f}px apart " + f"({gap / Y_SPACING:.1f} grid units); empty " + f"row(s) between them waste vertical space" + ), + context={ + "station_a": a.id, + "station_b": b.id, + "section": sec_id, + "column_x": col_x, + "gap": gap, + "gap_units": gap / Y_SPACING, + }, + ) + ) + + return violations + + +def _segments_cross( + p1: tuple[float, float], + p2: tuple[float, float], + p3: tuple[float, float], + p4: tuple[float, float], + eps: float = 0.5, +) -> tuple[float, float] | None: + """Return intersection point if segments p1-p2 and p3-p4 cross properly. + + A "proper" crossing means the segments intersect at a point that is + strictly interior to both - i.e. the intersection is not at any + segment endpoint (within tolerance eps). Returns None for parallel, + collinear, non-intersecting, or endpoint-touching cases. + """ + x1, y1 = p1 + x2, y2 = p2 + x3, y3 = p3 + x4, y4 = p4 + denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4) + if abs(denom) < 1e-9: + return None + t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom + u = -((x1 - x2) * (y1 - y3) - (y1 - y2) * (x1 - x3)) / denom + if not ( + eps / max(abs(x1 - x2) + abs(y1 - y2), 1.0) + < t + < 1 - eps / max(abs(x1 - x2) + abs(y1 - y2), 1.0) + ): + return None + if not ( + eps / max(abs(x3 - x4) + abs(y3 - y4), 1.0) + < u + < 1 - eps / max(abs(x3 - x4) + abs(y3 - y4), 1.0) + ): + return None + return (x1 + t * (x2 - x1), y1 + t * (y2 - y1)) + + +def check_route_segment_crossings( + graph: MetroGraph, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Flag pairs of routed edges whose paths visually cross. + + Two metro lines crossing at any point that is not a junction or shared + station indicates an avoidable visual ambiguity. The variant_calling + Main / QC Reporting case is the canonical example: both lines exit + Section 1's right edge, but Main descends through QC Reporting's track + on the way to Section 2 - they swap order and cross. + + Implementation: pairwise segment intersection on post-offset routed + paths. Intersections at station coordinates (within Y_SPACING / 4) + are treated as legitimate hub crossings and excluded. + """ + violations: list[Violation] = [] + + if _precomputed is not None: + offsets, routes = _precomputed + else: + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception: + return violations + + # Pre-compute station coordinates for hub-crossing exclusion. + station_xy = [(st.x, st.y) for st in graph.stations.values() if not st.is_port] + hub_tol = Y_SPACING / 4.0 + + # Precompute post-offset point lists once per route. + paths = [(r, apply_route_offsets(r, offsets)) for r in routes] + + seen: set[tuple] = set() + for i in range(len(paths)): + ra, pa = paths[i] + for j in range(i + 1, len(paths)): + rb, pb = paths[j] + pt = _route_pair_crossing(graph, ra, pa, rb, pb, station_xy, hub_tol) + if pt is None: + continue + key = tuple( + sorted( + [ + (ra.edge.source, ra.edge.target, ra.line_id), + (rb.edge.source, rb.edge.target, rb.line_id), + ] + ) + ) + if key in seen: + continue + seen.add(key) + violations.append( + Violation( + check="route_segment_crossing", + severity=Severity.WARNING, + message=( + f"Lines '{ra.line_id}' " + f"({ra.edge.source}->{ra.edge.target}) and " + f"'{rb.line_id}' " + f"({rb.edge.source}->{rb.edge.target}) " + f"cross at ({pt[0]:.0f},{pt[1]:.0f}) - not " + f"at a station, so the crossing is avoidable" + ), + context={ + "line_a": ra.line_id, + "line_b": rb.line_id, + "edge_a": (ra.edge.source, ra.edge.target), + "edge_b": (rb.edge.source, rb.edge.target), + "intersection": pt, + }, + ) + ) + + return violations + + +def _pt_near(pt, points, tol) -> bool: + """True if *pt* is within ``tol`` of any ``(x, y)`` in *points* on both axes.""" + for px, py in points: + if abs(px - pt[0]) <= tol and abs(py - pt[1]) <= tol: + return True + return False + + +def _edges_share_real_hub(graph, ra_edge, rb_edge) -> bool: + """True if the edges share an endpoint at a multi-line real-station hub. + + Such a shared endpoint means the two edges fork or join at a station that + genuinely carries multiple lines, so crossings near it are natural + divergence. Junction endpoints (synthetic, is_port=True) do NOT count. + """ + shared = {ra_edge.source, ra_edge.target} & {rb_edge.source, rb_edge.target} + for sid in shared: + st = graph.stations.get(sid) + if st is not None and not st.is_port and len(graph.station_lines(sid)) > 1: + return True + return False + + +def _edge_involves_hidden(graph, edge) -> bool: + """True if either endpoint of *edge* is a hidden helper station.""" + for sid in (edge.source, edge.target): + st = graph.stations.get(sid) + if st is not None and st.is_hidden: + return True + return False + + +def _shared_port_endpoints(graph, ra_edge, rb_edge) -> list[tuple[float, float]]: + """Coordinates of port stations shared as endpoints by both edges.""" + shared = {ra_edge.source, ra_edge.target} & {rb_edge.source, rb_edge.target} + result: list[tuple[float, float]] = [] + for sid in shared: + st = graph.stations.get(sid) + if st is not None and st.is_port: + result.append((st.x, st.y)) + return result + + +def _seg_near_vertical(p0, p1, vertical_dx_tol) -> bool: + """True if the segment is near-vertical (small dx, non-zero dy).""" + return abs(p1[0] - p0[0]) <= vertical_dx_tol and abs(p1[1] - p0[1]) > 0 + + +def _route_pair_crossing(graph, ra, pa, rb, pb, station_xy, hub_tol): + """First avoidable crossing point between two routed paths, or None. + + A crossing near a shared port endpoint can be a benign fan-out/fan-in + divergence artefact (lines split or merge at the port and may intersect + within a few pixels of it). Such crossings are excluded ONLY when both + crossing segments transition via a diagonal; if either is near-vertical, + one line is plunging past its source Y to detour, which is the awkward + case worth flagging. + """ + if ra.line_id == rb.line_id: + return None + if _edges_share_real_hub(graph, ra.edge, rb.edge): + return None + # Hidden helper stations are inserted by the layout to extend terminus or + # branch geometry; their crossings are intentional. + if _edge_involves_hidden(graph, ra.edge) or _edge_involves_hidden(graph, rb.edge): + return None + shared_ports = _shared_port_endpoints(graph, ra.edge, rb.edge) + fan_tol = Y_SPACING + vertical_dx_tol = 2.0 + for ai in range(len(pa) - 1): + for bi in range(len(pb) - 1): + pt = _segments_cross(pa[ai], pa[ai + 1], pb[bi], pb[bi + 1]) + if pt is None: + continue + if _pt_near(pt, station_xy, hub_tol): + continue + if shared_ports and _pt_near(pt, shared_ports, fan_tol): + seg_a = (pa[ai], pa[ai + 1]) + seg_b = (pb[bi], pb[bi + 1]) + if not ( + _seg_near_vertical(*seg_a, vertical_dx_tol) + or _seg_near_vertical(*seg_b, vertical_dx_tol) + ): + continue + return pt + return None + + +def check_inter_section_line_crossings( + graph: MetroGraph, tolerance: float = 2.0 +) -> list[Violation]: + """Flag pairs of lines that cross on the curve between two sections. + + Lines leaving the same source section bound for the same target + section should preserve their top-to-bottom order: the line that + exits higher should also enter higher. When two lines swap order + between exit and entry, their connecting curves cross each other + visually for no structural reason - one or both lines were placed + sub-optimally on a side of the gap. + + Compares pairs of inter-section edges that share (source_section, + target_section). For each pair (a, b), if `a` exits above `b` but + enters below `b` (or vice versa), the two curves cross and a + violation is emitted. + + The check works on edges before port resolution would mask the + issue: it uses the source station's Y for "exit" and the target + station's Y for "entry", ignoring intermediate ports / junctions. + """ + violations: list[Violation] = [] + + # Group inter-section edges by (source_section, target_section). + groups: dict[tuple[str, str], list] = {} + for edge in graph.edges: + src = graph.stations.get(edge.source) + tgt = graph.stations.get(edge.target) + if src is None or tgt is None: + continue + if src.is_port or tgt.is_port: + continue + if src.section_id is None or tgt.section_id is None: + continue + if src.section_id == tgt.section_id: + continue + groups.setdefault((src.section_id, tgt.section_id), []).append((edge, src, tgt)) + + seen: set[tuple[str, str, str, str]] = set() + for (src_sec, tgt_sec), edges in groups.items(): + if len(edges) < 2: + continue + for i in range(len(edges)): + for j in range(i + 1, len(edges)): + a_edge, a_src, a_tgt = edges[i] + b_edge, b_src, b_tgt = edges[j] + if a_edge.line_id == b_edge.line_id: + continue + d_src = a_src.y - b_src.y + d_tgt = a_tgt.y - b_tgt.y + if abs(d_src) <= tolerance or abs(d_tgt) <= tolerance: + continue + if (d_src > 0) == (d_tgt > 0): + continue + key = (a_edge.line_id, b_edge.line_id, src_sec, tgt_sec) + if key in seen or key[:2][::-1] + key[2:] in seen: + continue + seen.add(key) + violations.append( + Violation( + check="inter_section_line_crossing", + severity=Severity.WARNING, + message=( + f"Lines '{a_edge.line_id}' and '{b_edge.line_id}' " + f"swap top-bottom order between sections " + f"'{src_sec}' and '{tgt_sec}': " + f"{a_edge.line_id} exits at y={a_src.y:.0f} " + f"(vs {b_src.y:.0f}) but enters at y={a_tgt.y:.0f} " + f"(vs {b_tgt.y:.0f}); curves cross unnecessarily" + ), + context={ + "line_a": a_edge.line_id, + "line_b": b_edge.line_id, + "src_section": src_sec, + "tgt_section": tgt_sec, + "a_src_y": a_src.y, + "a_tgt_y": a_tgt.y, + "b_src_y": b_src.y, + "b_tgt_y": b_tgt.y, + }, + ) + ) + + return violations + + +def check_single_segment_diagonals( + graph: MetroGraph, + min_dx: float = 5.0, + min_dy: float = 5.0, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Flag routed edges that are a single straight diagonal segment. + + A 1:1 chain edge whose post-offset path consists of a single point pair + with non-trivial dx and dy renders as one straight slope between the + source and target pills. The line should instead step between tracks + via an L-shape or S-curve: a horizontal exit segment, a 45 degree + corner transition, then a horizontal entry segment. + + Multi-segment paths are exempt because their endpoint segments may + legitimately be 45 degree corners as part of an L-shape, with the + surrounding axis-aligned segments providing the visual cleanness. + Sub-threshold deltas (default 5px) are ignored to filter out + sub-pixel offset jitter that the renderer rounds away. + + This complements check_almost_horizontal_edges, which targets shallow + slopes that *should* be flat; this check targets visibly diagonal + single segments that should be broken into S-shapes. + """ + violations: list[Violation] = [] + + if _precomputed is not None: + offsets, routes = _precomputed + else: + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception: + return violations + + for route in routes: + pts = apply_route_offsets(route, offsets) + if len(pts) != 2: + continue + x1, y1 = pts[0] + x2, y2 = pts[1] + dx = abs(x2 - x1) + dy = abs(y2 - y1) + if dx > min_dx and dy > min_dy: + violations.append( + Violation( + check="single_segment_diagonal", + severity=Severity.WARNING, + message=( + f"Edge {route.edge.source}->{route.edge.target} " + f"(line={route.line_id}) renders as a single straight " + f"diagonal: ({x1:.0f},{y1:.0f})->({x2:.0f},{y2:.0f}), " + f"dx={dx:.0f}, dy={dy:.0f}. Should be an L-shape or " + f"S-curve with axis-aligned endpoint segments" + ), + context={ + "source": route.edge.source, + "target": route.edge.target, + "line": route.line_id, + "dx": dx, + "dy": dy, + }, + ) + ) + + return violations + + +def check_intra_section_chain_alignment( + graph: MetroGraph, tolerance: float = 2.0 +) -> list[Violation]: + """Check that consecutive same-line stations within a section share a track. + + Within an LR section, two non-port stations connected by an edge on the + same metro line should sit at the same Y (the line's track), so the + intra-section edge runs horizontally. Within a TB section the same + invariant applies on the X axis. + + Diagonal intra-section edges typically arise when one endpoint is a + multi-line hub centred across many tracks while the other sits on a + single track. Routing produces an L-shape with corners that often + looks fine, so this is a WARNING rather than an ERROR - it surfaces + candidates for layout improvement (e.g. funcprofiler MERGE_RUNS + pulling above the concat track) without blocking renders that absorb + the offset cleanly. + + Multi-line hubs (stations carrying more than one metro line, e.g. + variantbenchmarking's Liftover where test and truth converge) sit at + a centroid Y dictated by the multiple lines they carry, so a 1:1 + chain edge into such a hub legitimately has a Y mismatch. + Cross-line fan-in / fan-out hubs (umi_dedup-style convergence + points) likewise sit at centroid Y and are excluded by the distinct- + neighbour count. + + Terminus stations (file icons for inputs / outputs) are skipped + because they conventionally sit at section edges, not aligned with + interior tracks; routing absorbs the icon-to-station Y delta as a + smooth S-curve. + + The variant_calling bwa_index -> bwa_mem case is the canonical + target: both stations carry only the Main line in a 4-station + zigzag where the layout could simply place them on the same row. + The flagged edge has no structural excuse for the Y delta. + + Inter-section edges, port endpoints, and the perpendicular axis are + not checked here (other validators cover those cases). + """ + violations: list[Violation] = [] + + # Per-station distinct *non-port* neighbour sets across all lines. + # Ports are routing artefacts that shouldn't excuse a structural + # misalignment between two real stations. + out_neighbours: dict[str, set[str]] = {} + in_neighbours: dict[str, set[str]] = {} + # Targets fed by an entry/exit port: a station that merges an internal + # branch with the line's external entry is a genuine fan-in hub, so the + # internal edge into it is legitimately diagonal and must not be flagged. + port_fed: set[str] = set() + for e in graph.edges: + src_st = graph.stations.get(e.source) + tgt_st = graph.stations.get(e.target) + if tgt_st is not None and not tgt_st.is_port: + out_neighbours.setdefault(e.source, set()).add(e.target) + if src_st is not None and not src_st.is_port: + in_neighbours.setdefault(e.target, set()).add(e.source) + if src_st is not None and src_st.is_port: + port_fed.add(e.target) + + for edge in graph.edges: + src = graph.stations.get(edge.source) + tgt = graph.stations.get(edge.target) + if src is None or tgt is None: + continue + if src.is_port or tgt.is_port: + continue + if src.is_hidden or tgt.is_hidden: + # A hidden bypass V dips off the trunk to route a line around a + # station marker, so an edge into or out of it is diagonal by + # design, not a chain misalignment. + continue + if src.is_terminus or tgt.is_terminus: + continue + if src.section_id is None or src.section_id != tgt.section_id: + continue + section = graph.sections.get(src.section_id) + if section is None: + continue + + # Skip multi-line hubs: the endpoint's Y is dictated by the + # other lines passing through it, not by this edge. + if len(graph.station_lines(edge.source)) > 1: + continue + if len(graph.station_lines(edge.target)) > 1: + continue + + # Skip cross-line fan-in / fan-out hubs: same logic at the + # neighbour level (multiple sources / targets across all lines). + if len(out_neighbours.get(edge.source, ())) > 1: + continue + if len(in_neighbours.get(edge.target, ())) > 1: + continue + + # Skip entry-port fan-in hubs: the target merges this internal + # branch with the line's external entry, so the branch edge is a + # legitimate diagonal merge, not a chain misalignment. + if edge.target in port_fed: + continue + + # Skip pre-terminus targets: a station whose only follow-on is + # a terminus (file icon) is at the tail of the chain and + # conventionally sits at the section's output edge. + tgt_outs = out_neighbours.get(edge.target, set()) + if len(tgt_outs) == 1: + next_st = graph.stations.get(next(iter(tgt_outs))) + if next_st is not None and next_st.is_terminus: + continue + + if section.direction in ("LR", "RL"): + delta = abs(src.y - tgt.y) + axis = "y" + src_coord, tgt_coord = src.y, tgt.y + elif section.direction == "TB": + delta = abs(src.x - tgt.x) + axis = "x" + src_coord, tgt_coord = src.x, tgt.x + else: + continue + + if delta > tolerance: + violations.append( + Violation( + check="intra_section_chain_alignment", + severity=Severity.WARNING, + message=( + f"Edge {edge.source}->{edge.target} " + f"(line={edge.line_id}) within section " + f"'{src.section_id}' ({section.direction}) is " + f"diagonal: |d{axis}|={delta:.1f}px " + f"(src={src_coord:.1f}, tgt={tgt_coord:.1f}); " + f"both endpoints share a line and a section so the " + f"edge should be axis-aligned" + ), + context={ + "source": edge.source, + "target": edge.target, + "line": edge.line_id, + "section": src.section_id, + "direction": section.direction, + "axis": axis, + "delta": delta, + }, + ) + ) + + return violations + + +def check_exit_port_feeder_alignment( + graph: MetroGraph, tolerance: float = 2.0 +) -> list[Violation]: + """Check that section exit ports align with their internal feeder station. + + For each exit port P, every internal (non-port, non-junction) station + inside the same section that has an edge directly into P should share + P's perpendicular coordinate (Y for LR/RL sections, X for TB). This + keeps the connecting segment axis-aligned and avoids kinks in the + horizontal exit run. + + Multi-feeder fan-ins inherently misalign all but one feeder, so this + check fires only when the port matches *none* of its feeders - i.e. + the engine missed a free alignment, not when geometry forced a fan-in + L-shape. When it fires, every misaligned feeder is reported so the + failure mode is fully visible. + + Junction stations (auto-inserted for fan-outs/fan-ins) are excluded + because they are routing artefacts that adopt the port's coordinate + by construction. + """ + violations: list[Violation] = [] + junction_ids = set(graph.junctions) + + # Build feeder mapping: port_id -> [(station_id, station)] + feeders: dict[str, list[tuple[str, object]]] = {} + for edge in graph.edges: + if edge.target not in graph.ports: + continue + src = graph.stations.get(edge.source) + if src is None or src.is_port or edge.source in junction_ids: + continue + port = graph.ports[edge.target] + if port.is_entry: + continue + if src.section_id != port.section_id: + continue + feeders.setdefault(edge.target, []).append((edge.source, src)) + + for port_id, feeder_list in feeders.items(): + port = graph.ports[port_id] + port_station = graph.stations.get(port_id) + if port_station is None: + continue + section = graph.sections.get(port.section_id) + if section is None: + continue + + if section.direction in ("LR", "RL"): + axis = "y" + port_coord = port_station.y + elif section.direction == "TB": + axis = "x" + port_coord = port_station.x + else: + continue + + # Compute deltas; only emit if no feeder aligns within tolerance. + deltas: list[tuple[str, object, float]] = [] + any_aligned = False + for st_id, st in feeder_list: + st_coord = st.y if axis == "y" else st.x + delta = abs(port_coord - st_coord) + deltas.append((st_id, st, delta)) + if delta <= tolerance: + any_aligned = True + + if any_aligned: + continue + + for st_id, st, delta in deltas: + st_coord = st.y if axis == "y" else st.x + violations.append( + Violation( + check="exit_port_feeder_alignment", + severity=Severity.WARNING, + message=( + f"Exit port '{port_id}' ({port.side.value}, " + f"{axis}={port_coord:.1f}) is misaligned with " + f"feeder station '{st_id}' ({axis}={st_coord:.1f}) " + f"in section '{port.section_id}': " + f"|d{axis}|={delta:.1f}px - port aligns with no " + f"feeder, every exit segment will kink" + ), + context={ + "port": port_id, + "station": st_id, + "section": port.section_id, + "axis": axis, + "delta": delta, + "port_coord": port_coord, + "station_coord": st_coord, + }, + ) + ) + + return violations + + +def check_serpentine_no_backtrack( + graph: MetroGraph, + backtrack_frac: float = 0.5, + _precomputed: tuple[dict[tuple[str, str], float], list[RoutedPath]] | None = None, +) -> list[Violation]: + """Stacked same-direction sections must not backtrack horizontally. + + When same-direction sections are stacked in one grid column and chained + (issue #421), the engine serpentines their effective flow so consecutive + sections meet on a shared side joined by a short vertical drop. A section + that fails to serpentine instead enters on the wrong side and folds its + internal route back across (nearly) the full section width. + + For every section in a detected serpentine run, this sums the horizontal + travel of its internal routed segments that runs *against* the section's + flow direction. If that wrong-way travel exceeds ``backtrack_frac`` of the + section width, the section is kinking the chain. + """ + from nf_metro.layout.auto_layout import detect_serpentine_runs + + violations: list[Violation] = [] + + if _precomputed is not None: + offsets, routes = _precomputed + else: + try: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + except Exception: + return violations + + dag = graph.section_dag + if dag is None: + return violations + runs = detect_serpentine_runs(graph, dag.successors, dag.predecessors) + serpentine_sections = {sid for run in runs for sid in run} + if not serpentine_sections: + return violations + + # Internal route segments grouped by home section. + wrong_way: dict[str, float] = {sid: 0.0 for sid in serpentine_sections} + for route in routes: + src_sec = graph.section_for_station(route.edge.source) + tgt_sec = graph.section_for_station(route.edge.target) + if src_sec != tgt_sec or src_sec not in serpentine_sections: + continue + port = graph.ports.get(route.edge.source) + if port and port.is_entry and port.side in (PortSide.LEFT, PortSide.RIGHT): + # A LEFT/RIGHT entry port's turn-in to the trunk is the entry, one + # leg perpendicular to flow, not a serpentine fold-back. + continue + section = graph.sections[src_sec] + forward = 1.0 if section.direction != "RL" else -1.0 + pts = apply_route_offsets(route, offsets) + for k in range(len(pts) - 1): + dx = pts[k + 1][0] - pts[k][0] + if dx * forward < 0: + wrong_way[src_sec] += abs(dx) + + for sid, against in wrong_way.items(): + section = graph.sections[sid] + limit = backtrack_frac * max(section.bbox_w, 1.0) + if against > limit: + violations.append( + Violation( + check="serpentine_no_backtrack", + severity=Severity.ERROR, + message=( + f"Stacked section '{sid}' (dir={section.direction}) " + f"backtracks {against:.0f}px against its flow " + f"(>{limit:.0f}px = {backtrack_frac:.0%} of width " + f"{section.bbox_w:.0f}); the serpentine chain is " + f"kinking instead of dropping vertically" + ), + context={ + "section": sid, + "direction": section.direction, + "against": against, + "limit": limit, + }, + ) + ) + + return violations diff --git a/tests/routing_inter_section.py b/tests/routing_inter_section.py new file mode 100644 index 000000000..6b69ab068 --- /dev/null +++ b/tests/routing_inter_section.py @@ -0,0 +1,100 @@ +"""Simplified inter-section edge routing (test-only utility). + +This module provides a simpler routing function that only handles edges +crossing section boundaries, without the full bundle offset logic of +route_edges(). Used primarily in tests. +""" + +from __future__ import annotations + +from nf_metro.layout.constants import ( + COORD_TOLERANCE, + COORD_TOLERANCE_FINE, + CURVE_RADIUS, + DIAGONAL_RUN, + MIN_STRAIGHT_INTER, +) +from nf_metro.layout.routing.common import RoutedPath +from nf_metro.parser.model import MetroGraph + + +def route_inter_section_edges( + graph: MetroGraph, + diagonal_run: float = DIAGONAL_RUN, + curve_radius: float = CURVE_RADIUS, +) -> list[RoutedPath]: + """Route edges that cross section boundaries (port-to-port). + + These are edges where both source and target are ports (or one is a port). + Uses the same routing style as regular edges. + """ + routes: list[RoutedPath] = [] + + for edge in graph.edges: + src = graph.stations.get(edge.source) + tgt = graph.stations.get(edge.target) + if not src or not tgt: + continue + + # Only route edges that cross section boundaries: + # - Both endpoints in different sections, OR + # - One endpoint is a junction (section_id=None, e.g. divergence point) + src_sec = src.section_id + tgt_sec = tgt.section_id + is_junction_edge = src_sec is None or tgt_sec is None + if not is_junction_edge and (src_sec == tgt_sec): + continue + + sx, sy = src.x, src.y + tx, ty = tgt.x, tgt.y + dx = tx - sx + dy = ty - sy + + if abs(dy) < COORD_TOLERANCE_FINE: + routes.append( + RoutedPath( + edge=edge, + line_id=edge.line_id, + points=[(sx, sy), (tx, ty)], + ) + ) + elif abs(dx) < COORD_TOLERANCE: + routes.append( + RoutedPath( + edge=edge, + line_id=edge.line_id, + points=[(sx, sy), (tx, ty)], + ) + ) + else: + sign = 1.0 if dx > 0 else -1.0 + half_diag = diagonal_run / 2 + + mid_x = (sx + tx) / 2 + diag_start_x = mid_x - sign * half_diag + diag_end_x = mid_x + sign * half_diag + + # Ensure minimum straight track at each station so the + # station sits on a visible horizontal segment, not a curve. + min_straight = curve_radius + MIN_STRAIGHT_INTER + if sign > 0: + diag_start_x = max(diag_start_x, sx + min_straight) + diag_end_x = min(diag_end_x, tx - min_straight) + else: + diag_start_x = min(diag_start_x, sx - min_straight) + diag_end_x = max(diag_end_x, tx + min_straight) + + routes.append( + RoutedPath( + edge=edge, + line_id=edge.line_id, + points=[ + (sx, sy), + (diag_start_x, sy), + (diag_end_x, ty), + (tx, ty), + ], + ) + ) + + return routes diff --git a/tests/test_animation.py b/tests/test_animation.py new file mode 100644 index 000000000..934ec9e70 --- /dev/null +++ b/tests/test_animation.py @@ -0,0 +1,203 @@ +"""Animation motion path invariants. + +Every line segment in a motion path must lie along a rendered +metro-line segment for the same line. An animation polyline that +strays off the visible track produces a ball that flies off-piste. +""" + +from __future__ import annotations + +import re +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.animate import _build_line_motion_paths +from nf_metro.render.svg import render_svg +from nf_metro.themes import THEMES + +EXAMPLES_DIR = Path(__file__).parent.parent / "examples" +TOPOLOGIES_DIR = EXAMPLES_DIR / "topologies" + +# Fixtures that exercise the merge-junction routing introduced in #207 +# along with a couple of standard examples as regression guards. +ANIMATION_FIXTURES = [ + EXAMPLES_DIR / "genomeassembly.mmd", + EXAMPLES_DIR / "rnaseq_sections.mmd", + EXAMPLES_DIR / "epitopeprediction.mmd", + EXAMPLES_DIR / "hlatyping.mmd", + TOPOLOGIES_DIR / "fan_in_merge.mmd", + TOPOLOGIES_DIR / "wide_fan_in.mmd", + TOPOLOGIES_DIR / "section_diamond.mmd", +] +ANIMATION_FIXTURE_IDS = [p.stem for p in ANIMATION_FIXTURES] + + +def _build(fixture: Path): + """Parse, layout, route, and build animation motion paths for a fixture.""" + graph = parse_metro_mermaid(fixture.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + theme = THEMES["nfcore"] + motion_paths = _build_line_motion_paths(graph, routes, offsets, theme) + return graph, routes, offsets, motion_paths + + +_NUMBER = r"-?\d+(?:\.\d+)?" +_TOKEN_RE = re.compile(rf"[MLQ]|{_NUMBER}") + + +def _parse_motion_path(d_attr: str) -> list[tuple[str, list[tuple[float, float]]]]: + """Parse an SVG motion path 'd' attribute into segments. + + Returns a list of (command, points) where command is one of 'M', 'L', + 'Q' and points is the segment's coordinate tuples. The 'Q' segment + keeps the (control, end) pair. + """ + tokens = _TOKEN_RE.findall(d_attr) + out: list[tuple[str, list[tuple[float, float]]]] = [] + i = 0 + while i < len(tokens): + tok = tokens[i] + if tok in ("M", "L"): + x = float(tokens[i + 1]) + y = float(tokens[i + 2]) + out.append((tok, [(x, y)])) + i += 3 + elif tok == "Q": + cx = float(tokens[i + 1]) + cy = float(tokens[i + 2]) + ex = float(tokens[i + 3]) + ey = float(tokens[i + 4]) + out.append(("Q", [(cx, cy), (ex, ey)])) + i += 5 + else: + i += 1 + return out + + +def _end_point(segment: tuple[str, list[tuple[float, float]]]) -> tuple[float, float]: + """Return the on-curve endpoint of a parsed segment.""" + cmd, pts = segment + if cmd == "Q": + return pts[1] + return pts[0] + + +@pytest.mark.parametrize("fixture", ANIMATION_FIXTURES, ids=ANIMATION_FIXTURE_IDS) +def test_motion_path_segments_lie_on_rendered_geometry(fixture: Path): + """Every L/Q segment of every motion path must coincide with a + rendered metro-line segment of the same line.""" + from nf_metro.layout.routing.common import point_on_polyline + from nf_metro.render.svg import apply_route_offsets + + graph, routes, offsets, motion_paths = _build(fixture) + + polylines_by_line: dict[str, list[list[tuple[float, float]]]] = {} + for r in routes: + polylines_by_line.setdefault(r.line_id, []).append( + apply_route_offsets(r, offsets) + ) + + tol = 1.5 # absorb curve-approximation rounding + + def _segment_covered( + a: tuple[float, float], + b: tuple[float, float], + line_id: str, + ) -> bool: + for pts in polylines_by_line.get(line_id, []): + a_loc = point_on_polyline(a, pts, tol) + if a_loc is None: + continue + b_loc = point_on_polyline(b, pts, tol) + if b_loc is None: + continue + # Same segment or adjacent segments along the polyline are fine; + # the test is whether both points sit on the same polyline. + return True + return False + + offences: list[str] = [] + for line_id, d_attr in motion_paths: + parsed = _parse_motion_path(d_attr) + if not parsed: + continue + prev_end = _end_point(parsed[0]) + for seg in parsed[1:]: + cmd, pts = seg + end = _end_point(seg) + if cmd == "L": + if not _segment_covered(prev_end, end, line_id): + offences.append(f"L {prev_end} -> {end} on line {line_id!r}") + elif cmd == "Q": + # Curve smoothing at a station corner: accept if either the + # control leg or the chord lies on the rendered polyline. + control = pts[0] + if not ( + _segment_covered(prev_end, control, line_id) + or _segment_covered(prev_end, end, line_id) + ): + offences.append( + f"Q {prev_end} -> {control} -> {end} on line {line_id!r}" + ) + prev_end = end + + assert not offences, ( + f"{fixture.name}: motion path contains off-piste segments not on " + f"any rendered metro-line edge:\n " + "\n ".join(offences[:5]) + ) + + +def _render_animated(fixture: Path, theme_key: str = "nfcore") -> str: + graph = parse_metro_mermaid(fixture.read_text()) + compute_layout(graph) + return render_svg(graph, THEMES[theme_key], animate=True) + + +@pytest.mark.parametrize("fixture", ANIMATION_FIXTURES, ids=ANIMATION_FIXTURE_IDS) +def test_animation_uses_css_offset_path_not_smil(fixture: Path): + """Animated balls must be driven by CSS ``offset-path``, not SMIL. + + SMIL ```` freezes when an SVG is injected into a host + page via ``innerHTML`` (the playground preview, the inline embed + snippet): the timeline advances but the motion is never sampled, so + every ball sits at its path start. CSS ``offset-path`` animates in + every embedding context, so the rendered animation must use it and + carry no SMIL motion elements. + """ + svg = _render_animated(fixture) + assert " str: + result = CliRunner().invoke(cli, ["render", str(src), "-o", str(out), *args]) + assert result.exit_code == 0, result.output + return out.read_text() + + +def _as_written(content: str) -> str: + """Mirror the CLI's file-write normalization (a single trailing newline).""" + return content if content.endswith("\n") else content + "\n" + + +@pytest.mark.parametrize("name", PARITY_FIXTURES) +def test_render_string_matches_cli_svg(name: str, tmp_path: Path) -> None: + src = EXAMPLES / name + cli_out = _cli_render(src, tmp_path / "cli.svg") + assert cli_out == _as_written(render_string(src.read_text())) + + +@pytest.mark.parametrize("name", PARITY_FIXTURES) +def test_render_string_matches_cli_html(name: str, tmp_path: Path) -> None: + src = EXAMPLES / name + out = tmp_path / "cli.html" + cli_out = _cli_render(src, out, "--format", "html") + api_out = render_string( + src.read_text(), output_format="html", embed_basename=out.name + ) + assert cli_out == _as_written(api_out) + + +def test_render_string_matches_cli_with_explicit_options(tmp_path: Path) -> None: + """Explicit registry + render options thread through to match the CLI flags.""" + src = EXAMPLES / "rnaseq_auto.mmd" + cli_out = _cli_render( + src, + tmp_path / "cli.svg", + "--animate", + "--center-ports", + "--x-spacing", + "80", + "--responsive", + "--embed-font", + ) + api_out = render_string( + src.read_text(), + responsive=True, + embed_font=True, + layout_options={"animate": True, "center_ports": True, "x_spacing": 80.0}, + ) + assert cli_out == _as_written(api_out) + + +def test_render_string_honours_theme_and_layout_options() -> None: + src = (EXAMPLES / "rnaseq_auto.mmd").read_text() + light = render_string(src, theme="light") + dark = render_string(src, theme="nfcore") + assert light != dark + + narrow = render_string(src, layout_options={"x_spacing": 60.0}) + wide = render_string(src, layout_options={"x_spacing": 200.0}) + assert narrow != wide + + +def test_prepare_graph_returns_settled_graph() -> None: + graph = prepare_graph((EXAMPLES / "rnaseq_auto.mmd").read_text()) + assert graph.stations + # compute_layout has run: every real station carries coordinates. + assert all(s.x is not None and s.y is not None for s in graph.stations.values()) + + +def test_render_string_propagates_layout_error() -> None: + cyclic = ( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n n2 -->|a| n1\n" + ) + with pytest.raises(CyclicGraphError): + render_string(cyclic) + + +def _data_uri_logo_mmd(logo_directive: str) -> str: + return ( + f"%%metro logo: {logo_directive}\n" + "%%metro line: a | A | #f00\n" + "graph LR\n n1[N1] -->|a| n2[N2]\n" + ) + + +def test_render_string_embeds_data_uri_logo_with_no_source_dir() -> None: + """A data URI needs no filesystem access, so the browser playground (which + calls render_string with no source_dir) can embed a logo that was never on + disk in the first place.""" + pixel = ( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4" + "nGNgYAAAAAMAASsJTYQAAAAASUVORK5CYII=" + ) + svg = render_string(_data_uri_logo_mmd(pixel)) + assert pixel in svg + + +def test_prepare_graph_rejects_unresolvable_logo_path() -> None: + with pytest.raises(ValueError, match="does/not/exist.png"): + prepare_graph(_data_uri_logo_mmd("does/not/exist.png")) + + +def test_render_string_self_color_scheme_parity() -> None: + src = (EXAMPLES / "rnaseq_auto.mmd").read_text() + with_cs = render_string(src) + without_cs = render_string(src, self_color_scheme=False) + assert "color-scheme" in with_cs + assert "color-scheme" not in without_cs + + +def test_render_string_accepts_render_config() -> None: + src = (EXAMPLES / "rnaseq_auto.mmd").read_text() + via_config = render_string(src, config=RenderConfig(responsive=True)) + via_kwargs = render_string(src, responsive=True) + assert via_config == via_kwargs + + +def test_render_string_warns_when_config_shadows_flat_kwargs() -> None: + src = (EXAMPLES / "rnaseq_auto.mmd").read_text() + with pytest.warns(UserWarning, match=r"ignoring \[.*'responsive'"): + out = render_string(src, config=RenderConfig(), responsive=True) + # config wins: the flat responsive=True is ignored. + assert out == render_string(src) + + +def test_render_string_no_shadow_warning_when_only_config() -> None: + src = (EXAMPLES / "rnaseq_auto.mmd").read_text() + with warnings.catch_warnings(record=True) as caught: + warnings.simplefilter("always") + render_string(src, config=RenderConfig(responsive=True)) + assert not [w for w in caught if "supersedes" in str(w.message)] diff --git a/tests/test_auto_layout.py b/tests/test_auto_layout.py index d71912d36..77ad07ccc 100644 --- a/tests/test_auto_layout.py +++ b/tests/test_auto_layout.py @@ -1,18 +1,26 @@ """Tests for auto-layout inference logic.""" +import re from pathlib import Path +import pytest + from nf_metro.layout.auto_layout import ( _assign_grid_positions, _build_section_dag, - _estimate_section_layers, _infer_directions, _infer_port_sides, infer_section_layout, ) from nf_metro.parser.mermaid import parse_metro_mermaid -from nf_metro.parser.model import Edge, MetroGraph, MetroLine, PortSide, Section, Station - +from nf_metro.parser.model import ( + Edge, + MetroGraph, + MetroLine, + PortSide, + Section, + Station, +) EXAMPLES = Path(__file__).parent.parent / "examples" @@ -23,7 +31,8 @@ def _make_graph_with_sections( ) -> MetroGraph: """Helper to build a graph with sections and inter-section edges. - inter_edges: list of (source_station, source_section, target_station, target_section, line_id) + inter_edges: list of (source_station, source_section, + target_station, target_section, line_id) """ graph = MetroGraph() graph.add_line(MetroLine(id="main", display_name="Main", color="#ff0000")) @@ -55,7 +64,8 @@ def _make_graph_with_sections( def test_build_section_dag(): - """_build_section_dag correctly identifies successors, predecessors, and edge lines.""" + """_build_section_dag correctly identifies successors, predecessors, + and edge lines.""" graph = _make_graph_with_sections( ["sec1", "sec2", "sec3"], [ @@ -134,11 +144,14 @@ def test_grid_assignment_fold(): sections = [f"sec{i}" for i in range(5)] edges = [] for i in range(4): - edges.append((f"sec{i}_s1", f"sec{i}", f"sec{i+1}_s1", f"sec{i+1}", "main")) + edges.append((f"sec{i}_s1", f"sec{i}", f"sec{i + 1}_s1", f"sec{i + 1}", "main")) graph = _make_graph_with_sections(sections, edges) successors, predecessors, _ = _build_section_dag(graph) - fold_sections = _assign_grid_positions( - graph, successors, predecessors, max_station_columns=3, + fold_sections, _below, _conv = _assign_grid_positions( + graph, + successors, + predecessors, + max_station_columns=3, ) # Row 0: sec0 at col 0, sec1 at col 1, sec2 at col 2 @@ -152,10 +165,10 @@ def test_grid_assignment_fold(): assert "sec3" in fold_sections assert graph.sections["sec3"].grid_col == 3 assert graph.sections["sec3"].grid_row == 0 - # sec4 starts a new row band at the fold column (right-aligned - # by section_placement so right edges align with the fold section) + # sec4 starts a new row band one column past the fold (leftward), + # so it doesn't share the narrow fold column assert graph.sections["sec4"].grid_row == 1 - assert graph.sections["sec4"].grid_col == 3 # same col as fold section + assert graph.sections["sec4"].grid_col == 2 # one left of fold section def test_grid_preserves_explicit_overrides(): @@ -228,6 +241,59 @@ def test_direction_explicit_preserved(): assert graph.sections["sec1"].direction == "TB" +def test_explicit_grid_section_keeps_lr_against_auto_successor_below(): + """An explicit-grid section keeps the LR default even when an auto-placed + successor lands in a lower grid row. + + Regression lock for #446: during auto-layout an explicit-grid section + still reads grid_col == -1, so comparing it against an auto neighbour + (row >= 0) used to fire the "all successors below" TB branch and reorient + the section vertically. + """ + graph = _make_graph_with_sections( + ["manual", "downstream"], + [("manual_s1", "manual", "downstream_s1", "downstream", "main")], + ) + # 'manual' is explicitly gridded; 'downstream' is left to auto-layout. + graph.grid_overrides["manual"] = (0, 0, 1, 1) + graph._explicit_grid.add("manual") + + successors, predecessors, _ = _build_section_dag(graph) + _assign_grid_positions(graph, successors, predecessors, max_station_columns=100) + _infer_directions(graph, successors, predecessors, set()) + + assert graph.sections["manual"].direction == "LR" + + +@pytest.mark.parametrize( + "fixture", + [ + "sarek_metro.mmd", + "genomeassembly_staggered.mmd", + "topologies/stacked_lr_serpentine.mmd", + "topologies/around_section_below.mmd", + "topologies/inter_row_wrap_clearance.mmd", + ], +) +def test_explicit_grid_sections_default_lr(fixture): + """Explicit-grid sections with no %%metro direction stay LR after layout. + + These fixtures lay every section out by hand; their grid stacks + successors below predecessors (serpentine wraps), which must not be read + as vertical internal flow (#446). + """ + text = (EXAMPLES / fixture).read_text() + graph = parse_metro_mermaid(text) + + explicit = graph._explicit_grid - graph._explicit_directions + assert explicit, f"{fixture} has no explicit-grid sections to check" + for sec_id in explicit: + assert graph.sections[sec_id].direction == "LR", ( + f"{fixture}: {sec_id} should default LR, got " + f"{graph.sections[sec_id].direction}" + ) + + # --- Phase 4: Port side inference --- @@ -281,8 +347,14 @@ def test_port_side_explicit_preserved(): assert graph.sections["sec2"].entry_hints[0][0] == PortSide.TOP -def test_port_side_below_section(): - """Entry from a section above gets TOP entry side.""" +def test_stacked_lr_sections_flow_aligned_ports(): + """Stacked LR sections connect via a carriage-return wrap (#432). + + A left-to-right section stacked directly below another in the same + grid column must present flow-aligned ports - exit RIGHT, entry LEFT - + not a TOP/BOTTOM vertical hop. The inter-section router carriage- + returns (right -> down -> left -> down -> right) to join them. + """ graph = _make_graph_with_sections( ["top_sec", "bottom_sec"], [("top_sec_s1", "top_sec", "bottom_sec_s1", "bottom_sec", "main")], @@ -290,18 +362,41 @@ def test_port_side_below_section(): successors, predecessors, edge_lines = _build_section_dag(graph) _assign_grid_positions(graph, successors, predecessors, max_station_columns=100) - # Force bottom_sec to be below top_sec + # Force bottom_sec to be below top_sec in the same column. graph.sections["top_sec"].grid_col = 0 graph.sections["top_sec"].grid_row = 0 graph.sections["bottom_sec"].grid_col = 0 graph.sections["bottom_sec"].grid_row = 1 + assert graph.sections["top_sec"].direction == "LR" + assert graph.sections["bottom_sec"].direction == "LR" _infer_port_sides(graph, successors, predecessors, edge_lines, set()) - # Exit should be BOTTOM - assert graph.sections["top_sec"].exit_hints[0][0] == PortSide.BOTTOM - # Entry should be TOP - assert graph.sections["bottom_sec"].entry_hints[0][0] == PortSide.TOP + # Exit on the trailing (RIGHT) edge, entry on the leading (LEFT) edge. + assert graph.sections["top_sec"].exit_hints[0][0] == PortSide.RIGHT + assert graph.sections["bottom_sec"].entry_hints[0][0] == PortSide.LEFT + + +def test_rl_sections_flow_aligned_ports(): + """RL sections mirror the flow-aligned rule: entry RIGHT, exit LEFT.""" + graph = _make_graph_with_sections( + ["top_sec", "bottom_sec"], + [("top_sec_s1", "top_sec", "bottom_sec_s1", "bottom_sec", "main")], + ) + successors, predecessors, edge_lines = _build_section_dag(graph) + _assign_grid_positions(graph, successors, predecessors, max_station_columns=100) + + graph.sections["top_sec"].grid_col = 0 + graph.sections["top_sec"].grid_row = 0 + graph.sections["top_sec"].direction = "RL" + graph.sections["bottom_sec"].grid_col = 0 + graph.sections["bottom_sec"].grid_row = 1 + graph.sections["bottom_sec"].direction = "RL" + + _infer_port_sides(graph, successors, predecessors, edge_lines, set()) + + assert graph.sections["top_sec"].exit_hints[0][0] == PortSide.LEFT + assert graph.sections["bottom_sec"].entry_hints[0][0] == PortSide.RIGHT # --- Edge cases --- @@ -339,6 +434,32 @@ def test_single_section_no_op(): # --- Integration tests --- +def test_stacked_sections_infer_left_entry(): + """the stacked col-1 sections auto-infer LEFT entry ports (#432). + + ``post_vc``/``annotation``/``reporting`` carry no explicit entry/exit + directives; with only their grid positions declared they must still + infer flow-aligned LEFT entries so they connect via a carriage-return + wrap, not enter through the right edge. + """ + from nf_metro.layout.engine import compute_layout + + text = (EXAMPLES / "genomic_pipeline.mmd").read_text() + graph = parse_metro_mermaid(text) + compute_layout(graph) + + for sec_id in ("post_vc", "annotation", "reporting"): + entries = [ + p for p in graph.ports.values() if p.section_id == sec_id and p.is_entry + ] + assert entries, f"{sec_id} should have an entry port" + for port in entries: + assert port.side == PortSide.LEFT, ( + f"{sec_id} entry port {port.id} inferred on {port.side.name}, " + "expected LEFT (flow-aligned carriage-return)" + ) + + def test_rnaseq_auto_renders(): """rnaseq_auto.mmd (no directives) parses and renders without errors.""" from nf_metro.layout.engine import compute_layout @@ -369,15 +490,15 @@ def test_rnaseq_auto_sections_have_ports(): # Sections with outgoing inter-section edges should have exit ports preprocessing_exits = [ - p for p in graph.ports.values() + p + for p in graph.ports.values() if p.section_id == "preprocessing" and not p.is_entry ] assert len(preprocessing_exits) >= 1 # Genome alignment should have entry ports genome_entries = [ - p for p in graph.ports.values() - if p.section_id == "genome_align" and p.is_entry + p for p in graph.ports.values() if p.section_id == "genome_align" and p.is_entry ] assert len(genome_entries) >= 1 @@ -396,7 +517,10 @@ def test_rnaseq_auto_grid_positions(): assert graph.sections["preprocessing"].grid_row == 0 # Genome alignment should be after preprocessing in row 0 - assert graph.sections["genome_align"].grid_col > graph.sections["preprocessing"].grid_col + assert ( + graph.sections["genome_align"].grid_col + > graph.sections["preprocessing"].grid_col + ) assert graph.sections["genome_align"].grid_row == 0 # Postprocessing is the fold section (TB bridge) at the right edge of row 0 @@ -405,3 +529,208 @@ def test_rnaseq_auto_grid_positions(): # QC report should be in the next row band (below the fold) assert graph.sections["qc_report"].grid_row > 0 + + +# --- Below-fold row sharing --- + + +def test_below_fold_sections_share_rows_with_return(): + """Below-fold sections (in the fold column) should not push return-row + sections to extra rows. They occupy different columns so can share rows.""" + # sec1 -> {sec2a, sec2b} -> sec3 (fold) -> sec4 (below) -> sec5 + # max_station_columns=2: fold at sec3 with band_height=2 + # sec3 has single successor sec4 -> below-fold placement + # sec5 on the return row should share rows with sec4 + graph = _make_graph_with_sections( + ["sec1", "sec2a", "sec2b", "sec3", "sec4", "sec5"], + [ + ("sec1_s1", "sec1", "sec2a_s1", "sec2a", "main"), + ("sec1_s1", "sec1", "sec2b_s1", "sec2b", "main"), + ("sec2a_s1", "sec2a", "sec3_s1", "sec3", "main"), + ("sec2b_s1", "sec2b", "sec3_s1", "sec3", "main"), + ("sec3_s1", "sec3", "sec4_s1", "sec4", "main"), + ("sec4_s1", "sec4", "sec5_s1", "sec5", "main"), + ], + ) + successors, predecessors, edge_lines = _build_section_dag(graph) + fold_sections, below_fold, _conv = _assign_grid_positions( + graph, successors, predecessors, max_station_columns=2 + ) + + # sec3 should be the fold section + assert "sec3" in fold_sections + + # sec4 should be placed below the fold + assert "sec4" in below_fold + + # sec5 (return row) should share the same row as sec4 (below-fold), + # not be pushed to a later row. They're in different columns so sharing is fine. + sec4_row = graph.sections["sec4"].grid_row + sec5_row = graph.sections["sec5"].grid_row + assert sec5_row == sec4_row, ( + f"Return section sec5 at row {sec5_row} should share row with " + f"below-fold sec4 at row {sec4_row}" + ) + + +# --- Folded-grid topological-order invariants (issue #256) --- + +TOPOLOGIES_DIR = EXAMPLES / "topologies" + +# Fold-exercising fixtures: each wraps into >=2 rows at small fold +# thresholds, stressing the serpentine packer's row/column assignment. +_FOLD_FIXTURES = [ + "fold_double", + "fold_fan_across", + "fold_stacked_branch", + "u_turn_fold", + "deep_linear", +] + +# Fold thresholds that force serpentine wrapping on these fixtures. +_FOLD_THRESHOLDS = [3, 4, 9] + + +def _fold_layout(fixture: str, max_station_columns: int): + """Parse a fold fixture and run full auto-layout inference (greedy + packer + post-passes), returning the laid-out graph.""" + path = TOPOLOGIES_DIR / f"{fixture}.mmd" + return parse_metro_mermaid( + path.read_text(), max_station_columns=max_station_columns + ) + + +def _grid_of(graph): + """{section_id: (grid_col, grid_row)} for every section.""" + return {sid: (sec.grid_col, sec.grid_row) for sid, sec in graph.sections.items()} + + +@pytest.mark.parametrize("fixture", _FOLD_FIXTURES) +@pytest.mark.parametrize("threshold", _FOLD_THRESHOLDS) +def test_folded_grid_has_no_negative_columns(fixture, threshold): + """No auto-placed section may land at a negative grid column. + + A negative column means a section was pushed left of the entire + layout (the spurious-trailing-fold defect in #256), which renders + the badge to the left of everything and snakes the trunk down the + left edge. + """ + grid = _grid_of(_fold_layout(fixture, threshold)) + offenders = {sid: (c, r) for sid, (c, r) in grid.items() if c < 0} + assert not offenders, ( + f"{fixture} (threshold={threshold}): sections at negative grid " + f"columns: {offenders}" + ) + + +@pytest.mark.parametrize("fixture", _FOLD_FIXTURES) +@pytest.mark.parametrize("threshold", _FOLD_THRESHOLDS) +def test_folded_grid_preserves_topo_order_in_serpentine_read(fixture, threshold): + """A folded grid must read in topological order along the serpentine. + + Reading row 0 left-to-right, row 1 right-to-left, row 2 + left-to-right, ... must visit each section no earlier than its + topological predecessor. A section read before its predecessor means + the inter-section trunk has to double back across the wrap - either + the spurious-trailing-fold / negative-column defect or the + sibling-scatter defect from #256 (a converging successor slotted + between two stacked sibling predecessors). + """ + graph = _fold_layout(fixture, threshold) + # Use the section DAG captured during inference (built before + # _resolve_sections rewrites inter-section edges into port chains); + # rebuilding from the resolved graph would lose those edges. + predecessors = graph.section_dag.predecessors + sections = graph.sections + grid = _grid_of(graph) + + # A row band can be several rows tall: stacked sections share a band and + # thus a flow direction. Flow alternates per band, not per row. Derive + # each row's flow from the horizontal section directions on it (LR -> + # +col, RL -> -col), falling back to serpentine parity for all-vertical + # rows. Consecutive rows sharing a flow direction form one band. + rows = sorted({r for _, r in grid.values()}) + row_flow: dict[int, int] = {} + for sec in sections.values(): + if sec.direction in ("LR", "RL"): + row_flow.setdefault(sec.grid_row, 1 if sec.direction == "LR" else -1) + for row in rows: + row_flow.setdefault(row, 1 if row % 2 == 0 else -1) + + band_of: dict[int, int] = {} + band_idx = 0 + for i, row in enumerate(rows): + if i > 0 and row_flow[row] != row_flow[rows[i - 1]]: + band_idx += 1 + band_of[row] = band_idx + + # Serpentine read-order rank: bands ascend; within a band, sections are + # read along the band's flow direction (stacked sections at the same + # column-position read consecutively, by row). + def read_rank(item): + _sid, (col, row) = item + return (band_of[row], row_flow[row] * col, row) + + order = [sid for sid, _ in sorted(grid.items(), key=read_rank)] + rank = {sid: i for i, sid in enumerate(order)} + + for sid, preds in predecessors.items(): + if sid not in rank: + continue + for pred in preds: + if pred not in rank: + continue + assert rank[pred] <= rank[sid], ( + f"{fixture} (threshold={threshold}): predecessor {pred!r} " + f"at grid {grid[pred]} (read-rank {rank[pred]}) comes AFTER " + f"its successor {sid!r} at grid {grid[sid]} (read-rank " + f"{rank[sid]}) in serpentine read order" + ) + + +_GRID_DIRECTIVE_RE = re.compile(r"^\s*%%metro\s+(grid|direction)\s*:", re.IGNORECASE) + + +def _strip_grid_and_direction(text: str) -> str: + """Drop every ``%%metro grid:``/``direction:`` line so the map lays out + under pure auto-inference.""" + return "\n".join( + line for line in text.splitlines() if not _GRID_DIRECTIVE_RE.match(line) + ) + + +@pytest.mark.parametrize("fixture", ["sarek_metro.mmd", "rnaseq_auto.mmd"]) +def test_perp_entry_run_stays_in_section_bbox(fixture): + """A perpendicular-entry shift keeps the run inside its section bbox (#875). + + Auto-layout can place a horizontal (LR/RL) section as a run fed by a + same-column vertical drop, so its only port is a perpendicular TOP entry. + Opening the station-elbow gap shifts the run away from that port; the bbox + must follow on the shift side. Stripping ``sarek_metro``'s explicit + ``grid:`` directives drives its ``annotation`` section into exactly this + state -- before the fix the leftmost station spilled past ``bbox_x`` and + the always-on bbox-containment guard aborted the render. ``rnaseq_auto`` + is a clean auto-layout that must keep passing. + """ + from nf_metro.layout.constants import GUARD_TOLERANCE + from nf_metro.layout.engine import compute_layout + + text = _strip_grid_and_direction((EXAMPLES / fixture).read_text()) + graph = parse_metro_mermaid(text) + compute_layout(graph) + + tol = GUARD_TOLERANCE + junction_ids = graph.junction_ids + for sid, station in graph.stations.items(): + if station.is_port or sid in junction_ids: + continue + sec = graph.sections.get(station.section_id or "") + if sec is None or sec.bbox_w == 0: + continue + left = sec.bbox_x - tol + right = sec.bbox_x + sec.bbox_w + tol + assert left <= station.x <= right, ( + f"{fixture}: station {sid!r} x={station.x:.1f} outside section " + f"{station.section_id!r} bbox x-range " + f"[{sec.bbox_x:.1f}, {sec.bbox_x + sec.bbox_w:.1f}]" + ) diff --git a/tests/test_axis_centrelines.py b/tests/test_axis_centrelines.py new file mode 100644 index 000000000..d8a3bc463 --- /dev/null +++ b/tests/test_axis_centrelines.py @@ -0,0 +1,152 @@ +"""Axis-generic centreline builders and the routing handlers that share them. + +The single-corner and diagonal centrelines an LR/RL handler builds are the +transpose of the ones a TB handler builds. ``geometry.single_corner_centreline`` +and ``geometry.diagonal_centreline`` express that transpose once; these tests pin +the transpose contract and assert the LR and TB handlers both delegate to it. +""" + +from __future__ import annotations + +import importlib +from pathlib import Path + +import pytest + +from nf_metro.layout import geometry +from nf_metro.layout.engine import compute_layout +from nf_metro.parser.mermaid import parse_metro_mermaid + +TOPO = Path(__file__).parent.parent / "examples" / "topologies" + +SRC: geometry.Point = (0.0, 0.0) +TGT: geometry.Point = (10.0, 5.0) + + +def _layout(name: str) -> None: + graph = parse_metro_mermaid((TOPO / name).read_text()) + compute_layout(graph) + + +def _spy(monkeypatch: pytest.MonkeyPatch, modpath: str, fname: str) -> list[dict]: + """Wrap ``modpath.fname`` so each call's kwargs are recorded; return the log.""" + mod = importlib.import_module(modpath) + real = getattr(mod, fname) + calls: list[dict] = [] + + def wrapper(*args, **kwargs): + result = real(*args, **kwargs) + calls.append(kwargs) + return result + + monkeypatch.setattr(mod, fname, wrapper) + return calls + + +def test_single_corner_centreline_exit_transposes_by_axis() -> None: + assert geometry.single_corner_centreline("LR", SRC, TGT, flow_first=True) == [ + (0.0, 0.0), + (10.0, 0.0), + (10.0, 5.0), + ] + assert geometry.single_corner_centreline("TB", SRC, TGT, flow_first=True) == [ + (0.0, 0.0), + (0.0, 5.0), + (10.0, 5.0), + ] + + +def test_single_corner_centreline_entry_swaps_leg_order() -> None: + # flow_first=False turns on the lane axis first; for TB that is the X leg, + # for LR the Y leg -- the exact transpose of the flow_first=True corner. + assert geometry.single_corner_centreline("TB", SRC, TGT, flow_first=False) == [ + (0.0, 0.0), + (10.0, 0.0), + (10.0, 5.0), + ] + assert geometry.single_corner_centreline("LR", SRC, TGT, flow_first=False) == [ + (0.0, 0.0), + (0.0, 5.0), + (10.0, 5.0), + ] + + +def test_diagonal_centreline_transposes_by_axis() -> None: + assert geometry.diagonal_centreline("LR", SRC, TGT, 3.0, 7.0) == [ + (0.0, 0.0), + (3.0, 0.0), + (7.0, 5.0), + (10.0, 5.0), + ] + assert geometry.diagonal_centreline("TB", SRC, TGT, 3.0, 7.0) == [ + (0.0, 0.0), + (0.0, 3.0), + (10.0, 7.0), + (10.0, 5.0), + ] + + +def test_rl_shares_lr_orientation() -> None: + # RL and LR share the X primary axis (RL flips only the primary sign, at + # placement time), so the centreline builders produce the same shape. + assert geometry.single_corner_centreline( + "RL", SRC, TGT, flow_first=True + ) == geometry.single_corner_centreline("LR", SRC, TGT, flow_first=True) + + +@pytest.mark.parametrize("axis", ["x", "y"]) +def test_axis_point_split_roundtrip(axis: str) -> None: + assert geometry.axis_split(axis, geometry.axis_point(axis, 3.0, 4.0)) == (3.0, 4.0) + + +@pytest.mark.parametrize("fixture", ["tb_lr_exit_left.mmd", "tb_lr_exit_right.mmd"]) +def test_tb_lr_exit_routes_through_shared_corner_builder( + monkeypatch: pytest.MonkeyPatch, fixture: str +) -> None: + calls = _spy( + monkeypatch, "nf_metro.layout.routing.tb_handlers", "single_corner_centreline" + ) + _layout(fixture) + assert any(kw.get("flow_first") is True for kw in calls) + + +def test_tb_lr_entry_routes_through_shared_corner_builder( + monkeypatch: pytest.MonkeyPatch, +) -> None: + calls = _spy( + monkeypatch, "nf_metro.layout.routing.tb_handlers", "single_corner_centreline" + ) + _layout("tb_right_entry_stack.mmd") + assert any(kw.get("flow_first") is False for kw in calls) + + +def test_lr_perp_exit_routes_through_shared_corner_builder( + monkeypatch: pytest.MonkeyPatch, +) -> None: + calls = _spy( + monkeypatch, + "nf_metro.layout.routing.intra_handlers", + "single_corner_centreline", + ) + _layout("lr_perp_top_exit_side_entry.mmd") + assert any(kw.get("flow_first") is True for kw in calls) + + +def test_tb_diagonal_routes_through_shared_diagonal_builder( + monkeypatch: pytest.MonkeyPatch, +) -> None: + calls = _spy( + monkeypatch, "nf_metro.layout.routing.tb_handlers", "diagonal_centreline" + ) + _layout("tb_internal_diagonal.mmd") + assert calls + + +def test_lr_diagonal_routes_through_shared_diagonal_builder( + monkeypatch: pytest.MonkeyPatch, +) -> None: + calls = _spy( + monkeypatch, "nf_metro.layout.routing.intra_handlers", "diagonal_centreline" + ) + _layout("bypass_v_tight.mmd") + assert calls diff --git a/tests/test_axis_frame.py b/tests/test_axis_frame.py new file mode 100644 index 000000000..d036a7f38 --- /dev/null +++ b/tests/test_axis_frame.py @@ -0,0 +1,153 @@ +"""Unit tests for the ``AxisFrame`` axis-vocabulary primitive.""" + +from __future__ import annotations + +import pytest + +from nf_metro.layout.geometry import ( + AxisFrame, + lane_delta, + lane_delta_to_normal_offset, + lanes_run_along_y, + station_lane_coord, +) +from nf_metro.parser.model import Station + +X_SPACING = 60.0 +Y_SPACING = 40.0 + + +def _station() -> Station: + return Station(id="s", label="S") + + +def test_lr_primary_is_x_secondary_is_y() -> None: + frame = AxisFrame.for_direction("LR", X_SPACING, Y_SPACING) + assert frame.primary.name == "x" + assert frame.secondary.name == "y" + assert frame.primary.step == X_SPACING + assert frame.secondary.step == Y_SPACING + assert frame.primary_sign == 1.0 + + +def test_tb_transposes_axes() -> None: + frame = AxisFrame.for_direction("TB", X_SPACING, Y_SPACING) + assert frame.primary.name == "y" + assert frame.secondary.name == "x" + assert frame.primary.step == Y_SPACING + assert frame.secondary.step == X_SPACING + assert frame.primary_sign == 1.0 + + +def test_rl_shares_lr_axes_but_reverses_primary_sign() -> None: + frame = AxisFrame.for_direction("RL", X_SPACING, Y_SPACING) + assert frame.primary.name == "x" + assert frame.secondary.name == "y" + assert frame.primary_sign == -1.0 + + +@pytest.mark.parametrize( + "direction, expected", + [("LR", ("x", "y")), ("RL", ("x", "y")), ("TB", ("y", "x")), ("BT", ("y", "x"))], +) +def test_axes_for_direction_names_vertical_and_horizontal_flow( + direction: str, expected: tuple[str, str] +) -> None: + assert AxisFrame.axes_for_direction(direction) == expected + + +@pytest.mark.parametrize("direction", ["LR", "RL", "TB", "BT"]) +def test_for_direction_matches_axes_for_direction(direction: str) -> None: + frame = AxisFrame.for_direction(direction, X_SPACING, Y_SPACING) + assert (frame.primary.name, frame.secondary.name) == AxisFrame.axes_for_direction( + direction + ) + + +@pytest.mark.parametrize( + "direction, on_y", + [("LR", True), ("RL", True), ("TB", False), ("BT", False)], +) +def test_lanes_run_along_y_tracks_secondary_axis(direction: str, on_y: bool) -> None: + # A section's lines stack on its secondary axis; the row passes only own + # the Y (lane) axis, so they include exactly the lanes-on-Y directions. + assert lanes_run_along_y(direction) is on_y + + +@pytest.mark.parametrize( + "direction, expected", + [("LR", 1.0), ("RL", 1.0), ("TB", -1.0), ("BT", 1.0)], +) +def test_secondary_sign_fans_tb_lanes_opposite_lr( + direction: str, expected: float +) -> None: + # A 90-degree-CW rotation maps LR's +Y lane to -X, so TB alone fans to -X; + # RL reverses only the primary, and BT keeps the inert +1 reserved for + # true BT support. + assert AxisFrame.for_direction(direction, X_SPACING, Y_SPACING).secondary_sign == ( + expected + ) + + +@pytest.mark.parametrize("offset", [0.0, 4.0, 12.5]) +@pytest.mark.parametrize("direction", ["LR", "RL", "TB", "BT"]) +def test_station_lane_coord_applies_sign_at_draw_accessor( + direction: str, offset: float +) -> None: + frame = AxisFrame.for_direction(direction, X_SPACING, Y_SPACING) + station = _station() + station.x = 100.0 + station.y = 200.0 + + coord = station_lane_coord(frame, station, offset) + + base = frame.secondary.get(station) + assert coord == base + frame.secondary_sign * offset + # A positive offset moves a TB lane to a smaller X (screen-left), the + # rotation image of LR moving it to a larger Y. + if direction == "TB": + assert coord == station.x - offset + elif frame.secondary.name == "y": + assert coord == station.y + offset + + +@pytest.mark.parametrize("offset", [4.0, 12.5]) +@pytest.mark.parametrize("direction, travel", [("LR", (1.0, 0.0)), ("TB", (0.0, 1.0))]) +def test_lane_delta_round_trips_to_positive_builder_offset( + direction: str, travel: tuple[float, float], offset: float +) -> None: + # The bundle builder fans along the right-normal of travel and expects + # positive offsets. LR and TB are the same forward flow rotated 90 degrees, + # so a positive lane offset maps back to the same positive builder offset for + # both -- TB's -1 lane sign and its rotated travel cancel. This is why the + # stored offset never negates. + frame = AxisFrame.for_direction(direction, X_SPACING, Y_SPACING) + delta = lane_delta(frame, offset) + assert delta == frame.secondary_sign * offset + + normal_offset = lane_delta_to_normal_offset(delta, travel) + assert normal_offset == pytest.approx(offset) + + +def test_lane_delta_to_normal_offset_is_sign_lookup_for_axis_aligned_travel() -> None: + # For axis-aligned travel the projection collapses to a +/-1 sign lookup, + # invariant to the leg's length. + assert lane_delta_to_normal_offset(5.0, (3.0, 0.0)) == pytest.approx(5.0) + assert lane_delta_to_normal_offset(5.0, (0.0, 7.0)) == pytest.approx(-5.0) + + +@pytest.mark.parametrize("direction", ["LR", "RL", "TB"]) +def test_accessors_read_and_write_named_coordinate(direction: str) -> None: + frame = AxisFrame.for_direction(direction, X_SPACING, Y_SPACING) + station = _station() + station.x = 11.0 + station.y = 22.0 + + frame.primary.set(station, 5.0) + frame.secondary.set(station, 7.0) + + assert frame.primary.get(station) == 5.0 + assert frame.secondary.get(station) == 7.0 + assert {frame.primary.name, frame.secondary.name} == {"x", "y"} + assert getattr(station, frame.primary.name) == 5.0 + assert getattr(station, frame.secondary.name) == 7.0 diff --git a/tests/test_backward_feed.py b/tests/test_backward_feed.py new file mode 100644 index 000000000..b6153b188 --- /dev/null +++ b/tests/test_backward_feed.py @@ -0,0 +1,86 @@ +"""A same-row backward feed must be rejected with a naming error. + +A routed metro line is an undirected polyline: within a single row its flow +direction is read purely from horizontal position. When the grid places a +producer at a column past a consumer it feeds, the line reads as flowing the +wrong way and the only route to the consumer crosses the producer's own box. +``compute_layout`` rejects this on every render (not just under ``validate``), +naming both sections so the author can fix the grid. + +Cross-row backward feeds and runways whose exit is explicitly redirected +toward the target are NOT rejected -- the reader can see those as distinct +branches, and the router carries them around cleanly. +""" + +from pathlib import Path + +import pytest +from click.testing import CliRunner + +from nf_metro.cli import cli +from nf_metro.layout import BackwardFlowError, compute_layout +from nf_metro.parser import parse_metro_mermaid + +INVALID = Path(__file__).parent / "fixtures" / "invalid" +TOPOLOGIES = Path(__file__).parent.parent / "examples" / "topologies" + +# (fixture, source section, target section) for the rejected backward feeds. +_BACKWARD = [ + pytest.param( + INVALID / "merge_trunk_rightward_source.mmd", "sec_b", "sec_c", id="lr" + ), + pytest.param(INVALID / "backward_feed_rl.mmd", "rl_a", "rl_b", id="rl"), +] + +# Same-row-or-near backward layouts that are legitimate and must NOT be rejected. +_ALLOWED = [ + pytest.param(TOPOLOGIES / "rl_entry_runway.mmd", id="explicit-exit-runway"), + pytest.param(TOPOLOGIES / "around_section_below.mmd", id="cross-row-around"), +] + + +@pytest.mark.parametrize("path,src,tgt", _BACKWARD) +def test_compute_layout_rejects_same_row_backward_feed(path: Path, src: str, tgt: str): + graph = parse_metro_mermaid(path.read_text()) + + with pytest.raises(BackwardFlowError) as excinfo: + compute_layout(graph) + + message = str(excinfo.value) + assert src in message + assert tgt in message + + +@pytest.mark.parametrize("path,src,tgt", _BACKWARD) +def test_backward_feed_rejected_without_validate(path: Path, src: str, tgt: str): + """The rejection fires at the default ``validate=False`` -- the render + path the CLI uses -- not only under the heavier validation plane.""" + graph = parse_metro_mermaid(path.read_text()) + + with pytest.raises(BackwardFlowError): + compute_layout(graph, validate=False) + + +@pytest.mark.parametrize("path", _ALLOWED) +def test_legitimate_backward_layouts_not_rejected(path: Path): + graph = parse_metro_mermaid(path.read_text()) + + compute_layout(graph) # must not raise + + +@pytest.mark.parametrize("path,src,tgt", _BACKWARD) +@pytest.mark.parametrize("command", ["render", "validate"]) +def test_cli_rejects_backward_feed( + path: Path, src: str, tgt: str, command: str, tmp_path: Path +): + args = [command, str(path)] + if command == "render": + args += ["-o", str(tmp_path / "out.svg")] + elif command == "validate": + args += ["--with-layout"] + + result = CliRunner().invoke(cli, args) + + assert result.exit_code != 0 + assert src in result.output + assert tgt in result.output diff --git a/tests/test_bare_render.py b/tests/test_bare_render.py new file mode 100644 index 000000000..069ced24f --- /dev/null +++ b/tests/test_bare_render.py @@ -0,0 +1,159 @@ +"""Tests for bare render mode. + +Bare mode omits the title and outer padding so the SVG is a tight content +fragment suitable for embedding. The attribution watermark is NOT removed. +""" + +import xml.etree.ElementTree as ET +from pathlib import Path + +import pytest +from click.testing import CliRunner + +from nf_metro.cli import cli +from nf_metro.layout.engine import compute_layout +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.constants import ( + CANVAS_PADDING, + WATERMARK_FONT_SIZE, + WATERMARK_Y_INSET, +) +from nf_metro.render.svg import render_svg +from nf_metro.themes import NFCORE_THEME + +_TITLED_MMD = ( + "%%metro title: My Pipeline\n" + "%%metro line: main | Main | #ff0000\n" + "graph LR\n" + " a[Input] -->|main| b[Output]\n" +) + +_MULTI_SECTION_MMD = Path("examples/rnaseq_sections.mmd") + + +def _graph(text: str): + g = parse_metro_mermaid(text) + compute_layout(g) + return g + + +def _title_text_elements(svg: str) -> list[ET.Element]: + """Return all elements that carry the nf-metro-title class.""" + root = ET.fromstring(svg) + return [ + el + for el in root.iter("{http://www.w3.org/2000/svg}text") + if "nf-metro-title" in el.get("class", "") + ] + + +def test_bare_omits_title(): + """No title text element is rendered in bare output.""" + g = _graph(_TITLED_MMD) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + assert _title_text_elements(bare_svg) == [] + + +def test_full_chrome_still_has_title(): + """Full-chrome render includes the title.""" + g = _graph(_TITLED_MMD) + full_svg = render_svg(g, NFCORE_THEME) + assert "My Pipeline" in full_svg + + +def test_bare_keeps_watermark(): + """Watermark attribution must survive bare mode.""" + g = _graph(_TITLED_MMD) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + assert "nf-metro" in bare_svg + + +def test_bare_canvas_narrower_than_full(): + """Bare canvas must be narrower (right padding dropped).""" + g = _graph(_TITLED_MMD) + full_svg = render_svg(g, NFCORE_THEME) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + + full_width = int(ET.fromstring(full_svg).attrib["width"]) + bare_width = int(ET.fromstring(bare_svg).attrib["width"]) + + assert bare_width < full_width + assert full_width - bare_width == pytest.approx(CANVAS_PADDING, abs=2) + + +def test_bare_canvas_narrower_multi_section(): + """Right-padding removal holds for a multi-section diagram.""" + if not _MULTI_SECTION_MMD.exists(): + pytest.skip("rnaseq_sections.mmd not found") + g = _graph(_MULTI_SECTION_MMD.read_text()) + full_svg = render_svg(g, NFCORE_THEME) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + + full_width = int(ET.fromstring(full_svg).attrib["width"]) + bare_width = int(ET.fromstring(bare_svg).attrib["width"]) + + assert bare_width < full_width + + +def test_bare_viewbox_starts_at_origin(): + """viewBox must begin with '0 0' so overlay alignment is preserved.""" + g = _graph(_TITLED_MMD) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + root = ET.fromstring(bare_svg) + vb = root.attrib.get("viewBox", "") + assert vb.startswith("0 0"), f"viewBox={vb!r} does not start at origin" + + +def test_full_viewbox_starts_at_origin(): + """Full-chrome viewBox must also start at origin (no regression).""" + g = _graph(_TITLED_MMD) + full_svg = render_svg(g, NFCORE_THEME) + root = ET.fromstring(full_svg) + vb = root.attrib.get("viewBox", "") + assert vb.startswith("0 0"), f"viewBox={vb!r} does not start at origin" + + +def test_bare_height_includes_watermark(): + """Height must accommodate the watermark even in bare mode.""" + g = _graph(_TITLED_MMD) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + h = int(ET.fromstring(bare_svg).attrib["height"]) + assert h >= WATERMARK_Y_INSET + WATERMARK_FONT_SIZE + + +def test_bare_is_valid_svg(): + """Bare output must be well-formed XML with an svg root.""" + g = _graph(_TITLED_MMD) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + root = ET.fromstring(bare_svg) + assert root.tag.endswith("svg") or "svg" in root.tag + + +def test_bare_cli_flag(tmp_path): + """--bare CLI flag produces tighter output than default.""" + runner = CliRunner() + src = Path("examples/rnaseq_sections.mmd") + if not src.exists(): + pytest.skip("rnaseq_sections.mmd not found") + + full_out = tmp_path / "full.svg" + bare_out = tmp_path / "bare.svg" + + result_full = runner.invoke(cli, ["render", str(src), "-o", str(full_out)]) + assert result_full.exit_code == 0, result_full.output + + result_bare = runner.invoke( + cli, ["render", str(src), "-o", str(bare_out), "--bare"] + ) + assert result_bare.exit_code == 0, result_bare.output + + full_width = int(ET.parse(full_out).getroot().attrib["width"]) + bare_width = int(ET.parse(bare_out).getroot().attrib["width"]) + assert bare_width < full_width + + +def test_bare_no_title_class_element(): + """No SVG element with the nf-metro-title class is drawn in bare output.""" + g = _graph(_TITLED_MMD) + bare_svg = render_svg(g, NFCORE_THEME, bare=True) + assert _title_text_elements(bare_svg) == [] diff --git a/tests/test_bottom_row_climb_invariant.py b/tests/test_bottom_row_climb_invariant.py new file mode 100644 index 000000000..028bbfa3a --- /dev/null +++ b/tests/test_bottom_row_climb_invariant.py @@ -0,0 +1,109 @@ +"""Routing invariant: a bottommost-row source climbing to a higher-row target +over a clear corridor runs at its own row level, not below it. + +When the source section sits in the bottommost grid row, its target is in a +higher row, and no same-row section occupies the columns the rightward run +crosses, the sections that classified the edge as a bypass are all in higher +rows (above a run at the source's Y). Diving below the source row toward the +canvas floor and climbing back up is then a gratuitous downward dogleg. + +The invariant is gated on the corridor being clear: a climb whose corridor is +blocked by a same-row section genuinely needs to clear it and may dip. + +Regression lock for #878 defect 2 (the `other` line from `ont-spectre +CNVCaller` dropping below the CNVs section before running right to Reports). +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.context import _resolve_section_row +from nf_metro.layout.routing.inter_section_handlers import ( + _bottom_row_climb_corridor_clear, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" + + +def _clear_corridor_climb_dive(mmd: str) -> tuple[str, float, float] | None: + """First inter-section route whose source is in the bottommost row, climbs + to a higher row over a clear corridor, yet dips below the source section's + bbox bottom; ``None`` if every such route stays at its row level.""" + graph = parse_metro_mermaid(mmd) + compute_layout(graph) + routes = route_edges(graph, station_offsets=compute_station_offsets(graph)) + + for r in routes: + if not r.is_inter_section: + continue + src = graph.stations.get(r.edge.source) + tgt = graph.stations.get(r.edge.target) + if src is None or tgt is None: + continue + src_sec = graph.sections.get(src.section_id) + src_row = _resolve_section_row(graph, src) + tgt_row = _resolve_section_row(graph, tgt) + if src_sec is None or src_row is None or tgt_row is None: + continue + if not _bottom_row_climb_corridor_clear( + graph, src_row, tgt_row, src_sec.grid_col, _resolve_col(graph, tgt) + ): + continue + src_bottom = src_sec.bbox_y + src_sec.bbox_h + max_y = max(y for _, y in r.points) + if max_y > src_bottom + 1.0: + return (f"{r.edge.source}->{r.edge.target}", max_y, src_bottom) + return None + + +def _resolve_col(graph, station) -> int: + sec = graph.sections.get(station.section_id) + return sec.grid_col if sec is not None else -1 + + +def _generated_bottom_row_pipeline(span: int) -> str: + """Top row of ``span`` sections (col 0..span-1); a single bottommost-row + section at col 1 whose side line climbs to the rightmost top section over a + clear corridor (no same-row section in the spanned columns).""" + tops = [f"top{i}" for i in range(span)] + grids = "\n".join(f"%%metro grid: {s} | {i},0" for i, s in enumerate(tops)) + grids += "\n%%metro grid: low | 1,1" + top_blocks = "" + for s in tops: + top_blocks += f" subgraph {s} [{s.title()}]\n {s}_a[{s}]\n end\n" + chain = "\n".join( + f" {tops[i]}_a -->|main| {tops[i + 1]}_a" for i in range(span - 1) + ) + return ( + "%%metro line: main | Main | #2db572\n" + "%%metro line: side | Side | #ff8c00\n" + f"{grids}\n\ngraph LR\n{top_blocks}" + " subgraph low [Low]\n x[X]\n end\n" + f"{chain}\n" + " top0_a -->|side| x\n" + f" x -->|side| {tops[-1]}_a\n" + ) + + +def test_static_fixture_clear_corridor_climb_stays_at_row_level(): + mmd = (TOPOLOGIES_DIR / "bottom_row_climb_clear_corridor.mmd").read_text() + dive = _clear_corridor_climb_dive(mmd) + assert dive is None, ( + f"route {dive[0]} dips to y={dive[1]:.0f}, below source section " + f"bottom={dive[2]:.0f} (gratuitous dogleg over a clear corridor)" + ) + + +@pytest.mark.parametrize("span", [4, 5], ids=["span4", "span5"]) +def test_generated_clear_corridor_climb_stays_at_row_level(span): + dive = _clear_corridor_climb_dive(_generated_bottom_row_pipeline(span)) + assert dive is None, ( + f"route {dive[0]} dips to y={dive[1]:.0f}, below source section " + f"bottom={dive[2]:.0f} (gratuitous dogleg over a clear corridor)" + ) diff --git a/tests/test_bridge_glyph.py b/tests/test_bridge_glyph.py new file mode 100644 index 000000000..e1a78ccc2 --- /dev/null +++ b/tests/test_bridge_glyph.py @@ -0,0 +1,300 @@ +"""Invariants for the non-merging-crossing bridge glyph (issue #439). + +A bridge is a short gap in the lower-priority ("under") line where two +bundles cross without merging, so the crossing reads as an overpass. A gap +is drawn only when the two bundles **share a colour** (otherwise colour +already distinguishes them) and the crossing is a true crossover, not an +interchange or a line's approach to a station join. These tests pin: + +* shared-colour crossings produce a gap that breaks the *whole* under + bundle (every collinear sibling route), not one route; +* distinct-colour crossings, interchanges, and join approaches get no gap; +* every gap sits clear of any node and lies on the under-route's segment; +* detection is deterministic; +* the rendered under-line carries a pen-up at the gap (vs continuous on + ``main``), while animation motion paths flow over it unchanged. +""" + +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import CURVE_RADIUS +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge, MetroGraph +from nf_metro.render.bridges import ( + BRIDGE_NODE_TOLERANCE, + _line_succ, + _same_line_is_fan, + compute_bridges, +) +from nf_metro.render.svg import apply_route_offsets, render_svg +from nf_metro.themes import NFCORE_THEME + +EXAMPLES_DIR = Path(__file__).parent.parent / "examples" +TOPOLOGIES_DIR = EXAMPLES_DIR / "topologies" + +# Fixtures with at least one bridged crossing: the two crossing bundles share +# a colour, so a gap is needed to show which passes over. +FIXTURES_WITH_CROSSINGS = [ + EXAMPLES_DIR / "genomic_pipeline.mmd", + EXAMPLES_DIR / "differentialabundance_default.mmd", +] + +# Fixtures with no bridge: pure fans/merges/shared sinks; distinct-colour +# crossings (colour already disambiguates, e.g. rnaseq_sections, complex_ +# multipath, funcprofiler, genomeassembly); or a crossing on a line's approach +# to a station join (differentialabundance, where the only crossings are a +# distinct-colour crossover and a shared-colour gsea-join approach). +FIXTURES_WITHOUT_CROSSINGS = [ + EXAMPLES_DIR / "rnaseq_auto.mmd", + EXAMPLES_DIR / "variant_calling.mmd", + EXAMPLES_DIR / "genomeassembly.mmd", + EXAMPLES_DIR / "differentialabundance.mmd", + EXAMPLES_DIR / "rnaseq_sections.mmd", + TOPOLOGIES_DIR / "complex_multipath.mmd", + TOPOLOGIES_DIR / "funcprofiler_upstream.mmd", + TOPOLOGIES_DIR / "trunk_through_fan.mmd", + TOPOLOGIES_DIR / "shared_sink_parallel.mmd", +] + + +def _bridges(path: Path): + """Return (graph, routes, polylines, bridges) for a fixture.""" + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + line_priority = {lid: i for i, lid in enumerate(graph.lines)} + routes = sorted(routes, key=lambda r: -line_priority.get(r.line_id, -1)) + polylines = [apply_route_offsets(r, offsets) for r in routes] + bridges = compute_bridges(graph, routes, polylines, curve_radius=CURVE_RADIUS) + return graph, routes, polylines, bridges + + +@pytest.mark.parametrize("path", FIXTURES_WITH_CROSSINGS, ids=lambda p: p.stem) +def test_genuine_crossings_produce_bridges(path): + _, _, _, bridges = _bridges(path) + assert sum(len(v) for v in bridges.values()) > 0 + + +@pytest.mark.parametrize("path", FIXTURES_WITHOUT_CROSSINGS, ids=lambda p: p.stem) +def test_no_bridges_without_crossings(path): + _, _, _, bridges = _bridges(path) + assert bridges == {} + + +@pytest.mark.parametrize("path", FIXTURES_WITH_CROSSINGS, ids=lambda p: p.stem) +def test_bridges_clear_of_nodes(path): + """No gap midpoint may land on a station/port/junction/merge - those are + interchanges, not crossings.""" + graph, _, _, bridges = _bridges(path) + nodes = [(s.x, s.y) for s in graph.stations.values()] + for breaks in bridges.values(): + for bk in breaks: + mx = (bk.cut_a[0] + bk.cut_b[0]) / 2 + my = (bk.cut_a[1] + bk.cut_b[1]) / 2 + for nx, ny in nodes: + assert not ( + abs(mx - nx) < BRIDGE_NODE_TOLERANCE + and abs(my - ny) < BRIDGE_NODE_TOLERANCE + ), f"bridge at ({mx:.0f},{my:.0f}) sits on a node in {path.stem}" + + +@pytest.mark.parametrize("path", FIXTURES_WITH_CROSSINGS, ids=lambda p: p.stem) +def test_bridge_span_lies_on_under_segment(path): + """Each gap's end points must be collinear with the route segment they + break, so the rendered pen-up does not distort the line.""" + _, routes, polylines, bridges = _bridges(path) + by_id = {id(r): poly for r, poly in zip(routes, polylines)} + for rid, breaks in bridges.items(): + poly = by_id[rid] + for bk in breaks: + a, b = poly[bk.seg_index], poly[bk.seg_index + 1] + for pt in (bk.cut_a, bk.cut_b): + assert _perp_distance(pt, a, b) <= 1.0 + + +@pytest.mark.parametrize("path", FIXTURES_WITH_CROSSINGS, ids=lambda p: p.stem) +def test_detection_is_deterministic(path): + def fingerprint(): + routes, polys, bridges = _bridges(path)[1:] + by_id = {id(r): r for r in routes} + return sorted( + ( + by_id[rid].line_id, + bk.seg_index, + round(bk.cut_a[0]), + round(bk.cut_a[1]), + round(bk.cut_b[0]), + round(bk.cut_b[1]), + ) + for rid, breaks in bridges.items() + for bk in breaks + ) + + assert fingerprint() == fingerprint() + + +def test_shared_colour_bundle_breaks_whole(): + """At differentialabundance_default's shared-colour crossing (all four + lines on both sides), the whole under bundle breaks - several distinct + lines, not one - and overlapping sibling routes don't fill the gap.""" + graph, routes, _, bridges = _bridges( + EXAMPLES_DIR / "differentialabundance_default.mmd" + ) + by_id = {id(r): r for r in routes} + lines_broken = { + by_id[rid].line_id for rid, breaks in bridges.items() for _ in breaks + } + assert len(lines_broken) >= 3 + + +def test_distinct_colour_crossings_not_bridged(): + """rnaseq_sections (hisat2 over bowtie2) and complex_multipath (fast over + legacy/standard) are crossings of wholly distinct colours - colour already + disambiguates them, so no bridge is drawn.""" + for path in ( + EXAMPLES_DIR / "rnaseq_sections.mmd", + TOPOLOGIES_DIR / "complex_multipath.mmd", + ): + _, _, _, bridges = _bridges(path) + assert bridges == {}, path.stem + + +def test_join_approach_not_bridged(): + """In differentialabundance the gprofiler2 lines cross the gmt_in->gsea + lines on their approach to the gsea station (~22px), sharing colours - but + it is a join, not a crossover, so no bridge fires near gsea.""" + graph, _, _, bridges = _bridges(EXAMPLES_DIR / "differentialabundance.mmd") + gsea = graph.stations["gsea"] + for breaks in bridges.values(): + for bk in breaks: + mx = (bk.cut_a[0] + bk.cut_b[0]) / 2 + my = (bk.cut_a[1] + bk.cut_b[1]) / 2 + assert not (abs(mx - gsea.x) < 40 and abs(my - gsea.y) < 40), ( + f"bridge at ({mx:.0f},{my:.0f}) sits on the gsea join approach" + ) + + +def test_rendered_under_line_has_pen_up(): + """An under-line that crosses under another draws a path with an interior + move (pen-up) - on ``main`` it is continuous.""" + graph = parse_metro_mermaid((EXAMPLES_DIR / "genomic_pipeline.mmd").read_text()) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + broken = [d for d in _edge_path_ds(svg) if d.count("M") > 1] + assert broken, "expected at least one broken (bridged) under-line path" + + +def test_theme_toggle_disables_bridges(): + import dataclasses + + graph = parse_metro_mermaid((EXAMPLES_DIR / "genomic_pipeline.mmd").read_text()) + compute_layout(graph) + theme_off = dataclasses.replace(NFCORE_THEME, bridge_glyph=False) + svg = render_svg(graph, theme_off) + assert not any(d.count("M") > 1 for d in _edge_path_ds(svg)) + + +def test_animation_paths_flow_over_gaps(): + """Animated balls travel the continuous route - the bridge gaps are a + static-render effect only. Motion paths must be identical with bridges + on or off.""" + import dataclasses + + graph = parse_metro_mermaid((EXAMPLES_DIR / "genomic_pipeline.mmd").read_text()) + compute_layout(graph) + on = _motion_paths(render_svg(graph, NFCORE_THEME, animate=True)) + off = _motion_paths( + render_svg( + graph, dataclasses.replace(NFCORE_THEME, bridge_glyph=False), animate=True + ) + ) + assert on and on == off + + +def test_same_line_fan_legs_are_not_a_crossover(): + """Two same-line edges whose legs fork and rejoin (a fan-out / fan-in / + loop) are a fan, not a crossover - even when their geometry crosses.""" + g = MetroGraph( + edges=[ + Edge("fork", "left", "x"), + Edge("fork", "right", "x"), + Edge("left", "join", "x"), + Edge("right", "join", "x"), + ] + ) + succ = _line_succ(g) + e_left = Edge("fork", "left", "x") + e_right = Edge("fork", "right", "x") + # Distinct legs that rejoin downstream at "join" -> a fan, not a crossover. + assert _same_line_is_fan( + Edge("left", "join", "x"), Edge("right", "join", "x"), succ + ) + # Edges sharing the fork node are also a fan. + assert _same_line_is_fan(e_left, e_right, succ) + + +def test_same_line_independent_legs_are_a_crossover(): + """Two same-line edges that head to destinations which never reconverge are + a genuine crossover and must be eligible for a bridge.""" + g = MetroGraph( + edges=[ + Edge("hub", "a1", "x"), + Edge("a1", "a2", "x"), + Edge("hub", "b1", "x"), + Edge("b1", "b2", "x"), + ] + ) + succ = _line_succ(g) + # a1->a2 and b1->b2 share no endpoint and never reconverge downstream. + assert not _same_line_is_fan(Edge("a1", "a2", "x"), Edge("b1", "b2", "x"), succ) + + +def test_issue484_same_colour_crossover_is_bridged(): + """issue #484: a horizontal bam run crosses a vertical bam drop below the + Small-variant/Phasing sections - a genuine same-colour crossover whose legs + head to separate, never-reconverging destinations. A bridge must fire.""" + path = Path(__file__).parent.parent / "issue484.mmd" + if not path.exists(): + pytest.skip("issue484.mmd repro fixture not present") + _, routes, _, bridges = _bridges(path) + by_id = {id(r): r for r in routes} + bam_breaks = [ + (bk, by_id[rid]) + for rid, breaks in bridges.items() + for bk in breaks + if by_id[rid].line_id == "bam" + ] + assert bam_breaks, "expected a bam crossover bridge in issue484" + # The documented crossing is at (~1616, 263); the gap is centred there. + assert any( + abs((bk.cut_a[0] + bk.cut_b[0]) / 2 - 1616) < 30 + and abs((bk.cut_a[1] + bk.cut_b[1]) / 2 - 263) < 30 + for bk, _ in bam_breaks + ) + + +def _motion_paths(svg: str) -> list[str]: + import re + + return re.findall(r"offset-path: path\('([^']*)'\)", svg) + + +def _perp_distance(pt, a, b): + import math + + dx, dy = b[0] - a[0], b[1] - a[1] + length = math.hypot(dx, dy) + if length == 0: + return math.hypot(pt[0] - a[0], pt[1] - a[1]) + return abs((pt[0] - a[0]) * (-dy / length) + (pt[1] - a[1]) * (dx / length)) + + +def _edge_path_ds(svg: str) -> list[str]: + import re + + return re.findall(r']*\bd="([^"]*)"', svg) diff --git a/tests/test_bt_orientation.py b/tests/test_bt_orientation.py new file mode 100644 index 000000000..09be09e48 --- /dev/null +++ b/tests/test_bt_orientation.py @@ -0,0 +1,77 @@ +"""BT (bottom-to-top) orientation: the vertical mirror of TB. + +Locks the rotation wiring that makes BT a real flow direction: the +:class:`AxisFrame` flow/lane signs, the bottom-to-top station order, and the +property that a BT section is a TB section reflected on its flow axis. +""" + +from __future__ import annotations + +from pathlib import Path + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.geometry import AxisFrame +from nf_metro.parser.mermaid import parse_metro_mermaid + +EXAMPLES_DIR = Path(__file__).parent.parent / "examples" +TOPOLOGIES_DIR = EXAMPLES_DIR / "topologies" + + +def _chain(direction: str) -> str: + return ( + "%%metro title: Chain\n" + "%%metro line: a | A | #e63946\n" + "graph LR\n" + " subgraph work [Work]\n" + f" %%metro direction: {direction}\n" + " w1[First]\n" + " w2[Second]\n" + " w3[Third]\n" + " w1 -->|a| w2\n" + " w2 -->|a| w3\n" + " end\n" + ) + + +def _laid_out(text: str): + graph = parse_metro_mermaid(text) + compute_layout(graph) + return graph + + +def test_bt_frame_is_tb_reflected_on_flow_axis() -> None: + """BT shares TB's axes but reverses the flow sign and mirrors the lane sign.""" + tb = AxisFrame.for_direction("TB", 60.0, 40.0) + bt = AxisFrame.for_direction("BT", 60.0, 40.0) + + assert (bt.primary.name, bt.secondary.name) == (tb.primary.name, tb.secondary.name) + assert bt.primary_sign == -tb.primary_sign + assert bt.secondary_sign == -tb.secondary_sign + + +def test_bt_chain_flows_bottom_to_top() -> None: + """Each step along a BT chain lands above (smaller Y than) the previous one.""" + graph = _laid_out(_chain("BT")) + ys = [graph.stations[s].y for s in ("w1", "w2", "w3")] + assert ys[0] > ys[1] > ys[2], ys + + +def test_bt_chain_is_tb_chain_mirrored_on_y() -> None: + """A BT chain's station Ys are its TB chain's reflected within the column.""" + tb = _laid_out(_chain("TB")) + bt = _laid_out(_chain("BT")) + + ids = ("w1", "w2", "w3") + tb_ys = [tb.stations[s].y for s in ids] + bt_ys = [bt.stations[s].y for s in ids] + span = min(tb_ys) + max(tb_ys) + assert bt_ys == [span - y for y in tb_ys] + # Same X column: BT changes only the flow sense, not the lane placement. + assert [tb.stations[s].x for s in ids] == [bt.stations[s].x for s in ids] + + +def test_bt_chain_fixture_renders() -> None: + """The shipped BT chain fixture lays out without aborting.""" + graph = _laid_out((TOPOLOGIES_DIR / "bt_chain.mmd").read_text()) + work = graph.sections["work"] + assert work.direction == "BT" diff --git a/tests/test_bundle_order_invariant.py b/tests/test_bundle_order_invariant.py new file mode 100644 index 000000000..e8a8d7513 --- /dev/null +++ b/tests/test_bundle_order_invariant.py @@ -0,0 +1,327 @@ +"""Tests for the bundle-order-preservation invariant. + +Covers: + +* Happy-path: every gallery fixture and example yields zero violations + when passed through :func:`check_bundle_order_preserved`. +* Route-level negative: a synthetic ``RoutedPath`` pair with a + hand-crafted flipped corner correctly surfaces as a violation. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.common import Direction, RoutedPath +from nf_metro.layout.routing.invariants import ( + BundleOrderViolation, + Side, + check_bundle_order_preserved, + check_tb_exit_corner_preserves_column_order, +) +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge + +REPO_ROOT = Path(__file__).resolve().parent.parent +TOPOLOGIES = REPO_ROOT / "tests" / "fixtures" / "topologies" +EXAMPLES = REPO_ROOT / "examples" + +# Fixtures with KNOWN bundle-order violations that the criterion +# correctly surfaces. These are real bugs we xfail rather than blunt +# the criterion to hide them. +_KNOWN_VIOLATION_FIXTURES: frozenset[str] = frozenset() + + +# --------------------------------------------------------------------------- +# Happy-path: every fixture and example must pass the invariant +# --------------------------------------------------------------------------- + + +def _gather_fixtures() -> list[Path]: + paths: list[Path] = [] + paths.extend(sorted(TOPOLOGIES.glob("*.mmd"))) + paths.extend(sorted(EXAMPLES.glob("*.mmd"))) + paths.extend(sorted((EXAMPLES / "topologies").glob("*.mmd"))) + return paths + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_no_bundle_order_violations_in_gallery(path: Path) -> None: + """Every shipped topology and example must route without a + bundle-order violation. + + This is the corpus-level happy-path check. A regression to a + routing handler that creates a flipped concentric bundle would + cause exactly one fixture to start failing here. + + Fixtures listed in :data:`_KNOWN_VIOLATION_FIXTURES` are + xfailed: they have real bundle-order bugs at the Plots-entry + corner that the criterion correctly catches, and we'd rather + track those as known failures than silently blunt the criterion. + """ + if path.name in _KNOWN_VIOLATION_FIXTURES: + pytest.xfail( + f"{path.name} has a known bundle-order violation at the " + "Plots-entry corner; the criterion correctly catches it." + ) + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + violations = check_bundle_order_preserved(routes) + assert violations == [], ( + f"{path.name}: {len(violations)} bundle-order violation(s); " + f"first: {violations[0].message() if violations else ''}" + ) + + +# --------------------------------------------------------------------------- +# Cross-column perpendicular-exit -> perpendicular-entry bundles +# --------------------------------------------------------------------------- + +_CROSS_COL_PERP_ENTRY_FIXTURES = [ + "lr_perp_top_exit_perp_entry", + "lr_perp_bottom_exit_perp_entry", + "lr_perp_top_exit_perp_entry_diverging", +] + + +@pytest.mark.parametrize("stem", _CROSS_COL_PERP_ENTRY_FIXTURES) +def test_cross_column_perp_entry_preserves_bundle_order(stem: str) -> None: + """A co-travelling bundle taken over the corridor from a perpendicular + exit on one LR section into the perpendicular entry of another LR + section in a different column keeps a single left/right order through + the whole riser -> corridor -> entry-drop chain. + + The entry-drop leg's per-line channel order must agree with the + corridor's descent order; a disagreement flips the bundle at the + entry -> first-station corner, which both trips the runtime guard + and renders a crossover at the drop. + """ + path = EXAMPLES / "topologies" / f"{stem}.mmd" + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + violations = check_bundle_order_preserved(routes) + assert violations == [], ( + f"{stem}: {len(violations)} bundle-order violation(s); " + f"first: {violations[0].message() if violations else ''}" + ) + + +# --------------------------------------------------------------------------- +# Left-entry wrap: bundle order preserved in both riser directions +# --------------------------------------------------------------------------- + +_LEFT_ENTRY_WRAP = """\ +%%metro title: Left-entry wrap {direction} +%%metro style: dark +%%metro line: w1 | W1 | #e63946 +%%metro line: w2 | W2 | #0570b0 +%%metro grid: left_tgt | 0,{tgt_row} +%%metro grid: right_src | 1,{src_row} +graph LR + subgraph left_tgt [Left Target] + %%metro entry: left | w1, w2 + lt1[Collect] + lt2[Output] + lt1 -->|w1,w2| lt2 + end + subgraph right_src [Right Source] + rs1[Input R] + rs2[Hub R] + rs1 -->|w1,w2| rs2 + end + rs2 -->|w1,w2| lt1 +""" + + +@pytest.mark.parametrize( + ("direction", "tgt_row", "src_row"), + [("up", 0, 1), ("down", 1, 0)], +) +def test_left_entry_wrap_preserves_bundle_order( + direction: str, tgt_row: int, src_row: int +) -> None: + """A multi-line bundle wrapping into a LEFT entry keeps one left/right + order around the wrap, whether the riser climbs (source below the + target) or descends (source above it). + + Both wrap runs go rightward, so the order is fixed by the port-offset + stacking rather than the riser's vertical direction. + """ + text = _LEFT_ENTRY_WRAP.format( + direction=direction, tgt_row=tgt_row, src_row=src_row + ) + graph = parse_metro_mermaid(text) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + violations = check_bundle_order_preserved(routes) + assert violations == [], ( + f"left-entry {direction}-wrap: {len(violations)} bundle-order " + f"violation(s); first: {violations[0].message() if violations else ''}" + ) + + +# --------------------------------------------------------------------------- +# TB exit-corner column-order preservation +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_no_tb_exit_corner_column_flips_in_gallery(path: Path) -> None: + """No shipped fixture turns a TB section's bundle out through a LEFT/RIGHT + exit in an order that disagrees with its in-section vertical column. + + A disagreement crosses the two lines at the feeder station marker. A + regression to the exit-corner drop X, the exit-port Y order, or the + downstream reversal flag would surface as exactly one fixture failing here. + """ + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + violations = check_tb_exit_corner_preserves_column_order(graph, routes, offsets) + assert violations == [], ( + f"{path.name}: {len(violations)} TB exit-corner column flip(s); " + f"first: {violations[0].message() if violations else ''}" + ) + + +_TB_EXIT_CORNER_FIXTURES = [ + EXAMPLES / "topologies" / "junction_entry_reversed_fold.mmd", + EXAMPLES / "guide" / "04_directions.mmd", +] + + +@pytest.mark.parametrize("path", _TB_EXIT_CORNER_FIXTURES, ids=lambda p: p.stem) +def test_tb_exit_corner_continues_column_and_keeps_bundle_order(path: Path) -> None: + """A TB-section bundle exiting LEFT/RIGHT keeps a single order through the + reversal corner: it continues the in-section column (no crossing at the + feeder station) and stays bundle-order consistent through every turn. + + Both fixtures route a multi-line bundle out of a TB section through a + reversal corner into a downstream section, the case where the exit-corner + drop X, the exit-port Y order, and the downstream reversal flag must agree. + """ + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + corner = check_tb_exit_corner_preserves_column_order(graph, routes, offsets) + assert corner == [], ( + f"{path.name}: {len(corner)} TB exit-corner column flip(s); " + f"first: {corner[0].message() if corner else ''}" + ) + bundle = check_bundle_order_preserved(routes) + assert bundle == [], ( + f"{path.name}: {len(bundle)} bundle-order violation(s); " + f"first: {bundle[0].message() if bundle else ''}" + ) + + +# --------------------------------------------------------------------------- +# Route-level negative test: a synthetic flipped corner is caught +# --------------------------------------------------------------------------- + + +def _synthetic_route(line_id: str, points: list[tuple[float, float]]) -> RoutedPath: + """Build a ``RoutedPath`` from a points list for testing. + + Source/target IDs are fixed (``'__src__'``, ``'__tgt__'``) so the + paths share a bundle key. The ``Edge`` carries the line id; the + rest of the routing metadata is irrelevant to + :func:`check_bundle_order_preserved`. + """ + return RoutedPath( + edge=Edge(source="__src__", target="__tgt__", line_id=line_id), + line_id=line_id, + points=points, + is_inter_section=True, + offset_regime=OffsetRegime.BAKED, + ) + + +def test_check_skips_clean_bundle() -> None: + """Two paths that share waypoints exactly produce zero violations: + the COINCIDENT path-pair has nothing to compare on either side. + """ + pts = [(0.0, 0.0), (100.0, 0.0), (100.0, 100.0), (200.0, 100.0)] + routes = [_synthetic_route("A", pts), _synthetic_route("B", pts)] + assert check_bundle_order_preserved(routes) == [] + + +def test_check_skips_single_line_bundle() -> None: + """A bundle with only one line has no pairs to compare; no + violation is possible. + """ + pts = [(0.0, 0.0), (100.0, 0.0), (100.0, 100.0), (200.0, 100.0)] + routes = [_synthetic_route("A", pts)] + assert check_bundle_order_preserved(routes) == [] + + +def test_synthetic_flipped_corner_is_caught() -> None: + """A hand-crafted bundle with a deliberate flip at a near-shared + corner surfaces as a :class:`BundleOrderViolation`. + + Two L-shape routes whose elbows are half a pixel apart on both + axes: A is on the LEFT of B going east, then on the RIGHT going + south. LEFT -> RIGHT is exactly the flip the invariant exists to + catch. + """ + a_pts = [ + (0.0, 100.0), + (100.0, 100.0), + (100.0, 200.0), + ] + b_pts = [ + (0.0, 100.5), + (100.5, 100.5), + (100.5, 200.0), + ] + routes = [_synthetic_route("A", a_pts), _synthetic_route("B", b_pts)] + violations = check_bundle_order_preserved(routes) + assert violations, "expected a synthetic bundle-order violation; got an empty list" + v = violations[0] + assert v.line_a == "A" and v.line_b == "B" + assert v.in_tangent is Direction.R + assert v.out_tangent is Direction.D + assert {v.before, v.after} == {Side.LEFT, Side.RIGHT}, v.message() + + +def test_violation_message_self_describing() -> None: + """The violation's ``message()`` includes the corner xy, line ids, + tangent directions, and the offending before/after sides - the + fields downstream callers (the engine guard and CI logs) rely on + for diagnosis. + """ + v = BundleOrderViolation( + edge_source="src", + edge_target="tgt", + line_a="alpha", + line_b="beta", + corner_xy=(100.0, 200.0), + in_tangent=Direction.D, + out_tangent=Direction.L, + before=Side.LEFT, + after=Side.RIGHT, + ) + msg = v.message() + assert "100.0" in msg and "200.0" in msg + assert "alpha" in msg and "beta" in msg + assert "D" in msg and "L" in msg + assert "LEFT" in msg and "RIGHT" in msg diff --git a/tests/test_bypass_centreline.py b/tests/test_bypass_centreline.py new file mode 100644 index 000000000..47432696a --- /dev/null +++ b/tests/test_bypass_centreline.py @@ -0,0 +1,173 @@ +"""The U-shaped bypass route is built via a centreline + the bundle builder. + +``_route_bypass`` describes the down -> across -> up loop as a centreline through +the two gap channels and fans it with ``build_tapered_bundle`` rather than +assembling per-line ``points`` / ``curve_radii`` by hand. It declares each gap's +full fan via ``bundle_offsets``, so the builder anchors every corner on that +gap's innermost-of-turn line and no arc on the inside of a deep fan falls below +the floor radius. + +These tests pin that on the fixtures whose bypasses run the deepest fans +(``funcprofiler_upstream`` fans eight lines, ``bypass_gap2_rightward_overflow``, +``bypass_leftward_overflow`` and ``upward_bypass`` seven) alongside the tapering +cases where the two gaps carry different line counts. ``bypass_leftward_overflow`` +is a reverse-flow (right-to-left) bypass: its trunk leads out leftward, the mirror +of every other fixture, so the concentric order and corner radii must follow the +trunk's travel direction rather than a fixed rightward assumption. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import CURVE_RADIUS +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.bundle import build_tapered_bundle +from nf_metro.layout.routing.centrelines import route_tapered_anchored +from nf_metro.layout.routing.invariants import ( + assert_render_curve_invariants, + check_bundle_order_preserved, + check_concentric_bundle_corners, +) +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge + +REPO_ROOT = Path(__file__).resolve().parent.parent +EXAMPLES = REPO_ROOT / "examples" + +# Fixtures whose inter-section routing exercises the U-shaped bypass: deep +# uniform fans (where a sub-base inner radius would surface) and tapering loops +# whose two gaps carry different line counts. +BYPASS_FIXTURES = [ + EXAMPLES / "topologies" / "funcprofiler_upstream.mmd", + EXAMPLES / "topologies" / "bypass_gap2_rightward_overflow.mmd", + EXAMPLES / "topologies" / "bypass_leftward_overflow.mmd", + EXAMPLES / "topologies" / "upward_bypass.mmd", + EXAMPLES / "topologies" / "fan_in_merge.mmd", + EXAMPLES / "longread_variant_calling.mmd", + EXAMPLES / "differentialabundance.mmd", +] + + +def _route(path: Path): + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, offsets, routes + + +def _bypass_routes(routes): + """Inter-section routes shaped as a U: six waypoints, four corners.""" + return [ + r for r in routes if r.is_inter_section and len(r.points) == 6 and r.curve_radii + ] + + +@pytest.mark.parametrize("path", BYPASS_FIXTURES, ids=lambda p: p.stem) +def test_bypass_corners_are_concentric_and_unflipped(path: Path) -> None: + graph, offsets, routes = _route(path) + assert check_concentric_bundle_corners(graph, routes, offsets) == [] + assert check_bundle_order_preserved(routes) == [] + assert_render_curve_invariants(graph, routes, offsets) + + +@pytest.mark.parametrize("path", BYPASS_FIXTURES, ids=lambda p: p.stem) +def test_bypass_corner_radii_anchored_at_floor(path: Path) -> None: + """Every U-shaped bypass corner sits at or above the floor radius. + + The builder anchors each gap's innermost-of-turn line at ``CURVE_RADIUS`` + from the declared fan, so no inside-of-turn arc of a deep fan falls below it. + A single-member call that fails to declare its fan produces a sub-floor + (eventually negative) arc, which this catches. + """ + _graph, _offsets, routes = _route(path) + bypasses = _bypass_routes(routes) + assert bypasses, f"{path.stem}: expected at least one U-shaped bypass route" + offenders = [ + (r.edge.source, r.edge.target, r.line_id, r.curve_radii) + for r in bypasses + if any(radius < CURVE_RADIUS - 0.01 for radius in r.curve_radii) + ] + assert not offenders, f"{path.stem}: bypass corners below the floor: {offenders}" + + +@pytest.mark.parametrize("path", BYPASS_FIXTURES, ids=lambda p: p.stem) +def test_bypass_routes_are_offset_baked(path: Path) -> None: + _graph, _offsets, routes = _route(path) + bypasses = _bypass_routes(routes) + assert bypasses, f"{path.stem}: expected at least one U-shaped bypass route" + assert all(r.offset_regime is OffsetRegime.BAKED for r in bypasses) + + +def test_single_line_bypass_descent_turns_tight() -> None: + """A line that peels off and descends a gap alone turns at the floor radius. + + The QC line in ``bypass_fan_in_outer_slot`` shares a five-line junction fan + at its lead-in but descends the gap on its own, so its descent corners + (lead-in turn and the turn into the below-row traverse) must take the + single-line floor radius. Anchoring them on the wider junction fan rather + than the gap's own one-line channel would sweep the lone line wide. + """ + path = EXAMPLES / "topologies" / "bypass_fan_in_outer_slot.mmd" + _graph, _offsets, routes = _route(path) + qc = next(r for r in _bypass_routes(routes) if r.line_id == "qc") + # curve_radii[0:2] are the two source-side (gap1 descent) corners. + assert qc.curve_radii[0] == pytest.approx(CURVE_RADIUS, abs=0.01) + assert qc.curve_radii[1] == pytest.approx(CURVE_RADIUS, abs=0.01) + + +def test_route_tapered_anchored_pairs_the_two_channel_fans() -> None: + """The anchored helper reproduces the bypass's hand-paired ``bundle_offsets``. + + ``_route_bypass`` describes its U as a centreline plus two *independent* + channel fans (the source gap's and the target gap's), paired so each gap's + spread anchors only its own corners. ``route_tapered_anchored`` assembles + that pairing internally; building the same single member through + ``build_tapered_bundle`` with the pairing done by hand must yield the + identical route. Asymmetric fan sizes (a two-line source gap, a three-line + target gap) exercise the tapering case the helper exists for. + """ + edge = Edge(source="a", target="b", line_id="x") + centerline = [ + (0.0, 0.0), + (10.0, 0.0), + (10.0, -30.0), + (40.0, -30.0), + (40.0, -60.0), + (60.0, -60.0), + ] + src_off, tgt_off = 4.0, -3.0 + src_fan = [4.0, 12.0] + tgt_fan = [-3.0, 5.0, 13.0] + member = (edge, edge.line_id, src_off, tgt_off) + + got = route_tapered_anchored( + member, + centerline, + transition_leg=3, + base_radius=CURVE_RADIUS, + src_bundle_offsets=src_fan, + tgt_bundle_offsets=tgt_fan, + normalize_exempt=False, + ) + + manual = [(s, tgt_off) for s in src_fan] + [(src_off, t) for t in tgt_fan] + expected = build_tapered_bundle( + [member], + centerline, + transition_leg=3, + base_radius=CURVE_RADIUS, + bundle_offsets=manual, + normalize_exempt=False, + )[0] + + assert got.points == expected.points + assert got.curve_radii == expected.curve_radii diff --git a/tests/test_bypass_invariants.py b/tests/test_bypass_invariants.py new file mode 100644 index 000000000..c7d37244a --- /dev/null +++ b/tests/test_bypass_invariants.py @@ -0,0 +1,265 @@ +"""Invariants asserting non-consumer marker bypass across guide fixtures. + +Companion to ``test_layout_invariants.py``'s +``test_lines_dont_cross_non_consumer_markers``, which only parametrizes +over ``da_pipeline.mmd`` and ``rnaseq_sections.mmd``. This file +parametrizes the same invariant over the guide-family fixtures whose +topology produces a non-consumer crossing that the differential-abundance +trigger in ``_insert_bypass_stations`` historically did not catch. + +The 5 fixtures are: + +* ``examples/guide/05_file_icons.mmd`` -- ``qc`` from ``trim`` to + reporting crosses ``align``'s marker on the way to the section exit. +* ``examples/guide/05c_files_icon.mmd`` -- same pattern as 05. +* ``examples/guide/05d_folder_icon.mmd`` -- same pattern as 05. +* ``examples/guide/06a_without_hidden.mmd`` -- ``prot`` from ``search`` + to reporting crosses ``quant``'s marker as the fan-up to trunk + begins past ``quant``'s column. +* ``examples/guide/06b_with_hidden.mmd`` -- same pattern as 06a. + +A second set of tests guards the over-trigger side: the bypass insertion +should NOT fire for multi-trunk sections (``rnaseq_auto``'s +``genome_align``, ``epitopeprediction``'s ``input_processing``) or for +single-trunk sections whose only consumed line is a local spur +(``with_subworkflows``'s ``samtools_index``). Those fixtures' +routing engine already clears the markers via track consolidation, and +adding a V there inflates section height without visual benefit. +""" + +from __future__ import annotations + +from collections import defaultdict +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import _station_marker_bbox, compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import is_bypass_v +from nf_metro.render.svg import apply_route_offsets + +GUIDE = Path(__file__).resolve().parent.parent / "examples" / "guide" + +_GUIDE_BYPASS_FIXTURES = [ + "05_file_icons.mmd", + "05c_files_icon.mmd", + "05d_folder_icon.mmd", + "06a_without_hidden.mmd", + "06b_with_hidden.mmd", +] + + +def _layout_guide(name: str): + text = (GUIDE / name).read_text() + graph = parse_metro_mermaid(text) + compute_layout(graph) + return graph + + +def _seg_crosses_bbox( + p1: tuple[float, float], + p2: tuple[float, float], + bbox: tuple[float, float, float, float], +) -> bool: + x1, y1 = p1 + x2, y2 = p2 + bx1, by1, bx2, by2 = bbox + if max(x1, x2) < bx1 or min(x1, x2) > bx2: + return False + if max(y1, y2) < by1 or min(y1, y2) > by2: + return False + for k in range(21): + f = k / 20.0 + x = x1 + f * (x2 - x1) + y = y1 + f * (y2 - y1) + if bx1 <= x <= bx2 and by1 <= y <= by2: + return True + return False + + +@pytest.mark.parametrize("fixture", _GUIDE_BYPASS_FIXTURES) +def test_guide_lines_dont_cross_non_consumer_markers(fixture): + """No rendered line segment may pass through the marker bbox of any + station that neither consumes nor produces that line. + """ + graph = _layout_guide(fixture) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + consumed_by: dict[str, set[str]] = defaultdict(set) + produced_by: dict[str, set[str]] = defaultdict(set) + for e in graph.edges: + consumed_by[e.target].add(e.line_id) + produced_by[e.source].add(e.line_id) + + for sid in graph.stations: + bbox = _station_marker_bbox(graph, sid, offsets=offsets) + if bbox is None: + continue + station_lines = consumed_by.get(sid, set()) | produced_by.get(sid, set()) + for r in routes: + if r.line_id in station_lines: + continue + if r.edge.source == sid or r.edge.target == sid: + continue + pts = apply_route_offsets(r, offsets) + for k in range(len(pts) - 1): + if _seg_crosses_bbox(pts[k], pts[k + 1], bbox): + raise AssertionError( + f"{fixture}: line {r.line_id!r} on edge " + f"{r.edge.source!r} -> {r.edge.target!r} " + f"crosses non-consumer station {sid!r} " + f"marker bbox " + f"({bbox[0]:.1f},{bbox[1]:.1f})-" + f"({bbox[2]:.1f},{bbox[3]:.1f}); segment " + f"({pts[k][0]:.1f},{pts[k][1]:.1f})->" + f"({pts[k + 1][0]:.1f},{pts[k + 1][1]:.1f})" + ) + + +# Fixtures whose section topology already provides a parallel track +# for the bypassing line (multi-trunk sections, or single-trunk +# sections whose only consumed line at S is a local spur). The +# bypass insertion must not fire on these - it would only inflate +# section height or push a row down without visual benefit. +_BYPASS_QUIET_FIXTURES = [ + "examples/rnaseq_auto.mmd", + "examples/epitopeprediction.mmd", +] + + +@pytest.mark.parametrize("rel_path", _BYPASS_QUIET_FIXTURES) +def test_no_bypass_inserted_for_quiet_fixtures(rel_path): + text = (Path(__file__).resolve().parent.parent / rel_path).read_text() + graph = parse_metro_mermaid(text) + bypass_ids = [sid for sid in graph.stations if is_bypass_v(sid)] + assert bypass_ids == [], ( + f"{rel_path}: expected no bypass stations, got {bypass_ids}" + ) + + +def _nonconsumer_crossings(graph, only_station: str | None = None) -> list[str]: + """Return messages for every line drawn through a non-consumer marker. + + Restricting to ``only_station`` scopes the check to one station, which lets + a fixture carrying an unrelated, out-of-scope crossing still assert the + targeted marker is clear. + """ + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + consumed_or_produced: dict[str, set[str]] = defaultdict(set) + for e in graph.edges: + consumed_or_produced[e.target].add(e.line_id) + consumed_or_produced[e.source].add(e.line_id) + found: list[str] = [] + for sid in graph.stations: + if only_station is not None and sid != only_station: + continue + bbox = _station_marker_bbox(graph, sid, offsets=offsets) + if bbox is None: + continue + for r in routes: + if r.line_id in consumed_or_produced.get(sid, set()): + continue + if r.edge.source == sid or r.edge.target == sid: + continue + pts = apply_route_offsets(r, offsets) + if any( + _seg_crosses_bbox(pts[k], pts[k + 1], bbox) for k in range(len(pts) - 1) + ): + found.append(f"line {r.line_id!r} crosses non-consumer {sid!r}") + return found + + +def test_inrow_express_skip_bows_around_skipped_marker(): + """An express line skipping a collinear station bows around its marker. + + Three collinear stations ``s1 -> s2 -> s3`` (line ``a``) with an express + ``s1 -> s3`` (line ``b``): topology alone cannot tell the express is drawn + through ``s2``'s marker, so the geometric bypass pass must catch and bow + it (#990). + """ + path = ( + Path(__file__).resolve().parent.parent + / "examples" + / "topologies" + / "inrow_skip_breeze.mmd" + ) + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + assert not _nonconsumer_crossings(graph), _nonconsumer_crossings(graph) + assert any(is_bypass_v(sid) for sid in graph.stations), ( + "expected a geometric bypass-V helper to be inserted" + ) + + +def test_sectionless_skip_line_detours_around_skipped_marker(): + """A skip-line on a graph with no declared section detours around the stops + it skips rather than running through their markers. + + ``a -> b -> c -> d -> e`` (line ``main``) with ``a -> c -> e`` (line + ``alt``) skipping ``b`` and ``d``: with no ``subgraph`` the graph would + otherwise stay flat and draw ``alt`` straight along the trunk through the + skipped markers. Interchange inference detects ``c`` as a parallel-lane hub + and gives the loose stations an implicit section so the detour has a home + (#1229). + """ + path = ( + Path(__file__).resolve().parent.parent + / "examples" + / "topologies" + / "sectionless_skip_breeze.mmd" + ) + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + assert not _nonconsumer_crossings(graph), _nonconsumer_crossings(graph) + + +def test_folded_genome_align_express_clears_skipped_marker(): + """A folded multi-trunk column must not draw a line through a skipped marker. + + ``rnaseq_auto --fold-threshold 1`` folds ``genome_align`` to a TB column + where ``hisat2`` (via ``umi_tools_dedup``) exits past ``salmon_quant``, + which it does not consume (#990). + """ + path = Path(__file__).resolve().parent.parent / "examples" / "rnaseq_auto.mmd" + graph = parse_metro_mermaid(path.read_text(), max_station_columns=1) + compute_layout(graph) + assert not _nonconsumer_crossings(graph, only_station="salmon_quant"), ( + _nonconsumer_crossings(graph, only_station="salmon_quant") + ) + + +def test_folded_pseudo_align_entry_clears_sibling_marker(): + """A folded TB section's side entry port must fan to its siblings without + running through a nearer sibling's marker. + + ``rnaseq_auto --fold-threshold 1`` folds ``pseudo_align`` to a TB column + whose LEFT entry port feeds two layer-0 siblings (``salmon_pseudo`` and + ``kallisto``). The port sits one grid row below its feeder, so its entry + leg to ``kallisto`` runs along the row through ``salmon_pseudo``'s marker, + which it does not consume (#1001). + """ + path = Path(__file__).resolve().parent.parent / "examples" / "rnaseq_auto.mmd" + graph = parse_metro_mermaid(path.read_text(), max_station_columns=1) + compute_layout(graph) + assert not _nonconsumer_crossings(graph, only_station="salmon_pseudo"), ( + _nonconsumer_crossings(graph, only_station="salmon_pseudo") + ) + + +@pytest.mark.parametrize("name", _GUIDE_BYPASS_FIXTURES) +def test_is_bypass_v_recognises_resolve_generated_helpers(name): + """The helper ids ``resolve`` builds are recognised by ``is_bypass_v`` and + carry the V's defining traits (hidden, label-less). Pins the + producer/consumer pairing so renaming the prefix stays a one-site change + rather than silently splitting the id-builder from its predicate. + """ + graph = _layout_guide(name) + flagged = [st for sid, st in graph.stations.items() if is_bypass_v(sid)] + assert flagged, f"{name}: expected at least one bypass-V helper" + for st in flagged: + assert st.is_hidden, f"{name}: {st.id!r} flagged as bypass-V but is visible" + assert not st.label.strip(), f"{name}: bypass-V {st.id!r} carries a label" diff --git a/tests/test_centered_tracks.py b/tests/test_centered_tracks.py new file mode 100644 index 000000000..022ee2fc4 --- /dev/null +++ b/tests/test_centered_tracks.py @@ -0,0 +1,355 @@ +"""Tests for the ``centered`` line_spread mode. + +When ``%%metro line_spread: centered`` is set, line base tracks become +symmetric about zero and shared (multi-line) stations are centred on the +mean of their lines' base tracks, so a section's weave balances above and +below the shared trunk instead of cascading downward. +""" + +from __future__ import annotations + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.layers import assign_layers +from nf_metro.layout.ordering import assign_tracks +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import LineSpread + +# A compact 3-line weave: a shared trunk (in -> mid -> out carried by all +# three lines) plus a pair of line-exclusive callers per line. +_WEAVE_SRC = """\ +%%metro line: a | A | #4CAF50 +%%metro line: b | B | #2196F3 +%%metro line: c | C | #E91E63 + +graph LR + in[In] + mid[Mid] + out[Out] + a1[A1] + a2[A2] + b1[B1] + b2[B2] + c1[C1] + c2[C2] + + in -->|a,b,c| mid + + mid -->|a| a1 + mid -->|a| a2 + a1 -->|a| out + a2 -->|a| out + + mid -->|b| b1 + mid -->|b| b2 + b1 -->|b| out + b2 -->|b| out + + mid -->|c| c1 + mid -->|c| c2 + c1 -->|c| out + c2 -->|c| out +""" + + +def _weave_graph(centered: bool): + src = _WEAVE_SRC + if centered: + src = "%%metro line_spread: centered\n" + src + return parse_metro_mermaid(src) + + +def _trunk_ids() -> set[str]: + return {"in", "mid", "out"} + + +# A fork weave where the middle line runs straight through the shared +# trunk while the top and bottom lines each split off a short exclusive run +# at the same layer, then rejoin. The two exclusive runs are on distinct +# lines, so they form a 2-member cross-line fork group -- the case the +# fork-equalize pass repacks into consecutive tracks, collapsing the bottom +# run onto the trunk instead of leaving it on the bottom rail. Each +# exclusive run carries two stations so we assert the whole run (not just +# the leaf) rides its line's symmetric rail. +_FORK_WEAVE_SRC = """\ +%%metro line: top | Top | #4CAF50 +%%metro line: mid | Mid | #2196F3 +%%metro line: bot | Bot | #E91E63 + +graph LR + cram[Cram] + fb[Freebayes] + st[Strelka] + out[Out] + + tA[TopA] + tB[TopB] + bA[BotA] + bB[BotB] + + cram -->|top,mid,bot| fb + fb -->|top,mid,bot| st + + st -->|mid| out + + st -->|top| tA + tA -->|top| tB + tB -->|top| out + + st -->|bot| bA + bA -->|bot| bB + bB -->|bot| out +""" + + +def _fork_weave_graph(centered: bool): + src = _FORK_WEAVE_SRC + if centered: + src = "%%metro line_spread: centered\n" + src + return parse_metro_mermaid(src) + + +def test_flag_off_default(): + """Absent the directive the graph defaults to uncentered tracks.""" + graph = _weave_graph(centered=False) + assert graph.line_spread is LineSpread.BUNDLE + + +def test_flag_on_parsed(): + graph = _weave_graph(centered=True) + assert graph.line_spread is LineSpread.CENTERED + + +def test_flag_off_tracks_unchanged(): + """With the flag OFF, tracks match the legacy top-anchored assignment. + + The trunk stations sit on the top line's base track (0.0) and every + exclusive caller is at or below it -- no station goes above the trunk. + """ + graph = _weave_graph(centered=False) + layers = assign_layers(graph) + tracks = assign_tracks(graph, layers) + + trunk_tracks = {tracks[t] for t in _trunk_ids()} + assert trunk_tracks == {0.0}, trunk_tracks + # Legacy: everything stacks downward from the trunk, nothing above it. + assert min(tracks.values()) >= 0.0 + + +def test_flag_on_trunk_centred_and_exclusives_straddle(): + """With the flag ON, the shared trunk is centred and exclusive callers + distribute both above AND below it.""" + graph = _weave_graph(centered=True) + layers = assign_layers(graph) + tracks = assign_tracks(graph, layers) + + trunk_tracks = {tracks[t] for t in _trunk_ids()} + # The whole shared trunk shares a single (central) track. + assert len(trunk_tracks) == 1, trunk_tracks + trunk = next(iter(trunk_tracks)) + + all_tracks = list(tracks.values()) + # Exclusive callers must straddle the trunk: at least one strictly + # above and at least one strictly below. + assert min(all_tracks) < trunk, (min(all_tracks), trunk) + assert max(all_tracks) > trunk, (max(all_tracks), trunk) + + # The trunk sits near the centre of the vertical spread (within one + # line gap of the midpoint of min/max). + midpoint = (min(all_tracks) + max(all_tracks)) / 2 + assert abs(trunk - midpoint) < 1.0, (trunk, midpoint) + + +def test_flag_on_layout_validates_and_centres_y(): + """End-to-end: centred layout passes validation and the trunk's final + Y straddles the exclusive callers.""" + graph = _weave_graph(centered=True) + compute_layout(graph, validate=True) + + real = { + sid: s.y + for sid, s in graph.stations.items() + if not s.is_port and not s.is_hidden + } + trunk_y = {real[t] for t in _trunk_ids()} + # Trunk shares one Y row. + assert len(trunk_y) == 1, trunk_y + ty = next(iter(trunk_y)) + + ys = list(real.values()) + assert min(ys) < ty, (min(ys), ty) + assert max(ys) > ty, (max(ys), ty) + + +def test_guard_balanced_runs_and_no_ops(): + """The centred-tracks balance guard runs without error when on and is a + no-op when off or under-determined.""" + from nf_metro.layout.engine import _guard_centered_line_spread_balanced + + on = _weave_graph(centered=True) + _guard_centered_line_spread_balanced(on, "test") # symmetric bases -> passes + + off = _weave_graph(centered=False) + _guard_centered_line_spread_balanced(off, "test") # flag off -> no-op + + single = parse_metro_mermaid( + "%%metro line_spread: centered\n" + "%%metro line: a | A | #fff\n" + "graph LR\n x[X]\n y[Y]\n x -->|a| y\n" + ) + _guard_centered_line_spread_balanced(single, "test") # <2 lines -> no-op + + +def _line_base_sign(graph, lid: str) -> float: + """Sign of line ``lid``'s symmetric base track (above/centre/below).""" + order = list(graph.lines.keys()) + n = len(order) + base = order.index(lid) - (n - 1) / 2 + return 0.0 if abs(base) < 1e-9 else (1.0 if base > 0 else -1.0) + + +def test_fork_weave_exclusive_runs_ride_their_line_rail(): + """A line's exclusive run must sit on its line's symmetric base rail. + + The cross-line fork (top/mid/bot exclusive runs all diverging from the + same trunk station) used to be repacked into consecutive tracks by the + fork-equalize pass, collapsing the bottom line's run onto the trunk. + Each exclusive station must instead match its own line's base track, so + the top run rides above the trunk, the bottom run below, and the middle + run on the centre. + """ + graph = _fork_weave_graph(centered=True) + layers = assign_layers(graph) + tracks = assign_tracks(graph, layers) + + line_base = { + lid: (i - (len(graph.lines) - 1) / 2) + for i, lid in enumerate(graph.lines.keys()) + } + exclusive = { + "tA": "top", + "tB": "top", + "bA": "bot", + "bB": "bot", + } + for sid, lid in exclusive.items(): + assert tracks[sid] == line_base[lid], ( + sid, + lid, + tracks[sid], + line_base[lid], + ) + + +def test_fork_weave_layout_each_line_run_on_correct_side(): + """End-to-end: each exclusive run's final Y sits on the correct side of + the trunk (top above, bottom below, middle on the centre).""" + graph = _fork_weave_graph(centered=True) + compute_layout(graph, validate=True) + + trunk_y = {graph.stations[t].y for t in ("cram", "fb", "st", "out")} + assert len(trunk_y) == 1, trunk_y + ty = next(iter(trunk_y)) + + runs = {"top": ("tA", "tB"), "bot": ("bA", "bB")} + for lid, members in runs.items(): + sign = _line_base_sign(graph, lid) + for sid in members: + dy = graph.stations[sid].y - ty + if sign < 0: + assert dy < -1.0, (sid, lid, graph.stations[sid].y, ty) + elif sign > 0: + assert dy > 1.0, (sid, lid, graph.stations[sid].y, ty) + else: + assert abs(dy) < 1.0, (sid, lid, graph.stations[sid].y, ty) + + +def test_guard_flags_collapsed_exclusive_run(): + """The balance guard must fire when an exclusive run has collapsed onto + the trunk midline instead of riding its line's rail.""" + import pytest + + from nf_metro.layout.engine import _guard_centered_line_spread_balanced + from nf_metro.layout.phases.guards import PhaseInvariantError + + graph = _fork_weave_graph(centered=True) + compute_layout(graph, validate=False) + + # Force the bottom exclusive run onto the trunk Y (the regression). + trunk_y = graph.stations["st"].y + for sid in ("bA", "bB"): + graph.stations[sid].y = trunk_y + + with pytest.raises(PhaseInvariantError, match="not offset to its side"): + _guard_centered_line_spread_balanced(graph, "test") + + +def test_demo_fixture_balanced_and_valid(): + """The shipped demo fixture renders, validates, and shows a centred trunk + with callers both above and below.""" + from pathlib import Path + + src = Path(__file__).parent.parent / "examples" / "centered_tracks.mmd" + graph = parse_metro_mermaid(src.read_text()) + assert graph.line_spread is LineSpread.CENTERED + compute_layout(graph, validate=True) + + trunk = {"fastqc", "align", "markdup", "summary"} + trunk_y = {graph.stations[t].y for t in trunk} + assert len(trunk_y) == 1, trunk_y + ty = next(iter(trunk_y)) + + real_ys = [ + s.y for s in graph.stations.values() if not s.is_port and not s.is_hidden + ] + assert min(real_ys) < ty + assert max(real_ys) > ty + + +_SECTION_OVERRIDE_SRC = """\ +%%metro line: a | A | #4CAF50 +%%metro line: b | B | #2196F3 +%%metro line: c | C | #E91E63 +%%metro line_spread: centered | weave + +graph LR + subgraph weave [Weave] + win[In] + wmid[Mid] + wout[Out] + wa[A1] + wb[B1] + wc[C1] + + win -->|a,b,c| wmid + wmid -->|a| wa + wmid -->|b| wb + wmid -->|c| wc + wa -->|a| wout + wb -->|b| wout + wc -->|c| wout + end +""" + + +def test_per_section_centered_override_parses(): + """A piped directive records a per-section override, not the graph default.""" + graph = parse_metro_mermaid(_SECTION_OVERRIDE_SRC) + assert graph.line_spread is LineSpread.BUNDLE + assert graph.line_spread_overrides == {"weave": LineSpread.CENTERED} + assert graph.section_line_spread("weave") is LineSpread.CENTERED + assert graph.section_line_spread("other") is LineSpread.BUNDLE + + +def test_per_section_centered_override_balances_and_validates(): + """A section with a centered override balances about its trunk and passes + the (now per-section-aware) balance guard under validate=True.""" + graph = parse_metro_mermaid(_SECTION_OVERRIDE_SRC) + compute_layout(graph, validate=True) + + trunk_y = {graph.stations[t].y for t in ("win", "wmid", "wout")} + assert len(trunk_y) == 1, trunk_y + ty = next(iter(trunk_y)) + + caller_ys = [graph.stations[s].y for s in ("wa", "wb", "wc")] + assert min(caller_ys) < ty, (min(caller_ys), ty) + assert max(caller_ys) > ty, (max(caller_ys), ty) diff --git a/tests/test_centreline_inter_section.py b/tests/test_centreline_inter_section.py new file mode 100644 index 000000000..8acab49e7 --- /dev/null +++ b/tests/test_centreline_inter_section.py @@ -0,0 +1,85 @@ +"""Inter-section simple-shape routes are built via the centreline templates. + +The straight, L-shape, single-corner and vertical-drop inter-section handlers +construct their routes by describing a centreline and fanning it with +``build_concentric_bundle`` (``layout/routing/centrelines.py``) rather than +assembling per-line ``points`` / ``curve_radii`` by hand. A bundle built that +way is offset-baked (:attr:`OffsetRegime.BAKED`) and correct by construction -- +its corners stay concentric and its lines keep a constant side-of-travel order. + +These tests pin that on the fixtures that exercise each shape: a regression to +a hand-rolled, render-time-offset path would leave the multi-line inter-section +bundles :attr:`OffsetRegime.DEFERRED`, and a flat or mis-signed radius would +trip the render-path curve guard. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.invariants import ( + assert_render_curve_invariants, + check_bundle_order_preserved, + check_concentric_bundle_corners, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +REPO_ROOT = Path(__file__).resolve().parent.parent +EXAMPLES = REPO_ROOT / "examples" + +# Fixtures whose inter-section routing exercises the simple shapes migrated +# onto the centreline templates: straight runs, plain L-shapes, the bottom-exit +# junction corner, and TB perpendicular / bottom-exit drops. +MIGRATED_SHAPE_FIXTURES = [ + EXAMPLES / "topologies" / "asymmetric_tree.mmd", + EXAMPLES / "topologies" / "complex_multipath.mmd", + EXAMPLES / "topologies" / "fold_stacked_branch.mmd", + EXAMPLES / "rnaseq_sections.mmd", + EXAMPLES / "variantbenchmarking_auto.mmd", +] + + +def _route(path: Path): + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, offsets, routes + + +@pytest.mark.parametrize("path", MIGRATED_SHAPE_FIXTURES, ids=lambda p: p.stem) +def test_inter_section_bundles_are_concentric_and_unflipped(path: Path) -> None: + graph, offsets, routes = _route(path) + assert check_concentric_bundle_corners(graph, routes, offsets) == [] + assert check_bundle_order_preserved(routes) == [] + # The render path's always-on guard must accept the laid-out routes. + assert_render_curve_invariants(graph, routes, offsets) + + +@pytest.mark.parametrize("path", MIGRATED_SHAPE_FIXTURES, ids=lambda p: p.stem) +def test_multi_line_inter_section_bundles_are_offset_baked(path: Path) -> None: + """A multi-line inter-section bundle routed via a centreline bakes offsets. + + The centreline templates emit ``offsets_applied`` routes (the per-line + offset is in the points, not deferred to the renderer's heuristic). A + revert to a hand-rolled, render-time-offset L-shape would leave the + multi-line inter-section bundles un-baked and red this assertion. + """ + _graph, _offsets, routes = _route(path) + bundles: dict[tuple[str, str], list] = {} + for r in routes: + if r.is_inter_section: + bundles.setdefault((r.edge.source, r.edge.target), []).append(r) + multiline = {k: v for k, v in bundles.items() if len({r.line_id for r in v}) > 1} + assert multiline, f"{path.stem}: expected a multi-line inter-section bundle" + assert all( + r.offset_regime is OffsetRegime.BAKED for rs in multiline.values() for r in rs + ) diff --git a/tests/test_clear_channel_target_push.py b/tests/test_clear_channel_target_push.py new file mode 100644 index 000000000..868c19090 --- /dev/null +++ b/tests/test_clear_channel_target_push.py @@ -0,0 +1,110 @@ +"""Target-aware push direction for ``clear_channel_of_section_edge`` (#736). + +When a fan-out descent channel grazes a wider section stacked in a lower row of +the source column, ``clear_channel_of_section_edge`` nudges the channel clear of +that section's edge. The push must head toward the side the route's target sits +on; pushing toward the nearer edge regardless of the target sends a line on a +far-side detour across the canvas when the nearer edge faces away from its +target. + +Covers: + +* The function pushes a grazing channel toward whichever side carries the + route's target, and only falls back to the nearer edge when the target sits + within the grazed section's own X span (genuinely ambiguous). +* The repro topology routes its ``rna`` descent on the target's side of the + wide block instead of detouring to the far-left margin. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import route_edges +from nf_metro.layout.routing.common import clear_channel_of_section_edge +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import MetroGraph, Section + +REPO_ROOT = Path(__file__).resolve().parent.parent +REPRO = REPO_ROOT / "examples" / "topologies" / "clear_channel_target_aware_push.mmd" + +# A wide blocking section the descent channel grazes; the channel midline at 212 +# sits nearer this section's left edge (182px) than its right edge (218px). +_BLOCK = Section( + id="block", + name="Block", + bbox_x=30.0, + bbox_y=248.0, + bbox_w=400.0, + bbox_h=100.0, +) +_GRAZING_MID_X = 212.0 +_HALF_WIDTH = 2.0 + + +def _block_graph() -> MetroGraph: + return MetroGraph(sections={"block": _BLOCK}) + + +@pytest.mark.parametrize( + "target_x, expect_right", + [ + (480.0, True), # target right of the block -> push right toward it + (-50.0, False), # target left of the block -> push left toward it + (200.0, False), # target inside the block span -> nearer-edge fallback + (None, False), # no target hint -> nearer-edge fallback (legacy) + ], +) +def test_push_direction_follows_target( + target_x: float | None, expect_right: bool +) -> None: + """The grazing channel is pushed onto the target's side of the block, and + onto the nearer edge only when the target's X is ambiguous.""" + adjusted = clear_channel_of_section_edge( + _block_graph(), + _GRAZING_MID_X, + _HALF_WIDTH, + 120.0, + 448.0, + [], + target_x=target_x, + ) + right_edge = _BLOCK.bbox_x + _BLOCK.bbox_w + if expect_right: + assert adjusted >= right_edge, ( + f"expected push right of block ({right_edge}), got {adjusted}" + ) + else: + assert adjusted <= _BLOCK.bbox_x, ( + f"expected push left of block ({_BLOCK.bbox_x}), got {adjusted}" + ) + + +def test_repro_rna_descent_routes_toward_target() -> None: + """The hub's ``rna`` fan to a down-and-right target descends on the target's + side of the wide ``block`` rather than detouring to the far-left margin.""" + graph = parse_metro_mermaid(REPRO.read_text()) + compute_layout(graph) + routes = route_edges(graph) + + block = graph.sections["block"] + block_right = block.bbox_x + block.bbox_w + + descents = [ + seg + for r in routes + if r.line_id == "rna" + for seg in zip(r.points, r.points[1:]) + if abs(seg[0][1] - seg[1][1]) > abs(seg[0][0] - seg[1][0]) + ] + assert descents, "expected a vertical descent segment on the rna line" + # Every rna vertical run sits at or right of the block's right edge, on the + # side its down-and-right target lies. + for (x1, _), (x2, _) in descents: + assert x1 >= block_right - 1.0 and x2 >= block_right - 1.0, ( + f"rna descent at x={x1} is on the far side of the block " + f"(right edge {block_right}); expected target side" + ) diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 000000000..ae674d6c2 --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,542 @@ +"""Tests for the CLI entry points.""" + +from pathlib import Path + +import pytest +from click.testing import CliRunner + +from nf_metro.cli import cli + +EXAMPLES_DIR = Path(__file__).resolve().parent.parent / "examples" +RNASEQ_MMD = EXAMPLES_DIR / "rnaseq_sections.mmd" +INVALID_DIR = Path(__file__).resolve().parent / "fixtures" / "invalid" + +# Fixtures that parse and pass graph-semantic validation but trip a layout +# invariant once the engine runs. They exercise the boundary between the bare +# `validate` (semantic only) and `validate --with-layout`. +SEMANTIC_VALID_LAYOUT_BROKEN = [ + "mixed_entry_opposing.mmd", + "mixed_entry_perpendicular.mmd", + "backward_feed_rl.mmd", + "merge_trunk_rightward_source.mmd", +] + + +def test_render_produces_svg(tmp_path): + """render command produces an SVG file.""" + out = tmp_path / "output.svg" + runner = CliRunner() + result = runner.invoke(cli, ["render", str(RNASEQ_MMD), "-o", str(out)]) + assert result.exit_code == 0, result.output + assert out.exists() + content = out.read_text() + assert " Path: + """A semantically valid diagram whose non-LR primary direction warns.""" + mmd = tmp_path / "td.mmd" + mmd.write_text("%%metro line: x | X | #ff0000\ngraph TD\n a[A] -->|x| b[B]\n") + return mmd + + +def test_validate_surfaces_warnings_without_failing(tmp_path): + """A warning is reported but does not fail the default (non-strict) run.""" + runner = CliRunner() + result = runner.invoke(cli, ["validate", str(_td_graph(tmp_path))]) + assert result.exit_code == 0, result.output + assert "graph LR" in result.output + assert "Valid:" in result.output + + +def test_validate_strict_escalates_warning_to_error(tmp_path): + """`--strict` turns a warning into a non-zero exit.""" + runner = CliRunner() + result = runner.invoke(cli, ["validate", "--strict", str(_td_graph(tmp_path))]) + assert result.exit_code != 0 + assert "graph LR" in result.output + + +def test_info_output(): + """info command prints graph metadata.""" + runner = CliRunner() + result = runner.invoke(cli, ["info", str(RNASEQ_MMD)]) + assert result.exit_code == 0 + assert "Title:" in result.output + assert "Stations:" in result.output + assert "Lines:" in result.output + assert "Sections:" in result.output + + +def test_info_default_matches_formatter(): + """Default text output equals the non-verbose formatter, byte-for-byte.""" + from nf_metro.introspect import build_info, format_info_text + from nf_metro.parser import parse_metro_mermaid + + runner = CliRunner() + result = runner.invoke(cli, ["info", str(RNASEQ_MMD)]) + assert result.exit_code == 0 + graph = parse_metro_mermaid(RNASEQ_MMD.read_text()) + expected = format_info_text(build_info(graph), verbose=False) + assert result.output == expected + "\n" + # The verbose-only sections must not leak into the default output. + assert "Section dependency graph:" not in result.output + + +def test_info_json_is_valid_and_structured(): + """--json emits parseable JSON carrying the full introspection structure.""" + import json + + runner = CliRunner() + result = runner.invoke(cli, ["info", str(RNASEQ_MMD), "--json"]) + assert result.exit_code == 0 + data = json.loads(result.output) + assert data["title"] == "nf-core/rnaseq" + assert {"counts", "lines", "sections", "ports", "junctions", "section_dag"} <= set( + data + ) + assert data["section_dag"]["edges"] + + +def test_info_verbose_adds_introspection(): + """--verbose appends the richer sections to the stable summary.""" + runner = CliRunner() + result = runner.invoke(cli, ["info", str(RNASEQ_MMD), "--verbose"]) + assert result.exit_code == 0 + assert "Section dependency graph:" in result.output + assert "Per-line routes:" in result.output + assert "Ports (synthetic):" in result.output + + +def test_info_captures_parse_warnings(tmp_path): + """A non-LR primary graph direction surfaces as a captured warning.""" + import json + + mmd = tmp_path / "tb.mmd" + mmd.write_text( + "%%metro title: TB warn\n" + "%%metro line: a | A | #ff0000\n" + "graph TB\n" + " x[X] -->|a| y[Y]\n" + ) + runner = CliRunner() + result = runner.invoke(cli, ["info", str(mmd), "--json"]) + assert result.exit_code == 0 + data = json.loads(result.output) + assert any("LR" in w for w in data["warnings"]) + + +def test_version(): + """--version flag prints version string.""" + runner = CliRunner() + result = runner.invoke(cli, ["--version"]) + assert result.exit_code == 0 + assert "version" in result.output.lower() + + +def test_render_with_theme(tmp_path): + """render command accepts --theme flag.""" + out = tmp_path / "output.svg" + runner = CliRunner() + result = runner.invoke( + cli, ["render", str(RNASEQ_MMD), "-o", str(out), "--theme", "light"] + ) + assert result.exit_code == 0, result.output + assert out.exists() + + +def test_render_svg_ends_with_newline(tmp_path): + """SVG output ends with a trailing newline (nf-core end-of-file-fixer).""" + out = tmp_path / "output.svg" + runner = CliRunner() + result = runner.invoke(cli, ["render", str(RNASEQ_MMD), "-o", str(out)]) + assert result.exit_code == 0, result.output + content = out.read_text() + assert content.endswith("\n"), "SVG output must end with a trailing newline" + + +def test_render_section_gap_options(tmp_path): + """render command accepts --section-x-gap and --section-y-gap flags.""" + out = tmp_path / "output.svg" + runner = CliRunner() + result = runner.invoke( + cli, + [ + "render", + str(RNASEQ_MMD), + "-o", + str(out), + "--section-x-gap", + "80", + "--section-y-gap", + "60", + ], + ) + assert result.exit_code == 0, result.output + assert out.exists() + + +def test_render_nonexistent_file(): + """render command fails gracefully on missing input.""" + runner = CliRunner() + result = runner.invoke(cli, ["render", "/nonexistent/file.mmd"]) + assert result.exit_code != 0 + + +def test_render_center_ports_cli_flag_accepted(tmp_path): + """--center-ports / --no-center-ports flags both render successfully.""" + out = tmp_path / "out.svg" + runner = CliRunner() + for flag in ("--center-ports", "--no-center-ports"): + result = runner.invoke(cli, ["render", str(RNASEQ_MMD), "-o", str(out), flag]) + assert result.exit_code == 0, f"{flag}: {result.output}" + assert out.exists() + + +def test_render_center_ports_cli_overrides_directive(tmp_path, monkeypatch): + """CLI --no-center-ports overrides a mmd %%metro center_ports: true directive.""" + from nf_metro.parser.mermaid import parse_metro_mermaid + + captured: dict = {} + + import nf_metro.api as api_mod + + original_compute_layout = api_mod.compute_layout + + def spy_compute_layout(graph, **kw): + captured["center_ports"] = graph.center_ports + return original_compute_layout(graph, **kw) + + monkeypatch.setattr(api_mod, "compute_layout", spy_compute_layout) + + mmd_text = "%%metro center_ports: true\n" + RNASEQ_MMD.read_text() + mmd = tmp_path / "with_directive.mmd" + mmd.write_text(mmd_text) + out = tmp_path / "out.svg" + runner = CliRunner() + + # Directive alone -> True + result = runner.invoke(cli, ["render", str(mmd), "-o", str(out)]) + assert result.exit_code == 0, result.output + assert captured["center_ports"] is True + + # CLI --no-center-ports overrides directive + result = runner.invoke( + cli, ["render", str(mmd), "-o", str(out), "--no-center-ports"] + ) + assert result.exit_code == 0, result.output + assert captured["center_ports"] is False + + # Sanity check: parser alone preserves the directive + parsed = parse_metro_mermaid(mmd_text) + assert parsed.center_ports is True + + +def test_validate_svg_success(tmp_path): + """validate-svg passes on a freshly rendered (manifest-on) SVG.""" + out = tmp_path / "map.svg" + runner = CliRunner() + rendered = runner.invoke(cli, ["render", str(RNASEQ_MMD), "-o", str(out)]) + assert rendered.exit_code == 0, rendered.output + result = runner.invoke(cli, ["validate-svg", str(out)]) + assert result.exit_code == 0, result.output + assert "Valid" in result.output + + +def test_validate_svg_no_manifest(tmp_path): + """validate-svg fails when the SVG carries no manifest (--no-manifest).""" + out = tmp_path / "map.svg" + runner = CliRunner() + runner.invoke(cli, ["render", str(RNASEQ_MMD), "-o", str(out), "--no-manifest"]) + result = runner.invoke(cli, ["validate-svg", str(out)]) + assert result.exit_code == 1 + + +def test_render_responsive_flag_omits_fixed_dimensions(tmp_path): + """--responsive omits fixed width/height from root element.""" + import xml.etree.ElementTree as ET + + out = tmp_path / "responsive.svg" + runner = CliRunner() + result = runner.invoke( + cli, ["render", str(RNASEQ_MMD), "-o", str(out), "--responsive"] + ) + assert result.exit_code == 0, result.output + root = ET.fromstring(out.read_text()) + assert root.get("width") is None + assert root.get("height") is None + assert root.get("viewBox") is not None + assert root.get("preserveAspectRatio") == "xMinYMin meet" + + +def test_validate_svg_rejects_nonconforming(tmp_path): + """validate-svg fails when the embedded manifest violates the schema.""" + import re + + out = tmp_path / "map.svg" + runner = CliRunner() + runner.invoke(cli, ["render", str(RNASEQ_MMD), "-o", str(out)]) + out.write_text(re.sub(r'"r":[0-9.]+,', "", out.read_text(), count=1)) + result = runner.invoke(cli, ["validate-svg", str(out)]) + assert result.exit_code == 1 + + +# --------------------------------------------------------------------------- +# render-many tests +# --------------------------------------------------------------------------- + +SIMPLE_MMD = Path(__file__).resolve().parent / "fixtures" / "da_pipeline.mmd" + + +def _write_manifest(tmp_path: Path, jobs: list[dict]) -> Path: + import json + + manifest = tmp_path / "manifest.json" + manifest.write_text(json.dumps(jobs)) + return manifest + + +def test_render_many_single_job(tmp_path): + """render-many with one job produces a valid SVG.""" + out = tmp_path / "out.svg" + manifest = _write_manifest( + tmp_path, + [{"input": str(RNASEQ_MMD), "output": str(out)}], + ) + result = CliRunner().invoke(cli, ["render-many", str(manifest)]) + assert result.exit_code == 0, result.output + assert out.exists() + assert " nothing to check). +COINCIDE_FIXTURES = [ + "variantbenchmarking.mmd", + "variantbenchmarking_auto.mmd", + "topologies/convergence_stacked_sink.mmd", + "topologies/divergent_fanout_split.mmd", + "topologies/merge_pullaway.mmd", + "topologies/merge_right_entry.mmd", + "topologies/merge_around_below_leftmost.mmd", + "topologies/merge_trunk_out_of_range_section.mmd", +] + + +def _gather_fixtures() -> list[Path]: + paths: list[Path] = [] + paths.extend(sorted(TOPOLOGIES.glob("*.mmd"))) + paths.extend(sorted(FIXTURES.glob("*.mmd"))) + paths.extend(sorted(EXAMPLES.glob("*.mmd"))) + paths.extend(sorted((EXAMPLES / "topologies").glob("*.mmd"))) + return paths + + +def _touched_corner_mismatches( + path: Path, monkeypatch: pytest.MonkeyPatch, impl=_PROD_SET_VCHANNEL_X +) -> list[tuple[str, int, float, float]]: + """Route *path*, recording every corner the coincide pass snaps via *impl*. + + Returns, for each snapped corner, any disagreement between the stored + radius and the central zero-offset concentric derivation for the route's + final waypoints: ``(line_id, radius_index, stored, expected)``. + """ + touched: list[tuple[RoutedPath, int]] = [] + + def spy(ch: _VChannel, new_x: float) -> None: + impl(ch, new_x) + touched.append((ch.route, ch.idx)) + + monkeypatch.setattr(normalize, "_set_vchannel_x", spy) + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + route_edges(graph, station_offsets=offsets) + + mismatches: list[tuple[str, int, float, float]] = [] + for rp, k in touched: + radii = rp.curve_radii + if radii is None: + continue + pts = rp.points + for radius_idx in (k - 1, k): + if not 0 <= radius_idx < len(radii): + continue + expected = concentric_corner_radius_at( + pts[radius_idx], pts[radius_idx + 1], pts[radius_idx + 2], 0.0 + ) + if abs(radii[radius_idx] - expected) > _RADIUS_TOLERANCE: + mismatches.append((rp.line_id, radius_idx, radii[radius_idx], expected)) + return mismatches + + +def test_set_vchannel_x_rederives_flanking_corners_from_waypoints() -> None: + """Moving a fused channel re-derives both corners through the central helper. + + A pre-set non-base radius is replaced by the zero-offset concentric radius + for the moved geometry, which a single stroke resolves to the base radius. + """ + points = [(0.0, 0.0), (50.0, 0.0), (50.0, 100.0), (120.0, 100.0)] + route = RoutedPath( + edge=Edge(source="s", target="t", line_id="l"), + line_id="l", + points=points, + is_inter_section=True, + offset_regime=OffsetRegime.BAKED, + curve_radii=[19.0, 19.0], + ) + channel = _VChannel(route=route, idx=1, x=50.0, y_lo=0.0, y_hi=100.0, down=True) + + _set_vchannel_x(channel, 55.0) + + assert route.points[1] == (55.0, 0.0) + assert route.points[2] == (55.0, 100.0) + expected = [ + concentric_corner_radius_at( + route.points[i], route.points[i + 1], route.points[i + 2], 0.0 + ) + for i in (0, 1) + ] + assert route.curve_radii == expected + assert route.curve_radii == [CURVE_RADIUS, CURVE_RADIUS] + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_coincide_pass_corners_match_central_derivation( + path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + """Every corner the coincide pass snaps matches the central derivation.""" + mismatches = _touched_corner_mismatches(path, monkeypatch) + assert not mismatches, ( + f"{path.name}: {len(mismatches)} coincided corner(s) disagree with the " + f"central derivation; first: {mismatches[0]}" + ) + + +@pytest.mark.parametrize("fixture", COINCIDE_FIXTURES) +def test_named_coincide_fixtures_snap_at_least_one_corner( + fixture: str, monkeypatch: pytest.MonkeyPatch +) -> None: + """The named fixtures genuinely drive the coincide pass. + + Guards the corpus check against silently going vacuous if a layout change + stops these fixtures from fusing same-line tracks. + """ + touched: list[object] = [] + + def spy(ch: _VChannel, new_x: float) -> None: + _PROD_SET_VCHANNEL_X(ch, new_x) + touched.append(ch) + + monkeypatch.setattr(normalize, "_set_vchannel_x", spy) + graph = parse_metro_mermaid((EXAMPLES / fixture).read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + route_edges(graph, station_offsets=offsets) + assert touched, f"{fixture} no longer exercises the coincide pass" + + +@pytest.mark.parametrize( + "fixture", ["variantbenchmarking.mmd", "topologies/merge_right_entry.mmd"] +) +def test_reintroduced_hand_clobber_is_detected( + fixture: str, monkeypatch: pytest.MonkeyPatch +) -> None: + """A hand-set radius instead of the central derivation is caught. + + Proves the corpus check has teeth: with the move re-implemented to stamp a + fixed wrong radius instead of re-deriving, the snapped corners disagree + with the central derivation. + """ + + def clobber(ch: _VChannel, new_x: float) -> None: + rp = ch.route + pts = rp.points + k = ch.idx + pts[k] = (new_x, pts[k][1]) + pts[k + 1] = (new_x, pts[k + 1][1]) + if rp.curve_radii is None: + return + for radius_idx in (k - 1, k): + if 0 <= radius_idx < len(rp.curve_radii): + rp.curve_radii[radius_idx] = CURVE_RADIUS * 3.0 + + mismatches = _touched_corner_mismatches( + EXAMPLES / fixture, monkeypatch, impl=clobber + ) + assert mismatches, ( + "expected the clobbered radii to disagree with central derivation" + ) diff --git a/tests/test_collinear_overlay_1074.py b/tests/test_collinear_overlay_1074.py new file mode 100644 index 000000000..ee1329304 --- /dev/null +++ b/tests/test_collinear_overlay_1074.py @@ -0,0 +1,70 @@ +"""Distinct lines occupy distinct channels in every multi-line bundle (#1074). + +Two co-travelling lines that share a bundle must keep parallel slots on every +axis-aligned leg; collapsing them onto one channel draws one line on top of the +other, which the always-on :func:`assert_render_curve_invariants` treats as a +render-aborting defect. + +Two routing paths can collapse a bundle: + +* a TB BOTTOM exit whose target X is offset from the exit X routes a + drop-jog-drop, and the horizontal jog leg must fan per line rather than ride + one shared channel (``tb_bottom_exit_bundle_jog``); and +* a TB LEFT/RIGHT exit port fed by more than one station must give every line a + distinct exit slot, even when two feeders carry the same internal offset + (``tb_right_exit_feeder_slots``). + +The bottom-exit repro is a clean gallery topology. The feeder-slot repro needs +a section fed by two stations on stacked LEFT entries, a shape the topology +gallery's seam invariant does not yet model cleanly, so it lives under +``tests/fixtures`` rather than ``examples/topologies``. The remaining fixtures +are gallery topologies that already exercise both handlers, so the invariant +generalises beyond the repros. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges_centred +from nf_metro.layout.routing.invariants import ( + check_intra_section_collinear_distinct_lines, + check_no_collinear_distinct_lines, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +ROOT = Path(__file__).resolve().parent.parent +TOPOLOGIES = ROOT / "examples" / "topologies" + +FIXTURES = [ + TOPOLOGIES / "tb_bottom_exit_bundle_jog.mmd", + ROOT / "tests" / "fixtures" / "tb_right_exit_feeder_slots.mmd", + TOPOLOGIES / "fold_double.mmd", + TOPOLOGIES / "tb_trunk_through_fan.mmd", + TOPOLOGIES / "wide_fan_in.mmd", +] +IDS = [p.stem for p in FIXTURES] + + +def _routes(path: Path): + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + return graph, route_edges_centred(graph, station_offsets=offsets), offsets + + +@pytest.mark.parametrize("path", FIXTURES, ids=IDS) +def test_no_inter_section_collinear_overlay(path: Path) -> None: + graph, routes, offsets = _routes(path) + violations = check_no_collinear_distinct_lines(graph, routes, offsets) + assert not violations, "\n".join(v.message() for v in violations) + + +@pytest.mark.parametrize("path", FIXTURES, ids=IDS) +def test_no_intra_section_collinear_overlay(path: Path) -> None: + graph, routes, offsets = _routes(path) + violations = check_intra_section_collinear_distinct_lines(graph, routes, offsets) + assert not violations, "\n".join(v.message() for v in violations) diff --git a/tests/test_concentric_bundle_corners.py b/tests/test_concentric_bundle_corners.py new file mode 100644 index 000000000..42af3a46f --- /dev/null +++ b/tests/test_concentric_bundle_corners.py @@ -0,0 +1,130 @@ +"""Tests for the bundle-corner concentricity invariant. + +Covers: + +* Happy-path: every gallery fixture and example routes without a + non-concentric wholesale bundle corner. +* Route-level positive/negative: hand-built bundles exercise the + wholesale-vs-transition discriminator and the arc-centre test, so the + invariant is shown to catch a real pinch rather than passing by accident. + +The correctness check here is the one the corner-radius *source* ratchet +(``tests/test_corner_radius_ratchet.py``) explicitly cannot perform. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.common import RoutedPath +from nf_metro.layout.routing.invariants import check_concentric_bundle_corners +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge + +REPO_ROOT = Path(__file__).resolve().parent.parent +TOPOLOGIES = REPO_ROOT / "tests" / "fixtures" / "topologies" +FIXTURES = REPO_ROOT / "tests" / "fixtures" +EXAMPLES = REPO_ROOT / "examples" + + +def _gather_fixtures() -> list[Path]: + paths: list[Path] = [] + paths.extend(sorted(TOPOLOGIES.glob("*.mmd"))) + paths.extend(sorted(FIXTURES.glob("*.mmd"))) + paths.extend(sorted(EXAMPLES.glob("*.mmd"))) + paths.extend(sorted((EXAMPLES / "topologies").glob("*.mmd"))) + return paths + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_no_non_concentric_bundle_corners_in_gallery(path: Path) -> None: + """Every shipped fixture must route with concentric wholesale corners. + + A handler that sizes a wholesale-translated bundle corner with a base + or hand-signed radius (instead of the geometry-derived concentric one) + surfaces here as a failing fixture, even when that radius traces to an + approved helper and so slips past the source ratchet. + """ + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + violations = check_concentric_bundle_corners(graph, routes, offsets) + assert violations == [], ( + f"{path.name}: {len(violations)} non-concentric corner(s); " + f"first: {violations[0].message() if violations else ''}" + ) + + +# --------------------------------------------------------------------------- +# Route-level positive/negative tests +# --------------------------------------------------------------------------- + + +def _route( + line_id: str, + points: list[tuple[float, float]], + radii: list[float] | None = None, +) -> RoutedPath: + """A bundled ``RoutedPath`` (shared src/tgt) with baked geometry.""" + return RoutedPath( + edge=Edge(source="__src__", target="__tgt__", line_id=line_id), + line_id=line_id, + points=points, + is_inter_section=True, + offset_regime=OffsetRegime.BAKED, + curve_radii=radii, + ) + + +# A down->right corner offset wholesale by (3, -3): the concentric radii are +# 10 (inner) and 7 (outer) so both arc centres land at (10, 90). +_CONCENTRIC_A = _route("a", [(0.0, 0.0), (0.0, 100.0), (50.0, 100.0)], [10.0]) +_CONCENTRIC_B = _route("b", [(3.0, 0.0), (3.0, 97.0), (50.0, 97.0)], [7.0]) + + +def test_concentric_wholesale_corner_passes() -> None: + """A wholesale-translated corner with correctly nested radii is clean.""" + assert ( + check_concentric_bundle_corners(None, [_CONCENTRIC_A, _CONCENTRIC_B], {}) == [] + ) + + +def test_non_concentric_wholesale_corner_is_caught() -> None: + """The same geometry with a base (un-nested) outer radius pinches.""" + bad_b = _route("b", [(3.0, 0.0), (3.0, 97.0), (50.0, 97.0)], [10.0]) + violations = check_concentric_bundle_corners(None, [_CONCENTRIC_A, bad_b], {}) + assert len(violations) == 1 + assert violations[0].centre_spread > 1.0 + + +def test_transition_corner_with_one_pinned_leg_is_skipped() -> None: + """A converging corner (vertical legs offset, horizontals coincident) is + a transition, not a wholesale translation, so non-concentric is allowed. + """ + a = _route("a", [(0.0, 0.0), (0.0, 100.0), (50.0, 100.0)], [10.0]) + # b's vertical leg is offset 3px but both horizontals share y=100. + b = _route("b", [(3.0, 0.0), (3.0, 100.0), (50.0, 100.0)], [10.0]) + assert check_concentric_bundle_corners(None, [a, b], {}) == [] + + +def test_diagonal_leg_is_not_a_corner() -> None: + """A 45-degree diagonal leg carries no orthogonal corner to nest.""" + a = _route("a", [(0.0, 0.0), (100.0, 0.0), (130.0, 117.0), (180.0, 117.0)]) + b = _route("b", [(0.0, 3.0), (97.0, 3.0), (127.0, 120.0), (180.0, 120.0)]) + assert check_concentric_bundle_corners(None, [a, b], {}) == [] + + +def test_single_line_bundle_is_skipped() -> None: + """One line has no bundle-mate to be concentric with.""" + assert check_concentric_bundle_corners(None, [_CONCENTRIC_A], {}) == [] diff --git a/tests/test_constant_relations.py b/tests/test_constant_relations.py new file mode 100644 index 000000000..c92b64551 --- /dev/null +++ b/tests/test_constant_relations.py @@ -0,0 +1,49 @@ +"""Lock the cross-constant geometric orderings enforced at import. + +``constants._check_constant_relations`` runs at module import and turns a +mis-tuned constant (one whose value is only correct relative to another) +into an immediate, located failure rather than a silent layout regression. +""" + +import pytest + +from nf_metro.layout import constants as c + + +def test_relations_hold_on_current_values(): + c._check_constant_relations() + + +def test_coordinate_tolerance_tiers_strictly_ordered(): + assert c.COORD_TOLERANCE_FINE < c.SAME_COORD_TOLERANCE < c.COORD_TOLERANCE + + +def test_same_coord_tolerance_below_offset_step(): + assert c.SAME_COORD_TOLERANCE < c.OFFSET_STEP + + +def test_bypass_clearance_holds_two_corner_radii(): + assert c.BYPASS_CLEARANCE >= 2 * c.CURVE_RADIUS + + +def test_offset_step_below_bypass_nest_step(): + assert c.OFFSET_STEP < c.BYPASS_NEST_STEP + + +def test_station_elbow_tolerance_at_least_offset_step(): + assert c.STATION_ELBOW_TOLERANCE >= c.OFFSET_STEP + + +@pytest.mark.parametrize( + "attr, bad_value", + [ + ("SAME_COORD_TOLERANCE", 5.0), # exceeds OFFSET_STEP and COORD_TOLERANCE + ("BYPASS_CLEARANCE", 1.0), # below 2*CURVE_RADIUS + ("OFFSET_STEP", 99.0), # exceeds BYPASS_NEST_STEP + ("STATION_ELBOW_TOLERANCE", 0.0), # below OFFSET_STEP + ], +) +def test_violation_raises(monkeypatch, attr, bad_value): + monkeypatch.setattr(c, attr, bad_value) + with pytest.raises(c.ConstantRelationError): + c._check_constant_relations() diff --git a/tests/test_content_placement_idempotent.py b/tests/test_content_placement_idempotent.py new file mode 100644 index 000000000..9d259ae4e --- /dev/null +++ b/tests/test_content_placement_idempotent.py @@ -0,0 +1,104 @@ +"""Content-placement phases are idempotent (the declarative property, #488). + +Post-#465 the anchor layer is structural and frozen; the content-placement +phases position content as a function of those frozen anchors plus section +structure. This test locks *idempotence*: applying any one phase a second +time, back-to-back on its own output, is a no-op (``P(P(x)) == P(x)``). + +Idempotence is a fixed-point property and is strictly weaker than *purity* +(output a function of frozen anchors + structure only); the stronger property +is checked by ``test_content_placement_pure`` (#491). + +Mechanism: monkeypatch every placement phase with a probe that applies it once, +snapshots the result, applies it a second time on that result, records any +station the second application moves, then restores the single-application +snapshot so the rest of the pipeline runs unperturbed. Because each probe is +self-contained, all eight share one layout pass and a failure names the +offending phase. A phase that reads its own prior output (e.g. selecting or +sorting by current Y) moves content on the second call and fails here. + +Covers the whole render corpus so any fixture that exercises a phase +participates. Refs #488, #465. +""" + +from __future__ import annotations + +import pytest +from conftest import ( + CONTENT_PLACEMENT_PHASES, + compute_corpus_layout, + content_corpus, + restore_graph_state, + snapshot_graph_state, +) + +import nf_metro.layout.engine as engine +from nf_metro.parser.model import MetroGraph + +CORPUS = content_corpus() + +TOL = 1e-6 + +_Point = tuple[float, float] +_Diff = tuple[str, _Point | None, _Point | None] + + +def _make_idempotence_probe(original, diffs: list[_Diff]): + """Wrap ``original`` to check ``P(P(x)) == P(x)`` locally, recording into + ``diffs`` any station added, removed or moved by the second application.""" + + def probe(graph: MetroGraph, *args, **kwargs): + original(graph, *args, **kwargs) + snap1 = snapshot_graph_state(graph) + after1 = snap1[0] + + original(graph, *args, **kwargs) + after2 = snapshot_graph_state(graph)[0] + + for sid, (x1, y1) in after1.items(): + if sid not in after2: + diffs.append((sid, (x1, y1), None)) + elif abs(after2[sid][0] - x1) > TOL or abs(after2[sid][1] - y1) > TOL: + diffs.append((sid, (x1, y1), after2[sid])) + for sid in after2.keys() - after1.keys(): + diffs.append((sid, None, after2[sid])) + + restore_graph_state(graph, snap1) + + return probe + + +@pytest.mark.parametrize( + "fid,path,is_nextflow", CORPUS, ids=[fid for fid, _, _ in CORPUS] +) +def test_placement_phase_is_idempotent(fid, path, is_nextflow, monkeypatch): + """Every content-placement phase is idempotent on ``fid``. + + The probe checks ``P(P(x)) == P(x)`` directly at each phase and restores the + single-application result, so all eight probes share one layout pass and a + failure names the offending phase. This is the literal property the file + asserts, checked in isolation at the phase rather than inferred from the + cascaded final layout, and covers the same (fixture, phase) pairs at + one-eighth the layout cost. + """ + diffs_by_phase: dict[str, list[_Diff]] = {} + for phase_name in CONTENT_PLACEMENT_PHASES: + diffs_by_phase[phase_name] = [] + original = getattr(engine, phase_name) + monkeypatch.setattr( + engine, + phase_name, + _make_idempotence_probe(original, diffs_by_phase[phase_name]), + ) + + compute_corpus_layout(path, is_nextflow) + + non_idempotent = {name: diffs for name, diffs in diffs_by_phase.items() if diffs} + assert not non_idempotent, ( + f"content-placement phase(s) not idempotent on {fid}: applying twice " + f"moved content. Stations per phase (station: first -> second): " + + "; ".join( + f"{name}: {[(s, a, b) for s, a, b in diffs[:8]]}" + for name, diffs in non_idempotent.items() + ) + ) diff --git a/tests/test_content_placement_pure.py b/tests/test_content_placement_pure.py new file mode 100644 index 000000000..c866df07e --- /dev/null +++ b/tests/test_content_placement_pure.py @@ -0,0 +1,163 @@ +"""Content-placement phases are pure functions of (anchors + structure) (#491). + +Idempotence (``test_content_placement_idempotent``) only proves each phase +reaches a fixed point: ``P(P(x)) == P(x)``. That is strictly weaker than the +property the anchor layer enjoys (#487): *purity*. A phase is pure when the Y +it assigns to every station it governs is a function of the **frozen anchors** +(port positions, and the trunk Y derived from them) plus **structure** (tracks, +edges, columns) ONLY -- never of the mutable, intermediate non-anchor state +that earlier phases happen to have left behind (current station Y, section +``bbox`` geometry). + +Probe: wrap a phase and run it twice from the same graph -- once on the real +input, once after *perturbing* the non-anchor state (deterministically scramble +every non-port station's Y and every section's bbox top/height, holding all +port anchors frozen). A pure phase governs the same stations and lands each at +the same Y both times. Any station the phase moves in either run whose final Y +differs between the two runs is a purity leak. + +All eight content-placement phases are pure, so this guard admits no +exceptions: it is the machine-checked counterpart to #487's anchor-frozen guard, +and a regression that reintroduces a non-anchor read fails it. + +Refs #491, #488, #487, #485, #465. +""" + +from __future__ import annotations + +import pytest +from conftest import ( + CONTENT_PLACEMENT_PHASES, + compute_corpus_layout, + content_corpus, + restore_graph_state, + snapshot_graph_state, +) + +import nf_metro.layout.engine as engine +from nf_metro.parser.model import MetroGraph + +TOL = 1e-3 + +CORPUS = content_corpus() + + +def _perturb(graph: MetroGraph) -> None: + """Deterministically scramble the non-anchor state. + + Every non-port station's Y and every section's bbox top/height is shifted by + a station/section-indexed amount; port stations (the frozen inter-section + anchors) are left untouched, so the perturbation only stresses the mutable + state a pure phase must not depend on. + """ + ports = set(graph.ports) + for i, (sid, st) in enumerate(sorted(graph.stations.items())): + if sid in ports: + continue + st.y += ((i % 7) - 3) * 13.0 + for j, sec in enumerate(sorted(graph.sections.values(), key=lambda s: s.id)): + sec.bbox_y += ((j % 5) - 2) * 11.0 + sec.bbox_h += ((j % 3) + 1) * 9.0 + + +def _make_purity_probe(original, leaks: list[tuple[str, float, float]]): + """Wrap ``original`` so each call records any non-anchor-state dependence + into ``leaks`` and then leaves the genuine single-application result.""" + + def probe(graph: MetroGraph, *args, **kwargs): + pre = snapshot_graph_state(graph) + before_y = {sid: s.y for sid, s in graph.stations.items()} + + original(graph, *args, **kwargs) + base_after = {sid: s.y for sid, s in graph.stations.items()} + governed = { + sid for sid in base_after if abs(base_after[sid] - before_y[sid]) > TOL + } + + restore_graph_state(graph, pre) + _perturb(graph) + pert_before = {sid: s.y for sid, s in graph.stations.items()} + original(graph, *args, **kwargs) + pert_after = {sid: s.y for sid, s in graph.stations.items()} + governed |= { + sid for sid in pert_after if abs(pert_after[sid] - pert_before[sid]) > TOL + } + + for sid in governed: + if abs(base_after[sid] - pert_after[sid]) > TOL: + leaks.append((sid, base_after[sid], pert_after[sid])) + + restore_graph_state(graph, pre) + original(graph, *args, **kwargs) + + return probe + + +def test_content_placement_phases_complete(): + """Completeness guard (#503): the set of phases actually run through the + ``_run_placement`` wrapper in ``_compute_section_layout`` must equal the + guarded ``CONTENT_PLACEMENT_PHASES`` set. + + ``_run_placement`` is the single chokepoint every content-placement phase + flows through, and it records each ``fn.__name__`` into + ``engine._PLACEMENT_PHASES_RUN``. Rendering the whole corpus (which + includes ``center_ports`` fixtures, exercising the gated 6.3 / 6.7 phases) + accumulates the ground-truth run set. Asserting it equals the guarded set + means: + + - A new content phase wired through ``_run_placement`` but left out of + ``CONTENT_PLACEMENT_PHASES`` shows up as *run but unguarded* and fails + here -- forcing the dev to register it, at which point the purity and + anchor-frozen guards make it declarative. + - A stale name in ``CONTENT_PLACEMENT_PHASES`` that no longer runs shows up + as *guarded but never run* and fails too. + """ + engine._PLACEMENT_PHASES_RUN.clear() + for _, path, is_nf in CORPUS: + compute_corpus_layout(path, is_nf) + run = set(engine._PLACEMENT_PHASES_RUN) + guarded = set(CONTENT_PLACEMENT_PHASES) + + run_not_guarded = run - guarded + guarded_not_run = guarded - run + assert not run_not_guarded, ( + "content-placement phase(s) run through _run_placement but missing from " + f"CONTENT_PLACEMENT_PHASES (so unguarded by purity / anchor-frozen): " + f"{sorted(run_not_guarded)}. Register them in tests/conftest.py." + ) + assert not guarded_not_run, ( + "CONTENT_PLACEMENT_PHASES lists phase(s) never run via _run_placement on " + f"the corpus (stale entry?): {sorted(guarded_not_run)}." + ) + + +@pytest.mark.parametrize("fid,path,is_nf", CORPUS, ids=[fid for fid, _, _ in CORPUS]) +def test_placement_phase_is_pure(fid, path, is_nf, monkeypatch): + """Every content-placement phase is pure on ``fid``. + + Each phase's purity probe is self-contained -- it snapshots, measures, and + restores the genuine single-application result around its own phase call -- + so all eight coexist in one layout pass without perturbing the pipeline or + each other. This checks the same (fixture, phase) coverage as eight + separate runs would, at one-eighth the layout cost. + """ + leaks_by_phase: dict[str, list[tuple[str, float, float]]] = {} + for phase_name in CONTENT_PLACEMENT_PHASES: + leaks_by_phase[phase_name] = [] + original = getattr(engine, phase_name) + monkeypatch.setattr( + engine, phase_name, _make_purity_probe(original, leaks_by_phase[phase_name]) + ) + + compute_corpus_layout(path, is_nf) + + impure = {name: leaks for name, leaks in leaks_by_phase.items() if leaks} + assert not impure, ( + f"content-placement phase(s) not pure on {fid}: perturbing non-anchor " + f"state (current Y + section bbox) changed where they placed content. " + f"Leaks per phase (station: baseline_y -> perturbed_y): " + + "; ".join( + f"{name}: {[(s, round(a, 1), round(b, 1)) for s, a, b in leaks[:8]]}" + for name, leaks in impure.items() + ) + ) diff --git a/tests/test_contract_lifecycle.py b/tests/test_contract_lifecycle.py new file mode 100644 index 000000000..d7cf830e3 --- /dev/null +++ b/tests/test_contract_lifecycle.py @@ -0,0 +1,86 @@ +"""Completeness checks for the Lifecycle annotations in CONTRACT.md. + +Every stage block in the CONTRACT stage table carries a ``**Lifecycle:**`` +line tagging the stage ``invariant`` (the property it establishes still +holds at the final layout boundary) or ``transient`` (a later stage +deliberately overrides it). These tests pin that contract so a newly +documented stage cannot be added without a Lifecycle tag, and so a +``transient`` tag always names the superseding stage. + +The tag answers the objective "holds at the final boundary?" question +(issue #462). It is intentionally distinct from the orthogonal "is this +safe to lift into a run-anytime ``maintain()`` registry?" question +explored in #365; that distinction is carried inline by an optional +``liftable:`` qualifier, which these tests do not require. +""" + +import re +from pathlib import Path + +import pytest + +CONTRACT = ( + Path(__file__).resolve().parent.parent + / "src" + / "nf_metro" + / "layout" + / "CONTRACT.md" +) + +_STAGE_HEADING = re.compile(r"^### Stage (\S+?):", re.MULTILINE) +# Match the Lifecycle bullet and any wrapped continuation lines (indented +# two or more spaces), so a superseding-stage reference that wraps onto a +# later line is still captured. +_LIFECYCLE = re.compile( + r"^- \*\*Lifecycle:\*\*\s+(invariant|transient)\b((?:.*\n(?: .*\n)*)|.*)", + re.MULTILINE, +) + + +def _stage_blocks(): + """Yield (stage_tag, block_text) for each ### Stage entry in the table.""" + text = CONTRACT.read_text() + matches = list(_STAGE_HEADING.finditer(text)) + for i, m in enumerate(matches): + start = m.start() + end = matches[i + 1].start() if i + 1 < len(matches) else len(text) + yield m.group(1), text[start:end] + + +STAGE_BLOCKS = list(_stage_blocks()) +STAGE_IDS = [tag for tag, _ in STAGE_BLOCKS] + + +def test_contract_has_stage_table(): + """Guard against the parser silently matching nothing.""" + assert len(STAGE_BLOCKS) >= 20, ( + f"expected the full stage table, found {len(STAGE_BLOCKS)} stages" + ) + # Spot-check the table spans Pass-A construction through final Pass-C. + assert "1.1" in STAGE_IDS + assert "6.16" in STAGE_IDS + + +@pytest.mark.parametrize("tag,block", STAGE_BLOCKS, ids=STAGE_IDS) +def test_every_stage_has_lifecycle_tag(tag, block): + """Each stage block declares exactly one valid Lifecycle tag.""" + found = _LIFECYCLE.findall(block) + assert len(found) == 1, ( + f"Stage {tag} must have exactly one " + f"'- **Lifecycle:** invariant|transient ...' line, found {len(found)}" + ) + + +@pytest.mark.parametrize("tag,block", STAGE_BLOCKS, ids=STAGE_IDS) +def test_transient_stages_name_superseding_stage(tag, block): + """A transient tag must point at the stage that overrides it.""" + found = _LIFECYCLE.findall(block) + if not found: + pytest.skip(f"Stage {tag} has no Lifecycle tag (caught elsewhere)") + kind, rest = found[0] + if kind != "transient": + pytest.skip(f"Stage {tag} is invariant") + assert re.search(r"Stage \d+\.\d+[a-z]?", rest), ( + f"Stage {tag} is transient but its Lifecycle line names no " + f"superseding stage (expected a 'Stage N.N' reference): {rest!r}" + ) diff --git a/tests/test_convergence_sink_port_side.py b/tests/test_convergence_sink_port_side.py new file mode 100644 index 000000000..d61289056 --- /dev/null +++ b/tests/test_convergence_sink_port_side.py @@ -0,0 +1,128 @@ +"""A fold-relocated section's flow-axis port faces its connecting sections (#1167). + +When a lowered ``fold_threshold`` relocates sections onto a return row, a +directive authored for the unfolded layout (e.g. ``%%metro exit: right`` written +when the consumer sat to the right) can end up facing *away* from the grid side +its connecting section occupies. The connecting leg then wraps back across the +section's own box, which the routing self-check rejects. + +The invariant: for a section the fold relocated, a left/right entry/exit port on +its flow axis sits on the same horizontal side as the sections it connects to, +whenever those all sit strictly to one side. ``genomeassembly`` under a lowered +fold is the real-pipeline case (#1167, residual of #1085); the parametrised +sweep exercises the property across several gallery fixtures so it generalises. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.api import prepare_graph +from nf_metro.layout import FoldThresholdError +from nf_metro.layout.engine import compute_layout +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import PortSide +from nf_metro.parser.resolve import _expected_flow_side +from nf_metro.render import render_svg +from nf_metro.themes import THEMES + +EXAMPLES = Path(__file__).resolve().parent.parent / "examples" + + +def _connecting_cols(graph, sec_id: str, *, as_exit: bool) -> set[int]: + """Grid columns of the sections this section's exit/entry connects to.""" + cols: set[int] = set() + for e in graph.edges: + src = graph.section_for_station(e.source) + tgt = graph.section_for_station(e.target) + if src == tgt: + continue + other = None + if as_exit and src == sec_id and tgt is not None: + other = tgt + elif not as_exit and tgt == sec_id and src is not None: + other = src + if other is not None: + cols.add(graph.sections[other].grid_col) + return cols + + +def _assert_flow_ports_face_connections(graph) -> None: + for sec_id in graph._fold_compressed_sections: + section = graph.sections[sec_id] + if section.direction not in ("LR", "RL"): + continue + col = section.grid_col + for ports, as_exit in ( + (section.exit_ports, True), + (section.entry_ports, False), + ): + other_cols = _connecting_cols(graph, sec_id, as_exit=as_exit) + expected = _expected_flow_side(other_cols, col) + if expected is None: + continue # no connections, or they straddle the section + for pid in ports: + side = graph.ports[pid].side + if side not in (PortSide.LEFT, PortSide.RIGHT): + continue # cross-axis port, not on the flow axis + assert side == expected, ( + f"{sec_id}: flow-axis {'exit' if as_exit else 'entry'} " + f"port {pid!r} faces {side.value} but its connecting sections " + f"all sit to the {expected.value} " + f"(cols {sorted(other_cols)} vs {col})" + ) + + +def _layout(name: str, fold: int, *, validate: bool = False): + graph = parse_metro_mermaid( + (EXAMPLES / f"{name}.mmd").read_text(), max_station_columns=fold + ) + compute_layout(graph, validate=validate) + return graph + + +@pytest.mark.parametrize("fold", [3, 5, 7, 9, 11]) +def test_genomeassembly_gates_lowered_fold_as_authoring_error(fold: int) -> None: + """Under a lowered fold the 5-section grid over-compresses (all 5 relocate), + collapsing the inter-section ``assemblies`` fan onto a single row where the + line folds back over its own track. The doubled-back legs draw collinear on + the trunk, so the render emits no curve self-check and would otherwise show a + silently-tangled map; the render gate surfaces it as a clean + :class:`FoldThresholdError` instead (#1187). + """ + graph = prepare_graph( + (EXAMPLES / "genomeassembly.mmd").read_text(), + layout_options={"fold_threshold": fold}, + ) + with pytest.raises(FoldThresholdError) as exc: + render_svg(graph, THEMES["nfcore"]) + assert "fold" in str(exc.value).lower() + + +def test_genomeassembly_sink_exit_and_entry_face_inward() -> None: + graph = _layout("genomeassembly", 5) + scaffolding = graph.sections["scaffolding"] + genome_statistics = graph.sections["genome_statistics"] + # genome_statistics is the leftmost sink; scaffolding sits to its right. + assert genome_statistics.grid_col < scaffolding.grid_col + # scaffolding's only consumer (genome_statistics) is to its left. + assert all(graph.ports[p].side == PortSide.LEFT for p in scaffolding.exit_ports) + # genome_statistics' feeders all sit to its right. + assert all( + graph.ports[p].side == PortSide.RIGHT for p in genome_statistics.entry_ports + ) + + +@pytest.mark.parametrize( + "name, fold", + [ + ("genomeassembly", 5), + ("rnaseq_auto", 4), + ("rnaseq_sections", 4), + ], +) +def test_fold_relocated_flow_ports_face_connections(name: str, fold: int) -> None: + graph = _layout(name, fold) + _assert_flow_ports_face_connections(graph) diff --git a/tests/test_convergence_sink_route_around_stack.py b/tests/test_convergence_sink_route_around_stack.py new file mode 100644 index 000000000..598e8f07b --- /dev/null +++ b/tests/test_convergence_sink_route_around_stack.py @@ -0,0 +1,92 @@ +"""A convergence-sink feeder folded below stacked branch sections must route +around the intervening boxes, never straight down through them (#1148). + +Under a tightened ``fold_threshold`` the branches of a shared-sink topology +stack into one grid column and the sink folds onto a lower row, fed through a +TOP entry port. Each upper branch's BOTTOM-exit feeder then has to reach that +port past the branch sections stacked between it and the sink; a straight +vertical drop at the exit column ploughs through those boxes. The feeder must +divert into a clear inter-column gap channel instead, entering boxes only at +declared ports. +""" + +from __future__ import annotations + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.normalize import _v_segment_crosses_other_section +from nf_metro.parser.mermaid import parse_metro_mermaid + +FIXTURE = "examples/topologies/shared_sink_parallel.mmd" + + +def _fold(text: str, n: int) -> str: + return text.replace("graph LR", f"%%metro fold_threshold: {n}\ngraph LR", 1) + + +def _routes(graph): + offsets = compute_station_offsets(graph) + return route_edges(graph, station_offsets=offsets) + + +@pytest.mark.parametrize("fold", [1, 2, 3]) +def test_folded_convergence_sink_validates(fold: int) -> None: + """The folded shared-sink map lays out without a route-through-section guard + firing -- the feeders route around the stacked branches.""" + text = _fold(open(FIXTURE).read(), fold) + # Raises PhaseInvariantError on a feeder that crosses an intervening box. + compute_layout(parse_metro_mermaid(text), validate=True) + + +@pytest.mark.parametrize("fold", [1, 2, 3]) +def test_folded_feeders_clear_intervening_boxes(fold: int) -> None: + """No feeder reaching the folded sink's TOP entry has a vertical segment + that penetrates a section it does not connect to.""" + text = _fold(open(FIXTURE).read(), fold) + graph = parse_metro_mermaid(text) + compute_layout(graph, validate=False) + routes = _routes(graph) + sink_feeders = [r for r in routes if r.edge.target.startswith("sink__entry")] + assert sink_feeders, "expected feeders into the folded sink" + for rp in sink_feeders: + exclude = { + sid + for sid in ( + graph.stations[rp.edge.source].section_id, + graph.stations[rp.edge.target].section_id, + ) + if sid + } + for (x1, y1), (x2, y2) in zip(rp.points, rp.points[1:]): + if abs(x1 - x2) > 1.0: + continue # not a vertical segment + assert not _v_segment_crosses_other_section(graph, x1, y1, y2, exclude), ( + f"{rp.edge.source}->{rp.edge.target} drops through a section box" + ) + + +def test_committed_fixture_validates() -> None: + """The committed single-line fold fixture (the gallery render) lays out + without a route-through-section guard firing.""" + text = open("examples/topologies/convergence_sink_fold.mmd").read() + compute_layout(parse_metro_mermaid(text), validate=True) + + +def test_adjacent_feeder_stays_straight() -> None: + """The fix is narrow: the bottommost branch, adjacent to the sink with no + intervening box, keeps its clean straight drop rather than diverting.""" + text = _fold(open(FIXTURE).read(), 3) + graph = parse_metro_mermaid(text) + compute_layout(graph, validate=False) + adjacent = [ + r + for r in _routes(graph) + if r.edge.source.startswith("branch_c__exit") + and r.edge.target.startswith("sink__entry") + ] + assert adjacent, "expected branch_c feeders" + for rp in adjacent: + xs = {round(x, 1) for x, _y in rp.points} + assert len(xs) == 1, f"branch_c feeder diverted: xs={sorted(xs)}" diff --git a/tests/test_convert.py b/tests/test_convert.py new file mode 100644 index 000000000..3a4a4778a --- /dev/null +++ b/tests/test_convert.py @@ -0,0 +1,446 @@ +"""Tests for Nextflow DAG converter.""" + +from __future__ import annotations + +import re +from pathlib import Path + +import pytest + +from nf_metro.convert import ( + _break_cycles, + _humanize_label, + _parse_nextflow_mermaid, + _reconnect_edges, + _sanitize_id, + convert_nextflow_dag, + is_nextflow_dag, +) + +FIXTURES = Path(__file__).parent / "fixtures" / "nextflow" + + +# --------------------------------------------------------------------------- +# Detection +# --------------------------------------------------------------------------- +class TestIsNextflowDag: + def test_flowchart_tb(self): + assert is_nextflow_dag("flowchart TB\n v0 --> v1") + + def test_flowchart_lr(self): + assert is_nextflow_dag("flowchart LR\n v0 --> v1") + + def test_graph_lr_is_not(self): + assert not is_nextflow_dag("graph LR\n a --> b") + + def test_metro_mmd_is_not(self): + assert not is_nextflow_dag("%%metro title: Test\ngraph LR\n") + + +# --------------------------------------------------------------------------- +# Label helpers +# --------------------------------------------------------------------------- +class TestHumanizeLabel: + def test_simple(self): + assert _humanize_label("FASTQC") == "Fastqc" + + def test_multi_word(self): + assert _humanize_label("STAR_ALIGN") == "Star Align" + + def test_abbreviation_long(self): + label = _humanize_label("STAR_GENOMEGENERATE") + assert len(label) <= 16 + assert label.startswith("Star") + + def test_abbreviation_very_long(self): + label = _humanize_label("GATK_HAPLOTYPECALLER") + assert len(label) <= 16 + assert label.startswith("Gatk") + + def test_no_abbreviation_when_short(self): + assert _humanize_label("BWA_MEM") == "Bwa Mem" + + def test_abbreviation_disabled(self): + assert _humanize_label("STAR_GENOMEGENERATE", abbreviate=False) == ( + "Star Genomegenerate" + ) + + +class TestSanitizeId: + def test_simple(self): + assert _sanitize_id("FASTQC") == "fastqc" + + def test_with_underscore(self): + assert _sanitize_id("STAR_ALIGN") == "star_align" + + def test_special_chars(self): + assert _sanitize_id("foo-bar baz") == "foo_bar_baz" + + +# --------------------------------------------------------------------------- +# Parser +# --------------------------------------------------------------------------- +class TestParseNextflowMermaid: + def test_flat_pipeline(self): + text = (FIXTURES / "flat_pipeline.mmd").read_text() + dag = _parse_nextflow_mermaid(text) + + # Should have nodes of all shapes + process_nodes = [n for n in dag.nodes.values() if n.shape == "stadium"] + channel_nodes = [n for n in dag.nodes.values() if n.shape == "square"] + operator_nodes = [n for n in dag.nodes.values() if n.shape == "circle"] + + assert len(process_nodes) >= 4 # FASTQC, TRIM_READS, ALIGN, etc. + assert len(channel_nodes) >= 2 # Channel.of nodes + assert len(operator_nodes) >= 1 # operator nodes + + # Should have edges + assert len(dag.edges) > 0 + + def test_with_subworkflows(self): + text = (FIXTURES / "with_subworkflows.mmd").read_text() + dag = _parse_nextflow_mermaid(text) + + # Should have named subgraphs + named = [sg for sg in dag.subgraphs.values() if sg.short_name.strip()] + assert len(named) >= 3 # PREPROCESS, ALIGNMENT, QUANTIFICATION + + # Process nodes should be assigned to subgraphs + process_nodes = [n for n in dag.nodes.values() if n.shape == "stadium"] + assigned = [n for n in process_nodes if n.subgraph is not None] + assert len(assigned) >= 6 + + def test_space_subgraphs_ignored(self): + text = (FIXTURES / "flat_pipeline.mmd").read_text() + dag = _parse_nextflow_mermaid(text) + + # Space-only subgraphs should not appear + for sg in dag.subgraphs.values(): + assert sg.short_name.strip() != "" + + def test_variant_calling_subgraphs(self): + text = (FIXTURES / "variant_calling.mmd").read_text() + dag = _parse_nextflow_mermaid(text) + + names = {sg.short_name for sg in dag.subgraphs.values()} + assert "PREPROCESS" in names + assert "ALIGNMENT" in names + assert "VARIANT_CALLING" in names + + +# --------------------------------------------------------------------------- +# Edge reconnection +# --------------------------------------------------------------------------- +class TestReconnectEdges: + def test_simple_passthrough(self): + # A -> drop -> B => A -> B + kept = {"a", "b"} + edges = [("a", "x"), ("x", "b")] + result = _reconnect_edges(kept, edges) + assert ("a", "b") in result + + def test_chain_of_dropped(self): + # A -> d1 -> d2 -> B => A -> B + kept = {"a", "b"} + edges = [("a", "d1"), ("d1", "d2"), ("d2", "b")] + result = _reconnect_edges(kept, edges) + assert ("a", "b") in result + + def test_fanout_through_operator(self): + # A -> op -> B, op -> C => A -> B, A -> C + kept = {"a", "b", "c"} + edges = [("a", "op"), ("op", "b"), ("op", "c")] + result = _reconnect_edges(kept, edges) + assert ("a", "b") in result + assert ("a", "c") in result + + def test_no_self_loops(self): + kept = {"a"} + edges = [("a", "x"), ("x", "a")] + result = _reconnect_edges(kept, edges) + assert ("a", "a") not in result + + def test_dropped_root_lost(self): + # ch -> A (ch is dropped root, no kept predecessor) + kept = {"a"} + edges = [("ch", "a")] + result = _reconnect_edges(kept, edges) + # No edges since ch is dropped and has no kept predecessor + assert len(result) == 0 + + def test_direct_kept_to_kept(self): + kept = {"a", "b"} + edges = [("a", "b")] + result = _reconnect_edges(kept, edges) + assert ("a", "b") in result + + +# --------------------------------------------------------------------------- +# Cycle breaking +# --------------------------------------------------------------------------- +class TestBreakCycles: + def test_no_cycle(self): + edges = [("a", "b"), ("b", "c")] + result = _break_cycles({"a", "b", "c"}, edges) + assert len(result) == 2 + + def test_simple_cycle(self): + edges = [("a", "b"), ("b", "a")] + result = _break_cycles({"a", "b"}, edges) + assert len(result) == 1 # one back edge removed + + def test_triangle_cycle(self): + edges = [("a", "b"), ("b", "c"), ("c", "a")] + result = _break_cycles({"a", "b", "c"}, edges) + assert len(result) == 2 # one back edge removed + + +# --------------------------------------------------------------------------- +# Full conversion +# --------------------------------------------------------------------------- +class TestConvertNextflowDag: + def test_flat_pipeline_output(self): + text = (FIXTURES / "flat_pipeline.mmd").read_text() + result = convert_nextflow_dag(text) + + assert "%%metro title:" in result + assert "%%metro line: main |" in result + assert "graph LR" in result + assert "subgraph pipeline" in result + + # Should contain process stations + assert "fastqc" in result + assert "trim_reads" in result + assert "multiqc" in result + + # No bypass lines (single section) + assert "bypass" not in result.lower() + assert "spur" not in result.lower() + + def test_subworkflows_sections(self): + text = (FIXTURES / "with_subworkflows.mmd").read_text() + result = convert_nextflow_dag(text) + + assert "subgraph preprocess" in result + assert "subgraph alignment" in result + assert "subgraph quantification" in result + assert "subgraph reporting" in result + + def test_subworkflows_spur_line(self): + text = (FIXTURES / "with_subworkflows.mmd").read_text() + result = convert_nextflow_dag(text) + + # SAMTOOLS_INDEX is a dead end, should be on spur line + assert "%%metro line: spur |" in result + assert "samtools_sort -->|spur| samtools_index" in result + + def test_subworkflows_bypass_lines(self): + text = (FIXTURES / "with_subworkflows.mmd").read_text() + result = convert_nextflow_dag(text) + + # Should have bypass lines for edges spanning 2+ sections + assert "preprocess_reporting" in result + assert "alignment_reporting" in result + + def test_variant_calling_sections(self): + text = (FIXTURES / "variant_calling.mmd").read_text() + result = convert_nextflow_dag(text) + + assert "subgraph preprocess" in result + assert "subgraph alignment" in result + assert "subgraph variant_calling" in result + assert "subgraph reporting" in result + + def test_variant_calling_diamond(self): + text = (FIXTURES / "variant_calling.mmd").read_text() + result = convert_nextflow_dag(text) + + # Both callers should connect to bcftools_stats + assert "gatk_haplotypecaller -->|main| bcftools_stats" in result + assert "deepvariant -->|main| bcftools_stats" in result + + def test_abbreviation_applied(self): + text = (FIXTURES / "with_subworkflows.mmd").read_text() + result = convert_nextflow_dag(text) + + # Star Genomegenerate (19 chars) should be abbreviated + assert "Star Genomegenerate" not in result + assert "Star Genomegener" in result + + def test_custom_title(self): + text = (FIXTURES / "flat_pipeline.mmd").read_text() + result = convert_nextflow_dag(text, title="My Pipeline") + assert "%%metro title: My Pipeline" in result + + def test_inter_section_edges_outside_subgraphs(self): + text = (FIXTURES / "with_subworkflows.mmd").read_text() + result = convert_nextflow_dag(text) + + # Inter-section edges should be outside subgraph blocks + lines = result.split("\n") + in_subgraph = False + inter_comment_found = False + for line in lines: + stripped = line.strip() + if stripped.startswith("subgraph "): + in_subgraph = True + elif stripped == "end": + in_subgraph = False + elif "%% Inter-section edges" in stripped: + inter_comment_found = True + assert not in_subgraph + + assert inter_comment_found + + def test_empty_dag(self): + result = convert_nextflow_dag("flowchart TB\n") + assert "Empty Pipeline" in result + + +# --------------------------------------------------------------------------- +# Regression: unquoted labels (issue #249, Nextflow 23.x+) +# --------------------------------------------------------------------------- +class TestUnquotedLabels: + """Stadium nodes parse whether or not labels are wrapped in quotes.""" + + def test_unquoted_stadium_parses(self): + text = ( + "flowchart TB\n" + ' v1["input"]\n' + " v2([PROCESS_A])\n" + " v3([PROCESS_B])\n" + ' v4[" "]\n' + " v1 --> v2\n" + " v2 --> v3\n" + " v3 --> v4\n" + ) + dag = _parse_nextflow_mermaid(text) + process_nodes = [n for n in dag.nodes.values() if n.shape == "stadium"] + assert len(process_nodes) == 2 + assert {n.label for n in process_nodes} == {"PROCESS_A", "PROCESS_B"} + + def test_unquoted_convert_non_empty(self): + text = (FIXTURES / "unquoted_labels.mmd").read_text() + result = convert_nextflow_dag(text) + assert "Empty Pipeline" not in result + assert "fastqc" in result + assert "trim_reads" in result + assert "multiqc" in result + + def test_mixed_quoted_and_unquoted(self): + text = ( + "flowchart TB\n" + ' v1(["QUOTED_PROC"])\n' + " v2([UNQUOTED_PROC])\n" + " v1 --> v2\n" + ) + dag = _parse_nextflow_mermaid(text) + labels = {n.label for n in dag.nodes.values() if n.shape == "stadium"} + assert labels == {"QUOTED_PROC", "UNQUOTED_PROC"} + + +# --------------------------------------------------------------------------- +# Regression: duplicate process labels across subworkflows (issue #249) +# --------------------------------------------------------------------------- +class TestDuplicateProcessLabels: + """Distinct nodes that share a label get distinct station IDs.""" + + def test_no_duplicate_station_declarations(self): + text = (FIXTURES / "duplicate_processes.mmd").read_text() + result = convert_nextflow_dag(text) + decls = re.findall(r"^\s+([a-z0-9_]+)\(\[", result, re.MULTILINE) + assert len(decls) == len(set(decls)), f"Duplicate station declarations: {decls}" + + def test_no_self_loops(self): + text = (FIXTURES / "duplicate_processes.mmd").read_text() + result = convert_nextflow_dag(text) + for m in re.finditer(r"([a-z0-9_]+)\s*-->\|[^|]+\|\s*([a-z0-9_]+)", result): + assert m.group(1) != m.group(2), f"Self-loop edge: {m.group(0)}" + + def test_duplicates_lay_out(self): + from nf_metro.layout import compute_layout + from nf_metro.parser import parse_metro_mermaid + + text = (FIXTURES / "duplicate_processes.mmd").read_text() + mmd = convert_nextflow_dag(text) + graph = parse_metro_mermaid(mmd) + compute_layout(graph, x_spacing=60.0, y_spacing=40.0) + + def test_unnamed_subgraph_duplicates_disambiguated(self): + text = ( + "flowchart TB\n" + ' subgraph " "\n' + " v1([PROC])\n" + " end\n" + ' subgraph " "\n' + " v2([PROC])\n" + " end\n" + " v1 --> v2\n" + ) + result = convert_nextflow_dag(text) + decls = re.findall(r"^\s+([a-z0-9_]+)\(\[", result, re.MULTILINE) + assert len(decls) == 2 and len(set(decls)) == 2, ( + f"Expected two distinct stations, got {decls}" + ) + + +# --------------------------------------------------------------------------- +# Roundtrip: convert then parse through nf-metro +# --------------------------------------------------------------------------- +class TestRoundtrip: + @pytest.fixture( + params=[ + "flat_pipeline", + "with_subworkflows", + "variant_calling", + "unquoted_labels", + "duplicate_processes", + ] + ) + def fixture_name(self, request): + return request.param + + def test_roundtrip_parse(self, fixture_name): + """Converted output should parse without errors through nf-metro.""" + from nf_metro.parser import parse_metro_mermaid + + text = (FIXTURES / f"{fixture_name}.mmd").read_text() + mmd = convert_nextflow_dag(text) + graph = parse_metro_mermaid(mmd) + + assert len(graph.stations) > 0 + assert len(graph.edges) > 0 + assert len(graph.sections) > 0 + + def test_roundtrip_layout(self, fixture_name): + """Converted output should lay out without errors.""" + from nf_metro.layout import compute_layout + from nf_metro.parser import parse_metro_mermaid + + text = (FIXTURES / f"{fixture_name}.mmd").read_text() + mmd = convert_nextflow_dag(text) + graph = parse_metro_mermaid(mmd) + compute_layout(graph, x_spacing=60.0, y_spacing=40.0) + + # All stations should have coordinates + for station in graph.stations.values(): + if not station.is_port: + assert station.x != 0 or station.y != 0, ( + f"Station {station.id} has no coordinates" + ) + + def test_roundtrip_render(self, fixture_name): + """Converted output should render to SVG without errors.""" + from nf_metro.layout import compute_layout + from nf_metro.parser import parse_metro_mermaid + from nf_metro.render import render_svg + from nf_metro.themes import THEMES + + text = (FIXTURES / f"{fixture_name}.mmd").read_text() + mmd = convert_nextflow_dag(text) + graph = parse_metro_mermaid(mmd) + compute_layout(graph, x_spacing=60.0, y_spacing=40.0) + svg = render_svg(graph, THEMES["nfcore"]) + + assert "', svg) + assert pieces, "wrapped BAM/CRAM label pieces not found in SVG" + assert all("BAM/CRAM" not in text for _, text in pieces), ( + "label must wrap rather than render as a single over-wide line" + ) + + max_width = NFCORE_THEME.terminus_width - 2 * ICON_LABEL_CLEARANCE + tolerance = 1.0 + for font_size, text in pieces: + line_width = len(text) * float(font_size) * ICON_LABEL_CHAR_WIDTH_RATIO + assert line_width <= max_width + tolerance, ( + f"wrapped line {text!r} width {line_width:.1f} exceeds " + f"icon usable width {max_width:.1f}" + ) + + +def test_icon_label_wrap_keeps_separators(): + """Wrapping keeps a ``/`` joined to its left token and restores the space + between whitespace-separated words; labels that fit or have no break point + stay on one line.""" + from nf_metro.render.icons import _wrap_icon_label + + assert _wrap_icon_label("BAM/CRAM", 12.0, 40.0) == ["BAM/", "CRAM"] + assert _wrap_icon_label("FASTQ to BAM", 12.0, 70.0) == ["FASTQ to", "BAM"] + assert _wrap_icon_label("BAM/CRAM", 12.0, 999.0) == ["BAM/CRAM"] + assert _wrap_icon_label("Results", 12.0, 40.0) == ["Results"] + + +def test_render_multi_icon_fixture(): + """The 05b_multi_icons.mmd example renders without errors.""" + from pathlib import Path + + examples = Path(__file__).parent.parent / "examples" / "guide" + text = (examples / "05b_multi_icons.mmd").read_text() + graph = parse_metro_mermaid(text) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + # All icon labels should be present + assert "FASTQ" in svg + assert "BAM" in svg + assert "HTML" in svg + assert "TSV" in svg + assert "H5AD" in svg + root = ET.fromstring(svg) + assert root.tag.endswith("svg") or "svg" in root.tag + + +def test_render_files_icon(): + """%%metro files: directive renders stacked file icons.""" + graph = parse_metro_mermaid( + "%%metro line: main | Main | #ff0000\n" + "%%metro files: reads_in | FASTQ\n" + "graph LR\n" + " subgraph sec [Section]\n" + " reads_in[ ]\n" + " trim[Trim]\n" + " reads_in -->|main| trim\n" + " end\n" + ) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + assert "FASTQ" in svg + root = ET.fromstring(svg) + assert root.tag.endswith("svg") or "svg" in root.tag + + +def test_render_folder_icon(): + """%%metro dir: directive renders folder icon.""" + graph = parse_metro_mermaid( + "%%metro line: main | Main | #ff0000\n" + "%%metro dir: output | Results\n" + "graph LR\n" + " subgraph sec [Section]\n" + " trim[Trim]\n" + " output[ ]\n" + " trim -->|main| output\n" + " end\n" + ) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + assert "Results" in svg + root = ET.fromstring(svg) + assert root.tag.endswith("svg") or "svg" in root.tag + + +def test_render_mixed_icon_types(): + """Mixed file/files/dir icons all render.""" + graph = parse_metro_mermaid( + "%%metro line: main | Main | #ff0000\n" + "%%metro file: src | FASTA\n" + "%%metro files: paired | FASTQ\n" + "%%metro dir: out | Results\n" + "graph LR\n" + " subgraph sec [Section]\n" + " src[ ]\n" + " paired[ ]\n" + " step[Step]\n" + " out[ ]\n" + " src -->|main| step\n" + " paired -->|main| step\n" + " step -->|main| out\n" + " end\n" + ) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + assert "FASTA" in svg + assert "FASTQ" in svg + assert "Results" in svg + root = ET.fromstring(svg) + assert root.tag.endswith("svg") or "svg" in root.tag + + +def test_file_icon_banner_option(): + """The `| banner` option flips the per-icon banner flag and styling.""" + graph = parse_metro_mermaid( + "%%metro line: main | Main | #ff0000\n" + "%%metro file: aln_out | BAM | Alignments | banner\n" + "graph LR\n" + " subgraph sec [Section]\n" + " run[Run]\n" + " aln_out[ ]\n" + " run -->|main| aln_out\n" + " end\n" + ) + station = graph.stations["aln_out"] + assert station.terminus_icon_banners == [True] + # The caption (third field) is still parsed alongside the banner option. + assert station.terminus_names == ["Alignments"] + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + from nf_metro.render.constants import ICON_BANNER_FILL + + assert ICON_BANNER_FILL in svg + + +def test_file_icon_no_banner_by_default(): + """A plain %%metro file: directive does not enable the banner.""" + graph = parse_metro_mermaid( + "%%metro line: main | Main | #ff0000\n" + "%%metro file: reads_in | FASTQ\n" + "graph LR\n" + " subgraph sec [Section]\n" + " reads_in[ ]\n" + " trim[Trim]\n" + " reads_in -->|main| trim\n" + " end\n" + ) + station = graph.stations["reads_in"] + assert station.terminus_icon_banners == [False] + + +def test_render_icon_type_guide_fixtures(): + """Guide examples for files and dir icons render without errors.""" + from pathlib import Path + + examples = Path(__file__).parent.parent / "examples" / "guide" + for fname in ( + "05c_files_icon.mmd", + "05d_folder_icon.mmd", + "05f_banner_labels.mmd", + ): + fpath = examples / fname + assert fpath.exists(), f"Missing fixture: {fpath}" + text = fpath.read_text() + graph = parse_metro_mermaid(text) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + root = ET.fromstring(svg) + assert root.tag.endswith("svg") or "svg" in root.tag + + +# --- Terminus icon orientation --- + + +def _station(x=100.0, y=50.0): + return Station(id="t", label="", x=x, y=y) + + +def test_terminus_icons_lr_march_along_x(): + """LR termini lay icons out horizontally, centred on the bundle Y.""" + st = _station() + # Sink (no outgoing) extends to the right (forward flow). + centers = _terminus_icon_centers( + st, "LR", is_source=False, n=2, first_offset=10.0, step=4.0, bundle_center=3.0 + ) + assert centers == [(110.0, 53.0), (114.0, 53.0)] + # Source (no incoming) extends to the left (reverse flow). + src = _terminus_icon_centers( + st, "LR", is_source=True, n=1, first_offset=10.0, step=4.0, bundle_center=0.0 + ) + assert src == [(90.0, 50.0)] + + +def test_terminus_icons_rl_mirror_lr(): + """RL flows right-to-left, so the forward/reverse sides are mirrored.""" + st = _station() + sink = _terminus_icon_centers( + st, "RL", is_source=False, n=1, first_offset=10.0, step=4.0, bundle_center=0.0 + ) + assert sink == [(90.0, 50.0)] + + +def test_terminus_icons_tb_march_along_y(): + """TB termini stack icons vertically, centred on the bundle X. + + In a TB section the line arrives from above/below, so icons must be + displaced along Y (the flow axis), not along X as for LR. + """ + st = _station() + # Sink at the bottom of a TB flow: icons extend downward. + sink = _terminus_icon_centers( + st, "TB", is_source=False, n=2, first_offset=10.0, step=4.0, bundle_center=3.0 + ) + assert sink == [(103.0, 60.0), (103.0, 64.0)] + # Every icon stays on the station's X (cross axis); only Y advances. + assert all(cx == 103.0 for cx, _ in sink) + assert all(cy != st.y for _, cy in sink) + # Source at the top of a TB flow: icons extend upward. + src = _terminus_icon_centers( + st, "TB", is_source=True, n=1, first_offset=10.0, step=4.0, bundle_center=0.0 + ) + assert src == [(100.0, 40.0)] + + +def test_terminus_icons_bt_mirror_tb(): + """BT flows bottom-to-top, mirroring TB's forward/reverse sides.""" + st = _station() + sink = _terminus_icon_centers( + st, "BT", is_source=False, n=1, first_offset=10.0, step=4.0, bundle_center=0.0 + ) + assert sink == [(100.0, 40.0)] + + +def test_render_tb_section_file_icon_below_station(): + """A file terminus in a TB section renders its icon below the station.""" + graph = parse_metro_mermaid( + "%%metro line: main | Main | #ff0000\n" + "%%metro file: report_out | HTML | Report\n" + "graph LR\n" + " subgraph sec [Section]\n" + " %%metro direction: TB\n" + " run[Run]\n" + " report_out[ ]\n" + " run -->|main| report_out\n" + " end\n" + ) + compute_layout(graph) + station = graph.stations["report_out"] + section = graph.sections["sec"] + assert section.direction == "TB" + centers = _terminus_icon_centers( + station, + "TB", + is_source=False, + n=1, + first_offset=10.0, + step=4.0, + bundle_center=0.0, + ) + (icon_cx, icon_cy) = centers[0] + # Icon sits on the station's X column and below it (downward TB flow). + assert abs(icon_cx - station.x) < 1e-6 + assert icon_cy > station.y + # And the render still succeeds and carries the icon label. + svg = render_svg(graph, NFCORE_THEME) + assert "HTML" in svg + root = ET.fromstring(svg) + assert root.tag.endswith("svg") or "svg" in root.tag + + +def test_render_tb_terminus_pill_is_horizontal(): + """A blank terminus nub in a TB section is a horizontal (wide) pill.""" + import re + + graph = parse_metro_mermaid( + "%%metro line: a | A | #ff0000\n" + "%%metro line: b | B | #00ff00\n" + "%%metro file: out | HTML\n" + "graph LR\n" + " subgraph sec [Section]\n" + " %%metro direction: TB\n" + " run[Run]\n" + " out[ ]\n" + " run -->|a,b| out\n" + " end\n" + ) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + # The terminus nub carries data-station-id="out"; in a TB section + # it must be wider than tall (lines arrive vertically into it). + m = re.search(r']*data-station-id="out"[^>]*/?>', svg) + assert m, "terminus nub rect not found" + rect = m.group(0) + width = float(re.search(r'width="([0-9.]+)"', rect).group(1)) + height = float(re.search(r'height="([0-9.]+)"', rect).group(1)) + assert width > height, f"TB terminus pill not horizontal: {width=} {height=}" + + +def test_render_group_label_caption_and_underline(): + """A %%metro group: directive emits a caption and underline; layout + coordinates are untouched relative to the same graph without groups.""" + base_src = ( + "%%metro line: main | Main | #2db572\n" + "graph LR\n" + " subgraph s [Callers]\n" + " a[Alpha]\n" + " b[Beta]\n" + " a -->|main| b\n" + " end\n" + ) + grouped_src = "%%metro group: Family | a, b\n" + base_src + + base_graph = parse_metro_mermaid(base_src) + compute_layout(base_graph) + base_svg = render_svg(base_graph, NFCORE_THEME) + + grouped_graph = parse_metro_mermaid(grouped_src) + compute_layout(grouped_graph) + # Station coordinates must be identical: groups are purely annotative. + assert {sid: (st.x, st.y) for sid, st in grouped_graph.stations.items()} == { + sid: (st.x, st.y) for sid, st in base_graph.stations.items() + } + + grouped_svg = render_svg(grouped_graph, NFCORE_THEME) + assert "Family" in grouped_svg + assert "nf-metro-group-label" in grouped_svg + assert "nf-metro-group-underline" in grouped_svg + # The base render has no group-label elements (the class may appear in the + # ", seg + "") + + +def test_validate_render_flags_injected_strike() -> None: + """A foreign line drawn through a label's centre is reported as a strike.""" + svg = _render("rnaseq_sections.mmd") + station_id, x, y, foreign = _a_foreign_label(svg) + struck = _inject_segment(svg, foreign, (x - 40, y), (x + 40, y)) + + findings = validate_render(struck) + strikes = [f for f in findings if f.kind == LABEL_STRIKE] + assert len(strikes) == 1 + assert strikes[0].line_id == foreign + assert strikes[0].station_id == station_id + + +def test_carried_line_overlap_is_exempt() -> None: + """A line the labelled station carries is not a strike (it owns that name).""" + svg = _render("rnaseq_sections.mmd") + manifest = read_manifest(svg) + nodes = {n["id"]: n for n in manifest["nodes"]} + placement = next( + pl for pl, _ in parse_station_labels(svg) if nodes[pl.station_id].get("groups") + ) + carried = nodes[placement.station_id]["groups"][0] + over = _inject_segment( + svg, + carried, + (placement.x - 40, placement.y), + (placement.x + 40, placement.y), + ) + assert not validate_render(over) + + +def test_no_manifest_yields_no_findings() -> None: + """An SVG without an embedded manifest has nothing addressable to validate.""" + plain = '' + assert validate_render(plain) == [] + + +def test_parser_collapses_smoothing_curve_to_its_corner() -> None: + """A ``Q`` smoothing arc is read back as its sharp corner (control point).""" + svg = ( + '' + ) + (line_id, subpaths) = parse_route_polylines(svg)[0] + assert line_id == "x" + assert subpaths == [[(0.0, 0.0), (50.0, 0.0), (50.0, 50.0)]] + + +def test_parser_breaks_at_bridge_hop_gap() -> None: + """A second ``M`` (a bridge hop) starts a new subpath, never a span across.""" + svg = '' + (_, subpaths) = parse_route_polylines(svg)[0] + assert subpaths == [[(0.0, 0.0), (40.0, 0.0)], [(60.0, 0.0), (100.0, 0.0)]] + + +def test_directional_chevrons_are_not_parsed_as_routes() -> None: + """``metro-direction-*`` chevrons carry ``data-line-id`` but are not routes.""" + svg = ( + '' + '' + ) + parsed = parse_route_polylines(svg) + assert [line_id for line_id, _ in parsed] == ["x"] + + +@pytest.mark.parametrize( + "name", ["differentialabundance_default.mmd", "genomic_pipeline.mmd"] +) +def test_real_render_routes_split_on_bridge_gaps(name: str) -> None: + """A real render with bridged edges yields multi-subpath routes, none empty.""" + if name not in CORPUS: + pytest.skip(f"{name} not in renderable corpus") + routes = parse_route_polylines(_render(name)) + assert routes + assert all(sub for _, subs in routes for sub in subs) + assert any(len(subs) > 1 for _, subs in routes) + + +def test_corpus_is_nonempty() -> None: + """The corpus parametrization actually collected fixtures (guards a silent + empty-glob that would make the regression lock vacuous).""" + assert len(CORPUS) > 30 + + +@pytest.mark.parametrize("name", ["line_spread.mmd", "sarek_metro.mmd"]) +def test_rail_interchange_crossing_is_exempt_yet_detectable(name: str) -> None: + """A line through a rail interchange knob is exempt, not a marker cross. + + Bypassing the rail exemption surfaces the same crossing, so the clean + result is the exemption working, not the check missing the geometry. + """ + if name not in CORPUS: + pytest.skip(f"{name} not in renderable corpus") + svg = _render(name) + manifest = read_manifest(svg) + routes = parse_route_polylines(svg) + + assert not check_marker_crossings(svg, manifest, routes) + + rails = parse_rail_station_ids(svg) + assert rails, f"{name} has no rail markers to exempt" + svg_no_rail = svg + for sid in rails: + svg_no_rail = svg_no_rail.replace( + f'data-station-id="{sid}"', "data-station-id=" + ) + unexempted = check_marker_crossings(svg_no_rail, manifest, routes) + struck = {f.station_id for f in unexempted} + assert struck & rails, f"{name}: rail exemption masked nothing real" + + +def test_injected_marker_cross_through_non_consumer_is_caught() -> None: + """A foreign line drawn over a non-rail station marker is a marker cross.""" + svg = _render("rnaseq_sections.mmd") + manifest = read_manifest(svg) + rails = parse_rail_station_ids(svg) + all_lines = [grp["id"] for grp in manifest["groups"]] + node, foreign = next( + (n, lid) + for n in manifest["nodes"] + if n["id"] not in rails and n.get("groups") + for lid in all_lines + if lid not in n["groups"] + ) + r = node.get("r", 5.0) + struck = _inject_segment( + svg, foreign, (node["x"] - r, node["y"]), (node["x"] + r, node["y"]) + ) + crossings = [ + f + for f in validate_render(struck) + if f.kind == MARKER_CROSS and f.station_id == node["id"] + ] + assert len(crossings) == 1 + assert crossings[0].line_id == foreign + + +def _parallel_drawn_pair(svg: str) -> tuple[str, str, float, float, float, float]: + """A distinct horizontal line pair one offset step apart on a shared x-run. + + Returns ``(line_a, line_b, y_a, y_b, x_lo, x_hi)``; raises if none exists. + """ + segs = drawn_segments(parse_route_polylines(svg)) + for i, (la, a1, a2) in enumerate(segs): + if abs(a1[1] - a2[1]) > 0.1 or abs(a2[0] - a1[0]) < 24: + continue + for lb, b1, b2 in segs[i + 1 :]: + if lb == la or abs(b1[1] - b2[1]) > 0.1: + continue + if not 3.4 <= abs(b1[1] - a1[1]) <= 4.6: + continue + x_lo = max(min(a1[0], a2[0]), min(b1[0], b2[0])) + x_hi = min(max(a1[0], a2[0]), max(b1[0], b2[0])) + if x_hi - x_lo >= 24: + return la, lb, a1[1], b1[1], x_lo, x_hi + raise AssertionError("no offset-step-separated horizontal pair found") + + +def test_offset_collapse_caught_when_spread_pair_drawn_flush() -> None: + """An offset-spread pair drawn onto one Y collapses into a single stroke.""" + svg = _render("genomic_pipeline.mmd") + graph = _LAID_OUT["genomic_pipeline.mmd"] + clean = validate_render(svg, graph=graph) + assert not [f for f in clean if f.kind == OFFSET_COLLAPSE] + + line_a, line_b, _y_a, y_b, x_lo, x_hi = _parallel_drawn_pair(svg) + merged = _inject_segment(svg, line_a, (x_lo + 2, y_b), (x_hi - 2, y_b)) + collapses = [ + f for f in validate_render(merged, graph=graph) if f.kind == OFFSET_COLLAPSE + ] + assert collapses + assert collapses[0].line_id in {line_a, line_b} + assert f"'{line_a}'" in collapses[0].message + assert f"'{line_b}'" in collapses[0].message + + +def test_same_slot_bundle_is_not_offset_collapse() -> None: + """Distinct lines the regime put on one slot draw flush without a finding.""" + name = "topologies/funcprofiler_upstream.mmd" + if name not in CORPUS: + pytest.skip(f"{name} not in renderable corpus") + from nf_metro.render.validate import _flush_run + + svg = _render(name) + segs = drawn_segments(parse_route_polylines(svg)) + flush = any( + la != lb and _flush_run((a1, a2), (b1, b2)) is not None + for i, (la, a1, a2) in enumerate(segs) + for lb, b1, b2 in segs[i + 1 :] + ) + assert flush, "fixture no longer exercises a same-slot flush bundle" + + findings = validate_render(svg, graph=_LAID_OUT[name]) + assert not [f for f in findings if f.kind == OFFSET_COLLAPSE] diff --git a/tests/test_right_entry_corridor_descent_invariant.py b/tests/test_right_entry_corridor_descent_invariant.py new file mode 100644 index 000000000..63b75fdbf --- /dev/null +++ b/tests/test_right_entry_corridor_descent_invariant.py @@ -0,0 +1,84 @@ +"""Routing invariant: a RIGHT entry fed from the left reaches its descent +corridor at the top corner, not partway down the descent. + +When a source sits LEFT of a RIGHT entry port one or more rows below and the +descent corridor just past the target's right edge admits a clean straight drop +from the source row, the line must step onto that corridor X at the top corner +and descend straight. Stepping onto the corridor X mid-descent leaves a visible +lateral kink the straight drop-in would have avoided. + +The invariant is gated on the corridor being clear: a wrap whose straight drop +is obstructed genuinely needs its inter-row staging channel and is skipped. + +Regression lock for #1178 (the `qc` align feed into the Report section on +`fold_bypass_creep.mmd` jogging 14px sideways a third of the way down a shared +x=230 descent corridor). +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.invariants import ( + check_right_entry_corridor_descent_no_jog, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" + +# Fixtures exercising cross-row RIGHT-entry wraps. +_FIXTURES = [ + "fold_bypass_creep", + "convergence_stacked_sink", + "right_entry_wrap_no_fan", +] + + +def _corridor_jog(mmd: str): + """First RIGHT-entry corridor-descent jog over a clear drop, or ``None``.""" + graph = parse_metro_mermaid(mmd) + compute_layout(graph) + routes = route_edges(graph, station_offsets=compute_station_offsets(graph)) + violations = check_right_entry_corridor_descent_no_jog(graph, routes) + return violations[0] if violations else None + + +@pytest.mark.parametrize("stem", _FIXTURES) +def test_right_entry_corridor_descent_has_no_mid_run_jog(stem): + path = TOPOLOGIES_DIR / f"{stem}.mmd" + if not path.exists(): + pytest.skip(f"fixture {stem}.mmd not present") + jog = _corridor_jog(path.read_text()) + assert jog is None, jog.message() if jog else "" + + +def test_fold_bypass_creep_qc_feed_descends_straight(): + """The qc align feed into Report descends its corridor as one straight run. + + It steps to the corridor X at the source lead-in Y and holds that X all the + way to the entry turn, so the shared descent reads as a single vertical line. + """ + graph = parse_metro_mermaid((TOPOLOGIES_DIR / "fold_bypass_creep.mmd").read_text()) + compute_layout(graph) + routes = route_edges(graph, station_offsets=compute_station_offsets(graph)) + + feed = next( + r + for r in routes + if r.line_id == "qc" + and "junction" in r.edge.source + and r.edge.target == "report__entry_right_3" + ) + pts = feed.points + descent_x = pts[-2][0] + lead_in_y = pts[0][1] + # The route reaches the corridor X at the top corner (the second point) and + # every interior point up to the entry turn sits on it: one straight run. + assert pts[1][0] == pytest.approx(descent_x, abs=1.0) + assert pts[1][1] == pytest.approx(lead_in_y, abs=1.0) + interior_xs = [x for x, _ in pts[1:-1]] + assert all(x == pytest.approx(descent_x, abs=1.0) for x in interior_xs), pts diff --git a/tests/test_right_entry_over_top.py b/tests/test_right_entry_over_top.py new file mode 100644 index 000000000..6a7a153fa --- /dev/null +++ b/tests/test_right_entry_over_top.py @@ -0,0 +1,161 @@ +"""TB RIGHT-entry over-the-top loop: builder, render guard, and #707 lock. + +Three layers: + +* the constructive :func:`build_concentric_bundle` primitive fans a bundle + without flips and with concentric corners; +* the always-on render-path guard :func:`assert_render_curve_invariants` + rejects a flipped bundle regardless of ``validate``; +* the ``tb_right_entry_stack`` fixture lays out, routes, and renders with no + curve defect. + +See issue #707. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.bundle import build_concentric_bundle +from nf_metro.layout.routing.common import RoutedPath +from nf_metro.layout.routing.invariants import ( + CurveInvariantError, + assert_render_curve_invariants, + check_bundle_order_preserved, + check_concentric_bundle_corners, +) +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge + +FIXTURE = ( + Path(__file__).parent.parent + / "examples" + / "topologies" + / "tb_right_entry_stack.mmd" +) + + +def _laid_out(): + graph = parse_metro_mermaid(FIXTURE.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, offsets, routes + + +def _over_top_centerline(): + # A same-Y source looping over the top into a right-edge port: the shape + # whose U-turn transposes the bundle end-to-end. + return [ + (190, 121.5), + (206, 121.5), + (206, 44), + (378, 44), + (378, 121.5), + (362, 121.5), + ] + + +# --- the constructive primitive ------------------------------------------- + + +def test_build_concentric_bundle_never_flips_over_a_u_turn(): + ea = Edge(source="s", target="p", line_id="alpha") + eb = Edge(source="s", target="p", line_id="beta") + routes = build_concentric_bundle( + [(ea, "alpha", -1.5), (eb, "beta", 1.5)], + _over_top_centerline(), + base_radius=10.0, + ) + assert check_bundle_order_preserved(routes) == [] + + +def test_build_concentric_bundle_corners_are_concentric(): + ea = Edge(source="s", target="p", line_id="alpha") + eb = Edge(source="s", target="p", line_id="beta") + routes = build_concentric_bundle( + [(ea, "alpha", -1.5), (eb, "beta", 1.5)], + _over_top_centerline(), + base_radius=10.0, + ) + # Concentric arcs at a wholesale corner differ by the lines' perpendicular + # separation (|-1.5 - 1.5| == 3) at every shared bend. + ra, rb = (r.curve_radii for r in routes) + assert len(ra) == len(rb) == 4 + for a, b in zip(ra, rb): + assert abs(abs(a - b) - 3.0) < 1e-6 + + +def test_build_concentric_bundle_rejects_diagonal_centerline(): + e = Edge(source="s", target="p", line_id="x") + with pytest.raises(ValueError, match="diagonal"): + build_concentric_bundle([(e, "x", 0.0)], [(0, 0), (10, 10)], base_radius=10.0) + + +# --- the always-on render guard ------------------------------------------- + + +def test_render_guard_rejects_a_flipped_bundle(): + graph, offsets, routes = _laid_out() + # Swap the points of the two over-the-top members so the bundle crosses; + # the guard must reject this regardless of compute_layout's validate flag. + over_top = [ + r + for r in routes + if r.is_inter_section and r.edge.target.startswith("upper__entry_right") + ] + assert len(over_top) == 2 + a, b = over_top + flipped = [r for r in routes if r not in over_top] + flipped.append( + RoutedPath( + edge=a.edge, line_id=a.line_id, points=b.points, is_inter_section=True + ) + ) + flipped.append( + RoutedPath( + edge=b.edge, line_id=b.line_id, points=a.points, is_inter_section=True + ) + ) + with pytest.raises(CurveInvariantError): + assert_render_curve_invariants(graph, flipped, offsets) + + +def test_render_guard_accepts_the_clean_fixture(): + graph, offsets, routes = _laid_out() + assert_render_curve_invariants(graph, routes, offsets) + + +# --- end-to-end #707 lock -------------------------------------------------- + + +def test_707_lays_out_under_validation(): + graph = parse_metro_mermaid(FIXTURE.read_text()) + compute_layout(graph, validate=True) + + +def test_707_over_top_loop_has_no_curve_defect(): + graph, offsets, routes = _laid_out() + assert check_bundle_order_preserved(routes) == [] + assert check_concentric_bundle_corners(graph, routes, offsets) == [] + + +def test_707_right_entry_approached_from_its_outward_side(): + # The loop reaches the right-edge port from the right, so the inter-section + # route's last waypoint before the port is at or past the port's X rather + # than ploughing in from the left interior. + graph, _offsets, routes = _laid_out() + port_id = next( + p.id + for p in graph.ports.values() + if p.is_entry and p.id.startswith("upper__entry_right") + ) + port_x = graph.stations[port_id].x + inter = [r for r in routes if r.edge.target == port_id and r.is_inter_section] + assert inter + for r in inter: + assert r.points[-2][0] >= port_x - 1.0 diff --git a/tests/test_route_edges_placement_pure.py b/tests/test_route_edges_placement_pure.py new file mode 100644 index 000000000..a13139f61 --- /dev/null +++ b/tests/test_route_edges_placement_pure.py @@ -0,0 +1,86 @@ +"""``route_edges`` is pure with respect to station placement (#678). + +Routing consumes placement and produces paths; it must not move stations. +The bubble-centring post-pass emits its X-targets as *move requests*: +``route_edges`` adjusts its own route points (its legitimate output) but leaves +``graph.stations`` untouched. The render path applies the requests explicitly +to settle the markers; every other caller (the Pass C bisection guards, the +label/icon strike guards, introspection tooling) ignores them and gets a route +it can inspect without snapshotting/restoring ``Station.x`` -- closing the #518 +trap at its source. + +Probe: lay out each corpus fixture, then route it and assert no station's +``(x, y)`` changed. ``variant_calling`` is the sharpest case: its centring +splits ``gatk``/``deepvariant`` off their shared column in the routes. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest +from conftest import content_corpus + +from nf_metro.convert import convert_nextflow_dag +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.parser.mermaid import parse_metro_mermaid + +CORPUS = content_corpus() + + +@pytest.mark.parametrize("fixture", CORPUS, ids=[fid for fid, _, _ in CORPUS]) +def test_route_edges_does_not_move_stations(fixture): + fid, path, is_nextflow = fixture + text = path.read_text() + if is_nextflow: + text = convert_nextflow_dag(text) + graph = parse_metro_mermaid(text) + compute_layout(graph, validate=False) + + before = {sid: (s.x, s.y) for sid, s in graph.stations.items()} + offsets = compute_station_offsets(graph) + route_edges(graph, station_offsets=offsets) + after = {sid: (s.x, s.y) for sid, s in graph.stations.items()} + + moved = [sid for sid in before if before[sid] != after[sid]] + sample = { + sid: ( + tuple(round(v, 2) for v in before[sid]), + tuple(round(v, 2) for v in after[sid]), + ) + for sid in moved[:8] + } + assert not moved, ( + f"{fid}: route_edges moved {len(moved)} station(s); routing must be " + f"placement-pure (emit move requests, not mutate graph.stations). " + f"Moved (before -> after): {sample}" + ) + + +def test_route_edges_splits_variant_calling_column_only_in_routes(): + """Centring lands in the *routes*, leaving the shared column on the graph. + + ``gatk``/``deepvariant`` share a column after layout. Routing centres each + onto its own diagonals (the move the render path applies), but on the + graph the pair must stay on their shared column: the move is a request, not + an in-place mutation. + """ + path = Path(__file__).resolve().parent.parent / "examples" / "variant_calling.mmd" + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph, validate=False) + + shared_x = graph.stations["gatk"].x + assert graph.stations["deepvariant"].x == pytest.approx(shared_x) + + offsets = compute_station_offsets(graph) + route_edges(graph, station_offsets=offsets) + + assert graph.stations["gatk"].x == pytest.approx(shared_x), ( + "route_edges moved gatk off its column; the centring X must be a move " + "request, not an in-place mutation" + ) + assert graph.stations["deepvariant"].x == pytest.approx(shared_x), ( + "route_edges moved deepvariant off its column; the centring X must be a " + "move request, not an in-place mutation" + ) diff --git a/tests/test_routing.py b/tests/test_routing.py index 6ffececa4..12744f6c1 100644 --- a/tests/test_routing.py +++ b/tests/test_routing.py @@ -1,16 +1,22 @@ """Tests for edge routing.""" +from pathlib import Path + +import pytest + from nf_metro.layout.engine import compute_layout -from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) from nf_metro.parser.mermaid import parse_metro_mermaid def test_straight_route(): """Edges on the same track should be straight horizontal lines.""" graph = parse_metro_mermaid( - "%%metro line: main | Main | #ff0000\n" - "graph LR\n" - " a -->|main| b\n" + "%%metro line: main | Main | #ff0000\ngraph LR\n a -->|main| b\n" ) compute_layout(graph) routes = route_edges(graph) @@ -34,7 +40,7 @@ def test_diagonal_route(): routes = route_edges(graph) # Find a route that changes tracks - diagonal_routes = [r for r in routes if len(r.points) == 4] + _ = [r for r in routes if len(r.points) == 4] # At least some routes should be diagonal (track changes) # The exact count depends on layout, but we should have some assert len(routes) == 4 @@ -43,9 +49,7 @@ def test_diagonal_route(): def test_station_offsets_single_line(): """Single line on a station should have zero offset.""" graph = parse_metro_mermaid( - "%%metro line: main | Main | #ff0000\n" - "graph LR\n" - " a -->|main| b\n" + "%%metro line: main | Main | #ff0000\ngraph LR\n a -->|main| b\n" ) compute_layout(graph) offsets = compute_station_offsets(graph) @@ -67,12 +71,37 @@ def test_station_offsets_multiple_lines(): assert offsets[("a", "main")] != offsets[("a", "alt")] +def test_exit_only_line_reordered_above(): + """A line originating at a shared station and exiting to a port above + should get a lower (top) offset than the through-running line. + + Regression test for #125: at bcftools in variant_calling_tuned, the + QC line should not cross over the Main line. + """ + mmd = ( + Path(__file__).resolve().parent.parent + / "examples" + / "variant_calling_tuned.mmd" + ) + graph = parse_metro_mermaid(mmd.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + + # QC exits upward to reporting, so should be above (lower offset) Main + qc_off = offsets[("bcftools", "qc")] + main_off = offsets[("bcftools", "main")] + assert qc_off < main_off, ( + f"QC offset ({qc_off}) should be less than Main ({main_off}) " + f"at bcftools to avoid crossing" + ) + + # --- Inter-section routing tests --- def test_inter_section_routing(): """Inter-section edges should be routed through ports.""" - from nf_metro.layout.routing import route_inter_section_edges + from routing_inter_section import route_inter_section_edges graph = parse_metro_mermaid( "%%metro line: main | Main | #ff0000\n" @@ -114,4 +143,275 @@ def test_section_routes_have_valid_points(): compute_layout(graph) routes = route_edges(graph) for route in routes: - assert len(route.points) >= 2, f"Route {route.edge.source}->{route.edge.target} has {len(route.points)} points" + assert len(route.points) >= 2, ( + f"Route {route.edge.source}->{route.edge.target}" + f" has {len(route.points)} points" + ) + + +def test_bypass_routing_around_intervening_sections(): + """Bypass edges spanning 2+ columns should route around intervening sections. + + When a line goes from section A directly to section D (skipping B and C), + the routed path must be a U-shape that dips below the intervening sections, + not a straight horizontal line through them. This must work regardless of + edge declaration order in the .mmd file. + """ + # 4-section linear pipeline: A -> B -> C -> D + # "main" goes through all sections, "bypass" skips B and C + mmd = ( + "%%metro line: main | Main | #ff0000\n" + "%%metro line: bypass | Bypass | #0000ff\n" + "graph LR\n" + " subgraph sec_a [A]\n" + " a1[A1]\n" + " a2[A2]\n" + " a1 -->|main,bypass| a2\n" + " end\n" + " subgraph sec_b [B]\n" + " b1[B1]\n" + " b2[B2]\n" + " b1 -->|main| b2\n" + " end\n" + " subgraph sec_c [C]\n" + " c1[C1]\n" + " c2[C2]\n" + " c1 -->|main| c2\n" + " end\n" + " subgraph sec_d [D]\n" + " d1[D1]\n" + " d2[D2]\n" + " d1 -->|main,bypass| d2\n" + " end\n" + " a2 -->|main| b1\n" + " b2 -->|main| c1\n" + " c2 -->|main| d1\n" + " a2 -->|bypass| d1\n" + ) + graph = parse_metro_mermaid(mmd) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + # Find inter-section bypass routes + bypass_routes = [r for r in routes if r.line_id == "bypass" and r.is_inter_section] + assert bypass_routes, "Expected at least one inter-section bypass route" + + # The bypass route spanning the most X distance is the actual bypass + bypass_route = max( + bypass_routes, key=lambda r: abs(r.points[-1][0] - r.points[0][0]) + ) + assert len(bypass_route.points) > 2, ( + f"Bypass route should have >2 waypoints (U-shape), " + f"got {len(bypass_route.points)}: {bypass_route.points}" + ) + + # At least one waypoint should be below the bottom of intervening sections + intervening_secs = [graph.sections[sid] for sid in ("sec_b", "sec_c")] + max_section_bottom = max(s.bbox_y + s.bbox_h for s in intervening_secs) + waypoint_ys = [p[1] for p in bypass_route.points] + assert any(y > max_section_bottom for y in waypoint_ys), ( + f"No waypoint below intervening sections (bottom={max_section_bottom}). " + f"Waypoint Ys: {waypoint_ys}" + ) + + +def _route_endpoint_attached(point, station, sibling_polylines, tol=2.0): + """True if *point* coincides with *station* or any sibling polyline.""" + import math + + from nf_metro.layout.routing.common import point_on_polyline + + if ( + station is not None + and math.hypot(point[0] - station.x, point[1] - station.y) < 5.0 + ): + return True + return any( + point_on_polyline(point, pts, tol) is not None for pts in sibling_polylines + ) + + +def test_merge_branch_lands_on_trunk_y(): + """Merge-junction branch routes must terminate on the trunk bundle Y + (or on a sibling polyline) -- not hanging in mid-air between rows.""" + from nf_metro.render.svg import apply_route_offsets + + fp = Path(__file__).parent / "fixtures" / "genomeassembly_organellar.mmd" + graph = parse_metro_mermaid(fp.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + by_line: dict[str, list[list[tuple[float, float]]]] = {} + for r in routes: + by_line.setdefault(r.line_id, []).append(apply_route_offsets(r, offsets)) + + offences = [] + for r in routes: + pts = apply_route_offsets(r, offsets) + if len(pts) < 2: + continue + siblings = [p for p in by_line[r.line_id] if p is not pts] + src = graph.stations.get(r.edge.source) + tgt = graph.stations.get(r.edge.target) + if not _route_endpoint_attached(pts[0], src, siblings): + offences.append( + f"{r.edge.source}->{r.edge.target} on {r.line_id!r}: " + f"src {pts[0]} disconnected" + ) + if not _route_endpoint_attached(pts[-1], tgt, siblings): + offences.append( + f"{r.edge.source}->{r.edge.target} on {r.line_id!r}: " + f"tgt {pts[-1]} disconnected" + ) + + assert not offences, ( + f"{fp.name}: route endpoints hanging in mid-air (not on a " + f"station marker or sibling route segment):\n " + "\n ".join(offences[:5]) + ) + + +def test_l_shape_route_quadrant_symmetry(): + """An L-shape route and its 180-degree mirror must produce mirrored + geometry: same 4-point shape, same curve radii, with all (x,y) offsets + from the source negated. This pins down direction handling inside + ``_route_l_shape`` so future direction-enum refactors cannot silently + swap a sign on one branch only. + """ + + def _route_one(src_col: int, src_row: int, tgt_col: int, tgt_row: int): + # Two single-station sections with forced exit/entry sides on the + # axis between them, so the inter-section edge takes the standard + # 4-point L-shape (horizontal -> vertical -> horizontal). + if tgt_col > src_col: + exit_side, entry_side = "right", "left" + else: + exit_side, entry_side = "left", "right" + graph = parse_metro_mermaid( + "%%metro line: main | Main | #ff0000\n" + f"%%metro grid: s1 | {src_col},{src_row}\n" + f"%%metro grid: s2 | {tgt_col},{tgt_row}\n" + "graph LR\n" + " subgraph s1 [S1]\n" + f" %%metro exit: {exit_side} | main\n" + " a[A]\n" + " end\n" + " subgraph s2 [S2]\n" + f" %%metro entry: {entry_side} | main\n" + " b[B]\n" + " end\n" + " a -->|main| b\n" + ) + compute_layout(graph) + routes = route_edges(graph) + inter = [r for r in routes if r.is_inter_section and len(r.points) == 4] + assert len(inter) == 1, f"expected 1 L-shape inter-section route, got {inter}" + return inter[0] + + # Mirror pair: target down-right vs target up-left, same Manhattan distance. + rd = _route_one(0, 0, 1, 1) # dx>0, dy>0 -> R/D + lu = _route_one(1, 1, 0, 0) # dx<0, dy<0 -> L/U + + # Mirror in source-relative coordinates. + rd_rel = [(p[0] - rd.points[0][0], p[1] - rd.points[0][1]) for p in rd.points] + lu_rel = [(p[0] - lu.points[0][0], p[1] - lu.points[0][1]) for p in lu.points] + for a, b in zip(rd_rel, lu_rel): + assert abs(a[0] + b[0]) < 1e-6, f"x mirror broken: {a} vs {b}" + assert abs(a[1] + b[1]) < 1e-6, f"y mirror broken: {a} vs {b}" + + # Curve radii are direction-agnostic and must match exactly. + assert rd.curve_radii == lu.curve_radii + + +def test_around_section_below_dispatched_for_cross_row_left_entry(): + """The around-section-below handler must fire for a LEFT entry port + reached from the opposite-row source when the natural inter-row + channel would cut through an intervening section's bbox. + + Mirrors a row-0 source to lower-row LEFT-entry geometry: 3-row + layout with target in the bottom row, source in the top row to the + right of target, and an intervening section in the middle row whose + bbox falls in the inter-row channel's Y range. + """ + import nf_metro.layout.routing.inter_section_handlers as ish + + fixture = Path(__file__).parent.parent / "examples" / "topologies" + fixture = fixture / "around_section_below.mmd" + graph = parse_metro_mermaid(fixture.read_text()) + compute_layout(graph) + + real = ish._route_around_section_below + captured: list = [] + + def hook(edge, src, tgt, entry_port, i, n, ctx): + result = real(edge, src, tgt, entry_port, i, n, ctx) + captured.append(result) + return result + + ish._route_around_section_below = hook + try: + route_edges(graph) + finally: + ish._route_around_section_below = real + + assert captured, "_route_around_section_below was not dispatched" + for r in captured: + # 6-point R-D-L-U-R shape. + assert len(r.points) == 6, f"expected 6 points, got {r.points}" + # All four corners concentric with the same radius (CW loop). + assert r.curve_radii is not None and len(r.curve_radii) == 4 + assert len(set(r.curve_radii)) == 1, ( + f"around-section corners must share one radius (CW loop); " + f"got {r.curve_radii}" + ) + + +@pytest.mark.parametrize( + ("fixture", "handler"), + [ + ("around_section_below.mmd", "_route_around_section_below"), + ("around_below_ep_col_gt0.mmd", "_route_around_section_below"), + ("corridor_narrow_gap_fallback.mmd", "_route_around_section_below"), + ("self_crossing_bridge.mmd", "_route_around_section_below"), + ("genomic_pipeline.mmd", "_route_inter_row_gap_corridor"), + ], +) +def test_around_and_corridor_routes_built_from_centreline(fixture, handler): + """The around-below and inter-row-corridor handlers route via the + centreline builder, so each is a 6-point loop with concentric, derived + corner radii (never hand-rolled) and route_edges' always-on curve + invariants stay green. + """ + import nf_metro.layout.routing.inter_section_handlers as ish + + root = Path(__file__).parent.parent / "examples" + candidate = root / "topologies" / fixture + path = candidate if candidate.exists() else root / fixture + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + + real = getattr(ish, handler) + captured: list = [] + + def hook(*args): + result = real(*args) + captured.append(result) + return result + + setattr(ish, handler, hook) + try: + # route_edges runs assert_render_curve_invariants on its output; a flip + # or non-concentric corner from these handlers would raise here. + route_edges(graph) + finally: + setattr(ish, handler, real) + + assert captured, f"{handler} was not dispatched for {fixture}" + for r in captured: + assert len(r.points) == 6, f"expected a 6-point loop, got {r.points}" + assert r.curve_radii is not None and len(r.curve_radii) == 4, ( + f"expected 4 derived corner radii, got {r.curve_radii}" + ) + assert all(c > 0 for c in r.curve_radii) + assert r.offset_regime is OffsetRegime.BAKED diff --git a/tests/test_routing_gate_coverage.py b/tests/test_routing_gate_coverage.py new file mode 100644 index 000000000..2f48952c6 --- /dev/null +++ b/tests/test_routing_gate_coverage.py @@ -0,0 +1,242 @@ +"""Ratchet on routing gate-arm coverage (#677). + +The routing subpackage dispatches each edge through priority-ordered handlers +and post-passes; every ``if``/``while`` is a *gate* whose two arms either are +or are not exercised by the fixture corpus. A gate arm reached by no fixture +is an implicit assumption that only a future, never-seen topology will probe. + +``scripts/routing_gate_coverage.py`` enumerates these gates and records, per +arm, which corpus fixtures reach it; ``docs/dev/routing_gate_coverage.md`` is +the published matrix and ``tests/data/routing_gate_coverage_baseline.json`` +the frozen set of gates with an un-exercised arm. + +The ratchet: a routing conditional may not have an un-exercised arm unless it +is listed in the baseline, and the baseline may not list a gate the corpus +fully exercises. Adding a half-covered gate, or covering a baselined gate +without regenerating, fails this test. +""" + +from __future__ import annotations + +import json +import os +import subprocess +import sys +from pathlib import Path + +import pytest + +PROJECT_ROOT = Path(__file__).resolve().parent.parent +BASELINE_PATH = PROJECT_ROOT / "tests" / "data" / "routing_gate_coverage_baseline.json" +SCRIPT_PATH = PROJECT_ROOT / "scripts" / "routing_gate_coverage.py" + + +@pytest.fixture(scope="module") +def rgc(): + """The coverage script as an importable module, behind the version skip. + + The arc model is interpreter-specific, so the baseline only holds on the + pinned CPython; skip elsewhere. + """ + sys.path.insert(0, str(PROJECT_ROOT / "scripts")) + import routing_gate_coverage as module + + if sys.version_info[:2] != module.BASELINE_PYTHON: + pytest.skip( + f"gate baseline is pinned to CPython {module.BASELINE_PYTHON[0]}." + f"{module.BASELINE_PYTHON[1]}; coverage's arc model differs on " + f"{sys.version_info[0]}.{sys.version_info[1]}" + ) + return module + + +@pytest.fixture(scope="module") +def gates(rgc): + """Every routing gate with per-arm coverage, computed once per module. + + The sweep runs in a seed-pinned subprocess (``PYTHONHASHSEED`` fixed) rather + than in-process: operand-level arc coverage is hash-seed sensitive because + the layout engine iterates hash-ordered sets, so a fixed seed makes the gate + set reproducible. A fresh interpreter also sidesteps the can't-nest rule + when the suite itself runs under a coverage tracer. + """ + proc = subprocess.run( + [sys.executable, str(SCRIPT_PATH), "--json"], + cwd=str(PROJECT_ROOT), + env={**os.environ, "PYTHONHASHSEED": rgc.PINNED_HASH_SEED}, + capture_output=True, + text=True, + ) + assert proc.returncode == 0, f"coverage sweep failed:\n{proc.stderr[-3000:]}" + return rgc.gates_from_payload(json.loads(proc.stdout)) + + +@pytest.fixture(scope="module") +def current_gaps(rgc, gates) -> set[str]: + return set(rgc.gap_keys(gates)) + + +@pytest.fixture(scope="module") +def baseline_gaps() -> set[str]: + return set(json.loads(BASELINE_PATH.read_text())) + + +def test_no_new_un_exercised_routing_gate_arm(current_gaps, baseline_gaps): + """No routing gate may have an un-exercised arm outside the baseline.""" + newly_uncovered = sorted(current_gaps - baseline_gaps) + assert not newly_uncovered, ( + "Routing gate(s) gained an un-exercised arm relative to the baseline. " + "Either author a fixture that hits both arms, or - if the new arm is " + "genuinely unreachable - confirm it and regenerate the baseline with " + "`python scripts/routing_gate_coverage.py --write`.\nNew gaps:\n " + + "\n ".join(newly_uncovered) + ) + + +def test_gate_coverage_baseline_in_sync(current_gaps, baseline_gaps): + """The committed baseline must not claim gaps the corpus exercises. + + A baseline listing a gate the corpus fully exercises silently weakens the + ratchet, so closing a gap must be paired with regenerating the baseline. + """ + now_covered = sorted(baseline_gaps - current_gaps) + assert not now_covered, ( + "The corpus exercises both arms of gate(s) still listed in the " + "baseline. Regenerate it with " + "`python scripts/routing_gate_coverage.py --write` to tighten the " + "ratchet.\nNewly covered:\n " + "\n ".join(now_covered) + ) + + +def test_triage_sidecar_references_open_gaps(rgc, gates): + """Every triage verdict must name a gate that is an open gap. + + A verdict whose gate the corpus exercises (or whose key text has diverged) + would silently mis-describe a closed gate, so it must be pruned. + """ + stale = rgc.triage_stale_keys(gates, rgc.load_triage()) + assert not stale, ( + "Triage sidecar entr(y/ies) name gates that are not open gaps; remove " + "them from tests/data/routing_gate_triage.json:\n " + "\n ".join(stale) + ) + + +def _gate(gates, key): + """The gate with the given line-stable ``Gate.key`` (or ``None``).""" + return next((g for g in gates if g.key == key), None) + + +# Gates whose every static arm CPython 3.11 attributes to the *opening* line of +# a multi-line construct (a wrapped ``if (``/``if not (`` condition, a multi-line +# body/list literal, or a ``for`` whose exit jumps through an unevaluated +# annotation), while the tracer records the executed transition from an operand +# or body-element line. Both logical arms are exercised by the corpus, so once +# the executed arcs are normalized to logical lines the gate is fully covered, +# not a gap. These keep the collapsed opening-line view because their opening +# line *does* carry branch bytecode in 3.11; a wrapped ``and``/``or`` whose +# opening line carries none is instead expanded to operand gates (covered by +# ``test_phantom_boolean_gate_expands_to_operand_arms``). +PHANTOM_MULTILINE_GATES = [ + "tb_handlers.py::if not (::#1", # wrapped condition fall-through + "tb_handlers.py::if not (::#2", + "tb_handlers.py::if not (::#3", + "tb_handlers.py::if not (::#4", + "corners.py::if i > 1:::#1", # single-line ``if`` with multi-line ternary body + "corners.py::if i < len(points) - 2:::#1", + "common.py::for edge in graph.edges:::#1", # exit through unevaluated annotation + "context.py::if (::#1", # multi-line ``and``/``or`` conditions + "context.py::if (::#2", + "context.py::if (::#3", +] + + +@pytest.mark.parametrize("key", PHANTOM_MULTILINE_GATES) +def test_multiline_displaced_gate_is_fully_covered(gates, key): + """A gate whose arcs are displaced to a multi-line opening line is covered. + + CPython records the executed transition from an operand/body line; coverage's + ``translate_arcs`` maps it back to the logical first line, so pairing it with + the static arc shows both arms exercised, not an un-exercised gap. + """ + gate = _gate(gates, key) + assert gate is not None, f"no gate keyed {key!r}" + uncovered = [a.dst_line for a in gate.arms if not a.covered] + assert gate.fully_covered, ( + f"{key} is a phantom multi-line gate but the matrix reports arm(s) " + f"->{uncovered} un-exercised" + ) + + +def test_genuine_dead_arm_not_masked_as_covered(gates): + """A tautologically-dead branch stays a gap, not silenced as phantom. + + ``context.py`` ``if edge.line_id in line_pos:`` skips back to its enclosing + ``for`` header when false, but ``line_pos`` is built from the same edges so + the false arm never fires. Its dst (the loop header) is reached every + iteration by the loop back-edge, so a dst-reachability heuristic would wrongly + call it phantom. Normalizing arcs to logical lines keeps the distinction: the + false transition has no physical arc to translate, so the gate stays a gap. + """ + gate = _gate(gates, "context.py::if edge.line_id in line_pos:::#1") + assert gate is not None, "tautological-membership gate not found" + assert not gate.fully_covered, ( + "the tautologically-dead false arm is now reported covered; arc " + "normalization must not merge a never-taken branch onto a live one" + ) + + +# Operand-level gates that exist only once a phantom multi-line ``and``/``or`` +# condition (no branch bytecode on its opening line) is re-attributed to its +# operand lines. Each carries an un-exercised short-circuit arm the collapsed +# opening-line view masked behind a single phantom verdict. +EXPANDED_OPERAND_GATES = [ + "reversal.py::or (sec_id, succ_id) in horizontal_succ_pairs::#1", + "inter_section_handlers.py::and src_sec is not None::#1", + "normalize.py::go is not None::#1", + "offsets.py::sec is None::#1", +] + + +@pytest.mark.parametrize("key", EXPANDED_OPERAND_GATES) +def test_phantom_boolean_gate_expands_to_operand_arms(gates, key): + """A phantom wrapped boolean condition surfaces one gate per operand line. + + CPython emits no branch bytecode on the opening ``if (``/``while (`` line of + a wrapped ``and``/``or``; the short-circuit branches live on the operand + lines. The matrix re-attributes the decision there, so an operand whose + short-circuit no fixture takes is its own gate instead of hiding behind the + collapsed opening-line arm. + """ + gate = _gate(gates, key) + assert gate is not None, ( + f"expected operand-level gate {key!r}; a phantom multi-line boolean " + "condition must be re-attributed to its operand lines" + ) + assert not gate.fully_covered, ( + f"{key} should carry an un-exercised operand arm (a short-circuit branch " + "no corpus fixture takes)" + ) + + +def test_reversal_fallthrough_gap_not_masked_by_collapsed_gate(gates): + """The reversal-propagation fall-through is its own gate, not a phantom one. + + A reversed non-TB section whose cross-section successor is neither on the + same grid row nor a horizontal LEFT/RIGHT port pair correctly does *not* + propagate reversal, but no corpus topology exercises that path. It must show + as the un-exercised final operand of the ``or`` chain, not collapse onto the + opening ``if (`` where a single verdict would mask it. + """ + operand = _gate( + gates, "reversal.py::or (sec_id, succ_id) in horizontal_succ_pairs::#1" + ) + assert operand is not None and not operand.fully_covered + collapsed = [ + g.key + for g in gates + if g.module == "reversal.py" and g.code == "if (" and not g.fully_covered + ] + assert not collapsed, ( + "a collapsed `reversal.py::if (` gate is still reported as a gap; its " + f"phantom opening-line arms should be expanded to operands: {collapsed}" + ) diff --git a/tests/test_routing_no_bottom_loop.py b/tests/test_routing_no_bottom_loop.py new file mode 100644 index 000000000..77c1d8db8 --- /dev/null +++ b/tests/test_routing_no_bottom_loop.py @@ -0,0 +1,77 @@ +"""Routing invariant: a downward cross-column feeder must not loop to the +canvas bottom and climb back up to reach its consumer. + +Regression lock for the `needs_bypass` misfire where an inter-section edge +from a row-0 source to a consumer one row down and 2+ columns across was +classified as a bypass and routed below the target section +(`_route_bypass`) instead of dropping straight into it. +""" + +from __future__ import annotations + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import route_edges +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.svg import compute_station_offsets + + +def _pipeline_with_qc_at(col: int, n_top: int) -> str: + """Top row of ``n_top`` sections; a QC section one row down at ``col``, + fed by a downward cross-column edge from the row-0 input.""" + tops = ["input", "alignment", "quant", "annot"][:n_top] + grids = "\n".join(f"%%metro grid: {s} | {i},0" for i, s in enumerate(tops)) + grids += f"\n%%metro grid: qc | {col},1" + top_blocks = "" + for i, s in enumerate(tops): + entry = "" if i == 0 else " %%metro entry: left | align\n" + exit_ = " %%metro exit: right | align\n" if i < n_top - 1 else "" + extra = " %%metro exit: bottom | qc\n" if i == 0 else "" + top_blocks += ( + f" subgraph {s} [{s.title()}]\n{entry}{exit_}{extra}" + f" {s}_a[{s} A]\n {s}_b[{s} B]\n" + f" {s}_a -->|align| {s}_b\n end\n" + ) + chain = "\n".join( + f" {tops[i]}_b -->|align| {tops[i + 1]}_a" for i in range(n_top - 1) + ) + return ( + "%%metro line: align | Align | #3b82f6\n" + "%%metro line: qc | QC | #e6842a\n" + f"{grids}\n\ngraph LR\n{top_blocks}" + " subgraph qc [QC]\n" + " %%metro entry: left | qc\n" + " qc_a[FastQC]\n qc_b[MultiQC]\n" + " qc_a -->|qc| qc_b\n end\n" + f"{chain}\n" + " input_a -->|qc| qc_a\n" + ) + + +@pytest.mark.parametrize( + "col,n_top", + [(2, 3), (3, 4)], + ids=["qc_col2_of_3", "qc_col3_of_4"], +) +def test_downward_feeder_does_not_dip_below_consumer(col, n_top): + graph = parse_metro_mermaid(_pipeline_with_qc_at(col, n_top)) + compute_layout(graph) + routes = route_edges(graph, station_offsets=compute_station_offsets(graph)) + + qc = graph.sections["qc"] + qc_bottom = qc.bbox_y + qc.bbox_h + + qc_routes = [ + r + for r in routes + if r.is_inter_section and str(r.edge.target).startswith("qc__entry") + ] + assert qc_routes, "expected an inter-section route into the QC entry port" + + for r in qc_routes: + max_y = max(y for _, y in r.points) + assert max_y <= qc_bottom + 1.0, ( + f"route {r.edge.source}->{r.edge.target} dips to y={max_y:.0f}, " + f"below QC section bottom={qc_bottom:.0f} (canvas-bottom loop)" + ) diff --git a/tests/test_rowspan_band_distribution_invariant.py b/tests/test_rowspan_band_distribution_invariant.py new file mode 100644 index 000000000..9f7f98692 --- /dev/null +++ b/tests/test_rowspan_band_distribution_invariant.py @@ -0,0 +1,104 @@ +"""Invariant: single-row sections stacked beside a rowspan neighbour fill its band. + +When a column holds single-row sections stacked one per grid row beside a taller +``grid_row_span > 1`` section spanning those same rows, the stack must be +distributed across that section's vertical band: the topmost section's bbox top +meets the band top and the bottommost's bbox bottom meets the band bottom. + +Without this the topmost section's fan, centred on its row line, spreads upward +out of the layout into the title band, and the bottommost section floats high +with empty slack beneath it. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest +from layout_validator import Severity, validate_layout + +from nf_metro.layout.constants import SAME_COORD_TOLERANCE +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.phases._common import iter_stacked_rows_in_rowspan_band +from nf_metro.parser.mermaid import parse_metro_mermaid + +EXAMPLES_DIR = Path(__file__).parent.parent / "examples" +SHOWCASE_DIR = EXAMPLES_DIR / "showcase" + +# Fixtures with a single-row section stack beside a rowspan neighbour. +FIXTURES = [ + "seqinspector", +] + + +@pytest.mark.parametrize("stem", FIXTURES) +def test_stacked_rows_fill_rowspan_band(stem: str) -> None: + graph = parse_metro_mermaid((SHOWCASE_DIR / f"{stem}.mmd").read_text()) + compute_layout(graph, validate=True) + + stacks = list(iter_stacked_rows_in_rowspan_band(graph, SAME_COORD_TOLERANCE)) + assert stacks, ( + f"{stem}: expected a single-row stack beside a rowspan neighbour; " + "fixture no longer exercises the invariant" + ) + + for stack, band_top, band_bot in stacks: + top = stack[0] + bot = stack[-1] + assert abs(top.bbox_y - band_top) <= SAME_COORD_TOLERANCE, ( + f"{stem}: top section '{top.id}' bbox top {top.bbox_y:.1f} does not " + f"meet band top {band_top:.1f} (rises out of the band by " + f"{band_top - top.bbox_y:.1f}px)" + ) + bot_edge = bot.bbox_y + bot.bbox_h + assert abs(bot_edge - band_bot) <= SAME_COORD_TOLERANCE, ( + f"{stem}: bottom section '{bot.id}' bbox bottom {bot_edge:.1f} does " + f"not meet band bottom {band_bot:.1f} (slack of " + f"{band_bot - bot_edge:.1f}px below it)" + ) + + +@pytest.mark.parametrize( + "rel_path", + [ + "showcase/seqinspector.mmd", + "topologies/internal_source_equal_sibling_2fan.mmd", + ], +) +def test_internal_source_2fan_source_centred(rel_path: str) -> None: + """An internal source feeding two equal-sibling branches is centred (#1223). + + In both fixtures the run_folder line's source icon ``rundir_in`` fans to + ``checkqc`` and ``rundirparser``: two equal-sibling branches carrying the + same single line into the same downstream join. Neither branch is a + designated trunk continuation, so the source sits centred between the two + consumers (collinear with the centred trunk and the symmetric exit bundle) + rather than on one branch's lane while the other peels off. The centred + trunk Y is the half-grid symfan frame the source shares; it is also clean + (an integer grid multiple), keeping the source off the rowspan neighbour's + fractional grid origin. + """ + graph = parse_metro_mermaid((EXAMPLES_DIR / rel_path).read_text()) + compute_layout(graph, validate=True) + + hub = graph.stations["rundir_in"] + lo = graph.stations["checkqc"] + hi = graph.stations["rundirparser"] + midpoint = (lo.y + hi.y) / 2.0 + assert abs(hub.y - midpoint) <= SAME_COORD_TOLERANCE, ( + f"{rel_path}: source hub 'rundir_in' (y={hub.y:.3f}) is not centred " + f"between 'checkqc' (y={lo.y:.3f}) and 'rundirparser' (y={hi.y:.3f}); " + f"midpoint={midpoint:.3f}, off by {abs(hub.y - midpoint):.3f}px" + ) + + +@pytest.mark.parametrize("stem", FIXTURES) +def test_showcase_fixture_has_no_layout_errors(stem: str) -> None: + """The relocated fixture skips the auto-globbed topology corpus, so run the + error-level layout validation here (sub-pixel warnings from the center-ported + fan are out of scope).""" + graph = parse_metro_mermaid((SHOWCASE_DIR / f"{stem}.mmd").read_text()) + compute_layout(graph, validate=True) + + errors = [v for v in validate_layout(graph) if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) diff --git a/tests/test_same_line_parallel_run_invariant.py b/tests/test_same_line_parallel_run_invariant.py new file mode 100644 index 000000000..dc9a7482a --- /dev/null +++ b/tests/test_same_line_parallel_run_invariant.py @@ -0,0 +1,89 @@ +"""Tests for the same-line parallel-run invariant. + +A single metro line that fans out from one source to several targets (or +converges on one port from several feeds) must travel the span its branches +share as ONE trunk, splitting only where each branch turns off. When the +branches instead descend in adjacent offset slots they render as two parallel +same-colour tracks that read as two distinct routes. + +Covers: + +* Happy-path: every gallery fixture and example routes with no same-line + parallel descent. +* Targeted: ``variantbenchmarking`` / ``variantbenchmarking_auto`` (the + reported defect) route their ``test`` and ``truth`` fans as single trunks. +* Meaningfulness: with the merge passes disabled the checker fires on the + reported fixtures, so the invariant genuinely encodes the bug. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +import nf_metro.layout.routing.core as routing_core +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.invariants import ( + check_no_same_line_parallel_descents, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +REPO_ROOT = Path(__file__).resolve().parent.parent +TOPOLOGIES = REPO_ROOT / "tests" / "fixtures" / "topologies" +EXAMPLES = REPO_ROOT / "examples" + + +def _gather_fixtures() -> list[Path]: + paths: list[Path] = [] + paths.extend(sorted(TOPOLOGIES.glob("*.mmd"))) + paths.extend(sorted(EXAMPLES.glob("*.mmd"))) + return paths + + +def _route(path: Path): + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, routes, offsets + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_no_same_line_parallel_descents_in_gallery(path: Path) -> None: + """Every shipped topology and example routes without a same-line line + descending as two parallel adjacent tracks.""" + graph, routes, offsets = _route(path) + violations = check_no_same_line_parallel_descents(graph, routes, offsets) + assert not violations, "\n".join(v.message() for v in violations) + + +@pytest.mark.parametrize( + "fixture", + ["variantbenchmarking.mmd", "variantbenchmarking_auto.mmd"], +) +def test_variantbenchmarking_fans_are_single_trunks(fixture: str) -> None: + """The reported fan-out/fan-in duplications route as single trunks.""" + graph, routes, offsets = _route(EXAMPLES / fixture) + violations = check_no_same_line_parallel_descents(graph, routes, offsets) + assert not violations, "\n".join(v.message() for v in violations) + + +@pytest.mark.parametrize( + "fixture", + ["variantbenchmarking.mmd", "variantbenchmarking_auto.mmd"], +) +def test_checker_fires_without_coincidence_pass( + fixture: str, monkeypatch: pytest.MonkeyPatch +) -> None: + """Disabling same-line track coincidence reproduces the doubled descents the + invariant is meant to catch, proving the check is not vacuous.""" + monkeypatch.setattr( + routing_core, "_coincide_same_line_tracks", lambda routes, ctx: None + ) + graph, routes, offsets = _route(EXAMPLES / fixture) + violations = check_no_same_line_parallel_descents(graph, routes, offsets) + assert violations, "expected doubled same-line descents with merge passes off" diff --git a/tests/test_scoped_sections.py b/tests/test_scoped_sections.py new file mode 100644 index 000000000..6ac291cca --- /dev/null +++ b/tests/test_scoped_sections.py @@ -0,0 +1,63 @@ +"""Unit tests for the row-scoping helpers used by the row-major Pass C sweep.""" + +from __future__ import annotations + +import pytest + +from nf_metro.layout.phases._common import ( + _grid_rows_top_to_bottom, + _scoped_sections, +) +from nf_metro.parser.model import MetroGraph, Section + + +def _graph_with_sections() -> MetroGraph: + graph = MetroGraph() + graph.sections = { + "a": Section(id="a", name="A", grid_row=0, grid_col=0, bbox_h=50), + "b": Section(id="b", name="B", grid_row=0, grid_col=1, bbox_h=50), + "c": Section(id="c", name="C", grid_row=1, grid_col=0, bbox_h=50), + } + return graph + + +def test_scoped_sections_restricts_then_restores(): + graph = _graph_with_sections() + original = graph.sections + + with _scoped_sections(graph, ["a", "c"]): + assert set(graph.sections) == {"a", "c"} + assert graph.sections["a"] is original["a"] + + assert graph.sections is original + assert set(graph.sections) == {"a", "b", "c"} + + +def test_scoped_sections_ignores_unknown_ids(): + graph = _graph_with_sections() + with _scoped_sections(graph, ["a", "missing"]): + assert set(graph.sections) == {"a"} + + +def test_scoped_sections_restores_on_exception(): + graph = _graph_with_sections() + original = graph.sections + + with pytest.raises(RuntimeError): + with _scoped_sections(graph, ["b"]): + raise RuntimeError("boom") + + assert graph.sections is original + assert set(graph.sections) == {"a", "b", "c"} + + +def test_grid_rows_top_to_bottom_groups_and_orders(): + graph = _graph_with_sections() + assert _grid_rows_top_to_bottom(graph) == [["a", "b"], ["c"]] + + +def test_grid_rows_top_to_bottom_skips_empty_and_unassigned(): + graph = _graph_with_sections() + graph.sections["d"] = Section(id="d", name="D", grid_row=2, grid_col=0, bbox_h=0) + graph.sections["e"] = Section(id="e", name="E", grid_row=-1, grid_col=0, bbox_h=50) + assert _grid_rows_top_to_bottom(graph) == [["a", "b"], ["c"]] diff --git a/tests/test_seam_lane_x.py b/tests/test_seam_lane_x.py new file mode 100644 index 000000000..48cf50e90 --- /dev/null +++ b/tests/test_seam_lane_x.py @@ -0,0 +1,228 @@ +"""``lane_x`` accessor properties and the seam approach==departure oracle. + +``lane_x`` is the single source of truth for where a line draws inside a +section: its lane (secondary) axis coordinate, derived from the section's +:class:`AxisFrame` (lane axis + sign) and the line's arrival order at its entry +port. A vertical section is the 90-degree rotation image of a horizontal one, +so the same offsets fan to the opposite screen side. + +:func:`check_seam_approach_equals_departure` is the oracle the rotation series +is verified against: at a continuation seam the inter-section approach must land +each line on the coordinate ``lane_x`` assigns it. Both horizontal and vertical +sections satisfy this once the section draw rides ``lane_x``'s per-section lane +sign. +""" + +from __future__ import annotations + +from functools import lru_cache +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.context import ( + lane_x, + port_arrival_order, + port_lane_coord, +) +from nf_metro.layout.routing.invariants import ( + check_seam_approach_equals_departure, + check_seam_segments_meet_at_port, +) +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge, MetroGraph, Port, PortSide, Section, Station + +ROOT = Path(__file__).resolve().parent.parent +TOPOLOGIES = ROOT / "examples" / "topologies" + + +# --------------------------------------------------------------------------- # +# lane_x accessor unit properties +# --------------------------------------------------------------------------- # + + +def _mini_graph(direction: str) -> tuple[MetroGraph, dict[tuple[str, str], float]]: + """A one-section graph: two lines a,b through an entry port to an exit port. + + ``a`` carries offset 0 and ``b`` offset 4 at every station, so the two lines + ride adjacent lanes. The entry port anchors at (100, 50); the internal + station and exit port advance along the flow axis (X for LR/RL, Y for + TB/BT), keeping the lane (secondary) coordinate constant down the section. + """ + vertical = direction in ("TB", "BT") + side_in = PortSide.TOP if vertical else PortSide.LEFT + side_out = PortSide.BOTTOM if vertical else PortSide.RIGHT + # advance along the flow axis only, so entry/exit share the lane baseline + mid = (100.0, 120.0) if vertical else (170.0, 50.0) + out = (100.0, 200.0) if vertical else (240.0, 50.0) + graph = MetroGraph() + graph.lines = ["a", "b"] + graph.ports = { + "s__entry": Port("s__entry", "s", side_in, is_entry=True, x=100.0, y=50.0), + "s__exit": Port("s__exit", "s", side_out, is_entry=False, x=out[0], y=out[1]), + } + graph.sections = { + "s": Section( + id="s", + name="S", + direction=direction, + station_ids=["s__entry", "n1", "s__exit"], + entry_ports=["s__entry"], + exit_ports=["s__exit"], + ) + } + graph.stations = { + "s__entry": Station("s__entry", "", "s", is_port=True, x=100.0, y=50.0), + "n1": Station("n1", "N", "s", x=mid[0], y=mid[1]), + "s__exit": Station("s__exit", "", "s", is_port=True, x=out[0], y=out[1]), + } + graph.edges = [ + Edge("s__entry", "n1", "a"), + Edge("s__entry", "n1", "b"), + Edge("n1", "s__exit", "a"), + Edge("n1", "s__exit", "b"), + ] + offsets = { + (sid, lid): (0.0 if lid == "a" else 4.0) + for sid in graph.stations + for lid in ("a", "b") + } + return graph, offsets + + +def test_lane_x_rotates_with_section_direction() -> None: + """A vertical section is the rotation image of a horizontal one. + + The offset-0 line draws on the anchor; the offset-4 line fans to +y for a + horizontal section and to -x for a vertical one, so the lane order along the + screen axis is mirrored while the lane pitch is identical. + """ + lr, lr_off = _mini_graph("LR") + tb, tb_off = _mini_graph("TB") + lr_sec, tb_sec = lr.sections["s"], tb.sections["s"] + + # offset-0 line sits on the anchor in both orientations + assert lane_x(lr, lr_sec, "a", lr_off) == 50.0 # anchor.y + assert lane_x(tb, tb_sec, "a", tb_off) == 100.0 # anchor.x + + # offset-4 line fans +y for LR, -x for TB -- opposite screen sides + assert lane_x(lr, lr_sec, "b", lr_off) == 54.0 + assert lane_x(tb, tb_sec, "b", tb_off) == 96.0 + + # same lane pitch, mirrored order + assert lane_x(lr, lr_sec, "a", lr_off) < lane_x(lr, lr_sec, "b", lr_off) + assert lane_x(tb, tb_sec, "a", tb_off) > lane_x(tb, tb_sec, "b", tb_off) + + +@pytest.mark.parametrize("direction", ["LR", "RL", "TB", "BT"]) +def test_lane_x_order_matches_arrival_order(direction: str) -> None: + """Lane order in == lane order down the column == lane order out. + + The order lines cross the entry edge equals the order they ride the section + (by ``lane_x``) equals the order they cross the exit edge. + """ + graph, offsets = _mini_graph(direction) + section = graph.sections["s"] + entry = graph.stations["s__entry"] + exit_ = graph.stations["s__exit"] + + arrival = port_arrival_order(graph, entry, offsets) + by_lane = sorted(("a", "b"), key=lambda lid: lane_x(graph, section, lid, offsets)) + departure = port_arrival_order(graph, exit_, offsets) + + assert arrival == by_lane == departure + + +def test_port_arrival_order_breaks_ties_on_line_id() -> None: + """Lines sharing a lane coordinate order by line id, not input listing.""" + graph, _ = _mini_graph("TB") + entry = graph.stations["s__entry"] + tied = {("s__entry", lid): 4.0 for lid in ("a", "b")} + assert port_arrival_order(graph, entry, tied) == ["a", "b"] + + +@pytest.mark.parametrize("direction", ["LR", "RL", "TB", "BT"]) +def test_lane_x_collinear_continuation_keeps_lane(direction: str) -> None: + """A line running straight through keeps one lane from entry to exit.""" + graph, offsets = _mini_graph(direction) + section = graph.sections["s"] + exit_ = graph.stations["s__exit"] + for lid in ("a", "b"): + assert lane_x(graph, section, lid, offsets) == pytest.approx( + port_lane_coord(graph, exit_, lid, offsets) + ) + + +# --------------------------------------------------------------------------- # +# Seam approach == departure oracle over the corpus +# --------------------------------------------------------------------------- # + + +@lru_cache(maxsize=None) +def _seam_mismatches(name: str) -> tuple[str, ...]: + graph = parse_metro_mermaid((TOPOLOGIES / f"{name}.mmd").read_text()) + compute_layout(graph, validate=False) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return tuple( + m.message() + for m in check_seam_approach_equals_departure(graph, routes, offsets) + ) + + +def _seam_params() -> list: + return [ + pytest.param(path.stem, id=path.stem) + for path in sorted(TOPOLOGIES.glob("*.mmd")) + ] + + +@pytest.mark.parametrize("name", _seam_params()) +def test_seam_approach_equals_departure(name: str) -> None: + """Every continuation seam lands each line on its section's lane coordinate.""" + mismatches = _seam_mismatches(name) + assert not mismatches, "\n".join(mismatches) + + +# --------------------------------------------------------------------------- # +# Trunk and its outgoing/continuing bundle share the lane at every port +# --------------------------------------------------------------------------- # + + +def _port_discontinuities(path: Path) -> tuple[str, ...]: + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph, validate=False) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return tuple( + d.message() for d in check_seam_segments_meet_at_port(graph, routes, offsets) + ) + + +@pytest.mark.parametrize("name", _seam_params()) +def test_seam_segments_meet_at_port(name: str) -> None: + """No port parts a line's trunk from its outgoing/continuing bundle.""" + discontinuities = _port_discontinuities(TOPOLOGIES / f"{name}.mmd") + assert not discontinuities, "\n".join(discontinuities) + + +@pytest.mark.parametrize( + "rel", + [ + "examples/rnaseq_auto.mmd", + "examples/topologies/fold_fan_across.mmd", + "examples/topologies/lr_to_tb_top_drop_two_lines.mmd", + ], +) +def test_rotated_tb_output_connects_to_bundle(rel: str) -> None: + """A rotated TB trunk meets the inter-section bundle leaving (or feeding) it. + + The rotation draw rides ``x - off``; the bundle crossing the seam must ride + the same lane, so the descent into the next section (or out of the feeding + one) is one stroke rather than a trunk on one side of the port and a bundle + reflected to the other. + """ + discontinuities = _port_discontinuities(ROOT / rel) + assert not discontinuities, "\n".join(discontinuities) diff --git a/tests/test_seam_orientation.py b/tests/test_seam_orientation.py new file mode 100644 index 000000000..444ce7a0b --- /dev/null +++ b/tests/test_seam_orientation.py @@ -0,0 +1,308 @@ +"""Corpus oracle for the seam-orientation classifier (issue #1040). + +:func:`seam_orientation` is a pure, seam-local primitive: given a feeding exit +port and the entry port it feeds, it returns whether the bundle order arrives +*preserved* or *reversed*, derived only from port sides and grid topology. These +tests pin it against the legacy reversal machinery across every inter-section +seam in the corpus. + +Two guarantees: + +* **Soundness** -- the classifier never reverses a seam the machinery keeps. Every + transposition it reports corresponds to a real reversal idiom. +* **Documented residuals** -- the machinery additionally marks a fixed set of + seams reversed that the classifier preserves. These are *not* classifier + failures: in every case the transposition was introduced at an upstream seam + and rides through in the delivered bundle order, while the legacy + section-absolute flag (``detect_reversed_sections`` row-propagation and the + ``_is_tb_lr_exit_nonreversed`` "not itself already reversed" clause) re-reports + it per section. The lane-order landing (#1041) resolves these by driving order + from the arrival bundle rather than re-reversing at the seam. +""" + +from __future__ import annotations + +import warnings +from functools import lru_cache +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import COORD_TOLERANCE +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing.context import ( + is_far_side_around_below_left_entry, + is_near_vertical_junction_right_entry, +) +from nf_metro.layout.routing.reversal import detect_reversed_sections +from nf_metro.layout.routing.seam import SeamOrientation, seam_orientation +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import MetroGraph, Port, PortSide + + +def _machinery_is_over_top_right_entry( + graph: MetroGraph, port: Port, tb_sections: set[str] +) -> bool: + """Whether *port* is a RIGHT entry reached by an over-the-top loop. + + Ground-truth detection for the over-the-top RIGHT-entry idiom, against which + this corpus oracle checks :func:`seam_orientation`. A RIGHT entry on a TB + section fed by an exit port in the SAME grid row, an ADJACENT column, and to + the port's LEFT: that feed loops over the section's top and approaches from + the right -- a U-turn that transposes the bundle. A right entry fed from the + right (a fold) or across columns (a bypass) keeps its order and is excluded. + """ + if not (port.is_entry and port.side == PortSide.RIGHT): + return False + if port.section_id not in tb_sections: + return False + psec = graph.sections.get(port.section_id) + pst = graph.stations.get(port.id) + if psec is None or pst is None: + return False + for edge in graph.edges_to(port.id): + src = graph.stations.get(edge.source) + src_port = graph.ports.get(edge.source) + if not (src and src_port and not src_port.is_entry): + continue + ssec = graph.sections.get(src.section_id) if src.section_id else None + if ssec is None: + continue + if ( + ssec.grid_row == psec.grid_row + and abs(ssec.grid_col - psec.grid_col) <= 1 + and src.x < pst.x - COORD_TOLERANCE + ): + return True + return False + + +EXAMPLES_DIR = Path(__file__).parent.parent / "examples" +TOPOLOGIES_DIR = EXAMPLES_DIR / "topologies" + +CORPUS_FILES = sorted(EXAMPLES_DIR.glob("*.mmd")) + sorted(TOPOLOGIES_DIR.glob("*.mmd")) +CORPUS_IDS = [ + f"{f.parent.name}/{f.stem}" if f.parent.name == "topologies" else f.stem + for f in CORPUS_FILES +] + +# Seams the legacy machinery marks reversed but the seam-local classifier +# preserves. Keyed (fixture, feeder section, consumer section, +# exit-side -> entry-side). Two families, both documented in seam.py: +# - propagated / conditional reversal carried in the delivered bundle from an +# upstream fold turn (the bulk), and +# - the near-vertical junction RIGHT entry, whose reversal turns on pixel +# overhang rather than sides/grid and is deferred coordinate-free. +NEAR_VERTICAL_RESIDUAL = ("near_vertical_junction_hook", "src", "pseudo", "R->R") +EXPECTED_RESIDUALS = frozenset( + { + NEAR_VERTICAL_RESIDUAL, + # positive_fan TB (right-entry) feeding a vertical TB column below it: + # the machinery marks the lower section as positive_fan so it draws on + # the same +x side as the drop, but the classifier sees a vertical→vertical + # continuation and correctly says PRESERVE (no bundle-order flip). + ("tb_right_entry_stack", "upper", "lower", "B->T"), + # left_exit_sink_below: a TB bridge's LEFT exit drops into a LEFT-entry + # sink below and to the left. The section-absolute flag marks the sink + # reversed, but the seam is a single-line L->L drop with no bundle order + # to flip, so the classifier preserves it. + ("left_exit_sink_below", "bridge", "sink", "L->L"), + ("fold_double", "annotation", "interpretation", "L->R"), + ("fold_double", "hard_filter", "annotation", "L->R"), + ("fold_double", "interpretation", "integration", "L->R"), + ("fold_fan_across", "stat_analysis", "reporting", "L->R"), + ("fold_stacked_branch", "bio_interp", "final_report", "L->R"), + ("longread_variant_calling", "annotation", "reports", "L->R"), + ("longread_variant_calling", "cnv_calling", "reports", "L->R"), + ("longread_variant_calling", "jointcalling", "annotation", "L->R"), + ("longread_variant_calling", "small_variants", "annotation", "R->R"), + ("longread_variant_calling", "small_variants", "jointcalling", "R->R"), + ("longread_variant_calling", "tr_calling", "reports", "L->R"), + ("reconverge_reversed_fold", "bio_interp", "final_report", "L->R"), + ("u_turn_fold", "sec7", "sec8", "L->R"), + ("variantbenchmarking", "benchmarking", "output_processing", "L->R"), + ("variantbenchmarking", "ensembl_truth", "benchmarking", "L->R"), + ("variantbenchmarking", "filtering", "benchmarking", "R->R"), + ("variantbenchmarking", "normalization", "benchmarking", "R->R"), + # True-serpentine fold: a horizontal-flow row folds down through a BOTTOM + # exit into a horizontal-flow return row, whose descend->turn corner + # reverses the bundle order. The machinery marks the receiver (and its + # row successors) reversed, but the classifier preserves the seam. + ("serpentine_rl_bundle", "variant_calling", "normalization", "B->T"), + ("serpentine_rl_bundle", "normalization", "consensus", "L->R"), + ("serpentine_rl_bundle", "consensus", "realignment", "L->R"), + ("branch_fold_forward", "post", "report", "B->T"), + # Auto-folded serpentine return row: the fold reverses consensus, which + # propagates along the row to realign and reporting (reached through the + # exit peel-off junction). The realign->reporting seam is a plain L->R + # continuation the classifier preserves while the machinery reverses it. + ("foldback_exit_peeloff", "realign", "reporting", "L->R"), + # Manual-grid LR bottom-exit dropping into a direction: RL top entry + # stacked below it: the fold reverses consensus (the B->T drop receiver) + # and propagates along the return row to reporting (reached through the + # exit peel-off junction). Both seams are continuations the classifier + # preserves while the machinery reverses them. + ("lr_bottom_exit_rl_top_entry_jog", "normalization", "consensus", "B->T"), + ("lr_bottom_exit_rl_top_entry_jog", "realign", "reporting", "L->R"), + # Manual-grid serpentine whose return row flows direction: RL: the fold + # reverses consensus (the B->T drop receiver) and propagates along the + # return row to reporting. Both seams are continuations the classifier + # preserves while the machinery reverses them. + ("manual_rl_row_nonconsumer_bypass", "normalization", "consensus", "B->T"), + ("manual_rl_row_nonconsumer_bypass", "realign", "reporting", "L->R"), + # Same return-row reversal as manual_rl_row_nonconsumer_bypass, but + # realign and reporting are packed into a single grid cell rather than + # each owning its own. + ("packed_cell_cellmate_bypass", "normalization", "consensus", "B->T"), + ("packed_cell_cellmate_bypass", "realign", "reporting", "L->R"), + # Same packed-cell return-row reversal with the bypass source sitting in + # the column adjacent to the packed cell (no gap column). + ("packed_cell_cellmate_bypass_adjacent", "normalization", "consensus", "B->T"), + ("packed_cell_cellmate_bypass_adjacent", "realign", "reporting", "L->R"), + } +) + + +def _machinery_reverses(graph, entry_port, sec_id, tb_sections, reversed_secs) -> bool: + """The reversal the scattered legacy machinery effectively applies to a seam.""" + return ( + sec_id in reversed_secs + or _machinery_is_over_top_right_entry(graph, entry_port, tb_sections) + or is_far_side_around_below_left_entry(graph, entry_port) + or is_near_vertical_junction_right_entry(graph, entry_port) + ) + + +def _side_pair(exit_port, entry_port) -> str: + """Seam side signature, e.g. ``"R->L"`` for a RIGHT exit into a LEFT entry.""" + return f"{exit_port.side.name[0]}->{entry_port.side.name[0]}" + + +def _resolve_exit_ports(graph, entry_port_id): + """Feeding exit port(s) for an entry, resolved through any fold/merge junction.""" + junction_ids = graph.junction_ids + exits = [] + for edge in graph.edges_to(entry_port_id): + if edge.source in junction_ids: + for upstream in graph.edges_to(edge.source): + src_port = graph.ports.get(upstream.source) + if src_port is not None and not src_port.is_entry: + exits.append(src_port) + else: + src_port = graph.ports.get(edge.source) + if src_port is not None and not src_port.is_entry: + exits.append(src_port) + return exits + + +@lru_cache(maxsize=None) +def _seam_verdicts(path_str: str): + """All inter-section seams in a fixture with classifier + machinery verdicts. + + Returns a list of ``(signature, classifier_reverse, machinery_reverse)``. + ``compute_layout`` is the only layout pass run -- proving the classifier needs + no port-offset state (those are computed later, in ``compute_station_offsets``). + """ + path = Path(path_str) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + graph = parse_metro_mermaid(path.read_text(), max_station_columns=15) + compute_layout(graph) + tb_sections = {sid for sid, s in graph.sections.items() if s.direction == "TB"} + reversed_secs = detect_reversed_sections(graph) + rows = [] + for sec_id, section in graph.sections.items(): + for ep_id in section.entry_ports: + entry = graph.ports.get(ep_id) + if entry is None: + continue + machinery = _machinery_reverses( + graph, entry, sec_id, tb_sections, reversed_secs + ) + for exit_port in _resolve_exit_ports(graph, ep_id): + sig = ( + path.stem, + exit_port.section_id, + sec_id, + _side_pair(exit_port, entry), + ) + classifier = ( + seam_orientation(graph, exit_port, entry) is SeamOrientation.REVERSE + ) + rows.append((sig, classifier, machinery)) + return rows + + +@pytest.mark.parametrize("path", CORPUS_FILES, ids=CORPUS_IDS) +def test_classifier_never_reverses_a_kept_seam(path: Path) -> None: + """Soundness: every seam the classifier reverses, the machinery reverses too.""" + false_reverses = [ + sig + for sig, classifier, machinery in _seam_verdicts(str(path)) + if classifier and not machinery + ] + assert not false_reverses, ( + f"{path.stem}: classifier reversed seam(s) the machinery keeps: " + f"{false_reverses}" + ) + + +def test_residual_set_matches_documented_divergences() -> None: + """The machinery-reverses / classifier-preserves gap is exactly the pinned set.""" + residuals = set() + for path in CORPUS_FILES: + for sig, classifier, machinery in _seam_verdicts(str(path)): + if machinery and not classifier: + residuals.add(sig) + assert residuals == EXPECTED_RESIDUALS, { + "unexpected (new divergence)": residuals - EXPECTED_RESIDUALS, + "missing (now matched -- prune from list)": EXPECTED_RESIDUALS - residuals, + } + + +def test_classifier_agrees_on_the_bulk_of_reversals() -> None: + """The classifier reproduces most reversals (sanity floor on coverage).""" + agree = under = 0 + for path in CORPUS_FILES: + for _sig, classifier, machinery in _seam_verdicts(str(path)): + if machinery and classifier: + agree += 1 + elif machinery and not classifier: + under += 1 + assert agree > under, f"coverage too low: agree={agree} residual={under}" + + +# --- Each reversing idiom must actually fire on a representative fixture --- + + +def _verdict(stem: str, feeder: str, consumer: str): + path = next(p for p in CORPUS_FILES if p.stem == stem) + for sig, classifier, _machinery in _seam_verdicts(str(path)): + if sig[1] == feeder and sig[2] == consumer: + return classifier + raise AssertionError(f"no {feeder}->{consumer} seam in {stem}") + + +@pytest.mark.parametrize( + ("stem", "feeder", "consumer"), + [ + ("tb_right_entry_stack", "source", "upper"), # over-the-top RIGHT entry + ("bypass_leftward_far_side_entry", "src_sec", "tgt_sec"), # around-below LEFT + ("rnaseq_sections", "postprocessing", "qc_report"), # TB column continuation + ("fold_stacked_branch", "integration", "bio_interp"), # fold RIGHT via junction + ("fold_double", "calling", "hard_filter"), # fold turn across rows + ], +) +def test_each_reversing_idiom_fires(stem: str, feeder: str, consumer: str) -> None: + assert _verdict(stem, feeder, consumer) is True + + +def test_straight_continuation_preserves() -> None: + """A forward RIGHT-exit -> LEFT-entry continuation is never reversed.""" + saw_continuation = False + for path in CORPUS_FILES: + for sig, classifier, _machinery in _seam_verdicts(str(path)): + if sig[3] == "R->L": + saw_continuation = True + assert not classifier, f"{sig} should preserve" + assert saw_continuation diff --git a/tests/test_section_arranger.py b/tests/test_section_arranger.py new file mode 100644 index 000000000..077ab77e8 --- /dev/null +++ b/tests/test_section_arranger.py @@ -0,0 +1,108 @@ +"""Tests for the direction-agnostic section lane arranger. + +The arranger reduces a section's *boundary configuration* -- the order in which +lines cross its determining edge -- to a lane order, so that a line crossing at +edge-slot ``k`` rides lane ``k`` and the bundle runs parallel by construction. +Fan-out divergence reads its exit edge's peel order; reconvergence reads its +entry edge's primary-feeder order. + +The unit tests pin the reduction itself; the fixture tests prove the reduction +is wired into the pipeline and drives the lane order of real shipped diagrams. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets +from nf_metro.layout.routing.arranger import BoundaryConfig, lane_order +from nf_metro.parser.mermaid import parse_metro_mermaid + +REPO_ROOT = Path(__file__).resolve().parent.parent +EXAMPLE_TOPOLOGIES = REPO_ROOT / "examples" / "topologies" + + +# --------------------------------------------------------------------------- +# Unit tests: the order-to-lanes reduction +# --------------------------------------------------------------------------- + +PRIORITY = {"a": 0, "b": 1, "c": 2, "d": 3} + + +def test_determining_order_takes_the_front_lanes() -> None: + """Lines crossing the determining edge ride the front lanes in edge order.""" + config = BoundaryConfig(present=("a", "b", "c"), determining=("c", "a")) + assert lane_order(config, PRIORITY) == ("c", "a", "b") + + +def test_unconstrained_lines_fall_to_the_back_in_priority_order() -> None: + """Lines the determining edge does not pin are appended by priority, not by + their position in *present*.""" + config = BoundaryConfig(present=("d", "c", "b", "a"), determining=("d",)) + assert lane_order(config, PRIORITY) == ("d", "a", "b", "c") + + +def test_returns_none_when_already_priority_order() -> None: + """A determining order that reproduces the plain priority order needs no + re-slot, signalled by ``None``.""" + config = BoundaryConfig(present=("a", "b", "c"), determining=("a", "b")) + assert lane_order(config, PRIORITY) is None + + +def test_determining_lines_absent_from_present_are_ignored() -> None: + """An edge order naming a line the section does not carry is filtered out + before it can claim a lane.""" + config = BoundaryConfig(present=("a", "b"), determining=("c", "b")) + assert lane_order(config, PRIORITY) == ("b", "a") + + +def test_missing_priority_defaults_to_zero() -> None: + """Among unconstrained lines, one absent from the priority map sorts as 0, + ahead of a line with a positive priority.""" + config = BoundaryConfig(present=("p", "q", "z"), determining=("z",)) + # 'z' leads (determining); 'q' (default 0) precedes 'p' (priority 3). + assert lane_order(config, {"p": 3}) == ("z", "q", "p") + + +# --------------------------------------------------------------------------- +# Fixture tests: the reduction drives real layout +# --------------------------------------------------------------------------- + + +def _section_lane_order(path: Path, sec_id: str) -> list[str]: + """Lines of *sec_id* in lane order (ascending stored offset). + + Reads a representative multi-line station of the section after layout, so + the order reflects the offsets the arranger assigned. + """ + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + for sid, station in graph.stations.items(): + if station.is_port or station.section_id != sec_id: + continue + lines = list(graph.station_lines(sid)) + if len(lines) >= 2: + return sorted(lines, key=lambda lid: offsets.get((sid, lid), 0.0)) + raise AssertionError(f"no multi-line station found in section {sec_id!r}") + + +@pytest.mark.parametrize( + ("fixture", "sec_id", "expected"), + [ + ("dogleg_twoline_fanout.mmd", "left_tgt", ["to_new", "to_src"]), + ("clear_channel_target_aware_push.mmd", "src", ["rna", "dna"]), + ("reconverge_reversed_fold.mmd", "preprocessing", ["rna", "atac", "protein"]), + ("reconverge_reversed_fold.mmd", "integration", ["rna", "atac", "protein"]), + ], +) +def test_fanout_source_section_leaves_in_peel_order( + fixture: str, sec_id: str, expected: list[str] +) -> None: + """A section feeding a shared fan-out leaves its bundle in the peel order + the arranger reads off the EXIT edge, so the lines descend without + crossing.""" + assert _section_lane_order(EXAMPLE_TOPOLOGIES / fixture, sec_id) == expected diff --git a/tests/test_section_boundary_routing.py b/tests/test_section_boundary_routing.py new file mode 100644 index 000000000..a56c7789f --- /dev/null +++ b/tests/test_section_boundary_routing.py @@ -0,0 +1,170 @@ +"""Inter-section routes must not skirt or cross section boundaries (#724). + +The discipline these tests pin for cross-row / merge / stacked geometries: + +* a line never passes through the interior of a section it does not stop in + (including the route's *own* target box reached on the far side), and +* every route that lands on a LEFT/RIGHT entry port approaches it from the + port's own outward side, never by slicing across the box. + +The checks read the final routed polylines directly, so they hold the +geometry to account regardless of which runtime guard (if any) covers a case. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout import compute_layout +from nf_metro.layout.geometry import segment_intersects_bbox +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.parser import parse_metro_mermaid +from nf_metro.parser.model import PortSide +from nf_metro.render.svg import apply_route_offsets + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" + +# Each exercises one cross-row / merge / stacked geometry from #724. +BOUNDARY_FIXTURES = [ + "stacked_left_exit_drop", + "merge_leftmost_sink_branch", + "merge_around_below_leftmost", + "right_entry_from_above", +] +# Established geometries the same discipline must keep holding on. +CLEAN_FIXTURES = [ + "around_below_ep_col_gt0", + "right_entry_gap_above_empty_row", + "right_entry_wrap_no_fan", +] +# RIGHT entry fed from a higher row whose source sits past the target's right +# edge: a straight drop down the outward side reaches the entry Y unobstructed, +# so the route must turn in directly rather than loop below the box (#889). +DROP_IN_FIXTURES = [ + "right_entry_from_above", + "right_entry_from_above_far", +] + +TOL = 2.0 + + +def _routed(stem): + graph = parse_metro_mermaid((TOPOLOGIES_DIR / f"{stem}.mmd").read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, offsets, routes + + +def _entry_port_at(graph, x, y): + """The entry port a route ending at ``(x, y)`` lands on, or ``None``. + + Resolves a port even when the edge targets a virtual merge/junction node: + such a route is extended to terminate on the section's entry-port station. + """ + for port in graph.ports.values(): + if port.is_entry and abs(port.x - x) <= TOL and abs(port.y - y) <= TOL: + return port + return None + + +@pytest.mark.parametrize("stem", BOUNDARY_FIXTURES + CLEAN_FIXTURES) +def test_entry_ports_approached_from_outward_side(stem): + """No route reaches a LEFT/RIGHT entry port by crossing the target box.""" + graph, offsets, routes = _routed(stem) + for rp in routes: + pts = apply_route_offsets(rp, offsets) + if len(pts) < 2: + continue + port = _entry_port_at(graph, pts[-1][0], pts[-1][1]) + if port is None or port.side not in (PortSide.LEFT, PortSide.RIGHT): + continue + section = graph.sections.get(port.section_id) if port.section_id else None + if section is None or section.bbox_w <= 0: + continue + prev = pts[-2] + if abs(prev[1] - pts[-1][1]) > TOL: + continue # not a horizontal approach leg + bx0 = section.bbox_x + bx1 = bx0 + section.bbox_w + if port.side is PortSide.RIGHT: + assert prev[0] >= bx1 - TOL, ( + f"{stem}: {rp.edge.source}->{rp.edge.target} approaches RIGHT " + f"entry {port.id} from inside the box (prev x={prev[0]:.1f} < " + f"right edge {bx1:.1f})" + ) + else: + assert prev[0] <= bx0 + TOL, ( + f"{stem}: {rp.edge.source}->{rp.edge.target} approaches LEFT " + f"entry {port.id} from inside the box (prev x={prev[0]:.1f} > " + f"left edge {bx0:.1f})" + ) + + +@pytest.mark.parametrize("stem", BOUNDARY_FIXTURES + CLEAN_FIXTURES) +def test_routes_do_not_cross_unrelated_section_interiors(stem): + """No routed segment passes through a section box it does not connect to.""" + graph, offsets, routes = _routed(stem) + inset = 3.0 + boxes = [ + ( + sid, + sec.bbox_x + inset, + sec.bbox_y + inset, + sec.bbox_x + sec.bbox_w - inset, + sec.bbox_y + sec.bbox_h - inset, + ) + for sid, sec in graph.sections.items() + if sec.bbox_w > 2 * inset and sec.bbox_h > 2 * inset + ] + for rp in routes: + own = { + graph.section_for_station(rp.edge.source), + graph.section_for_station(rp.edge.target), + } + pts = apply_route_offsets(rp, offsets) + for sid, x0, y0, x1, y1 in boxes: + if sid in own: + continue + for i in range(len(pts) - 1): + assert not segment_intersects_bbox( + pts[i][0], pts[i][1], pts[i + 1][0], pts[i + 1][1], (x0, y0, x1, y1) + ), ( + f"{stem}: {rp.edge.source}->{rp.edge.target} crosses " + f"unrelated section {sid!r} interior" + ) + + +@pytest.mark.parametrize("stem", DROP_IN_FIXTURES) +def test_right_entry_from_above_drops_in_without_diving_below(stem): + """A clear outward-side drop-in must not loop below the target box (#889).""" + graph, offsets, routes = _routed(stem) + checked = 0 + for rp in routes: + pts = apply_route_offsets(rp, offsets) + if len(pts) < 2: + continue + port = _entry_port_at(graph, pts[-1][0], pts[-1][1]) + if port is None or port.side is not PortSide.RIGHT: + continue + section = graph.sections.get(port.section_id) if port.section_id else None + if section is None or section.bbox_h <= 0: + continue + box_bottom = section.bbox_y + section.bbox_h + max_y = max(y for _, y in pts) + assert max_y <= box_bottom + TOL, ( + f"{stem}: {rp.edge.source}->{rp.edge.target} dives to y={max_y:.1f}, " + f"below the target box bottom {box_bottom:.1f}; a direct drop-in down " + f"the outward side reaches the entry Y without looping under the box" + ) + checked += 1 + assert checked, f"{stem}: no RIGHT entry route found to check" + + +@pytest.mark.parametrize("stem", BOUNDARY_FIXTURES) +def test_boundary_fixtures_pass_runtime_guards(stem): + """The validate-block guards accept each repaired geometry.""" + graph = parse_metro_mermaid((TOPOLOGIES_DIR / f"{stem}.mmd").read_text()) + compute_layout(graph, validate=True) diff --git a/tests/test_section_header_placement.py b/tests/test_section_header_placement.py new file mode 100644 index 000000000..8fde46c17 --- /dev/null +++ b/tests/test_section_header_placement.py @@ -0,0 +1,84 @@ +"""Section headers must never be drawn across a routed metro line (issue #774). + +A line entering a section through an edge under its top-left header would cross +the title text. The placement chain relocates the header (below, rotated onto a +side, or nudged past the trunk) instead of routing the line around the title. + +Covers: + +* Happy-path: every shipped example and topology fixture places every section + header clear of every route. +* Meaningfulness: with header relocation disabled (the resolver pinned to its + default above-left position) the new fixtures clash, proving the chain - not + coincidence - is what keeps them clear. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +import nf_metro.render.section_header as section_header +from nf_metro.api import resolve_theme +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges_centred +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.section_header import ( + check_section_headers_clear_routes, + resolve_all_section_headers, +) +from nf_metro.render.svg import apply_route_offsets + +REPO_ROOT = Path(__file__).resolve().parent.parent +EXAMPLES = REPO_ROOT / "examples" +EXAMPLE_TOPOLOGIES = EXAMPLES / "topologies" +FIXTURE_TOPOLOGIES = REPO_ROOT / "tests" / "fixtures" / "topologies" + +RELOCATION_FIXTURES = [ + EXAMPLE_TOPOLOGIES / "top_entry_header_clash.mmd", + EXAMPLE_TOPOLOGIES / "header_side_rotated.mmd", + EXAMPLE_TOPOLOGIES / "header_nudge.mmd", +] + + +def _gather_fixtures() -> list[Path]: + paths: list[Path] = [] + paths.extend(sorted(EXAMPLES.glob("*.mmd"))) + paths.extend(sorted(EXAMPLE_TOPOLOGIES.glob("*.mmd"))) + paths.extend(sorted(FIXTURE_TOPOLOGIES.glob("*.mmd"))) + return paths + + +def _polylines_and_font(path: Path): + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges_centred(graph, station_offsets=offsets) + polylines = [apply_route_offsets(route, offsets) for route in routes] + font_size = resolve_theme(None, graph).section_label_font_size + return graph, polylines, font_size + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_no_section_header_route_clashes_in_gallery(path: Path) -> None: + """Every section header clears every route across the shipped corpus.""" + graph, polylines, font_size = _polylines_and_font(path) + placements = resolve_all_section_headers(graph, font_size, polylines) + clashes = check_section_headers_clear_routes(placements, polylines) + assert not clashes, "\n".join(c.message() for c in clashes) + + +@pytest.mark.parametrize("path", RELOCATION_FIXTURES, ids=lambda p: p.stem) +def test_default_above_placement_would_clash( + path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + """Pinning every header to its default above-left position reintroduces the + clash on the relocation fixtures, so the chain is doing real work.""" + monkeypatch.setattr(section_header, "_placement_clear", lambda *a, **k: True) + graph, polylines, font_size = _polylines_and_font(path) + placements = resolve_all_section_headers(graph, font_size, polylines) + clashes = check_section_headers_clear_routes(placements, polylines) + assert clashes, "expected an above-left header to clash with the route" diff --git a/tests/test_section_numbering.py b/tests/test_section_numbering.py new file mode 100644 index 000000000..e2174257c --- /dev/null +++ b/tests/test_section_numbering.py @@ -0,0 +1,118 @@ +"""Tests for section numbering by visual reading order (#217). + +After layout, sections are numbered by flow sweep then (grid_col, +grid_row). Each left-to-right or right-to-left run is one sweep, +with TB fold sections belonging to the sweep they terminate. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.parser.mermaid import parse_metro_mermaid + +EXAMPLES_DIR = Path(__file__).resolve().parent.parent / "examples" + + +def _load(name: str): + """Parse and lay out an example pipeline.""" + text = (EXAMPLES_DIR / f"{name}.mmd").read_text() + g = parse_metro_mermaid(text) + compute_layout(g) + return g + + +# Module-scoped fixtures to avoid redundant compute_layout calls. + + +@pytest.fixture(scope="module") +def variantprioritization(): + return _load("variantprioritization") + + +@pytest.fixture(scope="module") +def variantbenchmarking(): + return _load("variantbenchmarking") + + +@pytest.fixture(scope="module") +def rnaseq_auto(): + return _load("rnaseq_auto") + + +@pytest.fixture(scope="module") +def asymmetric_tree(): + return _load("topologies/asymmetric_tree") + + +class TestSectionNumberingOrder: + """Section numbers should follow visual reading order.""" + + def test_numbers_are_sequential(self, variantprioritization): + """Section numbers should be 1..N with no gaps.""" + numbers = sorted(s.number for s in variantprioritization.sections.values()) + assert numbers == list(range(1, len(variantprioritization.sections) + 1)) + + def test_all_examples_sequential(self): + """Every example with sections should have sequential numbering.""" + for mmd_path in sorted(EXAMPLES_DIR.glob("*.mmd")): + text = mmd_path.read_text() + g = parse_metro_mermaid(text) + if not g.sections: + continue + compute_layout(g) + numbers = sorted(s.number for s in g.sections.values()) + assert numbers == list(range(1, len(g.sections) + 1)), ( + f"{mmd_path.name}: section numbers not sequential: {numbers}" + ) + + def test_within_sweep_columns_increase( + self, variantprioritization, variantbenchmarking, rnaseq_auto + ): + """Within each flow sweep, numbers increase left-to-right. + + Sections at the same column should be numbered top-to-bottom. + """ + for name, g in [ + ("variantprioritization", variantprioritization), + ("variantbenchmarking", variantbenchmarking), + ("rnaseq_auto", rnaseq_auto), + ]: + secs = sorted(g.sections.values(), key=lambda s: s.number) + for i in range(len(secs) - 1): + a, b = secs[i], secs[i + 1] + if a.grid_col == b.grid_col: + assert a.grid_row <= b.grid_row, ( + f"{name}: #{a.number} {a.name} (row {a.grid_row}) " + f"before #{b.number} {b.name} (row {b.grid_row}) " + f"at col {a.grid_col}" + ) + + def test_fold_return_row_numbered_after_forward_row(self, rnaseq_auto): + """RL sections after a fold should have higher numbers than all + LR sections in the preceding sweep.""" + lr_nums = [ + s.number + for s in rnaseq_auto.sections.values() + if s.direction in ("LR", "TB") + ] + rl_nums = [ + s.number for s in rnaseq_auto.sections.values() if s.direction == "RL" + ] + if lr_nums and rl_nums: + assert min(rl_nums) > max(lr_nums), ( + f"RL sections {rl_nums} should all be > LR/TB sections {lr_nums}" + ) + + def test_asymmetric_top_row_sequential(self, asymmetric_tree): + """In asymmetric_tree, the top row should be numbered sequentially.""" + top_row = sorted( + (s for s in asymmetric_tree.sections.values() if s.grid_row == 0), + key=lambda s: s.grid_col, + ) + nums = [s.number for s in top_row] + for i in range(len(nums) - 1): + assert nums[i] < nums[i + 1], f"Top row numbers not increasing: {nums}" diff --git a/tests/test_serpentine_foldback_bundle.py b/tests/test_serpentine_foldback_bundle.py new file mode 100644 index 000000000..ae25d0cbe --- /dev/null +++ b/tests/test_serpentine_foldback_bundle.py @@ -0,0 +1,62 @@ +"""Folding ``rnaseq_auto`` keeps inter-section flow forward (#972, #1080). + +The shipped ``rnaseq_auto`` example has a side-branch section (``pseudo_align``, +a sink) sharing the ``genome_align`` topo column. At any ``--fold-threshold`` +low enough to wrap the chain, the serpentine packer must not fold that branch +column: doing so makes ``genome_align`` a TB bridge and strands its consumer +``postprocessing`` behind it, so the inter-section bundle reads backward and +leans on the #671/#972 fold-back staircase to recover. + +Auto-layout instead folds at a spine link (``postprocessing``), so +``genome_align`` leads ``postprocessing`` in grid order and the bundle flows +forward across the whole documented fold-threshold range. The fold-back +staircase routing itself stays locked by ``test_left_exit_right_entry_step`` +and the ``fold_double`` / ``u_turn_fold`` topology fixtures. + +See issues #972 and #1080. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.invariants import assert_render_curve_invariants +from nf_metro.parser.mermaid import parse_metro_mermaid + +FIXTURE = Path(__file__).parent.parent / "examples" / "rnaseq_auto.mmd" + +# The default threshold (15) does not fold the example; every lower value wraps +# it into a serpentine and so exercises the fold-point choice. +FOLD_THRESHOLDS = [1, 2, 3, 6, 10] + + +def _laid_out(fold_threshold: int): + graph = parse_metro_mermaid(FIXTURE.read_text(), max_station_columns=fold_threshold) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, offsets, routes + + +@pytest.mark.parametrize("fold_threshold", FOLD_THRESHOLDS) +def test_fold_keeps_genome_ahead_of_postprocessing(fold_threshold): + """``genome_align`` is never folded behind its consumer ``postprocessing``.""" + graph, _offsets, _routes = _laid_out(fold_threshold) + genome = graph.sections["genome_align"] + post = graph.sections["postprocessing"] + assert genome.grid_col <= post.grid_col, ( + f"genome_align (col {genome.grid_col}) must not sit ahead of its " + f"consumer postprocessing (col {post.grid_col}) at fold " + f"threshold {fold_threshold}" + ) + + +@pytest.mark.parametrize("fold_threshold", FOLD_THRESHOLDS) +def test_folded_render_has_no_curve_defect(fold_threshold): + """The folded layout draws without a flipped or non-concentric corner.""" + graph, offsets, routes = _laid_out(fold_threshold) + assert_render_curve_invariants(graph, routes, offsets) diff --git a/tests/test_serpentine_grid_bundle.py b/tests/test_serpentine_grid_bundle.py new file mode 100644 index 000000000..e8df4c6be --- /dev/null +++ b/tests/test_serpentine_grid_bundle.py @@ -0,0 +1,68 @@ +"""Multi-line bundles fold cleanly through an L->R section-grid serpentine. + +A 2+-line bundle that wraps from one section row to the next via the L->R +section-grid fold-back (exit the right of row *N*, re-enter the left of row +*N+1*) keeps its lines fanned on every leg of the wrap, on grids larger than +2x2: + +* ``serpentine_grid_wide_bundle`` -- the wrap spans more than one column; its + vertical channels stay fanned across the multi-column return. +* ``serpentine_grid_tall_bundle`` -- a second wrap stacks below the first; the + two wraps occupy distinct inter-row gaps, so their return runs stay on + separate channels. + +See issue #1192 (companion #1193 for the ``direction: RL`` true-serpentine). +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.invariants import ( + assert_render_curve_invariants, + check_bundle_order_preserved, + check_concentric_bundle_corners, + check_no_collinear_distinct_lines, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +TOPOLOGIES = Path(__file__).parent.parent / "examples" / "topologies" + +FIXTURES = [ + "serpentine_grid_wide_bundle", + "serpentine_grid_tall_bundle", +] + + +def _laid_out(stem: str): + graph = parse_metro_mermaid((TOPOLOGIES / f"{stem}.mmd").read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, offsets, routes + + +@pytest.mark.parametrize("stem", FIXTURES) +def test_serpentine_grid_bundle_renders_clean(stem): + """The folded multi-line bundle draws without a curve defect.""" + graph, offsets, routes = _laid_out(stem) + assert_render_curve_invariants(graph, routes, offsets) + + +@pytest.mark.parametrize("stem", FIXTURES) +def test_serpentine_grid_bundle_no_collinear_overlay(stem): + """No two distinct lines of the wrap coincide on a shared channel.""" + graph, offsets, routes = _laid_out(stem) + assert not check_no_collinear_distinct_lines(graph, routes, offsets) + + +@pytest.mark.parametrize("stem", FIXTURES) +def test_serpentine_grid_bundle_corners_concentric(stem): + """Every wrap corner nests concentrically and preserves bundle order.""" + graph, offsets, routes = _laid_out(stem) + assert not check_concentric_bundle_corners(graph, routes, offsets) + assert not check_bundle_order_preserved(routes) diff --git a/tests/test_serpentine_rl_bundle.py b/tests/test_serpentine_rl_bundle.py new file mode 100644 index 000000000..989f41c9b --- /dev/null +++ b/tests/test_serpentine_rl_bundle.py @@ -0,0 +1,58 @@ +"""Regression: a true ``direction: RL`` serpentine fold of a multi-line bundle. + +Row 0 flows L->R, the corner section drops straight down into the section below, +and the return row flows R->L via ``%%metro direction: RL``. The fold corner is a +TOP entry port turning into the first station of a horizontal-flow (RL) section. +For a 2+-line bundle that descend->turn corner must nest concentrically and keep +bundle order; the inter-section feeder must land each line at the same per-line X +the intra drop departs from (no boundary reversal). +""" + +from __future__ import annotations + +from pathlib import Path + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing.core import route_edges_centred +from nf_metro.layout.routing.invariants import ( + assert_render_curve_invariants, + check_bundle_order_preserved, + check_concentric_bundle_corners, +) +from nf_metro.layout.routing.offsets import compute_station_offsets +from nf_metro.parser import parse_metro_mermaid + +FIXTURE = ( + Path(__file__).parent.parent + / "examples" + / "topologies" + / "serpentine_rl_bundle.mmd" +) + + +def _laid_out(): + graph = parse_metro_mermaid(FIXTURE.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges_centred(graph, station_offsets=offsets) + return graph, routes, offsets + + +def test_rl_serpentine_bundle_renders_without_abort(): + """The fold corner must not raise from the render curve invariants.""" + graph, routes, offsets = _laid_out() + assert_render_curve_invariants(graph, routes, offsets) + + +def test_rl_serpentine_fold_corner_is_concentric(): + """The descend->turn corner's two lines nest with a shared arc centre.""" + graph, routes, offsets = _laid_out() + violations = check_concentric_bundle_corners(graph, routes, offsets) + assert not violations, "\n".join(v.message() for v in violations) + + +def test_rl_serpentine_fold_corner_keeps_bundle_order(): + """The bundle keeps its order through the descend->turn corner.""" + _graph, routes, _offsets = _laid_out() + violations = check_bundle_order_preserved(routes) + assert not violations, "\n".join(v.message() for v in violations) diff --git a/tests/test_split_fanout_descent_invariant.py b/tests/test_split_fanout_descent_invariant.py new file mode 100644 index 000000000..408d4fd5e --- /dev/null +++ b/tests/test_split_fanout_descent_invariant.py @@ -0,0 +1,74 @@ +"""Tests for the reluctant-unbundling fan-out descent invariant. + +A line that fans out from one source to several targets must descend as ONE +trunk over the span its branches share, splitting only where each branch turns +off. When two same-line descents leaving one source overlap in their Y span +yet open at distinct Xs, the split has begun before either branch diverges and +the farther-reaching branch peels onto the inside of the nearer one, crossing +its descent (issue #702). + +Covers: + +* Happy-path: every gallery example and topology fixture (including + ``divergent_fanout_split``, the reported defect) routes without a split + same-line fan-out descent. +* Meaningfulness: with the fan-out fuse pass disabled the checker fires on the + reported fixture, so the invariant genuinely encodes the bug. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +import nf_metro.layout.routing.core as routing_core +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.invariants import ( + check_no_split_same_line_fanout_descents, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +REPO_ROOT = Path(__file__).resolve().parent.parent +EXAMPLES = REPO_ROOT / "examples" +EXAMPLE_TOPOLOGIES = EXAMPLES / "topologies" +FIXTURE_TOPOLOGIES = REPO_ROOT / "tests" / "fixtures" / "topologies" + + +def _gather_fixtures() -> list[Path]: + paths: list[Path] = [] + paths.extend(sorted(EXAMPLES.glob("*.mmd"))) + paths.extend(sorted(EXAMPLE_TOPOLOGIES.glob("*.mmd"))) + paths.extend(sorted(FIXTURE_TOPOLOGIES.glob("*.mmd"))) + return paths + + +def _route(path: Path): + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, routes, offsets + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_no_split_same_line_fanout_descents_in_gallery(path: Path) -> None: + """Every shipped example and topology routes same-line fan-outs as one + fused trunk, never as two Y-overlapping descents at distinct Xs.""" + graph, routes, offsets = _route(path) + violations = check_no_split_same_line_fanout_descents(graph, routes, offsets) + assert not violations, "\n".join(v.message() for v in violations) + + +def test_checker_fires_without_fuse_pass(monkeypatch: pytest.MonkeyPatch) -> None: + """Disabling the fan-out fuse pass reproduces the split descents the + invariant is meant to catch, proving the check is not vacuous.""" + monkeypatch.setattr( + routing_core, "_coincide_same_line_tracks", lambda routes, ctx: None + ) + graph, routes, offsets = _route(EXAMPLE_TOPOLOGIES / "divergent_fanout_split.mmd") + violations = check_no_split_same_line_fanout_descents(graph, routes, offsets) + assert violations, "expected a split fan-out descent with the fuse pass off" diff --git a/tests/test_struct_extent_predictor.py b/tests/test_struct_extent_predictor.py new file mode 100644 index 000000000..25abff09f --- /dev/null +++ b/tests/test_struct_extent_predictor.py @@ -0,0 +1,139 @@ +"""Fidelity tests for the structural-extent predictor. + +The structural snapshot (``graph._struct_height_below_top``) records each +section's content height below its bbox top after Stage 6.15a, when the +layout is fully settled. These tests pin two properties: + +* the predictor reproduces the bbox-shrink content-bottom rule exactly, and +* the structural extent in the snapshot coincides with the settled extent for + every row-ending section (within ``DEFAULT_TOLERANCE``). +""" + +from __future__ import annotations + +from collections import defaultdict +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import SECTION_Y_PADDING +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.phases.bbox import _predict_section_content_bottom +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import MetroGraph, Section + +EXAMPLES_DIR = Path(__file__).resolve().parent.parent / "examples" + +DEFAULT_TOLERANCE = 1.0 + + +def _example_files() -> list[Path]: + return sorted(EXAMPLES_DIR.rglob("*.mmd")) + + +def _settled_height_below_top(graph: MetroGraph, section: Section) -> float | None: + """Settled structural content-bottom of ``section`` as a height below its + current bbox top, computed by the same rule as the snapshot.""" + bottom = _predict_section_content_bottom(graph, section, SECTION_Y_PADDING) + if bottom is None: + return None + return bottom - section.bbox_y + + +def _row_ending_divergences(graph: MetroGraph) -> dict[str, float]: + """Per-section |structural - settled| for sections that end a row which + has a row below it (those the inter-row cascade reads).""" + by_end: dict[int, list[Section]] = defaultdict(list) + rows: set[int] = set() + for s in graph.sections.values(): + if s.bbox_h <= 0: + continue + by_end[s.grid_row + s.grid_row_span - 1].append(s) + rows.add(s.grid_row) + max_row = max(rows, default=0) + + out: dict[str, float] = {} + for r in range(max_row): + for s in by_end.get(r, []): + struct_h = graph._struct_height_below_top.get(s.id) + settled_h = _settled_height_below_top(graph, s) + if struct_h is None or settled_h is None: + continue + out[s.id] = abs(struct_h - settled_h) + return out + + +@pytest.mark.parametrize("path", _example_files(), ids=lambda p: p.name) +def test_structural_extent_matches_settled_within_tolerance(path: Path) -> None: + """The structural extent in the snapshot coincides with the settled extent + for every row-ending section across all gallery fixtures.""" + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + + divergences = _row_ending_divergences(graph) + worst = max(divergences.values(), default=0.0) + assert worst <= DEFAULT_TOLERANCE, ( + f"{path.name}: row-ending structural/settled divergence {worst:.2f}px " + f"exceeds allowed {DEFAULT_TOLERANCE:.2f}px (per-section {divergences})" + ) + + +def test_off_track_lift_not_under_predicted() -> None: + """A section with a lifted off-track input must not under-predict its + content height below the bbox top. + + The off-track lift (Stage 5.2) raises a section's bbox top to seat the + lifted input above the trunk. The structural snapshot must reflect this + raised top so the stored height-below-top is not shorter than the settled + height. A shortfall would make the cascade stack the row below too high + and risk overlap. + """ + mmd = ( + "%%metro title: off-track two-row\n" + "%%metro line: a | A | #ff0000\n" + "%%metro file: in_csv | CSV\n" + "%%metro off_track: in_csv\n" + "%%metro grid: top | 0,0\n" + "%%metro grid: bot | 0,1\n" + "graph LR\n" + " subgraph top [Top]\n" + " in_csv[ ]\n" + " t1[Step One]\n" + " t2[Step Two]\n" + " in_csv -->|a| t1\n" + " t1 -->|a| t2\n" + " end\n" + " subgraph bot [Bottom]\n" + " b1[Bee One]\n" + " b2[Bee Two]\n" + " b1 -->|a| b2\n" + " end\n" + " t2 -->|a| b1\n" + ) + graph = parse_metro_mermaid(mmd) + compute_layout(graph) + top = graph.sections["top"] + struct_h = graph._struct_height_below_top.get("top") + settled_h = _settled_height_below_top(graph, top) + assert struct_h is not None and settled_h is not None + assert struct_h >= settled_h - DEFAULT_TOLERANCE, ( + f"off-track section under-predicted: struct {struct_h:.1f} < settled " + f"{settled_h:.1f}" + ) + + +def test_predictor_matches_shrink_rule() -> None: + """The snapshot equals the shrink rule's content-bottom at capture time. + + Running the predictor over the snapshotted graph (heights stored + relative to the then-current bbox tops) must reproduce + ``_predict_section_content_bottom`` exactly, confirming the snapshot is + the shrink rule and not an approximation.""" + graph = parse_metro_mermaid((EXAMPLES_DIR / "genomic_pipeline.mmd").read_text()) + compute_layout(graph) + # The snapshot dict is populated during layout; every entry must be a + # finite height that, added to a bbox top, reconstructs a content-bottom. + assert graph._struct_height_below_top + for sid, height in graph._struct_height_below_top.items(): + assert height == pytest.approx(height) # finite, not NaN + assert sid in graph.sections diff --git a/tests/test_svg_namespace.py b/tests/test_svg_namespace.py new file mode 100644 index 000000000..5a859c80b --- /dev/null +++ b/tests/test_svg_namespace.py @@ -0,0 +1,169 @@ +"""Tests for SVG class namespacing and dark-mode CSS opt-out.""" + +import re + +from nf_metro.layout.engine import compute_layout +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.svg import render_svg +from nf_metro.themes import LIGHT_THEME, NFCORE_THEME + +_MMD = ( + "%%metro title: Test\n" + "%%metro line: main | Main | #ff0000\n" + "graph LR\n" + " subgraph s1 [Step One]\n" + " a[Input]\n" + " end\n" + " subgraph s2 [Step Two]\n" + " b[Output]\n" + " end\n" + " a -->|main| b\n" +) + + +def _make_graph(): + g = parse_metro_mermaid(_MMD) + compute_layout(g) + return g + + +# --------------------------------------------------------------------------- +# Dark-mode CSS injection +# --------------------------------------------------------------------------- + + +def test_dark_mode_css_present_for_transparent_theme_by_default(): + """LIGHT_THEME (background_color=none) injects the dark-mode block by default.""" + svg = render_svg(_make_graph(), LIGHT_THEME) + assert "prefers-color-scheme" in svg + + +def test_dark_mode_css_absent_for_opaque_theme(): + """NFCORE_THEME (opaque background) does not inject the dark-mode block.""" + svg = render_svg(_make_graph(), NFCORE_THEME) + assert "prefers-color-scheme" not in svg + + +def test_inject_dark_mode_css_false_suppresses_block(): + """inject_dark_mode_css=False suppresses the media query regardless of theme.""" + svg = render_svg(_make_graph(), LIGHT_THEME, inject_dark_mode_css=False) + assert "prefers-color-scheme" not in svg + + +def test_inject_dark_mode_css_true_matches_default(): + """inject_dark_mode_css=True is equivalent to the default for transparent themes.""" + svg_default = render_svg(_make_graph(), LIGHT_THEME) + svg_explicit = render_svg(_make_graph(), LIGHT_THEME, inject_dark_mode_css=True) + assert svg_default == svg_explicit + + +# --------------------------------------------------------------------------- +# SVG class namespacing +# --------------------------------------------------------------------------- + +_CLASS_PATTERN = re.compile(r'class="([^"]*)"') +_ALL_KNOWN_CLASSES = { + "nf-metro-title", + "nf-metro-section-box", + "nf-metro-section-num-circle", + "nf-metro-section-label", + "nf-metro-station", + "nf-metro-station-group", + "nf-metro-station-label", + "nf-metro-marker-stroke", + "nf-metro-group-underline", + "nf-metro-group-label", + "nf-metro-rail-connector", + "nf-metro-rail-knob-outline", + "nf-metro-rail-knob", +} + + +def _extract_classes(svg: str) -> set[str]: + return {cls for m in _CLASS_PATTERN.finditer(svg) for cls in m.group(1).split()} + + +def test_default_render_uses_unprefixed_classes(): + """Without a prefix the class names must be the documented bare names.""" + svg = render_svg(_make_graph(), LIGHT_THEME) + classes = _extract_classes(svg) + # At minimum title, section-box, section-label, station, station-label present + assert "nf-metro-title" in classes + assert "nf-metro-section-box" in classes + assert "nf-metro-station" in classes + # No class should start with an extra dash-prefix + assert not any(c.startswith("abc-nf-metro-") for c in classes) + + +def test_svg_class_prefix_applied_to_all_classes(): + """svg_class_prefix='abc' prepends abc- to every SVG presentation class.""" + prefix = "abc" + svg = render_svg(_make_graph(), LIGHT_THEME, svg_class_prefix=prefix) + classes = _extract_classes(svg) + + # Unprefixed presentation classes must not appear + assert "nf-metro-title" not in classes + assert "nf-metro-section-box" not in classes + assert "nf-metro-station" not in classes + + # Prefixed versions must be present + assert "abc-nf-metro-title" in classes + assert "abc-nf-metro-section-box" in classes + assert "abc-nf-metro-station" in classes + + +def test_svg_class_prefix_applied_to_metro_line_class(): + """metro-line- is also prefixed.""" + prefix = "mymap" + svg = render_svg(_make_graph(), LIGHT_THEME, svg_class_prefix=prefix) + assert "mymap-metro-line-main" in svg + # Unprefixed form absent + assert 'class="metro-line-main"' not in svg + + +def test_svg_class_prefix_applied_to_dark_mode_css_selectors(): + """Dark-mode CSS selectors are also prefixed so the block scopes correctly.""" + prefix = "ns1" + svg = render_svg(_make_graph(), LIGHT_THEME, svg_class_prefix=prefix) + assert "prefers-color-scheme" in svg + # Selectors in the ", svg, re.DOTALL) + assert style_block is not None + css = style_block.group(1) + assert ".nf-metro-section-label" not in css + assert ".nf-metro-title" not in css + + +def test_two_renders_with_different_prefixes_dont_share_presentation_classes(): + """Demonstrates the embedding isolation property.""" + g = _make_graph() + svg1 = render_svg(g, LIGHT_THEME, svg_class_prefix="map1") + svg2 = render_svg(g, LIGHT_THEME, svg_class_prefix="map2") + + classes1 = {c for c in _extract_classes(svg1) if c.startswith("map")} + classes2 = {c for c in _extract_classes(svg2) if c.startswith("map")} + + assert classes1 + assert classes2 + assert classes1.isdisjoint(classes2) + + +def test_empty_prefix_is_identical_to_no_prefix(): + """Passing svg_class_prefix='' is the same as omitting it.""" + g = _make_graph() + svg_default = render_svg(g, LIGHT_THEME) + svg_empty = render_svg(g, LIGHT_THEME, svg_class_prefix="") + assert svg_default == svg_empty + + +def test_manifest_ids_and_data_attrs_not_prefixed(): + """data-node-*, data-station-id, data-schema-version are not class names + and must not be modified by the prefix.""" + prefix = "scoped" + svg = render_svg(_make_graph(), LIGHT_THEME, svg_class_prefix=prefix) + assert "data-station-id" in svg + assert "scoped-data-station-id" not in svg + assert "data-section-id" in svg diff --git a/tests/test_svg_paths.py b/tests/test_svg_paths.py new file mode 100644 index 000000000..6e4697c55 --- /dev/null +++ b/tests/test_svg_paths.py @@ -0,0 +1,766 @@ +"""Tests for SVG path construction from routed edges. + +Validates that the SVG path rendering in svg.py correctly translates +RoutedPath waypoints + curve_radii into well-formed SVG paths with: +- Correct curve continuity (no gaps between adjacent curves) +- Curve radii arrays matching the number of corners +- Clamped radii that respect available segment budget +- Concentric bundle lines maintaining distinct radii through curves +""" + +import math +import re +import xml.etree.ElementTree as ET +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import CURVE_RADIUS +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.common import RoutedPath +from nf_metro.layout.routing.corners import curve_tangents, resolve_curve_radii +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.animate import _points_to_svg_path +from nf_metro.render.svg import _curve_tangents, apply_route_offsets, render_svg +from nf_metro.themes import NFCORE_THEME + +EXAMPLES_DIR = Path(__file__).parent.parent / "examples" +TOPOLOGIES_DIR = EXAMPLES_DIR / "topologies" + +# Tolerance for floating-point coordinate comparison +COORD_EPS = 0.5 + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _parse_svg_edge_paths(svg_str: str) -> list[str]: + """Extract 'd' attributes from edge elements in an SVG string. + + Edge paths are identified by fill="none" and stroke-linecap="round", + filtering out section boxes, icons, and other non-edge paths. + """ + root = ET.fromstring(svg_str) + ns = {"svg": "http://www.w3.org/2000/svg"} + paths = root.findall(".//svg:path", ns) + result = [] + for p in paths: + d = p.get("d", "") + if not d: + continue + if p.get("fill") == "none" and p.get("stroke-linecap") == "round": + result.append(d) + return result + + +def _parse_path_commands(d: str) -> list[tuple[str, list[float]]]: + """Parse an SVG path 'd' attribute into (command, args) tuples.""" + tokens = re.findall(r"[MLQZmlqz]|[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?", d) + commands = [] + current_cmd = None + args: list[float] = [] + for tok in tokens: + if tok.isalpha(): + if current_cmd is not None: + commands.append((current_cmd, args)) + current_cmd = tok + args = [] + else: + args.append(float(tok)) + if current_cmd is not None: + commands.append((current_cmd, args)) + return commands + + +def _layout_and_route(mmd_text: str) -> tuple: + """Parse, layout, route, and render. Returns (graph, routes, offsets, svg).""" + graph = parse_metro_mermaid(mmd_text) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + svg = render_svg(graph, NFCORE_THEME) + return graph, routes, offsets, svg + + +def _layout_and_route_file(path: Path) -> tuple: + """Load a .mmd file and run the full pipeline.""" + return _layout_and_route(path.read_text()) + + +# --------------------------------------------------------------------------- +# 1. Curve radii array length must match corner count +# --------------------------------------------------------------------------- + + +class TestCurveRadiiLength: + """curve_radii (when present) must have exactly len(points) - 2 entries.""" + + def _check_routes(self, routes: list[RoutedPath]): + for route in routes: + if route.curve_radii is not None: + n_corners = len(route.points) - 2 + assert len(route.curve_radii) == n_corners, ( + f"Route {route.edge.source}->{route.edge.target} " + f"(line={route.line_id}): {len(route.curve_radii)} radii " + f"for {n_corners} corners ({len(route.points)} points)" + ) + + def test_simple_diamond(self): + mmd = ( + "%%metro line: main | Main | #ff0000\n" + "%%metro line: alt | Alt | #0000ff\n" + "graph LR\n" + " a -->|main| b\n" + " a -->|alt| c\n" + " b -->|main| d\n" + " c -->|alt| d\n" + ) + graph = parse_metro_mermaid(mmd) + compute_layout(graph) + routes = route_edges(graph) + self._check_routes(routes) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_topology_fixtures(self, fixture): + graph = parse_metro_mermaid(fixture.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + self._check_routes(routes) + + def test_rnaseq_sections(self): + graph = parse_metro_mermaid((EXAMPLES_DIR / "rnaseq_sections.mmd").read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + self._check_routes(routes) + + +# --------------------------------------------------------------------------- +# 2. SVG path command structure: M then (L Q)* then L +# --------------------------------------------------------------------------- + + +class TestSvgPathStructure: + """Every edge path must start with M and end with L, with Q at each corner.""" + + def _check_svg(self, svg_str: str): + paths = _parse_svg_edge_paths(svg_str) + # Filter to edge paths (have stroke, no fill) + for d in paths: + cmds = _parse_path_commands(d) + if not cmds: + continue + # Must start with M + assert cmds[0][0] == "M", f"Path doesn't start with M: {d[:80]}" + # Must end with L (final waypoint) + non_z = [c for c in cmds if c[0] != "Z"] + if len(non_z) > 1: + assert non_z[-1][0] == "L", f"Path doesn't end with L: {d[:80]}" + # Every Q must be preceded by L (approach segment) + for i, (cmd, _) in enumerate(cmds): + if cmd == "Q" and i > 0: + assert cmds[i - 1][0] in ("L", "M"), ( + f"Q at index {i} not preceded by L or M: {d[:120]}" + ) + + def test_simple_diagonal(self): + mmd = ( + "%%metro line: main | Main | #ff0000\n" + "%%metro line: alt | Alt | #0000ff\n" + "graph LR\n" + " a -->|main| b\n" + " a -->|alt| c\n" + " b -->|main| d\n" + " c -->|alt| d\n" + ) + _, _, _, svg = _layout_and_route(mmd) + self._check_svg(svg) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_topology_fixtures(self, fixture): + _, _, _, svg = _layout_and_route_file(fixture) + self._check_svg(svg) + + def test_rnaseq_sections(self): + _, _, _, svg = _layout_and_route_file(EXAMPLES_DIR / "rnaseq_sections.mmd") + self._check_svg(svg) + + +# --------------------------------------------------------------------------- +# 3. Curve continuity: Q endpoint is the L startpoint of the next segment +# --------------------------------------------------------------------------- + + +class TestCurveContinuity: + """The endpoint of each Q curve must match the start of the next L segment.""" + + def _check_svg(self, svg_str: str): + for d in _parse_svg_edge_paths(svg_str): + cmds = _parse_path_commands(d) + if len(cmds) < 3: + continue + + # Verify no NaN or extreme values in path coordinates + for _, args in cmds: + for v in args: + assert not (v != v), f"NaN in path: {d[:80]}" # NaN != NaN + assert abs(v) < 1e6, f"Extreme coordinate in path: {d[:80]}" + + # Verify Q commands have exactly 4 args (cx, cy, ex, ey) + for cmd, args in cmds: + if cmd == "Q": + assert len(args) == 4, ( + f"Q command has {len(args)} args (expected 4): {d[:80]}" + ) + + def test_simple(self): + mmd = ( + "%%metro line: main | Main | #ff0000\n" + "%%metro line: alt | Alt | #0000ff\n" + "graph LR\n" + " a -->|main| b\n" + " a -->|alt| c\n" + " b -->|main| d\n" + " c -->|alt| d\n" + ) + _, _, _, svg = _layout_and_route(mmd) + self._check_svg(svg) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_topology_fixtures(self, fixture): + _, _, _, svg = _layout_and_route_file(fixture) + self._check_svg(svg) + + +# --------------------------------------------------------------------------- +# 4. Clamped radius respects segment budget +# --------------------------------------------------------------------------- + + +class TestRadiusClamping: + """Reconstructed effective radius must not exceed half of any shared segment.""" + + def _check_routes( + self, + routes: list[RoutedPath], + station_offsets: dict[tuple[str, str], float], + ): + for route in routes: + pts = apply_route_offsets(route, station_offsets) + if len(pts) < 3: + continue + + for i in range(1, len(pts) - 1): + prev, curr, nxt = pts[i - 1], pts[i], pts[i + 1] + len1 = ((curr[0] - prev[0]) ** 2 + (curr[1] - prev[1]) ** 2) ** 0.5 + len2 = ((nxt[0] - curr[0]) ** 2 + (nxt[1] - curr[1]) ** 2) ** 0.5 + + corner_idx = i - 1 + if route.curve_radii and corner_idx < len(route.curve_radii): + desired_r = route.curve_radii[corner_idx] + else: + desired_r = CURVE_RADIUS + + # The renderer will clamp to min(desired_r, budget1, budget2) + # where budget depends on adjacent corner radii. At minimum, + # the effective radius must not exceed either full segment. + effective_r = min(desired_r, len1, len2) + assert effective_r >= -COORD_EPS, ( + f"Negative effective radius on " + f"{route.edge.source}->{route.edge.target}" + ) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_topology_fixtures(self, fixture): + graph = parse_metro_mermaid(fixture.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + self._check_routes(routes, offsets) + + +# --------------------------------------------------------------------------- +# 5. Bundle lines maintain distinct radii (concentric curves) +# --------------------------------------------------------------------------- + + +class TestConcentricBundles: + """Lines in the same bundle must have distinct curve_radii at shared corners.""" + + def test_multi_line_bundle(self): + """Three lines sharing an L-shape must have 3 distinct radii.""" + mmd = ( + "%%metro line: l1 | Line1 | #ff0000\n" + "%%metro line: l2 | Line2 | #00ff00\n" + "%%metro line: l3 | Line3 | #0000ff\n" + "graph LR\n" + " subgraph s1 [S1]\n" + " a[A]\n" + " a -->|l1,l2,l3| b[B]\n" + " end\n" + " subgraph s2 [S2]\n" + " c[C]\n" + " end\n" + " b -->|l1,l2,l3| c\n" + ) + graph = parse_metro_mermaid(mmd) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + # Find inter-section routes for the 3-line bundle + inter = [r for r in routes if r.is_inter_section and r.curve_radii] + if not inter: + pytest.skip("No inter-section routes with curve_radii produced") + + # Group by (source, target) to find co-routed bundles + from collections import defaultdict + + bundles: dict[tuple[str, str], list[RoutedPath]] = defaultdict(list) + for r in inter: + bundles[(r.edge.source, r.edge.target)].append(r) + + for key, bundle in bundles.items(): + if len(bundle) < 2: + continue + # Each corner should have distinct radii across bundle lines + for corner_idx in range( + min(len(r.curve_radii) for r in bundle if r.curve_radii) + ): + radii = [ + r.curve_radii[corner_idx] + for r in bundle + if r.curve_radii and corner_idx < len(r.curve_radii) + ] + if len(radii) >= 2: + assert len(set(radii)) == len(radii), ( + f"Bundle {key} corner {corner_idx}: " + f"duplicate radii {radii} (lines would overlap)" + ) + + def test_multi_line_bundle_fixture(self): + """The multi_line_bundle topology fixture should have distinct radii.""" + fixture = TOPOLOGIES_DIR / "multi_line_bundle.mmd" + if not fixture.exists(): + pytest.skip("multi_line_bundle.mmd not found") + + graph = parse_metro_mermaid(fixture.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + inter = [r for r in routes if r.is_inter_section and r.curve_radii] + # Just verify no duplicate radii within any co-routed bundle + from collections import defaultdict + + bundles: dict[tuple[str, str], list[RoutedPath]] = defaultdict(list) + for r in inter: + bundles[(r.edge.source, r.edge.target)].append(r) + + for key, bundle in bundles.items(): + if len(bundle) < 2: + continue + for corner_idx in range( + min(len(r.curve_radii) for r in bundle if r.curve_radii) + ): + radii = [ + r.curve_radii[corner_idx] + for r in bundle + if r.curve_radii and corner_idx < len(r.curve_radii) + ] + if len(radii) >= 2: + assert len(set(radii)) == len(radii), ( + f"Bundle {key} corner {corner_idx}: duplicate radii {radii}" + ) + + +# --------------------------------------------------------------------------- +# 6. Q corner count matches route corner count +# --------------------------------------------------------------------------- + + +class TestQCountMatchesCorners: + """Number of Q commands in SVG path should equal number of corners in route.""" + + def _check(self, routes, offsets, svg_str): + """Verify Q count in SVG matches expected corners for multi-point routes.""" + # Count expected corners across all routes with 3+ points + expected_corners = sum( + max(0, len(apply_route_offsets(r, offsets)) - 2) + for r in routes + if len(apply_route_offsets(r, offsets)) >= 3 + ) + + # Count actual Q commands in SVG paths + actual_q = 0 + for d in _parse_svg_edge_paths(svg_str): + cmds = _parse_path_commands(d) + actual_q += sum(1 for cmd, _ in cmds if cmd == "Q") + + # Allow some tolerance: some corners may degenerate to L if + # segment lengths are zero + assert actual_q <= expected_corners, ( + f"More Q commands ({actual_q}) than route corners ({expected_corners})" + ) + + def test_simple(self): + mmd = ( + "%%metro line: main | Main | #ff0000\n" + "%%metro line: alt | Alt | #0000ff\n" + "graph LR\n" + " a -->|main| b\n" + " a -->|alt| c\n" + " b -->|main| d\n" + " c -->|alt| d\n" + ) + _, routes, offsets, svg = _layout_and_route(mmd) + self._check(routes, offsets, svg) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_topology_fixtures(self, fixture): + _, routes, offsets, svg = _layout_and_route_file(fixture) + self._check(routes, offsets, svg) + + +# --------------------------------------------------------------------------- +# 7. Line z-order must be consistent across the whole diagram +# --------------------------------------------------------------------------- + + +_METRO_LINE_PREFIX = "metro-line-" + + +def _parse_edge_paths_with_line(svg_str: str) -> list[str]: + """Return the metro-line ID for each edge in document order. + + Edge paths are tagged ``class="metro-line-"`` by ``_render_edges``; + other paths (section boxes, icons, debug overlays) lack that class and + are skipped. + """ + root = ET.fromstring(svg_str) + ns = {"svg": "http://www.w3.org/2000/svg"} + return [ + p.get("class", "")[len(_METRO_LINE_PREFIX) :] + for p in root.findall(".//svg:path", ns) + if p.get("class", "").startswith(_METRO_LINE_PREFIX) + ] + + +class TestLineZOrderConsistent: + """All edge elements for a given metro line must be a single + contiguous block in document order. + + SVG paints later elements on top of earlier ones. If line A's paths are + interleaved with line B's, then in one bundle A may sit above B while in + another B sits above A -- the visual z-order of any pair of lines is + inconsistent across the diagram. Keeping each line's paths contiguous + guarantees a single, global paint order: the line whose paths appear + last is on top everywhere it overlaps any other line. + """ + + def _check(self, svg_str: str) -> None: + line_ids = _parse_edge_paths_with_line(svg_str) + # A line's paths are contiguous iff each line ID appears in at most + # one consecutive run. Walk the sequence and record where each run + # starts; if we re-enter a line we've already left, it's interleaved. + finished: set[str] = set() + prev: str | None = None + for lid in line_ids: + if lid != prev and lid in finished: + assert False, ( + f"Metro line '{lid}' paths are not contiguous in " + f"document order: {line_ids}. This causes inconsistent " + f"z-order across the diagram." + ) + if prev is not None and prev != lid: + finished.add(prev) + prev = lid + + def test_simple_bundle(self): + # Two lines that share a bundle then diverge and re-merge. + mmd = ( + "%%metro line: a | A | #ff0000\n" + "%%metro line: b | B | #0000ff\n" + "graph LR\n" + " s1 -->|a| j1\n" + " s1 -->|b| j1\n" + " j1 -->|a| t1\n" + " j1 -->|b| t2\n" + " t1 -->|a| j2\n" + " t2 -->|b| j2\n" + " j2 -->|a| e1\n" + " j2 -->|b| e1\n" + ) + _, _, _, svg = _layout_and_route(mmd) + self._check(svg) + + def test_rnaseq_sections(self): + fixture = EXAMPLES_DIR / "rnaseq_sections.mmd" + if not fixture.exists(): + pytest.skip(f"fixture not available: {fixture}") + _, _, _, svg = _layout_and_route_file(fixture) + self._check(svg) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_topology_fixtures(self, fixture): + _, _, _, svg = _layout_and_route_file(fixture) + self._check(svg) + + +# --------------------------------------------------------------------------- +# 8. Concentric arc centers must coincide across a bundle at every corner +# --------------------------------------------------------------------------- + + +def _arc_center(prev, curr, nxt, r): + """Center of the rounded-corner arc at vertex *curr* with radius *r*. + + For an axis-aligned 90-degree turn the center lies *r* along each of the + two incident segment directions from the vertex (i.e. along the inward + normals). ``center = curr + r*(unit(prev-curr) + unit(nxt-curr))``. + """ + + def unit(a, b): + dx, dy = b[0] - a[0], b[1] - a[1] + d = math.hypot(dx, dy) + return (0.0, 0.0) if d == 0 else (dx / d, dy / d) + + u1 = unit(curr, prev) + u2 = unit(curr, nxt) + return (curr[0] + r * (u1[0] + u2[0]), curr[1] + r * (u1[1] + u2[1])) + + +def _corridor_descent_channel_x(pts) -> float | None: + """X of a routed path's inter-column descent channel, or None. + + The MultiQC-corridor feeders (#432) traverse the inter-row gap LEFTWARD + (a long >150px horizontal run) and immediately turn DOWN into a tall + (>150px) inter-column channel. This long-leftward-then-long-down + signature distinguishes corridor descents from short L-shape / bypass + turns and from fan-out lead-ins, so the concentricity check stays scoped + to the corridor curves. Returns the descent channel x. + """ + for j in range(len(pts) - 2): + ax, ay = pts[j] + bx, by = pts[j + 1] + cx, cy = pts[j + 2] + leftward = abs(ay - by) < 1 and (ax - bx) > 150 + down = abs(bx - cx) < 1 and (cy - by) > 150 + if leftward and down: + return bx + return None + + +class TestConcentricArcCenters: + """Corridor bundle lines must share an arc center at every shared corner. + + Distinct radii (TestConcentricBundles) are necessary but not sufficient + for visually concentric corners: if two lines turn the same corner with + radii r and r+step but *different* arc centers, they splay apart through + the turn ("delamination"). True concentricity requires every line in the + bundle to pivot about the SAME center at each corner, with radii spaced by + the bundle step. This pins the MultiQC-corridor curves (#432/#435), whose + feeders co-route from one junction source, against delamination. + """ + + # An L-shape staggers lines by offset_step in the channel; concentric + # centers must agree to within a fraction of that step. + CENTER_EPS = 1.5 + + def _check(self, routes, offsets): + from collections import defaultdict + + # A corridor bundle is the per-line fan from one junction source that + # shares one descent channel (the feeder lines that travel together). + # Group by (source, channel) so unrelated routes from the same source + # are not conflated. + bundles: dict[tuple[str, int], list[RoutedPath]] = defaultdict(list) + for r in routes: + if not r.is_inter_section or not r.curve_radii: + continue + pts = apply_route_offsets(r, offsets) + vx = _corridor_descent_channel_x(pts) + if vx is None: + continue + bundles[(r.edge.source, round(vx / 10))].append(r) + + for src, bundle in bundles.items(): + if len(bundle) < 2: + continue + applied = [(r, apply_route_offsets(r, offsets)) for r in bundle] + # Compare corner-by-corner only when the bundle shares structure. + if any(len(pts) - 2 != len(r.curve_radii) for r, pts in applied): + continue + n_corners = min(len(r.curve_radii) for r, _ in applied) + for corner_idx in range(n_corners): + centers = [ + _arc_center( + pts[corner_idx], + pts[corner_idx + 1], + pts[corner_idx + 2], + r.curve_radii[corner_idx], + ) + for r, pts in applied + ] + cx = [c[0] for c in centers] + cy = [c[1] for c in centers] + spread = max(max(cx) - min(cx), max(cy) - min(cy)) + assert spread <= self.CENTER_EPS, ( + f"Corridor bundle from {src!r} corner {corner_idx}: arc " + f"centers splay by {spread:.2f}px (>{self.CENTER_EPS}); " + f"lines delaminate through the turn. " + f"centers={[(round(x, 1), round(y, 1)) for x, y in centers]}" + ) + + def test_stacked_collector_corridor(self): + fixture = EXAMPLES_DIR / "genomic_pipeline.mmd" + if not fixture.exists(): + pytest.skip(f"fixture not available: {fixture}") + _, routes, offsets, _ = _layout_and_route_file(fixture) + self._check(routes, offsets) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_topology_fixtures(self, fixture): + _, routes, offsets, _ = _layout_and_route_file(fixture) + self._check(routes, offsets) + + +# --------------------------------------------------------------------------- +# Shared rounded-corner tangent geometry (svg.py <-> animate.py) +# --------------------------------------------------------------------------- + + +def _q_corner_triples(d: str) -> list[tuple[tuple, tuple, tuple]]: + """Extract ``(before, corner, after)`` triples from a path's Q commands. + + Both renderers draw a rounded corner as ``L before Q corner after``, + so the corner's tangent points are the preceding L endpoint, the Q + control point, and the Q endpoint. + """ + cmds = _parse_path_commands(d) + triples = [] + for idx, (cmd, args) in enumerate(cmds): + if cmd == "Q": + prev_args = cmds[idx - 1][1] + before = (prev_args[-2], prev_args[-1]) + corner = (args[0], args[1]) + after = (args[2], args[3]) + triples.append((before, corner, after)) + return triples + + +def _expected_q_triples(tangents) -> list[tuple[tuple, tuple, tuple]]: + """Curved tangents rounded to the 2dp that a path 'd' string emits.""" + return [ + ( + (round(t.before[0], 2), round(t.before[1], 2)), + (round(t.corner[0], 2), round(t.corner[1], 2)), + (round(t.after[0], 2), round(t.after[1], 2)), + ) + for t in tangents + if t.curved + ] + + +class TestSharedCornerTangents: + """Static SVG and animation must round each corner identically. + + Both renderers derive their tangent points from the shared + ``curve_tangents`` helper; these tests pin both to it so a future change + to corner geometry in one renderer can't silently diverge from the other. + """ + + POLYLINES = { + "l_shape": [(0.0, 0.0), (100.0, 0.0), (100.0, 100.0)], + "u_shape": [(0.0, 0.0), (100.0, 0.0), (100.0, 100.0), (0.0, 100.0)], + "staircase": [ + (0.0, 0.0), + (50.0, 0.0), + (50.0, 50.0), + (100.0, 50.0), + (100.0, 100.0), + ], + # A duplicated waypoint gives two zero-length-leg vertices, exercising + # the "leg too short -> no curve" fallback both renderers implement. + "degenerate_leg": [(0.0, 0.0), (50.0, 0.0), (50.0, 0.0), (50.0, 50.0)], + } + + @pytest.mark.parametrize("name", sorted(POLYLINES)) + def test_svg_adapter_matches_shared_helper(self, name): + pts = self.POLYLINES[name] + resolved = resolve_curve_radii(pts, None, default_radius=CURVE_RADIUS) + shared = curve_tangents(pts, resolved) + before, after, curved = _curve_tangents(pts, resolved) + for i, tan in enumerate(shared, start=1): + assert curved[i] == tan.curved + assert before[i] == tan.before + assert after[i] == tan.after + + @pytest.mark.parametrize("name", sorted(POLYLINES)) + def test_animation_corners_match_shared_helper(self, name): + pts = self.POLYLINES[name] + resolved = resolve_curve_radii(pts, None, default_radius=CURVE_RADIUS) + shared = curve_tangents(pts, resolved) + d = _points_to_svg_path(pts, curve_radius=CURVE_RADIUS) + assert _q_corner_triples(d) == _expected_q_triples(shared) + + @pytest.mark.parametrize( + "fixture", + sorted(TOPOLOGIES_DIR.glob("*.mmd")), + ids=lambda p: p.stem, + ) + def test_real_routes_agree_across_renderers(self, fixture): + graph, routes, _, _ = _layout_and_route_file(fixture) + checked = 0 + for route in routes: + pts = route.points + if len(pts) < 3: + continue + resolved = resolve_curve_radii( + pts, route.curve_radii, default_radius=CURVE_RADIUS + ) + shared = curve_tangents(pts, resolved) + before, after, curved = _curve_tangents(pts, resolved) + for i, tan in enumerate(shared, start=1): + assert curved[i] == tan.curved + assert before[i] == tan.before + assert after[i] == tan.after + d = _points_to_svg_path( + pts, curve_radius=CURVE_RADIUS, route_curve_radii=route.curve_radii + ) + assert _q_corner_triples(d) == _expected_q_triples(shared) + checked += 1 + if checked == 0: + pytest.skip(f"no multi-corner routes in {fixture.stem}") diff --git a/tests/test_tall_anchor_stack.py b/tests/test_tall_anchor_stack.py new file mode 100644 index 000000000..e6fad317d --- /dev/null +++ b/tests/test_tall_anchor_stack.py @@ -0,0 +1,124 @@ +"""Tall-anchor vertical-stack placement. + +A pipeline whose section meta-graph is a single-source/single-sink chain +containing one section that is much taller than it is wide (a large fan, +e.g. a 19-way variant-caller block) should be packed by stacking the narrow +downstream chain vertically beside the tall anchor, rather than spreading +every section into its own topological column. The latter sprawls the canvas +horizontally; the former keeps it compact. +""" + +import re +from pathlib import Path + +import pytest + +from nf_metro.layout.auto_layout import _detect_tall_anchor_chain +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.phases.guards import ( + PhaseInvariantError, + _guard_tall_anchor_stack_well_formed, +) +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.svg import render_svg +from nf_metro.themes import NFCORE_THEME + +EXAMPLES = Path(__file__).parent.parent / "examples" + + +def _strip_grid_pins(path: Path) -> str: + """Return the example text with all explicit ``grid:`` pins removed.""" + return "\n".join( + line + for line in path.read_text().splitlines() + if not line.startswith("%%metro grid:") + ) + + +def _section_columns(graph) -> set[int]: + """Grid columns occupied by any section (accounting for col spans).""" + cols: set[int] = set() + for section in graph.sections.values(): + if section.grid_col < 0: + continue + for col in range(section.grid_col, section.grid_col + section.grid_col_span): + cols.add(col) + return cols + + +def _render_width(text: str) -> int: + graph = parse_metro_mermaid(text) + compute_layout(graph) + svg = render_svg(graph, NFCORE_THEME) + match = re.search(r'width="(\d+)"', svg) + assert match is not None + return int(match.group(1)) + + +def test_tall_anchor_chain_stacks_into_two_columns(): + """genomic_pipeline (grid pins stripped) packs into <= 2 section columns.""" + graph = parse_metro_mermaid(_strip_grid_pins(EXAMPLES / "genomic_pipeline.mmd")) + cols = _section_columns(graph) + assert cols, "no sections placed" + assert max(cols) <= 1, ( + f"expected the tall-anchor chain to stack into <= 2 columns, " + f"got columns {sorted(cols)}" + ) + + +def test_tall_anchor_auto_matches_or_beats_pinned_width(): + """Auto layout is no wider than the hand-pinned grid (issue acceptance).""" + pinned = _render_width((EXAMPLES / "genomic_pipeline.mmd").read_text()) + auto = _render_width(_strip_grid_pins(EXAMPLES / "genomic_pipeline.mmd")) + assert auto <= pinned * 1.05, ( + f"auto width {auto}px should match or beat pinned width {pinned}px" + ) + + +def test_tall_anchor_detected_on_genomic_pipeline(): + """The dominant tall-narrow caller fan is identified as the anchor.""" + graph = parse_metro_mermaid(_strip_grid_pins(EXAMPLES / "genomic_pipeline.mmd")) + assert _detect_tall_anchor_chain(graph) == "variant_calling" + + +# Multi-section auto examples lacking a dominant tall-narrow anchor: the packer +# must not fire (each tallest section is short, wide, or the graph branches / +# has multiple sinks), so the detector returns None and their layout is +# governed by the ordinary topological packer. +NON_FIRING = [ + "epitopeprediction.mmd", + "hlatyping.mmd", + "variant_calling.mmd", + "variant_calling_tuned.mmd", + "genomeassembly.mmd", + "longread_variant_calling.mmd", + "differentialabundance.mmd", + "variantbenchmarking.mmd", + "rnaseq_auto.mmd", +] + + +@pytest.mark.parametrize("name", NON_FIRING) +def test_tall_anchor_does_not_fire_on_ordinary_pipelines(name): + graph = parse_metro_mermaid(_strip_grid_pins(EXAMPLES / name)) + assert _detect_tall_anchor_chain(graph) is None, ( + f"{name}: tall-anchor packer fired but should not" + ) + + +def test_guard_rejects_reoriented_tail_section(): + """A stacked tail section flipped to vertical flow trips the guard.""" + graph = parse_metro_mermaid(_strip_grid_pins(EXAMPLES / "genomic_pipeline.mmd")) + graph.sections["annotation"].direction = "TB" + with pytest.raises(PhaseInvariantError, match="not horizontal-flow"): + _guard_tall_anchor_stack_well_formed(graph, "test") + + +def test_guard_rejects_tail_section_off_anchor_span(): + """A tail section dropped below the anchor's row span trips the guard.""" + graph = parse_metro_mermaid(_strip_grid_pins(EXAMPLES / "genomic_pipeline.mmd")) + anchor = graph.sections["variant_calling"] + bottom = anchor.grid_row + anchor.grid_row_span - 1 + graph.sections["reporting"].grid_row = bottom + 5 + with pytest.raises(PhaseInvariantError, match="outside the anchor"): + _guard_tall_anchor_stack_well_formed(graph, "test") diff --git a/tests/test_tapered_bundle.py b/tests/test_tapered_bundle.py new file mode 100644 index 000000000..6258be8a9 --- /dev/null +++ b/tests/test_tapered_bundle.py @@ -0,0 +1,195 @@ +"""Tests for tapering inter-section bundles. + +An inter-section L-shape connects a source fan (exit port / merge junction) +to a target entry trunk. When the source-side spread and target-side spread +differ the bundle *tapers*: a single rigid perpendicular offset cannot land +each line on its true offset at both ends. These tests pin: + +* the builder primitive ``build_tapered_bundle`` -- rigid input (source offset + == target offset) is byte-identical to ``build_concentric_bundle``, and a + tapering input lands each line on its own source offset and target offset + with concentric / transition corners; +* the end-to-end render -- a tapering bundle (the ``complex_multipath`` + junction -> ``standard_analysis`` case, plus any other tapering L-shape + bundle discovered in the corpus) enters its target trunk at the correct + per-line spread rather than collapsing every line onto one point. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import COORD_TOLERANCE +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.bundle import ( + build_concentric_bundle, + build_tapered_bundle, +) +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge +from nf_metro.render.svg import apply_route_offsets + +REPO_ROOT = Path(__file__).resolve().parent.parent +TOPO = REPO_ROOT / "examples" / "topologies" + + +# --------------------------------------------------------------------------- +# Builder-level: rigid byte-identity + taper lands on offset +# --------------------------------------------------------------------------- + + +def _edge(line_id: str) -> Edge: + return Edge(source="__src__", target="__tgt__", line_id=line_id) + + +def test_tapered_rigid_matches_concentric() -> None: + """src offset == tgt offset reproduces ``build_concentric_bundle`` exactly.""" + centerline = [(0.0, 0.0), (20.0, 0.0), (20.0, -100.0), (40.0, -100.0)] + offs = [("a", -3.0), ("b", 0.0), ("c", 3.0)] + + rigid = build_concentric_bundle( + [(_edge(lid), lid, s) for lid, s in offs], centerline, base_radius=11.5 + ) + tapered = build_tapered_bundle( + [(_edge(lid), lid, s, s) for lid, s in offs], + centerline, + transition_leg=1, + base_radius=11.5, + ) + + assert len(rigid) == len(tapered) + for r, t in zip(rigid, tapered): + assert t.line_id == r.line_id + assert t.points == r.points + assert t.curve_radii == r.curve_radii + assert t.offset_regime is r.offset_regime + + +def test_tapered_lands_on_both_offsets() -> None: + """A 6px source / 3px target taper lands each line on its own offset. + + Centreline H -> V -> H, transition at the first corner: the source + horizontal carries the source offset, the channel and target horizontal + carry the target offset. + """ + centerline = [(0.0, 0.0), (20.0, 0.0), (20.0, -100.0), (40.0, -100.0)] + members = [ + (_edge("std"), "std", -3.0, -1.5), + (_edge("leg"), "leg", 3.0, 1.5), + ] + routes = build_tapered_bundle( + members, centerline, transition_leg=1, base_radius=11.5 + ) + by_line = {r.line_id: r for r in routes} + + # Source horizontal Y carries the source offset (6px spread). + assert by_line["std"].points[0][1] == pytest.approx(-3.0) + assert by_line["leg"].points[0][1] == pytest.approx(3.0) + # Target horizontal Y carries the target offset (3px spread). + assert by_line["std"].points[-1][1] == pytest.approx(-100.0 - 1.5) + assert by_line["leg"].points[-1][1] == pytest.approx(-100.0 + 1.5) + # Channel X carries the target offset (the corridor fan). + assert by_line["std"].points[1][0] == pytest.approx(20.0 - 1.5) + assert by_line["leg"].points[1][0] == pytest.approx(20.0 + 1.5) + # Baked, so the renderer must not re-apply or deform. + assert all(r.offset_regime is OffsetRegime.BAKED for r in routes) + assert all(r.normalize_exempt for r in routes) + + +# --------------------------------------------------------------------------- +# End-to-end: tapering bundles preserve both spreads in the render +# --------------------------------------------------------------------------- + + +def _final_polylines(graph) -> list[tuple[Edge, list[tuple[float, float]]]]: + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return [(r.edge, apply_route_offsets(r, offsets)) for r in routes] + + +def _is_inter(graph, sid: str) -> bool: + st = graph.stations.get(sid) + return st is not None and (st.is_port or sid in graph.junction_ids) + + +def _horizontal(p0: tuple[float, float], p1: tuple[float, float]) -> bool: + return abs(p1[0] - p0[0]) >= abs(p1[1] - p0[1]) + + +def _lr_lshape_tapers(graph): + """Tapering L-shapes of the LEFT/RIGHT-port family, per fixture. + + Yields ``(s, t, src_spread, tgt_spread, src_ys, tgt_ys)`` for each + inter-section bundle whose rendered route enters and leaves on a horizontal + leg (the H -> V -> H L-shape produced by the migrated handlers) and whose + per-line source and target Y offsets span different widths. TOP/BOTTOM-port + families (vertical end legs, X-axis fan) are a different regime and excluded. + """ + offsets = compute_station_offsets(graph) + polys = _final_polylines(graph) + groups: dict[tuple[str, str], list[tuple[Edge, list[tuple[float, float]]]]] = {} + for e, pts in polys: + if _is_inter(graph, e.source) and _is_inter(graph, e.target): + groups.setdefault((e.source, e.target), []).append((e, pts)) + + for (s, t), bundle in groups.items(): + if len(bundle) < 2: + continue + if not all( + _horizontal(pts[0], pts[1]) and _horizontal(pts[-1], pts[-2]) + for _e, pts in bundle + ): + continue + src = [offsets.get((s, e.line_id), 0.0) for e, _pts in bundle] + tgt = [offsets.get((t, e.line_id), 0.0) for e, _pts in bundle] + src_spread = max(src) - min(src) + tgt_spread = max(tgt) - min(tgt) + if abs(src_spread - tgt_spread) <= COORD_TOLERANCE: + continue + src_ys = [pts[0][1] for _e, pts in bundle] + tgt_ys = [pts[-1][1] for _e, pts in bundle] + yield s, t, src_spread, tgt_spread, src_ys, tgt_ys + + +def _fixtures_with_taper() -> list[str]: + names = [] + for p in sorted(TOPO.glob("*.mmd")): + graph = parse_metro_mermaid(p.read_text()) + compute_layout(graph) + if any(True for _ in _lr_lshape_tapers(graph)): + names.append(p.stem) + return names + + +def test_complex_multipath_taper_present() -> None: + """The named fixture really does carry a tapering L-shape (guards the test).""" + assert "complex_multipath" in _fixtures_with_taper() + + +@pytest.mark.parametrize("fixture", _fixtures_with_taper()) +def test_tapering_lshape_preserves_both_spreads(fixture: str) -> None: + """Each tapering L-shape enters/leaves at its true per-line spread. + + A rigid bundle would bake the source spread onto the target endpoints, + spanning the source width rather than the trunk's; a tapering bundle spans + ``src_spread`` at the source endpoints and ``tgt_spread`` at the target. + """ + graph = parse_metro_mermaid((TOPO / f"{fixture}.mmd").read_text()) + compute_layout(graph) + + for s, t, src_spread, tgt_spread, src_ys, tgt_ys in _lr_lshape_tapers(graph): + got_src = max(src_ys) - min(src_ys) + got_tgt = max(tgt_ys) - min(tgt_ys) + assert got_src == pytest.approx(src_spread, abs=COORD_TOLERANCE), ( + f"{fixture}: {s}->{t} source spread {got_src} != {src_spread}" + ) + assert got_tgt == pytest.approx(tgt_spread, abs=COORD_TOLERANCE), ( + f"{fixture}: {s}->{t} target spread {got_tgt} != {tgt_spread}" + ) diff --git a/tests/test_tb_bottom_exit_fork_diamond.py b/tests/test_tb_bottom_exit_fork_diamond.py new file mode 100644 index 000000000..b747b54b5 --- /dev/null +++ b/tests/test_tb_bottom_exit_fork_diamond.py @@ -0,0 +1,76 @@ +"""A junction-fed TOP entry directly below its feeder must drop straight in. + +When a TB section's BOTTOM exit forks to two downstream TOP-entry sections in +different grid rows, a fork junction lands in the inter-row gap. The leg into +the nearer section's TOP entry is built by the TOP-entry L-shape handler, whose +junction-source fallback injects a horizontal lead-in. When the junction is fed +straight from directly above (a vertical feeder) and the entry sits straight +below at the same X, that lead-in is a spurious lateral jog: the route departs +the junction sideways, drops, then jogs back onto the port marker, reversing +lateral direction at the section boundary (#1058). The drop must instead stay +in the column. + +Encoded two ways: the strict ``compute_layout(validate=True)`` guard +(``_guard_perp_entry_boundary_consistent``) must accept the targeted fixture, +and across every topology fixture each TOP/BOTTOM entry port a single line both +approaches and departs must be crossed at one consistent X. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.invariants import check_perp_entry_boundary_consistent +from nf_metro.parser.mermaid import parse_metro_mermaid + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" +TOPOLOGY_FILES = sorted(TOPOLOGIES_DIR.glob("*.mmd")) +TOPOLOGY_IDS = [f.stem for f in TOPOLOGY_FILES] + + +def test_tb_bottom_exit_fork_diamond_renders() -> None: + """The strict perp-entry boundary guard accepts the diamond fork.""" + graph = parse_metro_mermaid( + (TOPOLOGIES_DIR / "tb_bottom_exit_fork_diamond.mmd").read_text() + ) + # Raises PhaseInvariantError if a fork leg reverses laterally at the boundary. + compute_layout(graph, validate=True) + + +def test_tb_bottom_exit_fork_leg_drops_straight() -> None: + """The leg into the nearer TOP entry drops in its column, no lateral jog.""" + graph = parse_metro_mermaid( + (TOPOLOGIES_DIR / "tb_bottom_exit_fork_diamond.mmd").read_text() + ) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + entry = graph.stations["mid__entry_top_4"] + leg = next( + r + for r in routes + if r.edge.target == "mid__entry_top_4" + and r.edge.source.startswith("__junction") + ) + xs = {round(x, 1) for x, _ in leg.points} + assert xs == {round(entry.x, 1)}, ( + f"junction->mid fork leg wanders off the entry column x={entry.x:.1f}: " + f"visits xs={sorted(xs)}" + ) + + +@pytest.mark.parametrize("path", TOPOLOGY_FILES, ids=TOPOLOGY_IDS) +def test_perp_entry_boundary_consistent_across_fixtures(path: Path) -> None: + """No line reverses lateral direction crossing a perp entry port boundary.""" + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + violations = check_perp_entry_boundary_consistent(graph, routes) + assert not violations, "; ".join(v.message() for v in violations) diff --git a/tests/test_tb_bottom_exit_spacing_invariant.py b/tests/test_tb_bottom_exit_spacing_invariant.py new file mode 100644 index 000000000..7ebb9170c --- /dev/null +++ b/tests/test_tb_bottom_exit_spacing_invariant.py @@ -0,0 +1,67 @@ +"""Invariant: TB sections with BOTTOM-only exits keep normal padding below last station. + +A TB section whose only exit is BOTTOM exits straight down into the section +below; it does not fold sideways through the inter-row gap. The fold-span +extension in _apply_tb_fold_spans must therefore not grow its bbox_h, so the +space below the last internal station stays close to the normal SECTION_Y_PADDING +rather than doubling it (issue #1062). +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import SECTION_Y_PADDING, Y_SPACING +from nf_metro.layout.engine import compute_layout +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import PortSide + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" + +# Fixtures with a TB section that has only a BOTTOM exit and a LR/RL section +# below in the same column. The gap below the last internal station should be +# SECTION_Y_PADDING, not the doubled value produced by the fold-span extension. +FIXTURES = [ + "lr_top_entry_cross_column", + "tb_column_continuation_two_lines", +] + +# Upper bound: SECTION_Y_PADDING plus one full y_spacing to absorb any +# legitimate label or entry-shift padding without catching the bug (which +# adds a full section_y_gap ≈ SECTION_Y_PADDING on top of the natural height). +_GAP_CEILING = SECTION_Y_PADDING + Y_SPACING + + +@pytest.mark.parametrize("stem", FIXTURES) +def test_tb_bottom_exit_section_gap(stem: str) -> None: + graph = parse_metro_mermaid((TOPOLOGIES_DIR / f"{stem}.mmd").read_text()) + compute_layout(graph) + + for sec in graph.sections.values(): + if sec.direction != "TB": + continue + exit_sides = {s for s, _ in sec.exit_hints} + if PortSide.BOTTOM not in exit_sides: + continue + if exit_sides & {PortSide.LEFT, PortSide.RIGHT}: + continue + + internal_ys = [ + graph.stations[sid].y + for sid in sec.station_ids + if sid in graph.stations and not graph.stations[sid].is_port + ] + if not internal_ys: + continue + + last_y = max(internal_ys) + bbox_bottom = sec.bbox_y + sec.bbox_h + gap = bbox_bottom - last_y + + assert gap <= _GAP_CEILING, ( + f"Section '{sec.id}' in {stem}: gap below last station is {gap:.0f}px " + f"(last_y={last_y:.0f}, bbox_bottom={bbox_bottom:.0f}), " + f"expected ≤ {_GAP_CEILING:.0f}px" + ) diff --git a/tests/test_tb_branch_ratchet.py b/tests/test_tb_branch_ratchet.py new file mode 100644 index 000000000..23ac8955a --- /dev/null +++ b/tests/test_tb_branch_ratchet.py @@ -0,0 +1,67 @@ +"""Ratchet on one-off TB branches in the layout package (policy in CONTRACT.md). + +Counts ``"TB"`` literals and ``.TB`` attribute accesses across +``src/nf_metro/layout/`` and fails if the total rises above the baseline. A +heuristic needing TB awareness should migrate onto the ``AxisFrame`` primitive +(``layout/geometry.py``) rather than add another ``direction == "TB"`` branch. +""" + +from __future__ import annotations + +import ast +from pathlib import Path + +_LAYOUT_DIR = Path(__file__).resolve().parents[1] / "src/nf_metro/layout" + +# Lower this (never raise it) when a heuristic migrates onto AxisFrame. +_BASELINE_TB_BRANCHES = 22 + + +def _count_in_file(path: Path) -> int: + tree = ast.parse(path.read_text(), filename=str(path)) + count = 0 + for node in ast.walk(tree): + if isinstance(node, ast.Constant) and node.value == "TB": + count += 1 + elif isinstance(node, ast.Attribute) and node.attr == "TB": + count += 1 + return count + + +def count_tb_branches() -> dict[str, int]: + """Map each layout module (relative path) to its TB-reference count.""" + return { + str(path.relative_to(_LAYOUT_DIR)): n + for path in sorted(_LAYOUT_DIR.rglob("*.py")) + if (n := _count_in_file(path)) + } + + +def test_no_new_tb_branches() -> None: + per_file = count_tb_branches() + total = sum(per_file.values()) + + # Guard against the counter silently matching nothing (modules moved, AST + # walk broken): the engine genuinely carries dozens of TB references today. + assert total >= 20, ( + f"expected many TB references, found {total} - the counter may be " + "broken or the layout package restructured" + ) + + breakdown = "\n ".join(f"{n:>3} {name}" for name, n in per_file.items()) + assert total <= _BASELINE_TB_BRANCHES, ( + f"TB-branch count rose to {total} (baseline {_BASELINE_TB_BRANCHES}).\n" + "A heuristic needing TB awareness is the trigger to convert it to the " + "AxisFrame primary/secondary vocabulary (layout/geometry.py), not to add " + f'another one-off `direction == "TB"` branch (CONTRACT.md).\n {breakdown}' + ) + + +def test_baseline_is_current() -> None: + """Baseline equals the live count, so headroom can't accumulate after a drop.""" + total = sum(count_tb_branches().values()) + assert total == _BASELINE_TB_BRANCHES, ( + f"TB-branch count is {total} but the baseline is {_BASELINE_TB_BRANCHES}. " + "If you migrated a heuristic onto AxisFrame (count dropped), lower the " + "baseline to match; if the count rose, see test_no_new_tb_branches." + ) diff --git a/tests/test_tb_fixture_coverage.py b/tests/test_tb_fixture_coverage.py new file mode 100644 index 000000000..b887fbbcd --- /dev/null +++ b/tests/test_tb_fixture_coverage.py @@ -0,0 +1,82 @@ +"""Fixture-per-branch coverage locks for TB routing special-cases. + +Each minimal fixture in :data:`TB_BRANCH_FIXTURES` is the sole minimal exemplar +of one TB routing branch. The test asserts the fixture reaches that branch, so +an edit that stops exercising it fails loudly instead of silently dropping the +branch from the corpus. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest +from conftest import parse_and_layout + +import nf_metro.layout.routing.tb_handlers as tb +from nf_metro.layout.routing import compute_station_offsets, route_edges + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" + + +def _routing_cases(path: Path) -> set[str]: + """Route *path* and return the set of TB routing branches it reaches. + + ``_route_tb_lr_exit`` is dispatched through the first-match tuple + ``_TB_SECTION_SHAPES``, frozen at import, so the tuple is re-pointed at the + wrapped handler; ``_route_tb_diagonal`` is reached by a direct module-global + call and so is wrapped in place. + """ + cases: set[str] = set() + + with pytest.MonkeyPatch.context() as mp: + lr_exit_orig = tb._route_tb_lr_exit + + def lr_exit(edge, src, tgt, ctx): + res = lr_exit_orig(edge, src, tgt, ctx) + if res is not None: + cases.add(f"lr_exit:{ctx.graph.ports[edge.target].side.name}") + return res + + diag_orig = tb._route_tb_diagonal + + def diagonal(*args, **kwargs): + cases.add("internal:diagonal") + return diag_orig(*args, **kwargs) + + mp.setattr(tb, "_route_tb_lr_exit", lr_exit) + mp.setattr(tb, "_route_tb_diagonal", diagonal) + mp.setattr( + tb, + "_TB_SECTION_SHAPES", + tuple(getattr(tb, shape.__name__) for shape in tb._TB_SECTION_SHAPES), + ) + + graph = parse_and_layout(path.read_text(), validate=False) + route_edges(graph, station_offsets=compute_station_offsets(graph)) + return cases + + +# fixture stem -> the TB branch case it is the minimal exemplar for. +TB_BRANCH_FIXTURES = { + "tb_lr_exit_left": "lr_exit:LEFT", + "tb_lr_exit_right": "lr_exit:RIGHT", + "tb_internal_diagonal": "internal:diagonal", +} + + +@pytest.mark.parametrize("stem,case", sorted(TB_BRANCH_FIXTURES.items())) +def test_tb_fixture_exercises_its_branch(stem: str, case: str) -> None: + cases = _routing_cases(TOPOLOGIES_DIR / f"{stem}.mmd") + assert case in cases, ( + f"{stem}.mmd no longer exercises TB branch {case!r}; " + f"it reached {sorted(cases)} instead" + ) + + +def test_lr_exit_sides_are_distinct_fixtures() -> None: + """The LEFT and RIGHT exit fixtures must isolate opposite port sides.""" + left = _routing_cases(TOPOLOGIES_DIR / "tb_lr_exit_left.mmd") + right = _routing_cases(TOPOLOGIES_DIR / "tb_lr_exit_right.mmd") + assert "lr_exit:LEFT" in left and "lr_exit:RIGHT" not in left + assert "lr_exit:RIGHT" in right and "lr_exit:LEFT" not in right diff --git a/tests/test_tb_handler_centreline.py b/tests/test_tb_handler_centreline.py new file mode 100644 index 000000000..f18008304 --- /dev/null +++ b/tests/test_tb_handler_centreline.py @@ -0,0 +1,305 @@ +"""TB section handlers build their corners via the bundle builder. + +``tb_handlers`` routes four shapes that turn one or two corners: an internal +station to a LEFT/RIGHT exit port (``_route_tb_lr_exit``), a LEFT/RIGHT entry +port to an internal station (``_route_tb_lr_entry``), a TOP/BOTTOM entry port +down into the trunk (``_route_perp_entry``), and the corridor-fed variant of the +last (``_route_perp_entry_from_corridor``). Each fans a co-travelling bundle +around its corner(s) through :func:`build_tapered_bundle`, which anchors every +corner on the bundle's innermost-of-turn line, so no arc pinches below the floor +and the lines keep a constant side-of-travel order. + +The perpendicular-entry L-shape turns a single wholesale corner (drop then turn +into the station), so a fan straddling that bend manufactures an inside-of-turn +line whose arc a hand-built radius would pinch below the floor; that arm is +tested directly. The exit/entry/corridor shapes turn a *transition* corner +(the drop channel fans in X, the port arrival in Y), which is not concentric and +reorders by construction under such a fan; those are pinned by the natural-render +guard, which routes real geometry and asserts the curve invariants the renderer +relies on. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.constants import CURVE_RADIUS +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.context import _build_routing_context +from nf_metro.layout.routing.invariants import ( + assert_render_curve_invariants, + check_concentric_bundle_corners, +) +from nf_metro.layout.routing.tb_handlers import ( + _route_perp_entry, +) +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import PortSide + +REPO_ROOT = Path(__file__).resolve().parent.parent +EXAMPLES = REPO_ROOT / "examples" +TOPOLOGIES = EXAMPLES / "topologies" + +# A co-travelling fan wider than the floor radius and straddling zero, so one +# line lands inside the bend. Real layouts anchor their fans at the innermost +# line (offsets >= 0), so the inside-of-turn case never arises naturally; this +# manufactures it to exercise the arm's fan. +_FAN_STEP = 20.0 + + +def _tb_section_ids(graph) -> set[str]: + return {sid for sid, s in graph.sections.items() if s.direction in ("TB", "BT")} + + +def _exit_arms(graph) -> dict[tuple[str, str], list]: + """Internal station -> LEFT/RIGHT exit port arms in a TB section.""" + tb = _tb_section_ids(graph) + groups: dict[tuple[str, str], list] = {} + for edge in graph.edges: + src = graph.stations.get(edge.source) + tgt = graph.stations.get(edge.target) + if not src or not tgt: + continue + port = graph.ports.get(tgt.id) + if ( + port is not None + and not port.is_entry + and port.side in (PortSide.LEFT, PortSide.RIGHT) + and not src.is_port + and src.section_id in tb + and src.section_id == tgt.section_id + ): + groups.setdefault((edge.source, edge.target), []).append(edge) + return groups + + +def _entry_arms(graph) -> dict[tuple[str, str], list]: + """LEFT/RIGHT entry port -> internal station arms in a TB section.""" + tb = _tb_section_ids(graph) + groups: dict[tuple[str, str], list] = {} + for edge in graph.edges: + src = graph.stations.get(edge.source) + tgt = graph.stations.get(edge.target) + if not src or not tgt: + continue + port = graph.ports.get(src.id) + if ( + port is not None + and port.is_entry + and port.side in (PortSide.LEFT, PortSide.RIGHT) + and not tgt.is_port + and src.section_id in tb + ): + groups.setdefault((edge.source, edge.target), []).append(edge) + return groups + + +def _perp_arms(graph) -> dict[tuple[str, str], list]: + """TOP/BOTTOM entry port -> internal station arms.""" + groups: dict[tuple[str, str], list] = {} + for edge in graph.edges: + src = graph.stations.get(edge.source) + tgt = graph.stations.get(edge.target) + if not src or not tgt: + continue + port = graph.ports.get(src.id) + if ( + port is not None + and port.is_entry + and port.side in (PortSide.TOP, PortSide.BOTTOM) + and not tgt.is_port + ): + groups.setdefault((edge.source, edge.target), []).append(edge) + return groups + + +def _find_fixture(stem: str) -> Path: + for d in (EXAMPLES, TOPOLOGIES, EXAMPLES / "guide"): + p = d / f"{stem}.mmd" + if p.exists(): + return p + raise FileNotFoundError(stem) + + +def _multi_line_arms(graph, finder): + return {k: v for k, v in finder(graph).items() if len({e.line_id for e in v}) > 1} + + +# Fixtures whose perpendicular entry turns a multi-line L-shape corner -- the +# wholesale bend a straddling fan can pinch. +_PERP_L_FIXTURES = ["rnaseq_auto", "cross_row_gap_wrap", "fold_fan_across"] + +# (family, arm-finder, fixtures) for the natural-render guard, one per TB shape. +_NATURAL_FAMILIES = [ + ("exit", _exit_arms, ["04_directions", "fold_double", "u_turn_fold"]), + ("entry", _entry_arms, ["04_directions", "fold_double", "rnaseq_auto"]), + ( + "perp", + _perp_arms, + ["lr_to_tb_top_two_lines", "tb_right_entry_stack", "rnaseq_auto"], + ), + ( + "corridor", + _perp_arms, + ["lr_perp_top_exit_perp_entry", "lr_perp_bottom_exit_perp_entry"], + ), +] +_NATURAL_CASES = [ + (fam, finder, stem) for fam, finder, stems in _NATURAL_FAMILIES for stem in stems +] + + +@pytest.mark.parametrize("stem", _PERP_L_FIXTURES) +def test_perp_entry_l_corner_clears_floor_when_fanned(stem: str) -> None: + """A fanned multi-line perp-entry L-corner keeps every arc at or above the floor. + + The inside-of-turn line anchors at ``CURVE_RADIUS`` and the rest fan + outward. A corner sized from the raw port centre instead pinches the inside + line below the floor (to a sub-floor kink). + """ + path = _find_fixture(stem) + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + groups = _multi_line_arms(graph, _perp_arms) + assert groups, f"{stem}: expected a multi-line perp-entry arm" + for (source, target), edges in groups.items(): + line_ids = list(dict.fromkeys(e.line_id for e in edges)) + n = len(line_ids) + offsets: dict[tuple[str, str], float] = {} + for j, line_id in enumerate(line_ids): + d = (j - (n - 1) / 2) * _FAN_STEP + offsets[(source, line_id)] = d + offsets[(target, line_id)] = d + ctx = _build_routing_context(graph, 30.0, CURVE_RADIUS, offsets) + routes = [ + _route_perp_entry( + e, graph.stations[e.source], graph.stations[e.target], ctx + ) + for e in edges + ] + offenders = [ + (r.line_id, [round(x, 2) for x in r.curve_radii]) + for r in routes + if r is not None + and r.curve_radii + and any(x < CURVE_RADIUS - 0.01 for x in r.curve_radii) + ] + assert not offenders, ( + f"{stem} {source}->{target}: perp-entry corners below floor: {offenders}" + ) + + +# A TB BOTTOM exit feeding a subset of a shared TOP entry port collapses every +# port line onto one slot while the consumer station fans them apart -- a +# multi-line perpendicular entry whose port offsets are uniform but whose target +# offsets are distinct. Such a collapse forces a per-line boundary offset, so it +# cannot pass ``check_perp_entry_boundary_consistent`` and lives inline here +# rather than as a corpus fixture. +_COLLAPSED_PERP_FAN_MMD = """\ +%%metro title: Collapsed Perp Fan +%%metro line: main | Main | #0570b0 +%%metro line: feed | Feed | #e63946 +%%metro grid: up | 0,0 +%%metro grid: side | 1,0 +%%metro grid: down | 0,1 + +graph LR + subgraph up [Upstream] + %%metro direction: TB + u1[Collect] + u2[Filter] + u1 -->|main| u2 + end + subgraph side [Side] + sv1[Load] + sv2[Tag] + sv1 -->|feed| sv2 + end + subgraph down [Combine] + %%metro direction: TB + c1[Merge] + c2[Polish] + c1 -->|main,feed| c2 + end + u2 -->|main| c1 + sv2 -->|feed| c1 +""" + + +def test_collapsed_perp_fan_routes_as_l_shape_not_staircase() -> None: + """A collapsed-fan TOP entry into a TB target routes V-H, never H-V-H. + + When a shared TOP/BOTTOM entry port collapses every line onto one slot but + the consumer station fans them apart, each line could drop straight off the + port and turn in (V-H, an L-shape) or jog horizontally onto a per-line + channel before dropping (H-V-H), which lands an S-cusp on the section + boundary that ``check_perp_entry_boundary_consistent`` forbids. Assert + every perp-entry route leaves the port on a vertical segment, the L-shape + signature. + """ + graph = parse_metro_mermaid(_COLLAPSED_PERP_FAN_MMD) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + perp_routes = [] + for r in routes: + port = graph.ports.get(r.edge.source) + tgt = graph.stations.get(r.edge.target) + if ( + port is not None + and port.is_entry + and port.side in (PortSide.TOP, PortSide.BOTTOM) + and tgt is not None + and not tgt.is_port + ): + perp_routes.append(r) + assert perp_routes, "expected a TOP/BOTTOM perp-entry route" + + # Require the collapsed-fan state (all port lines on one slot); a spread fan + # routes an ordinary L-shape and would pass the vertical-departure check + # without exercising the H-V-H temptation. + port_id = perp_routes[0].edge.source + port_offsets = { + offsets.get((port_id, lid), 0.0) for lid in graph.station_lines(port_id) + } + assert len(port_offsets) == 1, f"port fan not collapsed: {port_offsets}" + + for r in perp_routes: + p0, p1 = r.points[0], r.points[1] + assert abs(p1[1] - p0[1]) > abs(p1[0] - p0[0]), ( + f"{r.line_id}: perp-entry leaves the port on a horizontal jog " + f"{p0}->{p1} (H-V-H shape); expected a vertical drop (L-shape)" + ) + + +@pytest.mark.parametrize( + "family,finder,stem", + _NATURAL_CASES, + ids=[f"{fam}-{stem}" for fam, _f, stem in _NATURAL_CASES], +) +def test_tb_corner_natural_render_is_clean(family, finder, stem) -> None: + """The naturally-routed render has concentric, offset-baked TB corners. + + ``check_concentric_bundle_corners`` skips the transition corners (exit / + entry / corridor) and pins the wholesale ones; ``assert_render_curve_invariants`` + rejects any pinched or flipped arc the builder should have prevented. + """ + path = _find_fixture(stem) + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + assert check_concentric_bundle_corners(graph, routes, offsets) == [] + assert_render_curve_invariants(graph, routes, offsets) + arm_targets = {t for (_s, t) in finder(graph)} + arm_routes = [r for r in routes if r.edge.target in arm_targets] + assert arm_routes, f"{stem}: expected routed {family} arm edges" + assert all(r.offset_regime is OffsetRegime.BAKED for r in arm_routes) diff --git a/tests/test_tb_marker_on_track.py b/tests/test_tb_marker_on_track.py new file mode 100644 index 000000000..0bd8fd0d0 --- /dev/null +++ b/tests/test_tb_marker_on_track.py @@ -0,0 +1,69 @@ +"""A TB station's marker sits centred on the lines drawn through it. + +A TB section draws each line at its offset *reversed* against the station's +bundle max (``_tb_x_offset``), so the marker pill must span the reversed +(drawn) offsets, not the stored ones -- otherwise a one-line or off-trunk-subset +station draws its glyph beside its own track (issue #929). This is the exact +transpose of the LR case, which never reverses; the oracle below compares the +marker box centre (``station_marker_box``) against the lane coordinates the +*routes* actually arrive on, an independent source from the marker geometry. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges_centred +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.render.svg import station_marker_box +from nf_metro.themes import THEMES + +REPO_ROOT = Path(__file__).resolve().parent.parent +THEME = next(iter(THEMES.values())) + + +def _gather_fixtures() -> list[Path]: + paths: list[Path] = [] + for sub in ("examples", "examples/topologies", "tests/fixtures/topologies"): + paths.extend(sorted((REPO_ROOT / sub).glob("*.mmd"))) + return paths + + +def _line_lane_at(route, station_id: str) -> float | None: + """The X the route arrives on at *station_id* (None if not an endpoint).""" + if route.edge.target == station_id: + return route.points[-1][0] + if route.edge.source == station_id: + return route.points[0][0] + return None + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_tb_marker_centred_on_drawn_lines(path: Path) -> None: + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges_centred(graph, station_offsets=offsets) + + for sid, station in graph.stations.items(): + if station.is_port or station.is_hidden: + continue + section = graph.sections.get(station.section_id) if station.section_id else None + if section is None or section.direction != "TB": + continue + if graph.station_is_rail(sid) or station.marker is not None: + continue + lanes = [x for r in routes if (x := _line_lane_at(r, sid)) is not None] + if not lanes: + continue + marker_cx = station_marker_box(graph, THEME, station, offsets)[0] + drawn_mid = (min(lanes) + max(lanes)) / 2 + assert abs(marker_cx - drawn_mid) < 1.0, ( + f"{path.name}: TB station {sid!r} marker centre {marker_cx:.1f} is off " + f"the lines it carries (drawn span {min(lanes):.1f}..{max(lanes):.1f})" + ) diff --git a/tests/test_tb_perp_exit_side_neighbour.py b/tests/test_tb_perp_exit_side_neighbour.py new file mode 100644 index 000000000..1e7aa198f --- /dev/null +++ b/tests/test_tb_perp_exit_side_neighbour.py @@ -0,0 +1,96 @@ +"""A TB/BT BOTTOM exit must leave its port vertically, never along the edge. + +When a vertical-flow (TB/BT) section has a BOTTOM exit port that feeds a side +(LEFT/RIGHT) entry sharing the exit's Y, the exit port sits on the section's own +bottom edge. A straight horizontal run at that Y travels along the edge and out +through the corner, away from any declared port (#1052). The route must instead +leave the port downward into the inter-row corridor, clear of the box, before +turning toward the neighbour. + +Encoded two ways: the strict ``compute_layout(validate=True)`` guard +(``_guard_routes_enter_sections_at_ports``) must accept the targeted fixture, +and across every topology fixture each BOTTOM-exit route's first move must be a +downward vertical step rather than a horizontal run along the edge. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import PortSide + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" +TOPOLOGY_FILES = sorted(TOPOLOGIES_DIR.glob("*.mmd")) +TOPOLOGY_IDS = [f.stem for f in TOPOLOGY_FILES] + + +def _bottom_exit_ports(graph) -> set[str]: + return { + sid + for sid, st in graph.stations.items() + if st.is_port + and (port := graph.ports.get(sid)) is not None + and not port.is_entry + and port.side == PortSide.BOTTOM + and st.section_id in graph.sections + } + + +def test_tb_perp_exit_side_neighbour_enters_at_ports() -> None: + """The strict port-entry guard accepts the down-and-over corridor route.""" + text = (TOPOLOGIES_DIR / "tb_perp_exit_side_neighbour.mmd").read_text() + graph = parse_metro_mermaid(text) + # Raises PhaseInvariantError on a route that grazes the section boundary. + compute_layout(graph, validate=True) + + +def test_tb_perp_exit_side_entry_aligns_with_consumer() -> None: + """The side entry sits at its consumer's Y, so the turn-in is horizontal. + + The entry is fed only by the TB BOTTOM exit, whose Y is the section's bottom + edge below its stations. Anchoring the entry there would force a diagonal + into the first station; the port instead lands at the consumer's Y so the + inter-section route rises in the column gap and turns in level. + """ + graph = parse_metro_mermaid( + (TOPOLOGIES_DIR / "tb_perp_exit_side_neighbour.mmd").read_text() + ) + compute_layout(graph) + entry = graph.stations["out_sec__entry_left_1"] + consumer = graph.stations["o1"] + assert abs(entry.y - consumer.y) < 1.0, ( + f"LEFT entry port y={entry.y:.1f} is off its consumer o1 y={consumer.y:.1f}; " + "the turn-in would be a diagonal rather than level" + ) + + +@pytest.mark.parametrize("path", TOPOLOGY_FILES, ids=TOPOLOGY_IDS) +def test_bottom_exit_routes_leave_port_downward(path: Path) -> None: + """Every BOTTOM-exit route descends out of its port before turning. + + A graze leaves the port horizontally along the bottom edge; a corridor or + drop route's first move is a downward vertical step. + """ + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + + bottom_exit_ids = _bottom_exit_ports(graph) + for route in routes: + if route.edge.source not in bottom_exit_ids or len(route.points) < 2: + continue + (sx, sy), (nx, ny) = route.points[0], route.points[1] + assert abs(nx - sx) < 1.0, ( + f"route from {route.edge.source} leaves the BOTTOM port " + f"horizontally (dx={nx - sx:.1f}); it grazes the section edge" + ) + assert ny > sy + 1.0, ( + f"route from {route.edge.source} does not descend below the exit " + f"(sy={sy:.1f}, next_y={ny:.1f})" + ) diff --git a/tests/test_tb_two_line_vert_seam.py b/tests/test_tb_two_line_vert_seam.py new file mode 100644 index 000000000..896f99327 --- /dev/null +++ b/tests/test_tb_two_line_vert_seam.py @@ -0,0 +1,98 @@ +"""A LEFT/RIGHT entry into a vertical-flow section enters level, then drops. + +When a vertical-flow (TB/BT) section's LEFT/RIGHT exit feeds another +vertical-flow section's LEFT/RIGHT entry with a multi-line bundle, the entry is +perpendicular to the destination trunk. Pinning the entry port to its +consumer's own Y (the trunk head) leaves no vertical drop room, so the +staggered (non-zero-offset) line slants diagonally into the trunk instead of +entering horizontally and then dropping onto its lane (#1054). + +The fix seats such an entry a station gap above the trunk head. Encoded two +ways: the targeted fixture's entry edges are axis-aligned (a horizontal lead-in +then a vertical drop, never a shallow slant), and across every topology fixture +no LEFT/RIGHT entry port into a vertical-flow section shares a Y with an +internal station of that section (which would route the line through the marker +and rob the turn-in of drop room). +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.geometry import lanes_run_along_x +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.layout.routing.common import apply_route_offsets +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import PortSide + +TOPOLOGIES_DIR = Path(__file__).parent.parent / "examples" / "topologies" +TOPOLOGY_FILES = sorted(TOPOLOGIES_DIR.glob("*.mmd")) +TOPOLOGY_IDS = [f.stem for f in TOPOLOGY_FILES] + +_AXIS_TOL = 0.5 + + +def _internal_station_ys(graph, section_id: str) -> list[float]: + section = graph.sections[section_id] + ports = set(section.entry_ports) | set(section.exit_ports) + return [ + st.y + for sid in section.station_ids + if sid not in ports and (st := graph.stations.get(sid)) is not None + ] + + +def test_two_line_vert_seam_enters_level_then_drops() -> None: + """Each two-line entry segment is axis-aligned, never a shallow slant.""" + text = (TOPOLOGIES_DIR / "tb_two_line_vert_seam.mmd").read_text() + graph = parse_metro_mermaid(text) + compute_layout(graph) + + port = graph.stations["down_sec__entry_left_1"] + head = graph.stations["d1"] + assert port.y < head.y - _AXIS_TOL, ( + f"entry port y={port.y:.1f} must sit above the trunk head d1 " + f"y={head.y:.1f} for the turn-in to have drop room" + ) + + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + entry_routes = [ + r + for r in routes + if r.edge.source == "down_sec__entry_left_1" and r.edge.target == "d1" + ] + assert entry_routes, "no entry lead-in routes found" + for route in entry_routes: + pts = apply_route_offsets(route, offsets) + for k in range(len(pts) - 1): + dx = abs(pts[k + 1][0] - pts[k][0]) + dy = abs(pts[k + 1][1] - pts[k][1]) + assert dx <= _AXIS_TOL or dy <= _AXIS_TOL, ( + f"entry segment {k} (line={route.line_id}) is a slant: " + f"dx={dx:.1f}, dy={dy:.1f}; the lead-in must be horizontal and " + f"the drop vertical" + ) + + +@pytest.mark.parametrize("path", TOPOLOGY_FILES, ids=TOPOLOGY_IDS) +def test_perp_entry_into_vertical_section_clears_trunk_head(path: Path) -> None: + """No LEFT/RIGHT entry into a vertical-flow section sits on an internal row.""" + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + for pid, port in graph.ports.items(): + if not port.is_entry or port.side not in (PortSide.LEFT, PortSide.RIGHT): + continue + section = graph.sections.get(port.section_id) + if section is None or not lanes_run_along_x(section.direction): + continue + port_y = graph.stations[pid].y + for sy in _internal_station_ys(graph, section.id): + assert abs(port_y - sy) > _AXIS_TOL, ( + f"{pid} (y={port_y:.1f}) shares Y with an internal station of " + f"{section.id} (y={sy:.1f}); the line would route through the " + f"marker with no room for a level turn-in" + ) diff --git a/tests/test_theme_mode.py b/tests/test_theme_mode.py new file mode 100644 index 000000000..1f316dc50 --- /dev/null +++ b/tests/test_theme_mode.py @@ -0,0 +1,123 @@ +"""Brand and mode are orthogonal axes. + +Brand (nfcore, seqera) picks identity; mode (light, dark) picks the chrome +palette. No brand is intrinsically light or dark - an unspecified mode falls to +a single global default for every brand alike. +""" + +import pytest + +from nf_metro.api import resolve_theme +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.themes import ( + DEFAULT_MODE, + NFCORE_DARK_THEME, + NFCORE_LIGHT_THEME, + SEQERA_DARK_THEME, + SEQERA_LIGHT_THEME, + THEME_MODES, + THEMES, + mode_pair, +) + +_MMD = "%%metro line: main | Main | #ff0000\ngraph LR\n a -->|main| b\n" + + +def _graph(style="dark", mode=""): + g = parse_metro_mermaid(_MMD) + g.style = style + g.mode = mode + return g + + +# --------------------------------------------------------------------------- +# Brand carries no mode: an unspecified mode resolves to the global default +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize("style", ["dark", "nfcore", "seqera"]) +def test_unspecified_mode_uses_global_default_for_every_brand(style): + resolved = resolve_theme(None, _graph(style=style)) + assert resolved.mode == DEFAULT_MODE + + +def test_brands_share_one_default_mode_not_a_per_brand_one(): + """nfcore and seqera resolve to the same mode when none is given.""" + nfcore = resolve_theme(None, _graph(style="nfcore")) + seqera = resolve_theme(None, _graph(style="seqera")) + assert nfcore.mode == seqera.mode == DEFAULT_MODE + + +# --------------------------------------------------------------------------- +# Mode is chosen independently of brand +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "style,mode,expected", + [ + ("nfcore", "light", NFCORE_LIGHT_THEME), + ("nfcore", "dark", NFCORE_DARK_THEME), + ("seqera", "light", SEQERA_LIGHT_THEME), + ("seqera", "dark", SEQERA_DARK_THEME), + ], +) +def test_brand_and_mode_combine_independently(style, mode, expected): + assert resolve_theme(None, _graph(style=style), mode=mode) is expected + + +def test_explicit_mode_arg_overrides_directive(): + assert ( + resolve_theme("nfcore", _graph(mode="dark"), mode="light") is NFCORE_LIGHT_THEME + ) + + +def test_directive_mode_used_when_no_arg(): + assert resolve_theme("seqera", _graph(mode="light")) is SEQERA_LIGHT_THEME + + +def test_explicit_variant_name_pins_its_mode(): + assert resolve_theme("nfcore-light", _graph()) is NFCORE_LIGHT_THEME + assert resolve_theme("seqera-dark", _graph()) is SEQERA_DARK_THEME + + +# --------------------------------------------------------------------------- +# %%metro mode: directive +# --------------------------------------------------------------------------- + + +def test_mode_directive_parsed(): + g = parse_metro_mermaid(f"%%metro mode: light\n{_MMD}") + assert g.mode == "light" + + +def test_invalid_mode_directive_ignored(): + g = parse_metro_mermaid(f"%%metro mode: sepia\n{_MMD}") + assert g.mode == "" + + +# --------------------------------------------------------------------------- +# Registry shape +# --------------------------------------------------------------------------- + + +def test_theme_modes_cover_both_modes_per_brand(): + for brand, family in THEME_MODES.items(): + assert set(family) == {"light", "dark"} + for mode, theme in family.items(): + assert theme.brand == brand + assert theme.mode == mode + + +def test_mode_pair_returns_light_then_dark(): + light, dark = mode_pair(NFCORE_DARK_THEME) + assert (light.mode, dark.mode) == ("light", "dark") + + +def test_mode_pair_none_without_family(): + assert mode_pair(THEMES["light"]) is None + + +def test_bare_brand_names_resolve_to_default_mode(): + assert THEMES["nfcore"].mode == DEFAULT_MODE + assert THEMES["seqera"].mode == DEFAULT_MODE diff --git a/tests/test_tighten_bypass_column_filter.py b/tests/test_tighten_bypass_column_filter.py new file mode 100644 index 000000000..918697160 --- /dev/null +++ b/tests/test_tighten_bypass_column_filter.py @@ -0,0 +1,146 @@ +"""Inter-row bypass reservation in ``_tighten_lower_rows_after_shrink`` (#665). + +``_tighten_lower_rows_after_shrink`` pulls lower-row sections up to close the +slack a bbox shrink reveals. When reserving inter-row space for a row's bypass +routes it must column-filter each bypass span against the lower section it would +crowd -- exactly as its downward sibling ``_push_lower_rows_after_bbox_grow`` +does -- so a bypass running over one set of columns does not hold down a stacked +section sitting in a column the bypass never runs over. + +The bug is hard to surface through a full render: in a single upper row every +section is a row-mate, so a tall one keeps the others tall and the leak is +masked. These tests drive the pass directly: lay a real graph out, push the +lower row down to manufacture the slack a shrink would have revealed, run the +tighten pass, and assert the lower section ends at the floor its own column +justifies. +""" + +from __future__ import annotations + +import pytest + +from nf_metro.layout.constants import BYPASS_CLEARANCE, SECTION_Y_GAP +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.phases.bbox import ( + _aggregate_bypass_spans, + _tighten_lower_rows_after_shrink, +) +from nf_metro.layout.section_placement import _inter_row_routing_minimums +from nf_metro.parser.mermaid import parse_metro_mermaid + + +def _target_gap(graph) -> float: + """The bbox-to-bbox gap the tighten pass targets between rows 0 and 1: + ``SECTION_Y_GAP`` unless an inter-row routing run reserves more.""" + return max(SECTION_Y_GAP, _inter_row_routing_minimums(graph).get((0, 1), 0.0)) + + +# A bypass over columns 0..2 (src -> tgt across an intervening mid section) +# and a single stacked row-1 section whose column is a parameter. Fed from +# tgt (to its left) so its LEFT entry is a plain L-drop, reserving no +# inter-row wrap band that would otherwise dominate the gap. +_MMD = """\ +%%metro title: Tighten bypass column filter +%%metro line: l1 | L1 | #e63946 +%%metro line: l2 | L2 | #0570b0 +%%metro line: l3 | L3 | #2db572 + +%%metro grid: src_sec | 0,0 +%%metro grid: mid_sec | 1,0 +%%metro grid: tgt_sec | 2,0 +%%metro grid: low_sec | {low_col},1 + +graph LR + subgraph src_sec [Source] + %%metro exit: right | l1, l2 + s1[Start] + s2[Out] + s1 -->|l1,l2| s2 + end + + subgraph mid_sec [Middle] + m1[Mid] + m2[MidOut] + m1 -->|l1| m2 + end + + subgraph tgt_sec [Target] + %%metro entry: left | l1, l2 + %%metro exit: right | l3 + t1[Process] + t2[End] + t1 -->|l1,l2| t2 + end + + subgraph low_sec [Lower] + lo1[LowIn] + lo2[LowOut] + lo1 -->|l3| lo2 + end + + s2 -->|l1| m1 + s2 -->|l1,l2| t1 + t2 -->|l3| lo1 +""" + + +def _layout(low_col: int): + graph = parse_metro_mermaid(_MMD.format(low_col=low_col)) + compute_layout(graph) + return graph + + +def _push_lower_row_down(graph, delta: float) -> None: + """Manufacture the post-shrink slack a tall-then-shrunk upper row leaves.""" + for s in graph.sections.values(): + if s.grid_row < 1: + continue + s.bbox_y += delta + for stid in s.station_ids: + st = graph.stations.get(stid) + if st is not None: + st.y += delta + + +def test_bypass_span_aggregated_over_intervening_section(): + """Guard the precondition: the topology really does generate a bypass over + columns (0, 2) that dips ``BYPASS_CLEARANCE`` below the intervening row.""" + graph = _layout(low_col=3) + row0 = [s for s in graph.sections.values() if s.grid_row == 0 and s.bbox_h > 0] + spans = _aggregate_bypass_spans(graph, row0) + assert (0, 2) in spans + row0_bot = max(s.bbox_y + s.bbox_h for s in row0) + assert spans[(0, 2)] == pytest.approx(row0_bot + BYPASS_CLEARANCE, abs=1.0) + + +def test_tighten_ignores_bypass_over_non_overlapping_column(): + """A stacked section in a column outside every bypass span is pulled up to + ``SECTION_Y_GAP`` above the row-ending extent -- it must not retain the + bypass clearance reserved for a different column.""" + graph = _layout(low_col=3) + row0 = [s for s in graph.sections.values() if s.grid_row == 0 and s.bbox_h > 0] + row0_bot = max(s.bbox_y + s.bbox_h for s in row0) + target_gap = _target_gap(graph) + + _push_lower_row_down(graph, delta=40.0) + _tighten_lower_rows_after_shrink(graph, SECTION_Y_GAP) + + low = graph.sections["low_sec"] + assert low.bbox_y == pytest.approx(row0_bot + target_gap, abs=1.0) + + +def test_tighten_keeps_bypass_clearance_for_overlapping_column(): + """The fix is narrow: a stacked section whose column *is* under the bypass + keeps the ``BYPASS_CLEARANCE`` reservation -- it would otherwise sit in the + bypass route's path.""" + graph = _layout(low_col=1) + row0 = [s for s in graph.sections.values() if s.grid_row == 0 and s.bbox_h > 0] + spans = _aggregate_bypass_spans(graph, row0) + bypass_bot = spans[(0, 2)] + target_gap = _target_gap(graph) + + _push_lower_row_down(graph, delta=40.0) + _tighten_lower_rows_after_shrink(graph, SECTION_Y_GAP) + + low = graph.sections["low_sec"] + assert low.bbox_y == pytest.approx(bypass_bot + target_gap, abs=1.0) diff --git a/tests/test_top_entry_staircase.py b/tests/test_top_entry_staircase.py new file mode 100644 index 000000000..e30e1bf73 --- /dev/null +++ b/tests/test_top_entry_staircase.py @@ -0,0 +1,99 @@ +"""TOP-entry staircase routing: centreline-built, concentric, non-flipping. + +The TOP-entry staircase handler (``_route_top_entry_l_shape``) and its former +multi-line variant are folded onto the centreline builder +(:func:`build_tapered_bundle`): the handler describes the staircase centreline +and the builder fans every co-travelling line as a parallel offset with +geometry-derived corner radii. This locks the properties that follow from +that construction, across every fixture whose routing reaches the handler: + +* every wholesale-translated bundle corner is concentric (no hand-signed + radius that nests non-concentrically and pinches the bundle); +* co-travelling lines keep a constant side-of-travel order (no flip/crossing); +* the always-on render-path guard accepts the routes; +* each staircase route bakes its per-line offset + (:attr:`OffsetRegime.BAKED`), the signature of a builder-fanned bundle + rather than a renderer-offset one. + +See issue #793. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import ( + OffsetRegime, + compute_station_offsets, + route_edges, +) +from nf_metro.layout.routing.invariants import ( + assert_render_curve_invariants, + check_bundle_order_preserved, + check_concentric_bundle_corners, +) +from nf_metro.parser.mermaid import parse_metro_mermaid + +REPO_ROOT = Path(__file__).resolve().parent.parent + +# Fixtures whose routing reaches the TOP-entry staircase handler. +_FIXTURES = [ + "examples/topologies/cross_col_top_entry.mmd", + "examples/topologies/cross_row_gap_wrap.mmd", + "examples/topologies/lr_to_tb_top_cross_col.mmd", + "examples/topologies/lr_to_tb_top_near_vertical.mmd", + "examples/topologies/lr_to_tb_top_two_lines.mmd", + "examples/topologies/merge_trunk_out_of_range_section.mmd", + "examples/variantbenchmarking.mmd", +] + + +def _routed(rel: str): + graph = parse_metro_mermaid((REPO_ROOT / rel).read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + return graph, offsets, route_edges(graph, station_offsets=offsets) + + +def _top_entry_routes(graph, routes): + out = [] + for rp in routes: + port = graph.ports.get(rp.edge.target) + if ( + rp.is_inter_section + and port is not None + and port.is_entry + and port.side is not None + and port.side.name == "TOP" + ): + out.append(rp) + return out + + +@pytest.mark.parametrize("rel", _FIXTURES, ids=lambda p: Path(p).name) +def test_top_entry_staircase_is_concentric_and_unflipped(rel: str) -> None: + graph, offsets, routes = _routed(rel) + assert check_concentric_bundle_corners(graph, routes, offsets) == [] + assert check_bundle_order_preserved(routes) == [] + assert_render_curve_invariants(graph, routes, offsets) + + +@pytest.mark.parametrize("rel", _FIXTURES, ids=lambda p: Path(p).name) +def test_top_entry_routes_are_builder_fanned(rel: str) -> None: + """Each staircase route bakes its offset, as a centreline-built bundle does. + + A bundle fanned by the centreline builder bakes each line's per-line offset + into its points (:attr:`OffsetRegime.BAKED`); a route that defers the offset + to the renderer stays :attr:`OffsetRegime.DEFERRED`. + """ + graph, _offsets, routes = _routed(rel) + staircases = _top_entry_routes(graph, routes) + assert staircases, f"{rel}: expected at least one TOP-entry route" + for rp in staircases: + assert rp.offset_regime is OffsetRegime.BAKED, ( + f"{rel}: {rp.line_id} {rp.edge.source}->{rp.edge.target} " + "TOP-entry route did not bake its offset (not builder-fanned)" + ) diff --git a/tests/test_topology_validation.py b/tests/test_topology_validation.py new file mode 100644 index 000000000..97813d378 --- /dev/null +++ b/tests/test_topology_validation.py @@ -0,0 +1,1224 @@ +"""Parametrized topology stress tests for the auto-layout engine. + +Loads diverse .mmd fixtures, runs layout, and validates programmatically +for layout defects. Also includes topology-specific assertions. +""" + +from __future__ import annotations + +from pathlib import Path + +import pytest +from layout_validator import ( + Severity, + check_almost_horizontal_edges, + check_coincident_stations, + check_coordinate_sanity, + check_edge_section_crossing, + check_edge_waypoints, + check_excessive_column_gaps, + check_exit_port_feeder_alignment, + check_intra_section_chain_alignment, + check_port_boundary, + check_route_segment_crossings, + check_section_overlap, + check_single_segment_diagonals, + check_station_containment, + validate_layout, +) + +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing.common import row_bottom_edge +from nf_metro.layout.routing.context import _resolve_section_row +from nf_metro.parser.mermaid import parse_metro_mermaid + +EXAMPLES_DIR = Path(__file__).parent.parent / "examples" +TOPOLOGIES_DIR = EXAMPLES_DIR / "topologies" + +# Collect all topology fixtures +TOPOLOGY_FILES = sorted(TOPOLOGIES_DIR.glob("*.mmd")) +TOPOLOGY_IDS = [f.stem for f in TOPOLOGY_FILES] + +# Include examples as regression guards +RNASEQ_FILE = EXAMPLES_DIR / "rnaseq_sections.mmd" +EPITOPEPREDICTION_FILE = EXAMPLES_DIR / "epitopeprediction.mmd" +HLATYPING_FILE = EXAMPLES_DIR / "hlatyping.mmd" +TB_FILE_TERMINI_FILE = EXAMPLES_DIR / "tb_file_termini.mmd" + + +def _load_and_layout(path: Path, max_station_columns: int = 15): + """Parse a .mmd file and run layout.""" + text = path.read_text() + graph = parse_metro_mermaid(text, max_station_columns=max_station_columns) + compute_layout(graph) + return graph + + +def _compute_routes(graph): + """Compute station offsets and route all edges.""" + from nf_metro.layout.routing import compute_station_offsets, route_edges + + offsets = compute_station_offsets(graph) + return route_edges(graph, station_offsets=offsets) + + +# --- Parametrized validation across all topologies --- + + +@pytest.fixture(params=TOPOLOGY_FILES, ids=TOPOLOGY_IDS) +def topology_graph(request): + """Load and lay out each topology fixture.""" + return _load_and_layout(request.param) + + +class TestTopologyValidation: + """Run all validator checks against every topology.""" + + def test_no_section_overlap(self, topology_graph): + violations = check_section_overlap(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_station_containment(self, topology_graph): + violations = check_station_containment(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_port_boundary(self, topology_graph): + violations = check_port_boundary(topology_graph) + # Port boundary is a warning, but we still flag issues + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_coordinate_sanity(self, topology_graph): + violations = check_coordinate_sanity(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_no_coincident_stations(self, topology_graph): + violations = check_coincident_stations(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_edge_waypoints(self, topology_graph): + violations = check_edge_waypoints(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_no_edge_section_crossing(self, topology_graph): + violations = check_edge_section_crossing(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_no_almost_horizontal_edges(self, topology_graph, request): + # funcprofiler_upstream is the canonical bad-case fixture; its + # humann3 junction routing is a known defect (see #241 family). + if "funcprofiler_upstream" in request.node.name: + pytest.xfail("funcprofiler_upstream has a known almost-horizontal edge") + if "bypass_fan_in_outer_slot" in request.node.name: + pytest.xfail( + "bypass_fan_in_outer_slot: meth slope 0.075 in minimum-width column gap" + ) + violations = check_almost_horizontal_edges(topology_graph) + warnings = [v for v in violations if v.severity == Severity.WARNING] + assert not warnings, "\n".join(v.message for v in warnings) + + def test_intra_section_chain_alignment_no_errors(self, topology_graph): + """Same-line same-section consecutive stations should align (warning). + + Multi-line hubs legitimately centre across tracks so routing absorbs + moderate offsets via L-shapes; failures here are upgraded only when + the engine emits ERROR severity (currently never - kept as a guard + against future tightening). + """ + violations = check_intra_section_chain_alignment(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_exit_port_feeder_alignment_no_errors(self, topology_graph): + """Exit ports should align with at least one feeder (warning). + + Multi-feeder fan-ins legitimately misalign all-but-one feeder. + ERROR severity is reserved for future tightening; CI gate is on + errors only. + """ + violations = check_exit_port_feeder_alignment(topology_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_all_stations_have_coordinates(self, topology_graph): + """Every real station should have been assigned non-default coords.""" + for sid, station in topology_graph.stations.items(): + if station.is_port or sid in topology_graph.junctions: + continue + if station.section_id is None: + continue + # At least one coordinate should be non-zero (offset is >= 80) + assert station.x != 0 or station.y != 0, ( + f"Station '{sid}' still at origin (0,0)" + ) + + +# --- Serpentine stacked-section invariant (issue #421) --- + +# Fixtures known to contain a serpentine run of stacked, chained, +# same-direction single-cell sections in one grid column. The new +# stacked_lr_serpentine fixture is the targeted case; variantbenchmarking_auto +# is an existing gallery pipeline whose Variant Filtering -> Benchmarking +# sections stack in one column, so the invariant must generalise to it. +SERPENTINE_FILES = [ + TOPOLOGIES_DIR / "stacked_lr_serpentine.mmd", + EXAMPLES_DIR / "variantbenchmarking_auto.mmd", +] +SERPENTINE_IDS = [f.stem for f in SERPENTINE_FILES] + + +@pytest.mark.parametrize("path", SERPENTINE_FILES, ids=SERPENTINE_IDS) +def test_stacked_sections_serpentine_no_backtrack(path): + """Stacked same-direction sections must connect via vertical drops. + + Each section in a detected serpentine run must flow internally without + folding its route back across the section width: a section that fails to + alternate direction would enter on the wrong side and wrap around. This + test fails on the pre-#421 engine, which inferred LR for every stacked + section regardless of position. + """ + from layout_validator import check_serpentine_no_backtrack + + from nf_metro.layout.auto_layout import detect_serpentine_runs + + graph = _load_and_layout(path) + + dag = graph.section_dag + assert dag is not None + runs = detect_serpentine_runs(graph, dag.successors, dag.predecessors) + assert runs, f"{path.stem}: expected at least one serpentine run to exist" + + violations = check_serpentine_no_backtrack(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + +# --- Layout-quality warning reporter --- +# +# The intra-section-chain and exit-port-feeder validators emit WARNING-level +# violations because legitimate fork-join layouts also produce them. Tests +# above gate CI on ERRORs only. This block prints the warning count per +# fixture so CI logs surface candidates for layout improvement without +# failing the build. + + +def _layout_quality_warning_count(graph) -> tuple[int, int, int]: + chain = check_intra_section_chain_alignment(graph) + port = check_exit_port_feeder_alignment(graph) + diag = check_single_segment_diagonals(graph) + return ( + sum(1 for v in chain if v.severity == Severity.WARNING), + sum(1 for v in port if v.severity == Severity.WARNING), + sum(1 for v in diag if v.severity == Severity.WARNING), + ) + + +@pytest.mark.parametrize("path", TOPOLOGY_FILES, ids=TOPOLOGY_IDS) +def test_layout_quality_warnings_report(path, capsys): + """Report warning counts for each topology - never fails.""" + graph = _load_and_layout(path) + chain_warns, port_warns, diag_warns = _layout_quality_warning_count(graph) + if chain_warns or port_warns or diag_warns: + with capsys.disabled(): + print( + f"\n {path.stem}: " + f"intra_section_chain_alignment={chain_warns}, " + f"exit_port_feeder_alignment={port_warns}, " + f"single_segment_diagonals={diag_warns}" + ) + + +# --- Positive-control regression: funcprofiler_upstream --- +# +# This fixture is a known-bad layout used as a stress test for the new +# validators. The asserts below pin the *current* defect set so the test +# fails (loudly) whenever the layout improves OR regresses, prompting a +# baseline update or a fix. When the underlying engine bug is fixed and +# violations drop to zero, replace the lower bounds with `== 0`. + +FUNCPROFILER_FIXTURE = TOPOLOGIES_DIR / "funcprofiler_upstream.mmd" + + +@pytest.mark.skipif( + not FUNCPROFILER_FIXTURE.exists(), reason="funcprofiler_upstream fixture absent" +) +class TestFuncprofilerUpstreamDefects: + """Lock in the funcprofiler_upstream layout defects the validators detect. + + The fixture is a real upstream pipeline with 11 lines and 7 parallel + profiling tools. It currently exhibits intra-section diagonals (the + sr_qc -> merge concat edge in the Input section) that the engine + cannot resolve without the in-flight funcprofiler-fix work. + """ + + @pytest.fixture + def graph(self): + return _load_and_layout(FUNCPROFILER_FIXTURE) + + def test_validator_detects_single_segment_diagonals(self, graph): + """The reporting line crossing from Quality Check to Output renders + as a single straight diagonal between the two ports; confirm the + detector picks it up. (The intra-section sr_qc -> merge diagonal + only appears under the in-flight funcprofiler-fix branch's + exit-port snapping; main code routes it as an L-shape.) + """ + violations = check_single_segment_diagonals(graph) + flagged = {(v.context["source"], v.context["target"]) for v in violations} + port_pair_present = any( + "QC__exit" in s and "Output__entry" in t for s, t in flagged + ) + assert port_pair_present, ( + f"expected QC -> Output single-diagonal port hop; got {flagged}" + ) + + +# --- Failing regression: variant_calling --- +# +# variant_calling.mmd had three confirmed visible defects (verified +# manually with the user as part of validator development): +# +# 1. Section 2 (Alignment) chain alignment - bwa_index, bwa_mem, +# samtools_sort, samtools_index alternated rows in a 4-station zigzag +# on the Main line. FIXED in #420: bwa_mem is a fan-in (the bwa_index +# branch plus the fastp entry both carry Main into it), so the entry +# phantom now anchors the through-trunk while bwa_index fans in above +# it, keeping bwa_mem -> samtools_sort -> samtools_index straight. +# 2. Section 3 (Variant Calling) excessive column gap - GATK +# HaplotypeCaller and DeepVariant share column x=772 but are 80px +# apart with one empty grid row between them. STILL OPEN (#453). +# 3. Section 1 -> Section 2/4 inter-section line crossing - Main and +# QC Reporting both fanned out from junction __junction_6 and crossed +# on the way to their respective targets. FIXED as a side effect of +# #420 (the straight Alignment trunk removes the crossing). +# +# Defects 1 and 3 now pass; defect 2 remains xfail until the column-gap +# layout is fixed. + +VARIANT_CALLING_FILE = EXAMPLES_DIR / "variant_calling.mmd" + + +_VARIANT_CALLING_XFAIL = pytest.mark.xfail( + strict=True, + reason="known variant_calling layout defect; tracked in #453", +) + + +class TestVariantCallingDefects: + """Lock in known variant_calling layout defects via strict xfail. + + Each remaining defect is currently present; when an engine fix lands + the matching xfail flips to XPASS and reds CI, prompting the marker + removal. + """ + + @pytest.fixture + def graph(self): + return _load_and_layout(VARIANT_CALLING_FILE) + + def test_no_intra_section_chain_misalignment(self, graph): + v = check_intra_section_chain_alignment(graph) + assert not v, "\n".join(vi.message for vi in v) + + @_VARIANT_CALLING_XFAIL + def test_no_excessive_column_gaps(self, graph): + v = check_excessive_column_gaps(graph) + assert not v, "\n".join(vi.message for vi in v) + + def test_no_route_segment_crossings(self, graph): + v = check_route_segment_crossings(graph) + assert not v, "\n".join(vi.message for vi in v) + + +# --- #420: single-line linear chains must stay axis-aligned --- +# +# Parametrised across the whole gallery rather than only variant_calling: +# the zig-zag was a general track-stagger defect (entry-runway phantoms +# fanning out symmetrically with a fan-in branch instead of anchoring the +# trunk), so the invariant must hold for every fixture, not just the one +# that first exposed it. + +_CHAIN_ALIGNMENT_FILES = [ + VARIANT_CALLING_FILE, + RNASEQ_FILE, + EPITOPEPREDICTION_FILE, + HLATYPING_FILE, + *TOPOLOGY_FILES, +] + + +@pytest.mark.parametrize("mmd_path", _CHAIN_ALIGNMENT_FILES, ids=lambda p: p.stem) +def test_no_intra_section_chain_misalignment_across_gallery(mmd_path): + """Consecutive same-line stations inside one section run axis-aligned. + + Regression guard for #420 (TB/LR linear-chain zig-zag), generalised + beyond the variant_calling fixture that first surfaced it. + """ + graph = _load_and_layout(mmd_path) + violations = check_intra_section_chain_alignment(graph) + assert not violations, "\n".join(v.message for v in violations) + + +# --- Regression guard: rnaseq example --- + + +class TestRnaseqRegression: + """Ensure the rnaseq example passes all layout checks.""" + + @pytest.fixture + def rnaseq_graph(self): + return _load_and_layout(RNASEQ_FILE) + + def test_no_section_overlap(self, rnaseq_graph): + violations = check_section_overlap(rnaseq_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_station_containment(self, rnaseq_graph): + violations = check_station_containment(rnaseq_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_coordinate_sanity(self, rnaseq_graph): + violations = check_coordinate_sanity(rnaseq_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_edge_waypoints(self, rnaseq_graph): + violations = check_edge_waypoints(rnaseq_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_all_sections_placed(self, rnaseq_graph): + """All 5 rnaseq sections should have valid bounding boxes.""" + assert len(rnaseq_graph.sections) == 5 + for sid, section in rnaseq_graph.sections.items(): + assert section.bbox_w > 0, f"Section '{sid}' has zero width" + assert section.bbox_h > 0, f"Section '{sid}' has zero height" + + +class TestEpitopepredictionRegression: + """Ensure the epitopeprediction example passes all layout checks.""" + + @pytest.fixture + def epitopeprediction_graph(self): + return _load_and_layout(EPITOPEPREDICTION_FILE) + + def test_no_section_overlap(self, epitopeprediction_graph): + violations = check_section_overlap(epitopeprediction_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_station_containment(self, epitopeprediction_graph): + violations = check_station_containment(epitopeprediction_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_coordinate_sanity(self, epitopeprediction_graph): + violations = check_coordinate_sanity(epitopeprediction_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_edge_waypoints(self, epitopeprediction_graph): + violations = check_edge_waypoints(epitopeprediction_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_all_sections_placed(self, epitopeprediction_graph): + """All 3 epitopeprediction sections should have valid bounding boxes.""" + assert len(epitopeprediction_graph.sections) == 3 + for sid, section in epitopeprediction_graph.sections.items(): + assert section.bbox_w > 0, f"Section '{sid}' has zero width" + assert section.bbox_h > 0, f"Section '{sid}' has zero height" + + +class TestHlatypingRegression: + """Ensure the hlatyping example passes all layout checks.""" + + @pytest.fixture + def hlatyping_graph(self): + return _load_and_layout(HLATYPING_FILE) + + def test_no_section_overlap(self, hlatyping_graph): + violations = check_section_overlap(hlatyping_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_station_containment(self, hlatyping_graph): + violations = check_station_containment(hlatyping_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_coordinate_sanity(self, hlatyping_graph): + violations = check_coordinate_sanity(hlatyping_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_edge_waypoints(self, hlatyping_graph): + violations = check_edge_waypoints(hlatyping_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_all_sections_placed(self, hlatyping_graph): + """All 3 hlatyping sections should have valid bounding boxes.""" + assert len(hlatyping_graph.sections) == 3 + for sid, section in hlatyping_graph.sections.items(): + assert section.bbox_w > 0, f"Section '{sid}' has zero width" + assert section.bbox_h > 0, f"Section '{sid}' has zero height" + + +class TestTbFileTerminiRegression: + """Ensure the TB-section file-termini example lays out cleanly (#254).""" + + @pytest.fixture + def tb_graph(self): + return _load_and_layout(TB_FILE_TERMINI_FILE) + + def test_no_section_overlap(self, tb_graph): + violations = check_section_overlap(tb_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_station_containment(self, tb_graph): + violations = check_station_containment(tb_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_coordinate_sanity(self, tb_graph): + violations = check_coordinate_sanity(tb_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_reporting_section_is_tb_with_termini(self, tb_graph): + """The reporting section must stay TB and own the file termini.""" + reporting = tb_graph.sections["reporting"] + assert reporting.direction == "TB" + termini = [ + tb_graph.stations[sid] + for sid in reporting.station_ids + if tb_graph.stations[sid].is_terminus + ] + assert len(termini) == 3 + + def test_termini_icons_reserved_below_in_bbox(self, tb_graph): + """The TB section bbox bottom must clear its sink terminus icons.""" + reporting = tb_graph.sections["reporting"] + bottom = reporting.bbox_y + reporting.bbox_h + sink_termini = [ + tb_graph.stations[sid] + for sid in reporting.station_ids + if tb_graph.stations[sid].is_terminus + ] + assert sink_termini + # Each sink terminus sits above the bbox bottom with room for its + # downward icon (a bare marker would only need ~5px). + for st in sink_termini: + assert bottom - st.y > 2 * 16.0, ( + f"{st.id}: only {bottom - st.y:.1f}px below station for icon" + ) + + def test_entry_port_aligned_with_feeder_no_kink(self, tb_graph): + """The TB entry port shares its feeder's Y (Stage 6.16 re-align).""" + entry_ports = tb_graph.sections["reporting"].entry_ports + assert entry_ports + for pid in entry_ports: + feeder_ys = [ + tb_graph.stations[e.source].y + for e in tb_graph.edges_to(pid) + if e.source in tb_graph.stations + ] + assert feeder_ys + port_y = tb_graph.stations[pid].y + assert min(abs(port_y - fy) for fy in feeder_ys) < 1.0 + + def test_validate_guards_pass(self): + """compute_layout(validate=True) exercises the terminus-icon guard.""" + text = TB_FILE_TERMINI_FILE.read_text() + graph = parse_metro_mermaid(text) + compute_layout(graph, validate=True) + + +# --- Topology-specific assertions --- + + +class TestTopologySpecific: + """Targeted assertions for individual topologies.""" + + def test_fan_out_creates_junction(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "wide_fan_out.mmd") + # With 4 targets from one source, we expect junction(s) + assert len(graph.junctions) > 0, "Fan-out should create junction stations" + + def test_fan_out_has_5_sections(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "wide_fan_out.mmd") + assert len(graph.sections) == 5 + + def test_fan_in_has_5_sections(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "wide_fan_in.mmd") + assert len(graph.sections) == 5 + + def test_deep_linear_has_7_sections(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "deep_linear.mmd") + assert len(graph.sections) == 7 + # Sections should progress left to right (or with fold) + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_parallel_independent_separate_rows(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "parallel_independent.mmd") + # DNA and RNA chains should not overlap + violations = check_section_overlap(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + # Should have 4 sections + assert len(graph.sections) == 4 + + def test_diamond_grid_structure(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "section_diamond.mmd") + # 4 sections: start, branch_left, branch_right, finish + assert len(graph.sections) == 4 + # Start should be in col 0, branches in col 1, finish in col 2 + start = graph.sections["start"] + bl = graph.sections["branch_left"] + br = graph.sections["branch_right"] + finish = graph.sections["finish"] + assert start.grid_col < bl.grid_col + assert start.grid_col < br.grid_col + assert bl.grid_col < finish.grid_col + assert br.grid_col < finish.grid_col + + def test_diamond_branches_different_rows(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "section_diamond.mmd") + bl = graph.sections["branch_left"] + br = graph.sections["branch_right"] + # Branches should be stacked vertically (different rows) + assert bl.grid_row != br.grid_row + + def test_single_section_no_ports(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "single_section.mmd") + assert len(graph.sections) == 1 + # Single section with no inter-section edges should have no ports + assert len(graph.ports) == 0 + assert len(graph.junctions) == 0 + + def test_single_section_valid(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "single_section.mmd") + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_asymmetric_tree_sections(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "asymmetric_tree.mmd") + # 7 sections total + assert len(graph.sections) == 7 + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_mixed_port_sides_structure(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "mixed_port_sides.mmd") + assert len(graph.sections) == 3 + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_multi_line_bundle_all_6_lines(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "multi_line_bundle.mmd") + assert len(graph.lines) == 6 + assert len(graph.sections) == 3 + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_complex_multipath_structure(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "complex_multipath.mmd") + assert len(graph.sections) == 6 + assert len(graph.lines) == 4 + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_rnaseq_lite_structure(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "rnaseq_lite.mmd") + assert len(graph.sections) == 5 + assert len(graph.lines) == 3 + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_rnaseq_lite_top_alignment(self): + """Same-row sections in rnaseq_lite should share the same top edge.""" + graph = _load_and_layout(TOPOLOGIES_DIR / "rnaseq_lite.mmd") + # Group sections by grid_row + rows: dict[int, list] = {} + for sid, sec in graph.sections.items(): + rows.setdefault(sec.grid_row, []).append((sid, sec)) + # For each row with multiple sections, check top edges are flush + for row, secs in rows.items(): + if len(secs) <= 1: + continue + top_ys = [(sid, sec.bbox_y) for sid, sec in secs] + ref_y = top_ys[0][1] + for sid, y in top_ys[1:]: + assert abs(y - ref_y) < 1.0, ( + f"Row {row}: {sid} bbox_y={y} differs from " + f"{top_ys[0][0]} bbox_y={ref_y} (not top-aligned)" + ) + + def test_variant_calling_structure(self): + graph = _load_and_layout(TOPOLOGIES_DIR / "variant_calling.mmd") + assert len(graph.sections) == 6 + assert len(graph.lines) == 4 + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + # --- Fold topology tests --- + + def test_fold_fan_across_structure(self): + """Fan-out/fan-in across a fold boundary.""" + graph = _load_and_layout(TOPOLOGIES_DIR / "fold_fan_across.mmd") + assert len(graph.sections) == 7 + assert len(graph.lines) == 3 + + # normalize is the fold section (TB direction, rowspan=3 covering + # the 3 quant rows but not the return row) + normalize = graph.sections["normalize"] + assert normalize.direction == "TB" + assert normalize.grid_row_span == 3 + + # Three quant sections stacked at the same column + tmt = graph.sections["tmt_quant"] + lfq = graph.sections["lfq_quant"] + dia = graph.sections["dia_quant"] + assert tmt.grid_col == lfq.grid_col == dia.grid_col + assert len({tmt.grid_row, lfq.grid_row, dia.grid_row}) == 3 + + # stat_analysis is RL (post-fold return row) + stat = graph.sections["stat_analysis"] + assert stat.direction == "RL" + + # All grid_cols are non-negative + for sid, sec in graph.sections.items(): + assert sec.grid_col >= 0, f"{sid} has negative grid_col={sec.grid_col}" + + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_fold_double_structure(self): + """Double fold producing a serpentine (zigzag) layout.""" + graph = _load_and_layout(TOPOLOGIES_DIR / "fold_double.mmd") + assert len(graph.sections) == 10 + assert len(graph.lines) == 2 + + # Two fold sections (TB direction) + calling = graph.sections["calling"] + integration = graph.sections["integration"] + assert calling.direction == "TB" + assert integration.direction == "TB" + + # Serpentine: row 0 (LR), row 1 (RL), row 2 (LR) + row0_secs = [s for s in graph.sections.values() if s.grid_row == 0] + row1_secs = [s for s in graph.sections.values() if s.grid_row == 1] + row2_secs = [s for s in graph.sections.values() if s.grid_row == 2] + assert len(row0_secs) == 4 # input_qc, alignment, base_recal, calling + assert len(row1_secs) == 4 # hard_filter .. integration + assert len(row2_secs) == 2 # reporting, archival + + # Row 1 post-fold sections flow RL + hard_filter = graph.sections["hard_filter"] + annotation = graph.sections["annotation"] + interpretation = graph.sections["interpretation"] + assert hard_filter.direction == "RL" + assert annotation.direction == "RL" + assert interpretation.direction == "RL" + + # Row 2 post-second-fold sections flow LR + reporting = graph.sections["reporting"] + archival = graph.sections["archival"] + assert reporting.direction == "LR" + assert archival.direction == "LR" + + # Negative grid_cols are valid: the return row may extend past + # column 0 when there are more sections than columns. Section + # placement handles negative columns correctly. + assert integration.grid_col <= 0 # leftmost section on return row + + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_fold_stacked_branch_structure(self): + """Stacked sections near fold + post-fold branching.""" + graph = _load_and_layout(TOPOLOGIES_DIR / "fold_stacked_branch.mmd") + assert len(graph.sections) == 8 + assert len(graph.lines) == 3 + + # integration is fold section (TB, rowspan=3) + integration = graph.sections["integration"] + assert integration.direction == "TB" + assert integration.grid_row_span == 3 + + # Three analysis sections stacked at same column + rna = graph.sections["rna_analysis"] + atac = graph.sections["atac_analysis"] + prot = graph.sections["protein_analysis"] + assert rna.grid_col == atac.grid_col == prot.grid_col + assert len({rna.grid_row, atac.grid_row, prot.grid_row}) == 3 + + # bio_interp and tech_qc are post-fold, stacked at same column + bio = graph.sections["bio_interp"] + tech = graph.sections["tech_qc"] + assert bio.grid_col == tech.grid_col + assert bio.grid_row != tech.grid_row + + # bio_interp is RL (post-fold, successor to left) + assert bio.direction == "RL" + + # All grid_cols are non-negative + for sid, sec in graph.sections.items(): + assert sec.grid_col >= 0, f"{sid} has negative grid_col={sec.grid_col}" + + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + +# --- Reflow (max_station_columns) tests --- + +# Topologies with enough sections to exercise reflow at various widths. +REFLOW_FIXTURES = ["deep_linear", "fold_double"] +REFLOW_WIDTHS = [6, 8, 10] + + +class TestReflowValidation: + """Validate layout correctness when topologies are reflowed at reduced widths.""" + + @pytest.fixture( + params=[(name, width) for name in REFLOW_FIXTURES for width in REFLOW_WIDTHS], + ids=[ + f"{name}_cols{width}" for name in REFLOW_FIXTURES for width in REFLOW_WIDTHS + ], + ) + def reflow_graph(self, request): + name, width = request.param + return _load_and_layout( + TOPOLOGIES_DIR / f"{name}.mmd", max_station_columns=width + ) + + def test_no_section_overlap(self, reflow_graph): + violations = check_section_overlap(reflow_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_station_containment(self, reflow_graph): + violations = check_station_containment(reflow_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_coordinate_sanity(self, reflow_graph): + violations = check_coordinate_sanity(reflow_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + def test_edge_waypoints(self, reflow_graph): + violations = check_edge_waypoints(reflow_graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + +class TestReflowStructure: + """Verify that reducing max_station_columns produces more folds.""" + + def test_deep_linear_reflow_adds_folds(self): + """Narrower width produces more rows.""" + graph_wide = _load_and_layout( + TOPOLOGIES_DIR / "deep_linear.mmd", max_station_columns=15 + ) + graph_narrow = _load_and_layout( + TOPOLOGIES_DIR / "deep_linear.mmd", max_station_columns=6 + ) + wide_rows = {s.grid_row for s in graph_wide.sections.values()} + narrow_rows = {s.grid_row for s in graph_narrow.sections.values()} + assert len(narrow_rows) > len(wide_rows) + + def test_deep_linear_narrow_has_tb_fold(self): + """At max_station_columns=6, deep_linear should have TB fold sections.""" + graph = _load_and_layout( + TOPOLOGIES_DIR / "deep_linear.mmd", max_station_columns=6 + ) + tb_sections = [sid for sid, s in graph.sections.items() if s.direction == "TB"] + assert len(tb_sections) >= 1 + + def test_fold_double_more_folds_at_narrow_width(self): + """fold_double at width 6 should produce more fold sections than default.""" + graph_default = _load_and_layout( + TOPOLOGIES_DIR / "fold_double.mmd", max_station_columns=15 + ) + graph_narrow = _load_and_layout( + TOPOLOGIES_DIR / "fold_double.mmd", max_station_columns=6 + ) + default_folds = sum( + 1 for s in graph_default.sections.values() if s.direction == "TB" + ) + narrow_folds = sum( + 1 for s in graph_narrow.sections.values() if s.direction == "TB" + ) + assert narrow_folds >= default_folds + + +GENOMEASSEMBLY_FILE = EXAMPLES_DIR / "genomeassembly.mmd" + + +class TestMergeJunctions: + """Tests for merge junction insertion and positioning (#207).""" + + def test_merge_junctions_created(self): + """genomeassembly should have merge junctions for convergent assembly lines.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + merge_ids = [j for j in graph.junctions if j.startswith("__merge_")] + assert len(merge_ids) > 0, "Expected merge junctions for convergent edges" + + def test_merge_junction_count(self): + """Convergent assembly lines create merge junctions.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + merge_ids = [j for j in graph.junctions if j.startswith("__merge_")] + # scaffolding + genome_stats each get convergent assemblies + assert len(merge_ids) >= 2, ( + f"Expected >= 2 merge junctions, got {len(merge_ids)}" + ) + + def test_merge_junction_has_correct_section(self): + """Merge junctions should have section_id set to the target section.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + for jid in graph.junctions: + if not jid.startswith("__merge_"): + continue + junction = graph.stations[jid] + assert junction.section_id is not None, ( + f"Merge junction {jid} should have a section_id" + ) + # Verify it matches the successor entry port's section + for edge in graph.edges: + if edge.source == jid: + tgt_port = graph.ports.get(edge.target) + if tgt_port and tgt_port.is_entry: + assert junction.section_id == tgt_port.section_id, ( + f"Merge junction {jid} section_id {junction.section_id} " + f"doesn't match entry port section {tgt_port.section_id}" + ) + + def test_merge_junction_connectivity(self): + """Merge junctions have N>1 preds and 1 entry port succ.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + for jid in graph.junctions: + if not jid.startswith("__merge_"): + continue + preds = [e.source for e in graph.edges if e.target == jid] + succs = [e.target for e in graph.edges if e.source == jid] + assert len(preds) > 1, ( + f"Merge junction {jid} should have >1 predecessors, got {len(preds)}" + ) + assert len(succs) == 1, ( + f"Merge junction {jid} should have 1 successor, got {len(succs)}" + ) + succ_port = graph.ports.get(succs[0]) + assert succ_port is not None and succ_port.is_entry, ( + f"Merge junction {jid} successor should be an entry port" + ) + + def test_merge_junction_positioned_near_entry(self): + """Merge junctions should be positioned near their entry port.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + for jid in graph.junctions: + if not jid.startswith("__merge_"): + continue + junction = graph.stations[jid] + # Find entry port successor + for edge in graph.edges: + if edge.source == jid: + tgt = graph.stations.get(edge.target) + if tgt and graph.ports.get(edge.target): + # Y should match entry port + assert abs(junction.y - tgt.y) < 1.0, ( + f"Merge junction {jid} Y={junction.y} should match " + f"entry port Y={tgt.y}" + ) + # X should be to the left of entry port (for LEFT entry) + assert junction.x < tgt.x, ( + f"Merge junction {jid} X={junction.x} should be left " + f"of entry port X={tgt.x}" + ) + + def test_genomeassembly_passes_validation(self): + """genomeassembly example should pass all layout validation checks.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + violations = validate_layout(graph) + errors = [v for v in violations if v.severity == Severity.ERROR] + assert not errors, "\n".join(v.message for v in errors) + + +class TestMergeRouting: + """Tests for merge trunk/branch routing patterns (#207).""" + + def test_trunk_reaches_entry_port(self): + """Trunk route's last point should match the entry port.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + routes = _compute_routes(graph) + merge_ids = {j for j in graph.junctions if j.startswith("__merge_")} + for r in routes: + if r.edge.target in merge_ids and len(r.points) == 6: + # Find entry port for this merge junction + for e in graph.edges: + if e.source == r.edge.target: + ep = graph.ports.get(e.target) + if ep and ep.is_entry: + ep_st = graph.stations[e.target] + last = r.points[-1] + assert abs(last[0] - ep_st.x) < 1, ( + f"Trunk to {r.edge.target} ends at " + f"x={last[0]:.0f}, entry at " + f"x={ep_st.x:.0f}" + ) + + def test_branch_is_4_point_descent(self): + """Branch routes should be 4-point L-shape descents.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + routes = _compute_routes(graph) + merge_ids = {j for j in graph.junctions if j.startswith("__merge_")} + for r in routes: + if r.edge.target in merge_ids and len(r.points) != 6 and len(r.points) != 2: + assert len(r.points) == 4, ( + f"Branch {r.edge.source}->{r.edge.target} " + f"has {len(r.points)} points, expected 4" + ) + + def test_no_backward_segments(self): + """No merge route should have backward (decreasing X) segments.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + routes = _compute_routes(graph) + merge_ids = {j for j in graph.junctions if j.startswith("__merge_")} + for r in routes: + if r.edge.target not in merge_ids: + continue + for k in range(len(r.points) - 1): + x1 = r.points[k][0] + x2 = r.points[k + 1][0] + assert x2 >= x1 - 1, ( + f"Backward segment in " + f"{r.edge.source}->{r.edge.target} " + f"seg {k}: x {x1:.0f}->{x2:.0f}" + ) + + def test_bypass_bundle_uses_offset_step(self): + """Bundled bypass routes should be OFFSET_STEP apart.""" + from nf_metro.layout.constants import OFFSET_STEP + + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + routes = _compute_routes(graph) + # Collect all horizontal segments per line for inter-section + # bypass routes. Bypass segments are horizontal runs that sit + # between the source and target section Y ranges (i.e. below + # the top-row stations). We look for pairs at nearby Y values + # that differ by exactly OFFSET_STEP. + horiz_by_line: dict[str, list[float]] = {} + for r in routes: + if not r.is_inter_section: + continue + for k in range(len(r.points) - 1): + y = r.points[k][1] + if y > 200 and abs(r.points[k][1] - r.points[k + 1][1]) < 1: + horiz_by_line.setdefault(r.line_id, []).append(y) + a_ys = horiz_by_line.get("assemblies", []) + h_ys = horiz_by_line.get("hic_reads", []) + if a_ys and h_ys: + # Find the pair of horizontal segments closest to each other + min_gap = min(abs(a - h) for a in a_ys for h in h_ys if abs(a - h) > 0) + assert min_gap == OFFSET_STEP, ( + f"Bypass bundle gap {min_gap}px, expected {OFFSET_STEP}px" + ) + + +class TestUpwardBypass: + """Regression tests for upward bypass routes (#240). + + When a bypass source is below the trunk (bottom of a tall section + bypassing a shorter neighbour), the gap1 vertical goes UP. The + fan-path direction must match the L-shape sibling so they share + consistent positions at the first corner, and the r2 override must + account for the reversed gap1 direction. + """ + + UPWARD_BYPASS_FILE = TOPOLOGIES_DIR / "upward_bypass.mmd" + + @pytest.fixture(scope="class") + def routes(self): + graph = _load_and_layout(self.UPWARD_BYPASS_FILE) + return _compute_routes(graph) + + @pytest.fixture(scope="class") + def bypass_routes(self, routes): + return [r for r in routes if len(r.points) == 6 and r.curve_radii] + + def test_fan_positions_consistent(self, routes): + """L-shape and bypass from the same junction share gap1 X.""" + a_gap1_xs = set() + for r in routes: + if r.line_id != "a" or not r.is_inter_section: + continue + if len(r.points) >= 4: + a_gap1_xs.add(round(r.points[1][0], 1)) + assert len(a_gap1_xs) == 1, ( + f"Line 'a' L-shape and bypass have different gap1 X: {a_gap1_xs}" + ) + + def test_corner1_concentricity(self, bypass_routes): + """All bypass curves at corner 1 should start at the same X.""" + xs = {round(r.points[1][0] - r.curve_radii[0], 1) for r in bypass_routes} + assert len(xs) == 1, f"Corner 1 start X not constant: {xs}" + + def test_corner2_concentricity(self, bypass_routes): + """All bypass lines should start their trunk horizontal at the same X.""" + xs = {round(r.points[1][0] + r.curve_radii[1], 1) for r in bypass_routes} + assert len(xs) == 1, f"Corner 2 start X not constant: {xs}" + + def test_corner3_concentricity(self, bypass_routes): + """All bypass lines should end their trunk horizontal at the same X.""" + xs = {round(r.points[3][0] - r.curve_radii[2], 1) for r in bypass_routes} + assert len(xs) == 1, f"Corner 3 end X not constant: {xs}" + + def test_corner4_concentricity(self, bypass_routes): + """All bypass lines should reach the target at the same X.""" + xs = {round(r.points[3][0] + r.curve_radii[3], 1) for r in bypass_routes} + assert len(xs) == 1, f"Corner 4 target X not constant: {xs}" + + def test_no_line_crossings_on_segments(self, bypass_routes): + """Lines should maintain monotonic ordering on each segment.""" + bypasses = sorted(bypass_routes, key=lambda r: r.line_id) + for seg_idx, coord_idx, name in [ + (1, 0, "gap1_x"), + (2, 1, "trunk_y"), + (3, 0, "gap2_x"), + ]: + vals = [r.points[seg_idx][coord_idx] for r in bypasses] + is_mono = all(vals[i] <= vals[i + 1] for i in range(len(vals) - 1)) or all( + vals[i] >= vals[i + 1] for i in range(len(vals) - 1) + ) + assert is_mono, ( + f"{name} not monotonic: " + f"{[(r.line_id, vals[i]) for i, r in enumerate(bypasses)]}" + ) + + +class TestAlmostHorizontalEdges: + """Regression tests for almost-horizontal edge detection (#209). + + Uses real-world examples that are known to trigger offset mismatches + between single-line and multi-line stations at the same Y. + """ + + def test_genomeassembly_no_slope(self): + """The genomeassembly example (the original #209 report) should be clean.""" + graph = _load_and_layout(GENOMEASSEMBLY_FILE) + violations = check_almost_horizontal_edges(graph) + assert not violations, "\n".join(v.message for v in violations) + + def test_variant_calling_no_slope(self): + """The variant_calling example should be clean.""" + graph = _load_and_layout(EXAMPLES_DIR / "variant_calling.mmd") + violations = check_almost_horizontal_edges(graph) + assert not violations, "\n".join(v.message for v in violations) + + def test_with_subworkflows_no_slope(self): + """with_subworkflows should be clean (#420). + + Its Alignment trunk co-travels to the exit port with the + alignment_reporting branch; the exit-only reorder must not step the + through-trunk's offset, which would slant its junction-to-entry + segment between Preprocess and Alignment. + """ + from nf_metro.convert import convert_nextflow_dag + + path = ( + Path(__file__).parent.parent + / "tests" + / "fixtures" + / "nextflow" + / "with_subworkflows.mmd" + ) + graph = parse_metro_mermaid(convert_nextflow_dag(path.read_text())) + compute_layout(graph) + violations = check_almost_horizontal_edges(graph) + assert not violations, "\n".join(v.message for v in violations) + + +# --- #652: junction fan-out + bypass concentric nesting --- + +FAN_BYPASS_NESTING_FILE = TOPOLOGIES_DIR / "fan_bypass_nesting.mmd" + + +def _station_row(graph, station_id): + """Grid row of a station's resolved section, or ``None``.""" + st = graph.stations.get(station_id) + return _resolve_section_row(graph, st) if st else None + + +def _bypass_fan_weaves(graph): + """Junction crossings where a bypass weaves a descender AT THE FAN. + + The bug is a bypass whose lead-in tangles across its sibling down-turns up + at the fan corner. A weave is a crossing of two edges from one junction + where exactly one turns DOWN to a lower row (a descender) and the crossing + point sits within the junction's own row band -- i.e. near the fan, before + the bypass has peeled off. A crossing down in the inter-row gap is the + bypass diverging into its run (the clean fork), not a weave, and a crossing + with the same-row trunk continuation is the unavoidable divergence; neither + is counted. + """ + out = [] + for v in check_route_segment_crossings(graph): + edge_a = v.context["edge_a"] + edge_b = v.context["edge_b"] + jid = edge_a[0] + if jid != edge_b[0] or not jid.startswith("__junction"): + continue + jrow = _station_row(graph, jid) + row_a = _station_row(graph, edge_a[1]) + row_b = _station_row(graph, edge_b[1]) + if jrow is None or row_a is None or row_b is None: + continue + if (row_a > jrow) == (row_b > jrow): + continue # not a bypass-vs-descender pair + band_bottom = row_bottom_edge(graph, jrow, default=None) + cross_y = v.context["intersection"][1] + if band_bottom is not None and cross_y <= band_bottom + 1.0: + out.append(v.message) + return out + + +def test_fan_bypass_nesting_fixture_fans_from_a_junction(): + """The fixture's source must fan out through a synthetic junction.""" + graph = _load_and_layout(FAN_BYPASS_NESTING_FILE) + junctions = [s for s in graph.stations.values() if s.id.startswith("__junction")] + assert junctions, "fixture lost its synthetic fan-out junction" + + +def test_fan_bypass_no_fan_weave(): + """A fan-out bypass must not weave across its down-turns at the fan (#652). + + The bypass stays bundled through the down-turns' shared concentric corner + and only crosses over once it has peeled into the inter-row gap, so no + crossing with a descending sibling lands in the junction's own row band. + A crossover down at the divergence, and the crossing with the same-row + trunk continuation, are both expected and not flagged. + """ + graph = _load_and_layout(FAN_BYPASS_NESTING_FILE) + weaves = _bypass_fan_weaves(graph) + assert not weaves, "\n".join(weaves) diff --git a/tests/test_triage_tool.py b/tests/test_triage_tool.py new file mode 100644 index 000000000..e65c3987b --- /dev/null +++ b/tests/test_triage_tool.py @@ -0,0 +1,78 @@ +"""Guards for the layout-invariant triage tool (``nf-metro-layout-triage``). + +The tool's finder registry keys must track the live invariant names in +``test_layout_invariants.py``: a key naming a removed/renamed test is dead +code that can never visualise the invariant that actually reds CI. The +rendered-label box must also land on the drawn ```` glyph rather than +the engine's logical label coordinates. +""" + +from __future__ import annotations + +import importlib.util +from pathlib import Path + +import pytest + +_REPO_ROOT = Path(__file__).resolve().parent.parent +_BUILD_REVIEW = ( + _REPO_ROOT / ".claude" / "skills" / "nf-metro-layout-triage" / "build_review.py" +) +_INVARIANTS_SRC = _REPO_ROOT / "tests" / "test_layout_invariants.py" + + +def _load_build_review(): + if not _BUILD_REVIEW.is_file(): + pytest.skip(f"triage tool not present at {_BUILD_REVIEW}") + spec = importlib.util.spec_from_file_location("triage_build_review", _BUILD_REVIEW) + assert spec is not None and spec.loader is not None + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +def test_finder_registry_keys_are_live_invariants(): + br = _load_build_review() + suite_src = _INVARIANTS_SRC.read_text() + stale = [key for key in br.INVARIANT_FINDERS if f"def {key}(" not in suite_src] + assert not stale, ( + "triage finder registry names tests that no longer exist in " + f"test_layout_invariants.py: {stale}" + ) + + +def test_rendered_label_box_uses_drawn_glyph_coords(): + br = _load_build_review() + svg = ( + 'STAR' + ) + box = br._rendered_label_box(svg, "star") + assert box is not None + left, top, width, height = box + # middle anchor centres the glyph on x; hanging baseline tops it at y. + assert left + width / 2 == pytest.approx(932.5, abs=0.5) + assert top == pytest.approx(135.0, abs=0.5) + assert width > 0 and height > 0 + assert br._rendered_label_box(svg, "nonexistent") is None + + +def test_label_violator_overlay_marks_glyph_and_expected_marker(): + br = _load_build_review() + svg = ( + 'STAR' + ) + violator = { + "kind": "label", + "station_id": "star", + "expected_x": 932.5, + "label_x": 960.0, + } + annotated, count = br.annotate_svg(svg, [violator]) + assert count == 1 + assert " list[Path]: + paths: list[Path] = [] + paths.extend(sorted(EXAMPLES.glob("*.mmd"))) + paths.extend(sorted(EXAMPLE_TOPOLOGIES.glob("*.mmd"))) + paths.extend(sorted(FIXTURE_TOPOLOGIES.glob("*.mmd"))) + return paths + + +def _route(path: Path): + graph = parse_metro_mermaid(path.read_text()) + compute_layout(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + return graph, routes, offsets + + +@pytest.mark.parametrize( + "path", _gather_fixtures(), ids=lambda p: p.relative_to(REPO_ROOT).as_posix() +) +def test_no_trunk_continuation_jog_in_gallery(path: Path) -> None: + """Every shipped example and topology routes a same-lane continuation edge + as a straight run, never a one-step diagonal jog off the trunk.""" + graph, routes, offsets = _route(path) + violations = check_trunk_continuation_drops_straight(graph, routes, offsets) + assert not violations, "\n".join(v.message() for v in violations) diff --git a/tests/test_trunk_slot.py b/tests/test_trunk_slot.py new file mode 100644 index 000000000..57ab226e0 --- /dev/null +++ b/tests/test_trunk_slot.py @@ -0,0 +1,99 @@ +"""Symbolic trunk slots (#845-D). + +``TrunkSlot`` lets a handler declare *which* inter-row gap a U-shaped bypass +runs its horizontal trunk through, travelling which way, and the single +:func:`_materialize_trunk_slots` pass groups the declared trunks by +``(gap_upper_row, direction)`` and fans them into one concentric band -- the +horizontal-trunk twin of the gap-slot materialization. +""" + +from __future__ import annotations + +import pytest +from conftest import content_corpus + +from nf_metro.convert import convert_nextflow_dag +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.routing import compute_station_offsets, normalize, route_edges +from nf_metro.layout.routing.common import RoutedPath, TrunkSlot +from nf_metro.layout.routing.invariants import check_trunks_declared +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import Edge + +CORPUS = content_corpus() + + +def test_trunk_slot_carries_gap_identity(): + assert TrunkSlot(gap_upper_row=1).gap_upper_row == 1 + assert TrunkSlot(gap_upper_row=None).gap_upper_row is None + + +def test_routed_path_trunk_slot_defaults_to_none(): + rp = RoutedPath( + edge=Edge(source="a", target="b", line_id="l1"), + line_id="l1", + points=[(0.0, 0.0), (10.0, 0.0)], + ) + assert rp.trunk_slot is None + + +def test_normalize_bypass_trunks_is_renamed(): + """The geometric-rediscovery entry point is replaced by materialization.""" + assert not hasattr(normalize, "_normalize_bypass_trunks") + assert hasattr(normalize, "_materialize_trunk_slots") + + +def _route_corpus(fixture): + fid, path, is_nextflow = fixture + text = path.read_text() + if is_nextflow: + text = convert_nextflow_dag(text) + graph = parse_metro_mermaid(text) + compute_layout(graph, validate=False) + offsets = compute_station_offsets(graph) + return graph, route_edges(graph, station_offsets=offsets) + + +@pytest.mark.parametrize("fixture", CORPUS, ids=[fid for fid, _, _ in CORPUS]) +def test_every_inter_section_trunk_is_declared(fixture): + """No inter-section bypass trunk reaches the renderer without a TrunkSlot. + + The materialization only fans declared trunks, so an undeclared trunk would + escape its gap's concentric band and stay fused on a sibling at its raw Y -- + the regression the migration must not allow. + """ + _graph, routes = _route_corpus(fixture) + violations = check_trunks_declared(routes) + assert not violations, "; ".join(v.message() for v in violations[:3]) + + +_TRUNK_FIXTURES = {"differentialabundance", "longread_variant_calling"} + + +@pytest.mark.parametrize( + "fixture", + [f for f in CORPUS if f[0] in _TRUNK_FIXTURES], + ids=lambda f: f[0], +) +def test_handlers_emit_trunk_slots(fixture): + """A multi-row fixture with U-shaped bypasses exercises trunk declarations.""" + _graph, routes = _route_corpus(fixture) + assert any(r.trunk_slot is not None for r in routes), ( + f"{fixture[0]}: no route declared a TrunkSlot; an inter-section handler " + f"emitting a bypass trunk must annotate it" + ) + + +def test_guard_flags_an_undeclared_trunk(): + """A U-route with a horizontal trunk but no slot is caught by the guard.""" + rp = RoutedPath( + edge=Edge(source="a", target="b", line_id="l1"), + line_id="l1", + points=[(0.0, 0.0), (0.0, 100.0), (200.0, 100.0), (200.0, 0.0)], + is_inter_section=True, + ) + assert check_trunks_declared([rp]), ( + "guard should flag the undeclared trunk running at y=100" + ) + rp.declare_trunk_slot(gap_upper_row=0) + assert not check_trunks_declared([rp]) diff --git a/tests/test_upright_spacing_frame.py b/tests/test_upright_spacing_frame.py new file mode 100644 index 000000000..9c5cc9b29 --- /dev/null +++ b/tests/test_upright_spacing_frame.py @@ -0,0 +1,82 @@ +"""Upright label/icon spacing is reserved per the section's AxisFrame. + +Labels and file icons never rotate, but a rotated section changes which axis +must reserve room around them. A vertical-flow section (TB *and* BT) stacks its +lines along X and places labels beside the pill, so it reserves lane-axis (X) +extent; a horizontal-flow section reserves Y. These tests pin that the +reservation is driven by the frame, so BT behaves identically to TB rather than +falling through a bare ``direction == "TB"`` branch. +""" + +from __future__ import annotations + +import pytest + +from nf_metro.layout.phases.single_section import ( + _adjust_tb_labels, + _terminus_y_overhang, +) +from nf_metro.parser.model import MetroGraph, Section, Station + + +def _vertical_section(direction: str) -> tuple[MetroGraph, Section]: + """A minimal vertical-flow section with two labelled stations on one column.""" + graph = MetroGraph() + section = Section(id="sec", name="Sec", direction=direction) + section.bbox_x = 0.0 + section.bbox_y = 0.0 + section.bbox_w = 60.0 + section.bbox_h = 200.0 + graph.sections["sec"] = section + for i, label in enumerate(("AlphaStationName", "BetaStationName")): + station = Station(id=f"s{i}", label=label, section_id="sec") + station.x = 30.0 + station.y = 40.0 + i * 40.0 + graph.add_station(station) + section.station_ids.append(station.id) + return graph, section + + +@pytest.mark.parametrize("direction", ["TB", "BT"]) +def test_vertical_flow_reserves_lane_axis_for_side_labels(direction: str) -> None: + graph, section = _vertical_section(direction) + width_before = section.bbox_w + x_before = [s.x for s in graph.stations.values()] + + _adjust_tb_labels(graph, section, graph) + + assert section.bbox_w > width_before, ( + f"{direction} section reserved no X extent for its side-placed labels" + ) + assert [s.x for s in graph.stations.values()] != x_before, ( + f"{direction} section did not shift stations to clear the label extent" + ) + + +def test_tb_and_bt_reserve_identical_label_extent() -> None: + tb_graph, tb_section = _vertical_section("TB") + bt_graph, bt_section = _vertical_section("BT") + + _adjust_tb_labels(tb_graph, tb_section, tb_graph) + _adjust_tb_labels(bt_graph, bt_section, bt_graph) + + assert tb_section.bbox_w == bt_section.bbox_w + assert [s.x for s in tb_graph.stations.values()] == [ + s.x for s in bt_graph.stations.values() + ] + + +@pytest.mark.parametrize("direction", ["TB", "BT"]) +def test_vertical_flow_terminus_icons_overhang_on_flow_axis(direction: str) -> None: + graph = MetroGraph() + section = Section(id="sec", name="Sec", direction=direction) + graph.sections["sec"] = section + sink = Station(id="t", label="Out", section_id="sec") + sink.terminus_labels = ["bam"] + graph.add_station(sink) + section.station_ids.append(sink.id) + + above, below = _terminus_y_overhang(sink, direction, graph) + assert (above, below) != (0.0, 0.0), ( + f"{direction} terminus reserved no flow-axis (Y) overhang for its icons" + ) diff --git a/tests/test_validate.py b/tests/test_validate.py new file mode 100644 index 000000000..50456528e --- /dev/null +++ b/tests/test_validate.py @@ -0,0 +1,75 @@ +"""Unit tests for the graph-semantic validator (issue #559).""" + +import dataclasses + +import pytest + +from nf_metro.parser import ERROR, WARNING, ValidationIssue, validate_graph +from nf_metro.parser.model import Edge, MetroGraph, MetroLine, Section, Station + + +def _graph_with_line() -> MetroGraph: + graph = MetroGraph() + graph.lines["rna"] = MetroLine(id="rna", display_name="RNA", color="#abcdef") + graph.stations["a"] = Station(id="a", label="A") + graph.stations["b"] = Station(id="b", label="B") + return graph + + +def test_clean_graph_has_no_issues(): + graph = _graph_with_line() + graph.edges.append(Edge(source="a", target="b", line_id="rna")) + assert validate_graph(graph) == [] + + +def test_default_line_edge_is_not_flagged(): + graph = _graph_with_line() + graph.edges.append(Edge(source="a", target="b", line_id="default")) + assert validate_graph(graph) == [] + + +def test_undefined_line_reference_is_an_error(): + graph = _graph_with_line() + graph.edges.append(Edge(source="a", target="b", line_id="missing")) + + issues = validate_graph(graph) + + assert issues == [ + ValidationIssue( + ERROR, + "Edge a -> b references undefined line 'missing'", + ) + ] + + +def test_section_referencing_unknown_station_is_an_error(): + graph = _graph_with_line() + graph.sections["sec"] = Section( + id="sec", name="Section One", station_ids=["a", "ghost"] + ) + + issues = validate_graph(graph) + + assert issues == [ + ValidationIssue( + ERROR, + "Section 'Section One' references unknown station 'ghost'", + ) + ] + + +def test_issues_are_frozen(): + issue = ValidationIssue(ERROR, "msg") + with pytest.raises(dataclasses.FrozenInstanceError): + issue.severity = WARNING # type: ignore[misc] + + +def test_multiple_findings_are_all_collected(): + graph = _graph_with_line() + graph.edges.append(Edge(source="a", target="b", line_id="missing")) + graph.sections["sec"] = Section(id="sec", name="Section One", station_ids=["ghost"]) + + issues = validate_graph(graph) + + assert len(issues) == 2 + assert all(issue.severity == ERROR for issue in issues) diff --git a/tests/test_validate_flag_idempotent.py b/tests/test_validate_flag_idempotent.py new file mode 100644 index 000000000..1836a4a76 --- /dev/null +++ b/tests/test_validate_flag_idempotent.py @@ -0,0 +1,137 @@ +"""The ``validate`` flag of ``compute_layout`` is observational (#518). + +``compute_layout(graph, validate=True)`` must produce *identical* final +station geometry to ``compute_layout(graph, validate=False)``. The flag is +supposed to add invariant checks only; it must never perturb the layout. + +A regression here was caused by ``_run_pass_c_guards`` calling +``route_edges``, whose diagonal-centring pass mutates ``Station.x`` in +place. Run mid-pipeline under ``validate=True``, that mutation changed the +input to later stages, splitting same-column stations (e.g. ``gatk`` and +``deepvariant`` in ``variant_calling.mmd``). The fix makes the guard +snapshot/restore station state so it stays non-mutating. + +The render path (``render_svg``) runs with ``validate=False``, so the +perturbed geometry never shipped, but it blocked adding tight runtime +column/alignment guards (they fired on the ``validate=True`` artifact). +""" + +from __future__ import annotations + +import warnings +from pathlib import Path + +import pytest +from conftest import content_corpus + +from nf_metro.convert import convert_nextflow_dag +from nf_metro.layout.engine import compute_layout +from nf_metro.layout.phases.guards import assert_render_layout_invariants +from nf_metro.layout.routing import compute_station_offsets, route_edges +from nf_metro.parser.mermaid import parse_metro_mermaid +from nf_metro.parser.model import MetroGraph + +CORPUS = content_corpus() + + +def _layout(path: Path, is_nextflow: bool, *, validate: bool) -> MetroGraph: + text = path.read_text() + if is_nextflow: + text = convert_nextflow_dag(text) + graph = parse_metro_mermaid(text) + compute_layout(graph, validate=validate) + return graph + + +def _coords(graph: MetroGraph) -> dict[str, tuple[float, float]]: + return {sid: (round(s.x, 6), round(s.y, 6)) for sid, s in graph.stations.items()} + + +@pytest.mark.parametrize("fixture", CORPUS, ids=[fid for fid, _, _ in CORPUS]) +def test_validate_flag_does_not_change_geometry(fixture): + fid, path, is_nextflow = fixture + + unvalidated = _coords(_layout(path, is_nextflow, validate=False)) + validated = _coords(_layout(path, is_nextflow, validate=True)) + + diffs = { + sid: (unvalidated[sid], validated[sid]) + for sid in unvalidated + if unvalidated[sid] != validated.get(sid) + } + assert not diffs, ( + f"{fid}: validate=True perturbed station geometry vs validate=False; " + f"the flag must be observational. Differing stations " + f"(validate=False -> validate=True): {diffs}" + ) + + +@pytest.mark.parametrize("name", ["variant_calling", "variant_calling_tuned"]) +def test_shared_column_survives_validate(name): + """``gatk``/``deepvariant`` share a column; ``validate=True`` must keep it. + + Pins the exact pair named in #518 so the regression has a focused guard + independent of the corpus parametrisation above. + """ + path = Path(__file__).resolve().parent.parent / "examples" / f"{name}.mmd" + unvalidated = _layout(path, False, validate=False) + validated = _layout(path, False, validate=True) + + for sid in ("gatk", "deepvariant"): + assert validated.stations[sid].x == pytest.approx( + unvalidated.stations[sid].x + ), f"{name}: {sid}.x diverged under validate=True" + assert validated.stations["gatk"].x == pytest.approx( + validated.stations["deepvariant"].x + ), f"{name}: gatk/deepvariant must share their column under validate=True" + + +def test_fold_bypass_kept_fix_settles_before_shipping(): + """A kept geometric-bypass fix must settle to its fixed point in both modes. + + Pins the fold + bypass-V + downstream-section shape (#1171) behind a focused + guard: the two ``validate`` modes agree, and re-running ``compute_layout`` on + its own output does not move the downstream section. + """ + path = ( + Path(__file__).resolve().parent.parent + / "examples" + / "topologies" + / "fold_bypass_creep.mmd" + ) + unvalidated = _layout(path, False, validate=False) + validated = _layout(path, False, validate=True) + assert unvalidated.stations["mqc"].y == pytest.approx( + validated.stations["mqc"].y + ), "validate flag changed the downstream section's Y in the fold-bypass case" + + settled = unvalidated.stations["mqc"].y + compute_layout(unvalidated, validate=False) + assert unvalidated.stations["mqc"].y == pytest.approx(settled), ( + "compute_layout is not a fixed point on its own output: the fold-bypass " + "downstream section moved on a second pass" + ) + + +@pytest.mark.parametrize("fixture", CORPUS, ids=[fid for fid, _, _ in CORPUS]) +def test_render_layout_chokepoint_is_observational(fixture): + """``assert_render_layout_invariants`` must not perturb station geometry. + + The render path runs it on the settled geometry; like the ``validate`` + flag it adds checks only and must never move a coordinate. + """ + fid, path, is_nextflow = fixture + graph = _layout(path, is_nextflow, validate=False) + + before = _coords(graph) + offsets = compute_station_offsets(graph) + routes = route_edges(graph, station_offsets=offsets) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + assert_render_layout_invariants(graph, routes, offsets, strict=False) + after = _coords(graph) + + diffs = { + sid: (before[sid], after[sid]) for sid in before if before[sid] != after[sid] + } + assert not diffs, f"{fid}: render-layout chokepoint perturbed geometry: {diffs}" diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 000000000..82ea855bd --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,17 @@ +# build output +dist/ +# generated types +.astro/ +# dependencies +node_modules/ +# playground build artifacts +public/playground/wheels/ +public/playground/examples.json +public/playground/build-info.json +# environment +.env + +# Playwright local artifacts +playground-tests/node_modules/ +playground-tests/test-results/ +playground-tests/playwright-report/ diff --git a/website/astro.config.mjs b/website/astro.config.mjs new file mode 100644 index 000000000..eee8e432c --- /dev/null +++ b/website/astro.config.mjs @@ -0,0 +1,226 @@ +// @ts-check +import { readdirSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { defineConfig, fontProviders } from "astro/config"; +import starlight from "@astrojs/starlight"; +import starlightLinksValidator from "starlight-links-validator"; +import sitemap from "@astrojs/sitemap"; +import mermaid from "astro-mermaid"; +import { metroVitePlugin } from "./src/lib/render-metro.mjs"; +import { starlightGitFix } from "./src/lib/starlight-git-fix.mjs"; +import { remarkRebaseLinks } from "./src/lib/rebase-links.mjs"; +import { GITHUB_URL, PAGES_ORIGIN } from "./src/repo"; + +// Expressive Code options (custom grammars + the color-chips plugin) live in +// ec.config.mjs - the component requires them to be loadable separately. + +// Canonical Pages origin (owner-specific value lives in src/repo). +const site = PAGES_ORIGIN; +// Versioned deploys live at /nf-metro//; the deploy workflow +// passes the target path via DOCS_BASE so each build's links self-resolve. +const base = process.env.DOCS_BASE ?? "/nf-metro/"; + +// The committed example .mmd files live at the repo root (../examples), one +// level above this Astro project. The guide imports them as raw strings so its +// code blocks stay in lockstep with the renders they document - single source +// of truth, no copy-paste drift. `@examples` aliases that dir; `fs.allow` opens +// it to the dev server (which otherwise restricts /@fs/ to the project root). +const examplesDir = fileURLToPath(new URL("../examples", import.meta.url)); +const componentsDir = fileURLToPath( + new URL("./src/components", import.meta.url), +); +const repoRoot = fileURLToPath(new URL("..", import.meta.url)); + +// Compare two dotted version strings (e.g. "0.7.2", "0.1") so the larger sorts +// first (descending). Missing patch components count as 0. +/** @param {string} a @param {string} b */ +function compareVersionsDesc(a, b) { + const pa = a.split(".").map(Number); + const pb = b.split(".").map(Number); + for (let i = 0; i < Math.max(pa.length, pb.length); i++) { + const diff = (pb[i] ?? 0) - (pa[i] ?? 0); + if (diff) return diff; + } + return 0; +} + +// Build the Releases sidebar group from the release Markdown files on disk: +// an "Overview" link followed by `v..x` sub-groups, newest first. +// New release pages appear automatically - no manual sidebar edits needed. +function buildReleasesSidebar() { + const dir = new URL("./src/content/docs/releases", import.meta.url); + const versions = readdirSync(dir) + .filter((file) => /\.mdx?$/.test(file) && !/^index\.mdx?$/.test(file)) + .map((file) => file.replace(/\.mdx?$/, "")) + .sort(compareVersionsDesc); + + /** @type {Map} */ + const groups = new Map(); + for (const version of versions) { + const [major, minor] = version.split("."); + const key = `v${major}.${minor}.x`; + if (!groups.has(key)) groups.set(key, []); + groups.get(key)?.push(version); + } + + return [ + { label: "Overview", slug: "releases" }, + ...[...groups.entries()].map(([label, vers], index) => ({ + label, + // Most recent version group stays expanded; older ones collapse by default. + collapsed: index !== 0, + items: vers.map((version) => ({ + label: `v${version}`, + slug: `releases/${version}`, + })), + })), + ]; +} + +// https://astro.build/config +export default defineConfig({ + site, + base, + markdown: { + remarkPlugins: [[remarkRebaseLinks, { base }]], + }, + vite: { + // Renders `.mmd?metro` imports to inline SVG via the nf-metro CLI. + plugins: [starlightGitFix(), metroVitePlugin()], + resolve: { + alias: { + "@examples": examplesDir, + "@components": componentsDir, + }, + // docs/ is symlinked into src/content/docs, so guide.mdx's real path sits + // outside this project. Keep the symlinked path during resolution so its + // bare imports (@astrojs/starlight/components) find website/node_modules. + preserveSymlinks: true, + }, + server: { fs: { allow: [repoRoot] } }, + }, + // Degular (Seqera display face) via Astro's Fonts API: self-hosts, emits the + // @font-face + a metric-matched fallback, and (with in + // src/components/Head.astro) preloads it to avoid the page-title FOUT. + fonts: [ + { + name: "Degular", + cssVariable: "--nfm-degular", + provider: fontProviders.local(), + // The local provider reads its @font-face variants from `options`. + options: { + variants: [ + { + weight: 600, + style: "normal", + src: ["./src/fonts/Degular-Semibold.woff2"], + }, + ], + }, + }, + ], + integrations: [ + sitemap(), + // Renders ```mermaid fences as diagrams. Must come BEFORE starlight so its + // transform runs before Expressive Code claims the code block. autoTheme + // follows Starlight's `data-theme` toggle (dark <-> light/neutral). + mermaid({ + theme: "dark", + autoTheme: true, + mermaidConfig: { securityLevel: "loose" }, + }), + starlight({ + plugins: [ + starlightLinksValidator({ + // Docs author internal links with the production `/nf-metro/` base; + // remarkRebaseLinks rewrites that prefix to the active build base + // before this validator runs, so cross-references validate against + // real pages on every base. Only links the validator structurally + // cannot resolve are excluded: + // - gallery/ and pipelines/ are custom Astro routes, not Starlight + // content entries, so the validator can only see them as opaque + // custom pages. + // - live_demo.mp4 is a public/ static asset, not a navigable page. + exclude: ({ link }) => + link.startsWith(`${base}gallery`) || + link.startsWith(`${base}pipelines`) || + link === "../assets/live_demo.mp4", + }), + ], + title: "nf-metro", + description: + "Metro-map-style SVG diagrams from Mermaid graph definitions with %%metro directives - for visualizing bioinformatics pipeline workflows.", + favicon: "/favicon.svg", + lastUpdated: true, + // Expressive Code options (grammars + color-chips plugin) are in ec.config.mjs. + social: [ + { + icon: "github", + label: "GitHub", + href: GITHUB_URL, + }, + ], + editLink: { + baseUrl: `${GITHUB_URL}/edit/main/docs/`, + }, + components: { + Head: "./src/components/Head.astro", + Header: "./src/components/Header.astro", + ThemeSelect: "./src/components/ThemeSelect.astro", + PageFrame: "./src/components/PageFrame.astro", + PageTitle: "./src/components/PageTitle.astro", + EditLink: "./src/components/EditLink.astro", + }, + customCss: ["./src/styles/custom.css"], + // The docs-nav sidebar. Identical on every page (including the custom home). + sidebar: [ + { + label: "Overview", + items: [ + // Starlight prepends `base` to sidebar `link` values, so these are + // base-relative ("/" -> "/nf-metro/"); passing `base` here doubled it. + { label: "Home", link: "/" }, + { label: "Guide", slug: "guide" }, + { label: "CLI reference", slug: "cli" }, + { label: "Gallery", link: "/gallery/" }, + { label: "nf-core pipelines", link: "/pipelines/" }, + { + label: "Playground", + link: "/playground/", + badge: { text: "beta", variant: "caution" }, + // data-astro-reload forces a full navigation so the CDN scripts + // (CodeMirror, Pyodide) and app.js re-initialise from scratch + // instead of being skipped by Astro's ClientRouter. + attrs: { target: "_self", "data-astro-reload": true }, + }, + ], + }, + { + label: "Embedding & data", + items: [ + { label: "Embedding", slug: "embedding" }, + { label: "Embed contract", slug: "embed" }, + { label: "Data manifest", slug: "manifest" }, + { label: "Live progress", slug: "live" }, + { label: "Nextflow import", slug: "nextflow" }, + { label: "How it's built", slug: "how-its-built" }, + ], + }, + { + label: "Internals", + collapsed: true, + // Labels + order come from each page's `sidebar` frontmatter in dev/. + items: [{ autogenerate: { directory: "dev" } }], + }, + { label: "Contributing", slug: "contributing" }, + { label: "Credits", slug: "credits" }, + { + label: "Releases", + collapsed: true, + // Built from the release Markdown files on disk (see buildReleasesSidebar). + items: buildReleasesSidebar(), + }, + ], + }), + ], +}); diff --git a/website/ec.config.mjs b/website/ec.config.mjs new file mode 100644 index 000000000..f4e9f45f1 --- /dev/null +++ b/website/ec.config.mjs @@ -0,0 +1,66 @@ +// @ts-check +import { + defineEcConfig, + definePlugin, +} from "@astrojs/starlight/expressive-code"; +import { pluginColorChips } from "expressive-code-color-chips"; +// Custom TextMate grammars, imported as JSON so they resolve at bundle/load +// time. A runtime fs read keyed on import.meta.url breaks when this config is +// bundled for the component (the URL points at the emitted chunk, not +// the source), which silently drops every option from that render path. +// +// `metro` highlights nf-metro's dialect in ```metro / ```mmd fences and +// blocks (%%metro directives, graph/subgraph keywords, edges, labels, hex +// colors); real Mermaid lives in ```mermaid fences, rendered as diagrams by the +// astro-mermaid integration. `lark` covers the Lark grammar in the parser docs, +// which Shiki has no bundled language for. +import metroGrammar from "./src/grammars/metro.tmLanguage.json" with { type: "json" }; +import larkGrammar from "./src/grammars/lark.tmLanguage.json" with { type: "json" }; + +// pluginColorChips's `languages` option REPLACES its built-in defaults rather +// than extending them, so the CSS dialects are repeated here to keep chips on +// CSS blocks; "metro"/"mmd" are the only additions. Keep the CSS entries in +// sync if the plugin ever adds a dialect (its default: css, scss, sass, less, +// stylus). +const COLOR_CHIP_LANGS = [ + "css", + "scss", + "sass", + "less", + "stylus", + "metro", + "mmd", +]; + +// The official plugin hardcodes `vertical-align: text-bottom`, which sits the +// chip too low against the line text. This plugin, loaded after +// pluginColorChips(), nudges all chips up to the text midline. +function pluginChipVerticalAlign() { + return definePlugin({ + name: "ChipVerticalAlign", + baseStyles() { + return `.ec-css-color-chip::before { vertical-align: middle; margin-bottom: 2px; }`; + }, + }); +} + +// Expressive Code config lives here (rather than inline in astro.config.mjs) +// because the component requires these options to be loadable on their +// own, and a plugin instance like pluginColorChips() is not JSON-serializable. + +export default defineEcConfig({ + shiki: { langs: [metroGrammar, larkGrammar] }, + // Render a color swatch next to hex/rgb values - handy for the `#hex` line + // colors in %%metro directives. Square-ish chips (15%) rather than the + // plugin's default circle (50%). + plugins: [ + pluginColorChips({ languages: COLOR_CHIP_LANGS }), + pluginChipVerticalAlign(), + ], + styleOverrides: { + colorChips: { + borderRadius: "15%", + size: "0.9em", // a little smaller than the default 1.2em + }, + }, +}); diff --git a/website/package-lock.json b/website/package-lock.json new file mode 100644 index 000000000..4a60b8cb7 --- /dev/null +++ b/website/package-lock.json @@ -0,0 +1,8636 @@ +{ + "name": "nf-metro-docs", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nf-metro-docs", + "version": "0.0.1", + "dependencies": { + "@astrojs/sitemap": "^3.7.3", + "@astrojs/starlight": "^0.41.1", + "@fontsource/inter": "^5.2.8", + "@fontsource/jetbrains-mono": "^5.2.8", + "@mermaid-js/layout-elk": "^0.2.2", + "astro": "^7.0.3", + "astro-mermaid": "^2.1.0", + "expressive-code-color-chips": "^0.2.0", + "mermaid": "^11.16.0", + "sharp": "^0.35.2", + "svg-pan-zoom": "^3.6.2" + }, + "devDependencies": { + "starlight-links-validator": "^0.25.1" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@astrojs/compiler-binding": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.2.3.tgz", + "integrity": "sha512-Xz3iBNse+hXXD25IXxsuXEt2ai8klAWE15CRm/EQBc9+aE3jXaF07DZx+iakk3HC6NHvWlEPzLPyxsLgPzOJsw==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@astrojs/compiler-binding-darwin-arm64": "0.2.3", + "@astrojs/compiler-binding-darwin-x64": "0.2.3", + "@astrojs/compiler-binding-linux-arm64-gnu": "0.2.3", + "@astrojs/compiler-binding-linux-arm64-musl": "0.2.3", + "@astrojs/compiler-binding-linux-x64-gnu": "0.2.3", + "@astrojs/compiler-binding-linux-x64-musl": "0.2.3", + "@astrojs/compiler-binding-wasm32-wasi": "0.2.3", + "@astrojs/compiler-binding-win32-arm64-msvc": "0.2.3", + "@astrojs/compiler-binding-win32-x64-msvc": "0.2.3" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-arm64": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.2.3.tgz", + "integrity": "sha512-sJIHeL1ONXEBLob8ZaXfmX6iCftUno08G/cMXj2FJnL0xNbHuELcEq1mjxHVFHNgUYu4P7xJNm2mpc0zUEPoKw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-x64": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.2.3.tgz", + "integrity": "sha512-P0NYu6aaIeLCqFfszxxBHL0a5WRaYigNVbDoO654Gi5Q2au5duDb5xZBv5EqUg4qnQVC173FXNvGZu1M7nk+/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.2.3.tgz", + "integrity": "sha512-PqVN5AqhuDqfx3ejaerwrC8codpV9jnyKV+IOel027qsJ1anFUJLdjUlY8VVys0xgd8lmqveX11OkcaQj/otTg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-musl": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.2.3.tgz", + "integrity": "sha512-O3e2CbN4yTsRguWYNnRd0p5YQ0H3fb7KpcR0W4R319q/gq5B1pJ7eqNbiO3b8g2AuiEcRTiUz5jeGT9j69cxOQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-gnu": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.2.3.tgz", + "integrity": "sha512-hbLBjXVp+96psMe7/7uqyrquGiULXANrq6REVxxPK/I5VzebZ7LHmSfykmByUbLyR1u+K6CTBKgvdQsK2L+2Xw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-musl": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.2.3.tgz", + "integrity": "sha512-vIiEvOwrJfHZMaTmqUCrFTIwMYL0+PD3Rvy7kFDQgERyx3zhaw8CPa01MCCqa+/sj344BGrXKZ6ti37SgNLMhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-wasm32-wasi": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.2.3.tgz", + "integrity": "sha512-p9S2X8z/mUR2SMzAVJRFMCt8YaalKR+pjl2DgpdjzCQc6ww4bo8kiy54tgKqxZeNF5c+/2tCDTQIxVSm9V1FsA==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.2.3.tgz", + "integrity": "sha512-vcCG6JttIb5vbSmcxO2O398hpVj7lQ349iS7cjgYP6ZuLVEnw+9qPAr2MM2kJkU5wEGZqJ2gyi/M7UJoPwH1iQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-x64-msvc": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.2.3.tgz", + "integrity": "sha512-hKssjNvC36e00Inb1GW1JsVyCFSCGnIjKem4S8q0VIW6cpWAUpvYB4qQU2HIDGD6SDX0ork4F5sWkNWkp2hrGQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-rs": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.2.3.tgz", + "integrity": "sha512-JRAtRcPxS4JeAZEIQFQ6GecBs/Wyp4m6/E8vBNxSgVfo1AtRVLUqRCl5oCGOZ0X/BSBB3Vef/7IlzyiGKi2ORA==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-binding": "0.2.3" + } + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.0.tgz", + "integrity": "sha512-Ry2R3VPeIN4uPCSA4xQc+e+vsJXkalKpEbDc07hV+a/o5Bs2N/s/uDcPJH/05L19DKh9tAy7e6JM3YZ6Cxfezw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.1.1", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" + } + }, + "node_modules/@astrojs/markdown-remark": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.0.tgz", + "integrity": "sha512-+YxmVQu1Bd+MFfSzjq1rOJvD9+nIOJzz5YIIhdIH01RrxRkKbyKoEgyIqP3yv51MhzMDgd79QaPv+kCVPT8vHw==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.0", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.1.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/markdown-satteri": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.2.tgz", + "integrity": "sha512-feXuUPy41gVfeM7EHT1ciUim8ozGr+YHXab9uUBc1Hk8y60DQosO8ldL+AoPXnCAoGj1OChwHfvXmmJ6XVnY9A==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.0", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "satteri": "^0.9.1" + } + }, + "node_modules/@astrojs/mdx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-7.0.0.tgz", + "integrity": "sha512-LKwNA8nnLtEM0auoP6OfH/UnlKe1Ub59qZjbcYkZjPBGw6PkJewWkA/1qwLpECvV6gMDd6TR6eqV9p/VYZrcrQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.0", + "@astrojs/markdown-remark": "7.2.0", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.16.0", + "es-module-lexer": "^2.0.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "piccolore": "^0.1.3", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.6", + "unist-util-visit": "^5.1.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "@astrojs/markdown-satteri": "^0.3.1-alpha.0", + "astro": "^7.0.0-alpha.0" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-satteri": { + "optional": true + } + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", + "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.3.tgz", + "integrity": "sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA==", + "license": "MIT", + "dependencies": { + "sitemap": "^9.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/starlight": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.41.1.tgz", + "integrity": "sha512-avf2OmrVg6GdVU18juebjjIIuLa+uS3syHuJ/3yDaEFP/8it+YvcxRrYDSf7K6rC4v770UxIddba2hAqQyTeYA==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-satteri": "^0.3.2", + "@astrojs/mdx": "^7.0.0", + "@astrojs/sitemap": "^3.7.2", + "@pagefind/default-ui": "^1.3.0", + "@types/hast": "^3.0.4", + "@types/js-yaml": "^4.0.9", + "@types/mdast": "^4.0.4", + "astro-expressive-code": "^0.44.0", + "bcp-47": "^2.1.0", + "hast-util-from-html": "^2.0.3", + "hast-util-select": "^6.0.4", + "hast-util-to-string": "^3.0.1", + "hastscript": "^9.0.1", + "i18next": "^26.0.7", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "magic-string": "^0.30.21", + "mdast-util-directive": "^3.1.0", + "mdast-util-to-markdown": "^2.1.2", + "mdast-util-to-string": "^4.0.0", + "pagefind": "^1.5.2", + "rehype": "^13.0.2", + "rehype-format": "^5.0.1", + "remark-directive": "^4.0.0", + "satteri": "^0.9.1", + "ultrahtml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.1.0", + "vfile": "^6.0.3" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "^7.2.0", + "astro": "^7.0.2" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.2.tgz", + "integrity": "sha512-j8DNruA8ors99Al39RYZPJK4DC1bKkoNm93mAMuBhY9TCNC4R8n1q7ovFnJ5qhGh5Lsh7pa1gpQVpYpsJPeTHQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.4.0", + "dset": "^3.1.4", + "is-docker": "^4.0.0", + "is-wsl": "^3.1.1", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", + "license": "MIT" + }, + "node_modules/@bruits/satteri-darwin-arm64": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.9.3.tgz", + "integrity": "sha512-dRUZZrdwh1asfTOyM1nDNmzolhnHtlIFpqYrl1Tdd3YVcaebKmrfJgGL7NAoGPjbEwYmZxaugrxA0uzw83c0dw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-darwin-x64": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.9.3.tgz", + "integrity": "sha512-wgNCTRp2hPSpNMGFv5A4+6+VXgRJIlBZ7XKb3iwjV8YjRWNIjzE5zV2fUeYynyZYVRkuJ9aYFqQmWhc1e5H+UQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-gnu": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.9.3.tgz", + "integrity": "sha512-A/pWy8Jb/PhDYc2/JFuYh06gFJcsfBUBDl81YydGYBrL/Z4nItDfhNDNOibyeSN/lKKDRlycIHEIajjErk00sQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-musl": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.9.3.tgz", + "integrity": "sha512-L6YxmyOSickzo4pE5WmZfNTJnjX0MtgKOsuwQfNZECTx9Ir5vl2B37EIwnxe2AybuPPHl+FqVQtthNDUdH4Vgg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-gnu": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.9.3.tgz", + "integrity": "sha512-RgH6GPihg9Lzs2yHUsMjqiLxfLyOdmBty8sg9pBY9B4CBnvdOzvg8vklqN+C4qrEEdA9TwpbDpHr1AshLKyRpw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-musl": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.9.3.tgz", + "integrity": "sha512-BeWhVORjNTIomePznUKiMbHZTqC0j7sMXZFsISmbX+po5d33KLkqBqKh6K332CHJ8KUmCWx16FfPjwsoysttQg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-wasm32-wasi": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.9.3.tgz", + "integrity": "sha512-dFNcOHKWV2cztCPnYTn7kZ9D7kNOt8N239z5ysFkNHLxJrfK7zaKIXQbfXYN32C+JoVFqAcTIOeWH2+VnsCOHg==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@bruits/satteri-win32-arm64-msvc": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.9.3.tgz", + "integrity": "sha512-VnwjBHiAra/PNNEza8eSZdQiG4A3PtTJJwUDtOPAc6iTs0BWZwZX8+OPUZE7//yQCBhgvEMcI8vpwsAwCb6qGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@bruits/satteri-win32-x64-msvc": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.9.3.tgz", + "integrity": "sha512-Dsoe4reWe69MyILmMwU6iISIceTW7YIFqbyym7haf9DhUvqkYfMAyp7GMM21JzV0SpG9A2BwzFVP7iq9mmxrpA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" + }, + "node_modules/@clack/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.2.tgz", + "integrity": "sha512-0Ty/1Gfm+Kb07sXcuESjyKfwEhSy4Ns1AgeEisHb/bDY5fWme0tTeTkU14T1Gmcs17YIjB/teiDe4uaCghbYqQ==", + "license": "MIT", + "dependencies": { + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@clack/prompts": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.6.0.tgz", + "integrity": "sha512-EYlRokl8szrP9Z25qT5aepMdBjzBvHF9ZEhzIiUBc9guz/T31EqRgvD0QSgZcpE93xiwrr+OkB4nz0BZyF6fSA==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.4.2", + "fast-string-width": "^3.0.2", + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@expressive-code/core": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.44.0.tgz", + "integrity": "sha512-xgiF2P6tYUbrhi3+x0S8xHZWT1t3Bvb3U91tAtRbLb9HLejLvYc5GZUqKICKLaUN4iSGhhNJu2fM/aH8e5yCMg==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.0.4", + "hast-util-select": "^6.0.2", + "hast-util-to-html": "^9.0.1", + "hast-util-to-text": "^4.0.1", + "hastscript": "^9.0.0", + "postcss": "^8.4.38", + "postcss-nested": "^6.0.1", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1" + } + }, + "node_modules/@expressive-code/plugin-frames": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.44.0.tgz", + "integrity": "sha512-V6M6+zVc1GzqCvXkQHc2m5rcFOIVzJgMq5gnfrMnVf2gwtj/sg4H93c1f/mGeqHycubwkHFUDyParAOiGeDZeA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.0" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.44.0.tgz", + "integrity": "sha512-RZsdaqlbGqyAQKuoX4myQXxjmiE2l5KBpJ/gKPh62tCdIdpWyjbzVqSo8+5XsezZxkfi8AJ/J6EUaBTPROFX/Q==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.0", + "shiki": "^4.0.2" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.44.0.tgz", + "integrity": "sha512-0/m3A5b+lz2upyNq+wzZ1S69HRoJmyFs5LsR42lVZ9pmGRlBiSBYQpvqlji4DBj1+Riamxc0AvcCr5kuzOQeWA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.0" + } + }, + "node_modules/@fontsource/inter": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", + "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/jetbrains-mono": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/jetbrains-mono/-/jetbrains-mono-5.2.8.tgz", + "integrity": "sha512-6w8/SG4kqvIMu7xd7wt6x3idn1Qux3p9N62s6G3rfldOUYHpWcc2FKrqf+Vo44jRvqWj2oAtTHrZXEP23oSKwQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.3.tgz", + "integrity": "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/types": "^2.0.0", + "import-meta-resolve": "^4.2.0" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.2.tgz", + "integrity": "sha512-eEieHsMksAW4IiO5NzauESRl2D2qz3J/kwUxUrSfV06A93eEaRfMpHXyUb1mAqrR7i8U9A0GRqE9pjn6u1Jjpg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.1" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.2.tgz", + "integrity": "sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.1" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.2.tgz", + "integrity": "sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.2" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.1.tgz", + "integrity": "sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.1.tgz", + "integrity": "sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.1.tgz", + "integrity": "sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.1.tgz", + "integrity": "sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.1.tgz", + "integrity": "sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.1.tgz", + "integrity": "sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.1.tgz", + "integrity": "sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.1.tgz", + "integrity": "sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.1.tgz", + "integrity": "sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.1.tgz", + "integrity": "sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.2.tgz", + "integrity": "sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.1" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.2.tgz", + "integrity": "sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.1" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.2.tgz", + "integrity": "sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.1" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.2.tgz", + "integrity": "sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.1" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.2.tgz", + "integrity": "sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.1" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.2.tgz", + "integrity": "sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.1" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.2.tgz", + "integrity": "sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.1" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.2.tgz", + "integrity": "sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.1" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.2.tgz", + "integrity": "sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.2.tgz", + "integrity": "sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.2" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.2.tgz", + "integrity": "sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.2.tgz", + "integrity": "sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.2.tgz", + "integrity": "sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mermaid-js/layout-elk": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@mermaid-js/layout-elk/-/layout-elk-0.2.2.tgz", + "integrity": "sha512-vnH3gtqfhyBiRVKNpT8iDENTw18q/OF0GF/SfYfHN43KZpu+6eZDEOMHTfNYAkpmUWJNgtRQFIS6BTc7vH/DYQ==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "elkjs": "^0.9.3" + }, + "peerDependencies": { + "mermaid": "^11.0.2" + } + }, + "node_modules/@mermaid-js/parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.2.0.tgz", + "integrity": "sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==", + "license": "MIT", + "dependencies": { + "@chevrotain/types": "~11.1.2" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.5.2.tgz", + "integrity": "sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.5.2.tgz", + "integrity": "sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/default-ui": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.5.2.tgz", + "integrity": "sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==", + "license": "MIT" + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.5.2.tgz", + "integrity": "sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.5.2.tgz", + "integrity": "sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.5.2.tgz", + "integrity": "sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-arm64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/windows-arm64/-/windows-arm64-1.5.2.tgz", + "integrity": "sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.5.2.tgz", + "integrity": "sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@shikijs/core": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.0.tgz", + "integrity": "sha512-EooU3i9F6IAE8kEu+AnGf9DFZWkQBZ+hJn3tLVbsH+61mtQiva5biai66fAA6nvFPXkLgvrh7BrR7YcJU83xQQ==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.3.0", + "@shikijs/types": "4.3.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.0.tgz", + "integrity": "sha512-hTv/KiFf2tpiqlACPiztGGurEARWIutB8YUhcrA1pUC7VzzwKO+g5crUocrLztrZ5ro5Z4hbXg7bYclETn3gSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.0.tgz", + "integrity": "sha512-1vMdN3gHfnKfLYwecUI2ITJI4RhHt96xEaJumVn7Heb0IlJ8WQMIH0Voak+2j22BpSNKdnOfB/pCTPnPm2gq7A==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.0", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.0.tgz", + "integrity": "sha512-rnlqFbBRSys9bT4gl/5rw9RnS0W/I84ZldXPkO7cvlEMoV85TyF/aU01N7/NbSR776RNLjrJKjfFUXJR6wN1Cg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.0.tgz", + "integrity": "sha512-CPkz64PTa5diRW1ggzMZH9VM/du4RNChYgVtgqrFcgruvIybmCvySv8GkiHSczUHXYuuR8TdKEwFx+UnZMpgdg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.0.tgz", + "integrity": "sha512-Avgt05YiT+Y3prjIc9lmQxhJzHBcCfR6cjiFW4OyaMBbt2A6trX5rfjUzx+Vj/mE9qpArYjatnqo9XPjQNW/AQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.0.tgz", + "integrity": "sha512-oc8b9U2SYvofKZk8e/737nIX0qwf6eV2vHFATeObAu7r+mUVpLs8Re0BmVkIjAWAYgkmG/CzLNo7rzuBzRu/wQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", + "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", + "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", + "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", + "license": "ISC" + }, + "node_modules/@upsetjs/venn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==", + "license": "MIT", + "optionalDependencies": { + "d3-selection": "^3.0.0", + "d3-transition": "^3.0.1" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/am-i-vibing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz", + "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==", + "license": "MIT", + "dependencies": { + "process-ancestry": "^0.1.0" + }, + "bin": { + "am-i-vibing": "dist/cli.mjs" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/astro/-/astro-7.0.3.tgz", + "integrity": "sha512-CK+G+Tl2DMV1EXCwVG45vyurxf2IfRTklMxDhRKn+tst9Yl8rWXpudL62Fa6zin5Bt968FBvuyASj1aJShROZg==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-rs": "^0.2.2", + "@astrojs/internal-helpers": "0.10.0", + "@astrojs/markdown-satteri": "0.3.2", + "@astrojs/telemetry": "3.3.2", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "am-i-vibing": "^0.4.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^1.1.1", + "devalue": "^5.8.1", + "diff": "^8.0.3", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.28.0", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "get-tsconfig": "5.0.0-beta.4", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.1.1", + "jsonc-parser": "^3.3.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.4", + "rehype": "^13.0.2", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.4", + "unist-util-visit": "^5.1.0", + "unstorage": "^1.17.5", + "vfile": "^6.0.3", + "vite": "^8.0.13", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.3.6" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "7.2.0" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } + } + }, + "node_modules/astro-expressive-code": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.44.0.tgz", + "integrity": "sha512-b1wN/ZvbJprzxlGKIpIes2kQrCY5KRLwys2tWbZAZyjGZcW5ZtgneZnBwzNRiBna9/48d4mQl19KLjcRuhO1hw==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.44.0", + "url-extras": "^0.1.0" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0" + } + }, + "node_modules/astro-mermaid": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/astro-mermaid/-/astro-mermaid-2.1.0.tgz", + "integrity": "sha512-fFRUN0BTZh+DZhDiLyblXoO26XqJ1Rr+qK3JGgSu7OBspKHDm59jkztg/aHsrdo1vO/tIq/+xhP/vgT8Mp92XA==", + "license": "MIT", + "dependencies": { + "import-meta-resolve": "^4.2.0", + "mdast-util-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "peerDependencies": { + "@mermaid-js/layout-elk": "^0.2.0", + "astro": ">=4", + "mermaid": "^10.0.0 || ^11.0.0" + }, + "peerDependenciesMeta": { + "@mermaid-js/layout-elk": { + "optional": true + } + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz", + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/cytoscape": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.0.tgz", + "integrity": "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz", + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/delaunator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", + "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.11.tgz", + "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/elkjs": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", + "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==", + "license": "EPL-2.0" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "license": "MIT" + }, + "node_modules/es-toolkit": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.49.0.tgz", + "integrity": "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expressive-code": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.44.0.tgz", + "integrity": "sha512-JXVWVNCKlLuZLMQH8cOiDUSosT0Bb+elwE/dbAkpwFwDFmyFyWlECoWZIohh2FkIF1iI67TQJ+Ts9k7oNDh2qA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.0", + "@expressive-code/plugin-frames": "^0.44.0", + "@expressive-code/plugin-shiki": "^0.44.0", + "@expressive-code/plugin-text-markers": "^0.44.0" + } + }, + "node_modules/expressive-code-color-chips": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/expressive-code-color-chips/-/expressive-code-color-chips-0.2.0.tgz", + "integrity": "sha512-NapCF8b3fAd7q5JZxCWfllGFRGEiTwiEx49/kfFTEqdZjpzGl39sK9PXNGOYasLrSvftcvOfAf8mlsPkce0i8A==", + "license": "MIT", + "peerDependencies": { + "@expressive-code/core": ">=0.37.1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz", + "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "engines": { + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hast-util-embedded": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", + "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-format": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz", + "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "html-whitespace-sensitive-tag-names": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-body-ok-link": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", + "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-minify-whitespace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", + "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-is-body-ok-link": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "nth-check": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-whitespace-sensitive-tag-names": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz", + "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/i18next": { + "version": "26.3.3", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.3.tgz", + "integrity": "sha512-aYVegyBdXSO93CMMihvr47jI7GHSOcIahMpJX+qzUXDzW4xDJf2uenIA+45vDU+YhiVdcfsql70AC9RVdMNrHg==", + "funding": [ + { + "type": "individual", + "url": "https://www.locize.com/i18next" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://www.locize.com" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": "^5 || ^6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-absolute-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-5.0.0.tgz", + "integrity": "sha512-sdJyNpBnQHuVnBunfzjAecOhZr2+A30ywfFvu3EnxtKLUWfwGgyWUmqHbGZiU6vTfHpCPm5GvLe4BAvlU9n8VQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz", + "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/katex": { + "version": "0.16.47", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", + "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/mermaid": { + "version": "11.16.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.16.0.tgz", + "integrity": "sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.1.2", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.2.0", + "@types/d3": "^7.4.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.3", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.14", + "dayjs": "^1.11.20", + "dompurify": "^3.3.3", + "es-toolkit": "^1.45.1", + "katex": "^0.16.45", + "khroma": "^2.1.0", + "marked": "^16.3.0", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", + "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz", + "integrity": "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.0.tgz", + "integrity": "sha512-7NED7xhQ74Ngp4JP/2e0VZHp7vSWfJfqeiR92jPgxsz6m0Se4P03YoTKa9dDXyZ3r6P616gUXttrB6nnHYKang==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.5.2.tgz", + "integrity": "sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==", + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.5.2", + "@pagefind/darwin-x64": "1.5.2", + "@pagefind/freebsd-x64": "1.5.2", + "@pagefind/linux-arm64": "1.5.2", + "@pagefind/linux-x64": "1.5.2", + "@pagefind/windows-arm64": "1.5.2", + "@pagefind/windows-x64": "1.5.2" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-ancestry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz", + "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-expressive-code": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.44.0.tgz", + "integrity": "sha512-5r74C5F2sMR3X+QJH8OKWgZBO/cqRw5W1fLT6GVlSfLqepk+4j8tGFkyPqZYWjwntsBHzKPDH2zI68sZ7ScLfA==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.44.0" + } + }, + "node_modules/rehype-format": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.1.tgz", + "integrity": "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-format": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-4.0.0.tgz", + "integrity": "sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", + "license": "Unlicense" + }, + "node_modules/rolldown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.137.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3" + } + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/satteri": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.9.3.tgz", + "integrity": "sha512-2XfBh89LCnBMFkNOeVKkBLelAZcIA17VLHsgJum1tJ2fXiPZDN/TDXv4ku46rFOQXYd41LJ0kiZh5gPqExcCsg==", + "dependencies": { + "@types/estree-jsx": "^1.0.5", + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3" + }, + "optionalDependencies": { + "@bruits/satteri-darwin-arm64": "0.9.3", + "@bruits/satteri-darwin-x64": "0.9.3", + "@bruits/satteri-linux-arm64-gnu": "0.9.3", + "@bruits/satteri-linux-arm64-musl": "0.9.3", + "@bruits/satteri-linux-x64-gnu": "0.9.3", + "@bruits/satteri-linux-x64-musl": "0.9.3", + "@bruits/satteri-wasm32-wasi": "0.9.3", + "@bruits/satteri-win32-arm64-msvc": "0.9.3", + "@bruits/satteri-win32-x64-msvc": "0.9.3" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.2.tgz", + "integrity": "sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==", + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.2", + "@img/sharp-darwin-x64": "0.35.2", + "@img/sharp-freebsd-wasm32": "0.35.2", + "@img/sharp-libvips-darwin-arm64": "1.3.1", + "@img/sharp-libvips-darwin-x64": "1.3.1", + "@img/sharp-libvips-linux-arm": "1.3.1", + "@img/sharp-libvips-linux-arm64": "1.3.1", + "@img/sharp-libvips-linux-ppc64": "1.3.1", + "@img/sharp-libvips-linux-riscv64": "1.3.1", + "@img/sharp-libvips-linux-s390x": "1.3.1", + "@img/sharp-libvips-linux-x64": "1.3.1", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.1", + "@img/sharp-libvips-linuxmusl-x64": "1.3.1", + "@img/sharp-linux-arm": "0.35.2", + "@img/sharp-linux-arm64": "0.35.2", + "@img/sharp-linux-ppc64": "0.35.2", + "@img/sharp-linux-riscv64": "0.35.2", + "@img/sharp-linux-s390x": "0.35.2", + "@img/sharp-linux-x64": "0.35.2", + "@img/sharp-linuxmusl-arm64": "0.35.2", + "@img/sharp-linuxmusl-x64": "0.35.2", + "@img/sharp-webcontainers-wasm32": "0.35.2", + "@img/sharp-win32-arm64": "0.35.2", + "@img/sharp-win32-ia32": "0.35.2", + "@img/sharp-win32-x64": "0.35.2" + } + }, + "node_modules/shiki": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.3.0.tgz", + "integrity": "sha512-NKKjWzR6LIGL3sXBrWDw9sDS9cxx42/DkysaNqJEeOWE8Kix5gpak0bc00OfDVEO4oyXSyz8+aRaqKoBD1yo7A==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.3.0", + "@shikijs/engine-javascript": "4.3.0", + "@shikijs/engine-oniguruma": "4.3.0", + "@shikijs/langs": "4.3.0", + "@shikijs/themes": "4.3.0", + "@shikijs/types": "4.3.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^24.9.2", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/esm/cli.js" + }, + "engines": { + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/smol-toml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", + "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/starlight-links-validator": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/starlight-links-validator/-/starlight-links-validator-0.25.1.tgz", + "integrity": "sha512-49F1JRvaJmvKSnM/jPFTjDVVwDJBUJ78jZE+fOResTRwYSa8MzPQzsJlSS1FeolsdqAat1evAu//WgIm65uyzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/markdown-satteri": "^0.3.2", + "@types/picomatch": "^4.0.2", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "is-absolute-url": "^5.0.0", + "mdast-util-mdx-jsx": "^3.2.0", + "mdast-util-to-hast": "^13.2.1", + "picomatch": "^4.0.3", + "satteri": "^0.9.3", + "terminal-link": "^5.0.0", + "unist-util-visit": "^5.1.0", + "yaml": "^2.8.3" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "@astrojs/starlight": ">=0.41.0", + "astro": ">=7.0.2" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/stylis": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz", + "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-hyperlinks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.5.0.tgz", + "integrity": "sha512-ZW2OvfeCXrNTbLakPUzjQG922EeGCOteFSVoek5DKStTh898wf7zgtuFlzQN8HfZCxC3Eh02yJVrRW51hADf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^5.0.1", + "supports-color": "^10.2.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, + "node_modules/svg-pan-zoom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/svg-pan-zoom/-/svg-pan-zoom-3.6.2.tgz", + "integrity": "sha512-JwnvRWfVKw/Xzfe6jriFyfey/lWJLq4bUh2jwoR5ChWQuQoOH8FEh1l/bEp46iHHKHEJWIyFJETbazraxNWECg==", + "license": "BSD-2-Clause" + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/terminal-link": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-5.0.0.tgz", + "integrity": "sha512-qFAy10MTMwjzjU8U16YS4YoZD+NQLHzLssFMNqgravjbvIPNiqkGFR4yjhJfmY9R5OFU7+yHxc6y+uGHkKwLRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "supports-hyperlinks": "^4.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyclip": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz", + "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-dedent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.3.0.tgz", + "integrity": "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==", + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/url-extras": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/url-extras/-/url-extras-0.1.0.tgz", + "integrity": "sha512-8tzwTeXFPuX/5PHuCDQE5Dd9Ts4rwoq2t9aIT+HS4iAVpmj5l4Ao7Q+BuuFjvWRqrLswBhQDk8O96ZicgCqQqw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz", + "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "~1.1.2", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "devOptional": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/website/package.json b/website/package.json new file mode 100644 index 000000000..1203e8b3d --- /dev/null +++ b/website/package.json @@ -0,0 +1,29 @@ +{ + "name": "nf-metro-docs", + "type": "module", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/sitemap": "^3.7.3", + "@astrojs/starlight": "^0.41.1", + "@fontsource/inter": "^5.2.8", + "@fontsource/jetbrains-mono": "^5.2.8", + "@mermaid-js/layout-elk": "^0.2.2", + "astro": "^7.0.3", + "astro-mermaid": "^2.1.0", + "expressive-code-color-chips": "^0.2.0", + "mermaid": "^11.16.0", + "sharp": "^0.35.2", + "svg-pan-zoom": "^3.6.2" + }, + "devDependencies": { + "starlight-links-validator": "^0.25.1" + } +} diff --git a/website/playground-tests/package-lock.json b/website/playground-tests/package-lock.json new file mode 100644 index 000000000..cf11a1b08 --- /dev/null +++ b/website/playground-tests/package-lock.json @@ -0,0 +1,78 @@ +{ + "name": "nf-metro-playground-tests", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nf-metro-playground-tests", + "version": "0.0.0", + "devDependencies": { + "@playwright/test": "^1.61.1" + } + }, + "node_modules/@playwright/test": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", + "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/website/playground-tests/package.json b/website/playground-tests/package.json new file mode 100644 index 000000000..d05201fbf --- /dev/null +++ b/website/playground-tests/package.json @@ -0,0 +1,13 @@ +{ + "name": "nf-metro-playground-tests", + "private": true, + "version": "0.0.0", + "description": "End-to-end browser tests for the nf-metro Pyodide playground.", + "scripts": { + "test": "playwright test", + "install-browsers": "playwright install --with-deps chromium" + }, + "devDependencies": { + "@playwright/test": "^1.61.1" + } +} diff --git a/website/playground-tests/playground.spec.js b/website/playground-tests/playground.spec.js new file mode 100644 index 000000000..76c3e7355 --- /dev/null +++ b/website/playground-tests/playground.spec.js @@ -0,0 +1,690 @@ +const { test, expect } = require("@playwright/test"); + +// One shared page booted once: the Pyodide cold-start is too slow to repeat per +// test. Tests run serially and each leaves the editor in a known state. +test.describe.configure({ mode: "serial" }); + +let page; + +async function waitReady(p) { + await p.waitForFunction(() => window.__nfMetroReady === true, null, { + timeout: 160_000, + }); +} + +// Advanced controls live in a collapsed
; open it before driving them. +async function openAdvanced() { + await page.evaluate(() => { + document.getElementById("advanced").open = true; + }); +} + +test.beforeAll(async ({ browser }) => { + page = await browser.newPage(); + await page.goto("/harness.html"); + await waitReady(page); +}); + +test.afterAll(async () => { + await page.close(); +}); + +test("service worker precaches pyodide.js during install", async () => { + // By the time Pyodide has fully booted, the SW install has long since completed. + const cached = await page.evaluate(async () => { + const keys = await caches.keys(); + const name = keys.find((k) => k.startsWith("nfm-playground-")); + if (!name) return false; + const cache = await caches.open(name); + const entries = await cache.keys(); + return entries.some((req) => req.url.includes("pyodide.js")); + }); + expect(cached).toBe(true); +}); + +test("boots and renders the seed map", async () => { + await expect(page.locator("#preview svg")).toHaveCount(1); + expect(await page.locator("#preview [data-line-id]").count()).toBeGreaterThan( + 0, + ); + expect( + await page.locator('#preview [data-station-id="reads"]').count(), + ).toBeGreaterThan(0); + await expect(page.locator("#error")).toBeHidden(); +}); + +test("live edit re-renders with the new station", async () => { + await expect( + page.locator('#preview [data-station-id="brandnew"]'), + ).toHaveCount(0); + await page.evaluate(() => { + const v = + window.__nfMetro.getValue() + + "\n align -->|main| brandnew[BrandNew]\n"; + window.__nfMetro.setValue(v); + }); + await expect( + page.locator('#preview [data-station-id="brandnew"]').first(), + ).toBeVisible(); +}); + +test("animate toggle adds motion elements", async () => { + const balls = page.locator('#preview circle[style*="offset-path"]'); + await expect(balls).toHaveCount(0); + await page.locator("#opt-animate").check(); + await expect.poll(async () => balls.count()).toBeGreaterThan(0); + await page.locator("#opt-animate").uncheck(); + await expect(balls).toHaveCount(0); +}); + +test("advanced options are collapsed by default and toggle open", async () => { + // Progressive disclosure: power-user knobs are hidden until requested. + await expect(page.locator("#advanced")).not.toHaveAttribute("open", /.*/); + await expect(page.locator("#opt-line-spread")).toBeHidden(); + await page.locator("#advanced > summary").click(); + await expect(page.locator("#opt-line-spread")).toBeVisible(); + await page.locator("#advanced > summary").click(); + await expect(page.locator("#opt-line-spread")).toBeHidden(); +}); + +test("directional toggle adds chevron markers", async () => { + await expect(page.locator('#preview [class*="metro-direction"]')).toHaveCount( + 0, + ); + await page.locator("#opt-directional").check(); + await expect + .poll(async () => + page.locator('#preview [class*="metro-direction"]').count(), + ) + .toBeGreaterThan(0); + await page.locator("#opt-directional").uncheck(); +}); + +test("brand dropdown writes the %%metro style directive and re-renders", async () => { + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + const before = await page.locator("#preview").innerHTML(); + + await page.locator("#opt-theme").selectOption("seqera"); + await expect + .poll(async () => page.evaluate(() => window.__nfMetro.getValue())) + .toContain("%%metro style: seqera"); + await expect + .poll(async () => page.locator("#preview").innerHTML()) + .not.toBe(before); + + await page.locator("#opt-theme").selectOption("nfcore"); + await expect + .poll(async () => page.evaluate(() => window.__nfMetro.getValue())) + .toContain("%%metro style: nfcore"); +}); + +test("brand dropdown syncs from the source style directive", async () => { + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro style: seqera\n%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + await expect(page.locator("#opt-theme")).toHaveValue("seqera"); + + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro style: dark\n%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + await expect(page.locator("#opt-theme")).toHaveValue("nfcore"); +}); + +test("mode dropdown writes the %%metro mode directive and re-renders", async () => { + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + const before = await page.locator("#preview").innerHTML(); + + // Pick the mode the page is not already showing (the default tracks the UI + // theme), so the render genuinely changes. + const start = await page.locator("#opt-mode").inputValue(); + const other = start === "dark" ? "light" : "dark"; + await page.locator("#opt-mode").selectOption(other); + await expect + .poll(async () => page.evaluate(() => window.__nfMetro.getValue())) + .toContain(`%%metro mode: ${other}`); + await expect + .poll(async () => page.locator("#preview").innerHTML()) + .not.toBe(before); +}); + +test("mode dropdown syncs from the source mode directive", async () => { + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro mode: light\n%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + await expect(page.locator("#opt-mode")).toHaveValue("light"); +}); + +test("debug toggle adds the debug overlay", async () => { + // A sectioned map has ports/waypoints for the overlay to draw. + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n" + + " subgraph s1 [One]\n n1[N1]\n end\n" + + " subgraph s2 [Two]\n n2[N2]\n end\n" + + " n1 -->|a| n2\n", + ), + ); + const before = await page.locator("#preview").innerHTML(); + await page.locator("#opt-debug").check(); + await expect + .poll(async () => page.locator("#preview").innerHTML()) + .not.toBe(before); + await page.locator("#opt-debug").uncheck(); +}); + +test("layout controls write %%metro directives and sync from source", async () => { + await openAdvanced(); + const getValue = () => page.evaluate(() => window.__nfMetro.getValue()); + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + + // choice -> writes directive, then "auto" removes it + await page.locator("#opt-line-spread").selectOption("rails"); + await expect.poll(getValue).toContain("%%metro line_spread: rails"); + await page.locator("#opt-line-spread").selectOption(""); + await expect.poll(getValue).not.toContain("line_spread"); + + // bool -> writes true, unchecking removes it + await page.locator("#opt-center-ports").check(); + await expect.poll(getValue).toContain("%%metro center_ports: true"); + await page.locator("#opt-center-ports").uncheck(); + await expect.poll(getValue).not.toContain("center_ports"); + + // number -> writes the value and re-renders + await page.locator("#opt-font-scale").fill("1.5"); + await page.locator("#opt-font-scale").blur(); + await expect.poll(getValue).toContain("%%metro font_scale: 1.5"); + + // controls sync FROM a source directive + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line_spread: centered\n%%metro center_ports: true\n" + + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + await expect(page.locator("#opt-line-spread")).toHaveValue("centered"); + await expect(page.locator("#opt-center-ports")).toBeChecked(); +}); + +test("snippet button inserts valid boilerplate and still renders", async () => { + await page.locator("#btn-line").click(); + await expect(page.locator("#error")).toBeHidden(); + expect(await page.locator("#preview svg").count()).toBe(1); +}); + +test("Nextflow DAG import converts the seeded sample into a metro map", async () => { + await page.locator("#btn-convert").click(); + await expect(page.locator("#convert-modal")).toBeVisible(); + // Docs link points at the Nextflow import guide. + await expect( + page.locator('#convert-modal a[href="../nextflow/"]'), + ).toHaveCount(1); + // The box is pre-filled with a sample DAG, like the editor's starter map. + await expect(page.locator("#convert-text")).toHaveValue(/flowchart/); + + // Convert the seeded sample directly. + await page.locator("#convert-submit").click(); + await expect(page.locator("#convert-modal")).toBeHidden(); + const value = await page.evaluate(() => window.__nfMetro.getValue()); + expect(value).toContain("%%metro"); + expect(value.toLowerCase()).toContain("fastqc"); + await expect + .poll(async () => page.locator("#preview [data-line-id]").count()) + .toBeGreaterThan(0); +}); + +test("line color swatch rewrites the hex in the editor", async () => { + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line: a | A | #abcdef\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ), + ); + await expect( + page.locator('#line-colors input[type="color"]').first(), + ).toBeVisible(); + await page.evaluate(() => { + const input = document.querySelector('#line-colors input[type="color"]'); + input.value = "#123456"; + input.dispatchEvent(new Event("input", { bubbles: true })); + }); + await expect + .poll(async () => page.evaluate(() => window.__nfMetro.getValue())) + .toContain("#123456"); +}); + +test("syntax error surfaces inline and keeps the last good render", async () => { + const good = await page.locator("#preview").innerHTML(); + await page.evaluate(() => { + // A self-referential cycle the layout engine rejects. + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n n2 -->|a| n1\n", + ); + }); + await expect(page.locator("#error")).toBeVisible(); + // Preview is untouched: the broken edit did not blank it. + expect(await page.locator("#preview").innerHTML()).toBe(good); +}); + +// 1x1 red PNG, used as a stand-in logo upload. +const TINY_PNG_BASE64 = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4" + + "nGNgYAAAAAMAASsJTYQAAAAASUVORK5CYII="; + +test("a logo path the playground cannot resolve gets a friendly hint", async () => { + await page.evaluate(() => { + window.__nfMetro.setValue( + "%%metro logo: does/not/exist.png\n%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ); + }); + await expect(page.locator("#error")).toContainText("not found"); + await expect(page.locator("#error")).toContainText("+ Logo"); +}); + +test("attaching a logo embeds it as a data URI and renders it", async () => { + await page.evaluate(() => { + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ); + }); + + await page.locator("#btn-logo").click(); + await expect(page.locator("#logo-modal")).toBeVisible(); + await expect(page.locator("#logo-submit")).toBeDisabled(); + + await page.locator("#logo-file").setInputFiles({ + name: "logo.png", + mimeType: "image/png", + buffer: Buffer.from(TINY_PNG_BASE64, "base64"), + }); + await expect(page.locator("#logo-preview")).toBeVisible(); + await expect(page.locator("#logo-submit")).toBeEnabled(); + + await page.locator("#logo-submit").click(); + await expect(page.locator("#logo-modal")).toBeHidden(); + await expect(page.locator("#error")).toBeHidden(); + + const value = await page.evaluate(() => window.__nfMetro.getValue()); + expect(value).toContain("%%metro logo: data:image/png;base64,"); + await expect(page.locator("#preview svg image")).toHaveCount(1); + + // Removing it clears the directive and the embedded image. + await page.locator("#btn-logo").click(); + await page.locator("#logo-remove").click(); + await expect(page.locator("#preview svg image")).toHaveCount(0); + expect(await page.evaluate(() => window.__nfMetro.getValue())).not.toContain( + "%%metro logo:", + ); +}); + +test("SVG and PNG export produce non-empty downloads", async () => { + // Restore a valid map after the error test. + await page.evaluate(() => { + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ); + }); + await expect(page.locator("#preview svg")).toHaveCount(1); + + const [svg] = await Promise.all([ + page.waitForEvent("download"), + page.locator("#btn-svg").click(), + ]); + expect(svg.suggestedFilename()).toMatch(/\.svg$/); + + const [png] = await Promise.all([ + page.waitForEvent("download"), + page.locator("#btn-png").click(), + ]); + expect(png.suggestedFilename()).toMatch(/\.png$/); + const fs = require("fs"); + const stat = fs.statSync(await png.path()); + expect(stat.size).toBeGreaterThan(0); +}); + +test("zoom controls scale the preview and Fit resets", async () => { + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n zn1[ZN1] -->|a| zn2[ZN2]\n", + ), + ); + await expect( + page.locator('#preview [data-station-id="zn1"]').first(), + ).toBeVisible(); + + const svgWidth = () => + page + .locator("#preview svg") + .evaluate((s) => s.getBoundingClientRect().width); + const fitWidth = await svgWidth(); + + await page.locator("#zoom-in").click(); + await expect.poll(svgWidth).toBeGreaterThan(fitWidth + 1); + await expect(page.locator("#preview")).toHaveClass(/zoomed/); + + await page.locator("#zoom-fit").click(); + await expect(page.locator("#preview")).not.toHaveClass(/zoomed/); + await expect.poll(svgWidth).toBeLessThanOrEqual(fitWidth + 1); +}); + +test("example dropdown loads a chosen example and renders it", async () => { + const select = page.locator("#example-select"); + // Manifest populated the dropdown beyond the placeholder + starter. + expect(await select.locator("option").count()).toBeGreaterThan(2); + // Entries are grouped into multiple s. + expect(await select.locator("optgroup").count()).toBeGreaterThan(1); + + await select.selectOption("rnaseq_auto"); + await expect + .poll(async () => page.evaluate(() => window.__nfMetro.getValue())) + .toContain("graph"); + await expect + .poll(async () => page.locator("#preview [data-line-id]").count()) + .toBeGreaterThan(0); + // Action menu resets to its placeholder after loading. + await expect(select).toHaveValue(""); + + // A topology fixture (only in the render diff, not examples/*.mmd) loads too. + await select.selectOption("single_section"); + await expect + .poll(async () => page.evaluate(() => window.__nfMetro.getValue())) + .toContain("graph"); + + // The starter entry is always available even without the manifest. + await select.selectOption("__seed__"); + await expect + .poll(async () => page.evaluate(() => window.__nfMetro.getValue())) + .toContain("Example Pipeline"); +}); + +test("bug report builds a prefilled GitHub issue with the map and explanation", async () => { + await page.evaluate(() => { + window.__nfMetro.setValue( + "%%metro line: q | Q | #abc\ngraph LR\n uniquenode[Unique] -->|q| other[Other]\n", + ); + // Prevent the real github.com tab from opening during the test. + window.open = () => null; + }); + + await page.locator("#btn-report").click(); + await expect(page.locator("#report-modal")).toBeVisible(); + // The explanation is mandatory: submit stays disabled until it's filled. + await expect(page.locator("#report-submit")).toBeDisabled(); + + await page + .locator("#report-text") + .fill("Edge renders backwards from uniquenode"); + await expect(page.locator("#report-submit")).toBeEnabled(); + await page.locator("#report-submit").click(); + + await expect(page.locator("#report-modal")).toBeHidden(); + const issueUrl = await page.evaluate(() => window.__nfMetroLastIssueUrl); + const u = new URL(issueUrl); + expect(u.host).toBe("github.com"); + expect(u.pathname).toBe("/seqeralabs/nf-metro/issues/new"); + expect(u.searchParams.get("labels")).toBe("playground"); + const body = u.searchParams.get("body"); + expect(body).toContain("Edge renders backwards from uniquenode"); + expect(body).toContain("uniquenode[Unique]"); + expect(body).toContain("#mmd="); +}); + +test("share link round-trips the editor content", async () => { + const source = await page.evaluate(() => { + const v = "%%metro line: z | Z | #0af\ngraph LR\n s1[S1] -->|z| s2[S2]\n"; + window.__nfMetro.setValue(v); + return v; + }); + await page.locator("#btn-share").click(); + await page.waitForFunction(() => location.hash.includes("mmd-gz=")); + const url = await page.evaluate(() => location.href); + expect(url).toContain("#mmd-gz="); + + await page.goto(url); + await waitReady(page); + const restored = await page.evaluate(() => window.__nfMetro.getValue()); + expect(restored).toBe(source); +}); + +test("share link round-trips an attached logo", async () => { + await page.evaluate(() => { + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\ngraph LR\n n1[N1] -->|a| n2[N2]\n", + ); + }); + await page.locator("#btn-logo").click(); + await page.locator("#logo-file").setInputFiles({ + name: "logo.png", + mimeType: "image/png", + buffer: Buffer.from(TINY_PNG_BASE64, "base64"), + }); + await page.locator("#logo-submit").click(); + await expect(page.locator("#preview svg image")).toHaveCount(1); + const source = await page.evaluate(() => window.__nfMetro.getValue()); + + await page.locator("#btn-share").click(); + await page.waitForFunction(() => location.hash.includes("mmd-gz=")); + const url = await page.evaluate(() => location.href); + + // A full navigation to the shared URL starts from no prior editor state, so + // it stands in for the recipient opening the link cold: the logo must + // render with no network/disk access since the data URI travels entirely + // inside the link itself. + await page.goto(url); + await waitReady(page); + expect(await page.evaluate(() => window.__nfMetro.getValue())).toBe(source); + await expect(page.locator("#preview svg image")).toHaveCount(1); +}); + +// A two-section map used by the graphical-editing tests below. +const EDIT_MAP = + "%%metro line: a | A | #f00\n" + + "%%metro line: b | B | #0af\n" + + "graph LR\n" + + " subgraph s1 [One]\n" + + " n1[N1]\n" + + " n2[N2]\n" + + " n1 -->|a| n2\n" + + " end\n" + + " subgraph s2 [Two]\n" + + " n3[N3]\n" + + " end\n" + + " n2 -->|a| n3\n"; + +const getValue = () => page.evaluate(() => window.__nfMetro.getValue()); + +async function loadEditMap() { + await page.evaluate((m) => { + window.__nfMetro.setMode("select"); + window.__nfMetro.setValue(m); + }, EDIT_MAP); + await expect( + page.locator('#preview [data-station-id="n1"]').first(), + ).toBeVisible(); +} + +test("edit-mode buttons toggle and update the hint", async () => { + await loadEditMap(); + await page.locator('.mode-btn[data-mode="add-edge"]').click(); + await expect(page.locator('.mode-btn[data-mode="add-edge"]')).toHaveAttribute( + "aria-pressed", + "true", + ); + await expect(page.locator('.mode-btn[data-mode="select"]')).toHaveAttribute( + "aria-pressed", + "false", + ); + await expect(page.locator("#edit-hint")).toContainText(/source station/i); + await page.locator('.mode-btn[data-mode="select"]').click(); + await expect(page.locator('.mode-btn[data-mode="add-edge"]')).toHaveAttribute( + "aria-pressed", + "false", + ); +}); + +test("clicking a station selects it and shows the property panel", async () => { + await loadEditMap(); + await expect(page.locator("#prop-panel")).toBeHidden(); + await page.locator('#preview [data-station-id="n1"]').first().click(); + await expect(page.locator("#prop-panel")).toBeVisible(); + await expect(page.locator("#prop-kind")).toHaveText("station"); + await expect(page.locator("#prop-body")).toContainText("id: n1"); + await page.locator("#prop-close").click(); + await expect(page.locator("#prop-panel")).toBeHidden(); +}); + +test("add-station writes a node into the chosen section", async () => { + await loadEditMap(); + await page.evaluate(() => window.__nfMetro.addStationToSection("s2")); + expect(await getValue()).toMatch( + /subgraph s2 \[Two\][\s\S]*node1\[New node\][\s\S]*end/, + ); + await expect( + page.locator('#preview [data-station-id="node1"]').first(), + ).toBeVisible(); + await expect(page.locator("#prop-body")).toContainText("id: node1"); +}); + +test("connect inserts an edge between two stations", async () => { + await loadEditMap(); + await page.evaluate(() => window.__nfMetro.connect("n1", "n3", "b")); + expect(await getValue()).toContain("n1 -->|b| n3"); +}); + +test("add-section appends a new subgraph block and renders it", async () => { + await loadEditMap(); + await page.locator("#btn-add-section").click(); + expect(await getValue()).toMatch(/subgraph section1 \[New Section\]/); + await expect( + page.locator('#preview [data-section-id="section1"]').first(), + ).toBeVisible(); +}); + +test("rename station rewrites its label and keeps the id", async () => { + await loadEditMap(); + await page.evaluate(() => window.__nfMetro.renameStation("n1", "Renamed")); + expect(await getValue()).toContain("n1[Renamed]"); +}); + +test("reassign edge line rewrites the line token", async () => { + await loadEditMap(); + await page.evaluate(() => { + const edge = window.__nfMetro + .parseEdges() + .find((e) => e.src === "n1" && e.tgt === "n2"); + window.__nfMetro.reassignEdgeLine(edge.lineNo, "b"); + }); + expect(await getValue()).toContain("n1 -->|b| n2"); +}); + +test("section grid directive is written then cleared", async () => { + await loadEditMap(); + await page.evaluate(() => window.__nfMetro.setSectionGrid("s1", 1, 0)); + expect(await getValue()).toContain("%%metro grid: s1 | 1,0"); + await page.evaluate(() => window.__nfMetro.setSectionGrid("s1", null)); + expect(await getValue()).not.toContain("grid: s1"); +}); + +test("delete edge removes its line", async () => { + await loadEditMap(); + await page.evaluate(() => { + const edge = window.__nfMetro + .parseEdges() + .find((e) => e.src === "n2" && e.tgt === "n3"); + window.__nfMetro.deleteEdge(edge.lineNo); + }); + expect(await getValue()).not.toContain("n2 -->|a| n3"); +}); + +test("delete station removes its declaration and incident edges", async () => { + await loadEditMap(); + await page.evaluate(() => window.__nfMetro.deleteStation("n2")); + const v = await getValue(); + expect(v).not.toContain("n2[N2]"); + expect(v).not.toContain("-->|a| n2"); + expect(v).not.toContain("n2 -->|a| n3"); + await expect(page.locator("#error")).toBeHidden(); +}); + +test("delete section removes the block and its inter-section edges", async () => { + await loadEditMap(); + await page.evaluate(() => window.__nfMetro.deleteSection("s2")); + const v = await getValue(); + expect(v).not.toContain("subgraph s2"); + expect(v).not.toContain("n3[N3]"); + expect(v).not.toContain("n2 -->|a| n3"); +}); + +test("clicking an in-section edge selects it as an edge", async () => { + await loadEditMap(); + // The first route element is the n1->n2 in-section edge, whose endpoints sit + // on both stations, so it resolves to a specific edge rather than the line. A + // positional click at the stroke centre matches a real click on a thin route + // (element-level .click() is flaky on near-zero-height SVG paths). + const box = await page + .locator('#preview [data-line-id="a"]') + .first() + .boundingBox(); + await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2); + await expect(page.locator("#prop-panel")).toBeVisible(); + await expect(page.locator("#prop-kind")).toHaveText("edge"); + await expect(page.locator("#prop-body")).toContainText("n1"); + await expect(page.locator("#prop-body")).toContainText("n2"); +}); + +test("splitting an edge inserts a station between its endpoints", async () => { + await loadEditMap(); + await page.evaluate(() => window.__nfMetro.splitEdge("n1", "n2", "a")); + const v = await getValue(); + expect(v).toContain("n1 -->|a| node1"); + expect(v).toContain("node1 -->|a| n2"); + expect(v).toContain("node1[New node]"); + expect(v).not.toContain("n1 -->|a| n2"); + await expect( + page.locator('#preview [data-station-id="node1"]').first(), + ).toBeVisible(); +}); + +test("splitting a multi-line edge keeps every line on both halves", async () => { + await page.evaluate(() => + window.__nfMetro.setValue( + "%%metro line: a | A | #f00\n%%metro line: b | B | #0af\n" + + "graph LR\n subgraph s [S]\n x[X]\n y[Y]\n x -->|a,b| y\n end\n", + ), + ); + await expect( + page.locator('#preview [data-station-id="x"]').first(), + ).toBeVisible(); + await page.evaluate(() => window.__nfMetro.splitEdge("x", "y", "a")); + const v = await getValue(); + expect(v).toContain("x -->|a,b| node1"); + expect(v).toContain("node1 -->|a,b| y"); +}); + +test("the line panel offers add and delete on each edge", async () => { + await loadEditMap(); + // Clicking an inter-section route selects the line; its edge list carries a + // splice (+) and delete (x) control per edge. + await page.evaluate(() => window.__nfMetro.select({ kind: "line", id: "a" })); + await expect(page.locator("#prop-kind")).toHaveText("line"); + await expect(page.locator(".prop-edge button.add").first()).toBeVisible(); + await expect(page.locator(".prop-edge button.del").first()).toBeVisible(); + await page.locator(".prop-edge button.add").first().click(); + expect(await getValue()).toContain("node1"); +}); diff --git a/website/playground-tests/playwright.config.js b/website/playground-tests/playwright.config.js new file mode 100644 index 000000000..16772f95c --- /dev/null +++ b/website/playground-tests/playwright.config.js @@ -0,0 +1,30 @@ +const { defineConfig, devices } = require("@playwright/test"); +const path = require("path"); + +// Pyodide cold-start (WASM download + micropip install) dominates wall-clock, +// so timeouts are generous and tests run serially against one shared page. +module.exports = defineConfig({ + testDir: __dirname, + fullyParallel: false, + workers: 1, + timeout: 200_000, + expect: { timeout: 160_000 }, + reporter: process.env.CI ? "list" : "line", + use: { + baseURL: "http://127.0.0.1:8765", + acceptDownloads: true, + trace: "retain-on-failure", + }, + webServer: { + command: "python3 -m http.server 8765", + // Serve from public/playground/ so wheels/ and examples.json are reachable + // at their relative paths (app.js resolves them against the page URL). + // harness.html is a standalone test fixture; the deployed site uses the + // Astro page at website/src/pages/playground.astro instead. + cwd: path.join(__dirname, "..", "public", "playground"), + url: "http://127.0.0.1:8765/harness.html", + reuseExistingServer: !process.env.CI, + timeout: 60_000, + }, + projects: [{ name: "chromium", use: { ...devices["Desktop Chrome"] } }], +}); diff --git a/website/public/assets/live_demo.mp4 b/website/public/assets/live_demo.mp4 new file mode 100644 index 000000000..0b3c65b07 Binary files /dev/null and b/website/public/assets/live_demo.mp4 differ diff --git a/website/public/favicon.svg b/website/public/favicon.svg new file mode 100644 index 000000000..71c78630f --- /dev/null +++ b/website/public/favicon.svg @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/website/public/playground/app.js b/website/public/playground/app.js new file mode 100644 index 000000000..1e359ef19 --- /dev/null +++ b/website/public/playground/app.js @@ -0,0 +1,2003 @@ +"use strict"; + +// Pinned so the install path is reproducible; bump deliberately. +const PYODIDE_VERSION = "v0.27.2"; + +const REPO = "seqeralabs/nf-metro"; + +const SEED = `%%metro title: Example Pipeline +%%metro line: qc | QC | #2dd4bf +%%metro line: main | Main | #c792ea + +graph LR + subgraph input [Input] + reads[Reads] + end + subgraph proc [Processing] + fastqc[FastQC] + trim[Trim] + align[Align] + fastqc -->|qc,main| trim + trim -->|main| align + end + subgraph results [Results] + bam[BAM] + end + reads -->|qc,main| fastqc + align -->|main| bam +`; + +// Seeded into the import dialog so the expected `-with-dag` format is visible +// and Convert works out of the box; users paste over it with their own DAG. +const SAMPLE_NEXTFLOW_DAG = `flowchart TB + subgraph " " + v0["Channel.fromPath"] + end + subgraph "PIPELINE [PIPELINE]" + v1(["FASTQC"]) + v2(["TRIM"]) + v3(["ALIGN"]) + v4(["MULTIQC"]) + end + v0 --> v1 + v1 --> v2 + v2 --> v3 + v1 --> v4 + v3 --> v4 +`; + +// Glue defined inside the Pyodide runtime: returns a JSON envelope so a render +// error surfaces as data rather than a thrown PythonError to unwind in JS. +// +// Layout cache: parse+compute_layout is expensive (~200-500ms). We cache the +// settled MetroGraph keyed on (normalised mmd + geometry options). Brand, mode, +// debug, animate, and directional are render-only - they don't affect station +// coordinates, so changing them skips layout and only re-runs render_svg. +// The style: and mode: directives are stripped before hashing so toggling brand +// or render mode doesn't bust the geometry cache. +const PY_GLUE = ` +import hashlib +import json +import re as _re +from nf_metro.api import prepare_graph, resolve_theme +from nf_metro.convert import convert_nextflow_dag +from nf_metro.render import render_svg + +_cached_graph = None +_cached_key = None +_RENDER_ONLY = frozenset({"animate", "directional"}) +_STYLE_RE = _re.compile(r"^\\s*%%metro\\s+(?:style|mode):.*$", _re.MULTILINE) + +def nfm_render(mmd, opts_json): + global _cached_graph, _cached_key + opts = json.loads(opts_json) + all_layout = {k: v for k, v in (opts.get("layout_options") or {}).items() if v is not None} + + layout_geom = {k: v for k, v in all_layout.items() if k not in _RENDER_ONLY} + render_only = {k: v for k, v in all_layout.items() if k in _RENDER_ONLY} + + mmd_norm = _STYLE_RE.sub("", mmd).strip() + cache_key = hashlib.md5((mmd_norm + "\\x00" + json.dumps(layout_geom, sort_keys=True)).encode()).hexdigest() + + try: + if cache_key != _cached_key: + graph = prepare_graph(mmd, layout_options=layout_geom) + _cached_graph = graph + _cached_key = cache_key + else: + graph = _cached_graph + + for k, v in render_only.items(): + setattr(graph, k, bool(v)) + + theme_obj = resolve_theme(opts.get("theme") or None, graph, mode=opts.get("mode") or None) + svg = render_svg( + graph, + theme_obj, + debug=bool(opts.get("debug")), + responsive=True, + font_portability="embed", + self_color_scheme=False, + ) + return json.dumps({"ok": True, "svg": svg}) + except Exception as e: + return json.dumps({"ok": False, "error": f"{type(e).__name__}: {e}"}) + +def nfm_convert(nextflow_dag): + try: + return json.dumps({"ok": True, "mmd": convert_nextflow_dag(nextflow_dag)}) + except Exception as e: + return json.dumps({"ok": False, "error": f"{type(e).__name__}: {e}"}) +`; + +const el = (id) => document.getElementById(id); +let editor = null; +let pyRender = null; +let pyConvert = null; +let lastSvg = ""; +let nfMetroVersion = ""; +let buildSha = ""; +const examples = {}; + +/* ------------------------------- editor -------------------------------- */ + +function defineMode() { + CodeMirror.defineSimpleMode("metro", { + start: [ + { regex: /%%metro\b.*/, token: "metro-directive" }, + { regex: /%%.*/, token: "comment" }, + { regex: /\b(graph|subgraph|end|LR|RL|TB|BT)\b/, token: "metro-keyword" }, + { regex: /\|[^|]*\|/, token: "metro-line" }, + { regex: /(--+>|<--+|-\.->|==+>)/, token: "metro-arrow" }, + ], + }); +} + +function initEditor() { + defineMode(); + editor = CodeMirror.fromTextArea(el("editor"), { + mode: "metro", + lineNumbers: true, + lineWrapping: false, + theme: "default", + }); + editor.setValue(loadFromHash() || SEED); + loadFromHashGz().then((src) => { + if (src != null) editor.setValue(src); + }); + editor.on("change", debounce(doRender, 300)); + + // CodeMirror measures gutter and line geometry once at creation and never + // re-measures when its container resizes; refresh() re-runs that measurement. + if (window.ResizeObserver) { + const refresh = debounce(() => editor.refresh(), 100); + new ResizeObserver(refresh).observe(el("editor-pane")); + } + + // Test hook: drive the editor and renderer from automated trials. + window.__nfMetro = { + getValue: () => editor.getValue(), + setValue: (v) => editor.setValue(v), + render: doRender, + setMode, + getMode: () => editMode, + select: setSelection, + getSelection: () => selection, + addStationToSection, + addSection, + connect, + renameStation, + renameSection, + reassignEdgeLine, + setSectionGrid, + deleteStation, + deleteEdge, + deleteSection, + splitEdge, + parseEdges, + }; +} + +/* --------------------------------- boot -------------------------------- */ + +function setBootMsg(msg) { + el("boot-msg").textContent = msg; +} + +async function resolveWheel() { + // Prefer a dev wheel shipped alongside the page (built from the current + // source); fall back to the released package on PyPI. + try { + const resp = await fetch("wheels/index.json", { cache: "no-store" }); + if (resp.ok) { + const { wheel } = await resp.json(); + if (wheel) return new URL("wheels/" + wheel, location.href).href; + } + } catch (_) { + /* no dev wheel; use PyPI */ + } + return "nf-metro"; +} + +async function boot() { + try { + setBootMsg("Starting Python runtime…"); + const pyodide = await loadPyodide({ + indexURL: `https://cdn.jsdelivr.net/pyodide/${PYODIDE_VERSION}/full/`, + }); + setBootMsg("Installing nf-metro…"); + await pyodide.loadPackage("micropip"); + const micropip = pyodide.pyimport("micropip"); + await micropip.install(await resolveWheel()); + pyodide.runPython(PY_GLUE); + pyRender = pyodide.globals.get("nfm_render"); + pyConvert = pyodide.globals.get("nfm_convert"); + nfMetroVersion = pyodide.runPython("import nf_metro; nf_metro.__version__"); + el("boot").classList.add("hidden"); + doRender(); + // Readiness means the runtime is up, independent of whether the first + // render happened to succeed. + window.__nfMetroReady = true; + } catch (err) { + setBootMsg("Failed to start: " + err); + el("boot").querySelector(".spinner").classList.add("hidden"); + } +} + +/* -------------------------------- render ------------------------------- */ + +function currentOptions() { + // Layout/style directives live in the source (parsed on render); only the + // preview-overlay toggles are passed as render overrides here. + return { + theme: themeKeyFromSource(), + mode: modeFromSource(), + debug: el("opt-debug").checked, + layout_options: { + animate: el("opt-animate").checked, + directional: el("opt-directional").checked, + }, + }; +} + +function showError(msg) { + const box = el("error"); + if (!msg) { + box.classList.add("hidden"); + box.textContent = ""; + } else { + box.textContent = msg; + box.classList.remove("hidden"); + } +} + +function doRender() { + if (!pyRender) return; + // Snapshot inputs before the setTimeout so we render the state at the moment + // doRender fired, not what the editor contains when the callback runs. + const mmd = editor.getValue(); + const optsJson = JSON.stringify(currentOptions()); + // Mark the preview as rendering and yield one paint cycle so the browser can + // show the dimmed state before the synchronous Python call blocks the thread. + el("preview").classList.add("rendering"); + setTimeout(() => { + let res; + try { + res = JSON.parse(pyRender(mmd, optsJson)); + } catch (err) { + el("preview").classList.remove("rendering"); + showError("Render runtime error: " + err); + return; + } + el("preview").classList.remove("rendering"); + if (res.ok) { + showError(null); + lastSvg = res.svg; + el("preview").innerHTML = res.svg; + applyZoom(); + } else { + // Keep the last good render visible; just report the problem. + showError(friendlyRenderError(res.error)); + } + refreshLineColors(); + syncDirectiveControls(); + reapplySelection(); + }, 0); +} + +/* --------------------------------- zoom -------------------------------- */ + +// null = fit-to-view (responsive); a number is a scale factor on the SVG's +// intrinsic (viewBox) size. Re-applied after every render since the is +// replaced. +let zoomFactor = null; +const ZOOM_STEP = 1.25; +const ZOOM_MIN = 0.1; +const ZOOM_MAX = 8; + +function viewBoxWidth(svg) { + const m = (svg.getAttribute("viewBox") || "").match( + /[-\d.]+ [-\d.]+ ([-\d.]+) [-\d.]+/, + ); + return m ? parseFloat(m[1]) : svg.getBoundingClientRect().width; +} + +function applyZoom() { + const svg = el("preview").querySelector("svg"); + if (!svg) return; + el("preview").classList.toggle("zoomed", zoomFactor !== null); + if (zoomFactor === null) { + svg.style.maxWidth = "100%"; + svg.style.width = ""; + svg.style.height = ""; + } else { + svg.style.maxWidth = "none"; + svg.style.width = viewBoxWidth(svg) * zoomFactor + "px"; + svg.style.height = "auto"; + } +} + +function currentScale() { + const svg = el("preview").querySelector("svg"); + if (!svg) return 1; + return svg.getBoundingClientRect().width / viewBoxWidth(svg); +} + +function zoomBy(step) { + // Starting from fit, continue smoothly from the currently displayed scale. + const base = zoomFactor === null ? currentScale() : zoomFactor; + zoomFactor = Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, base * step)); + applyZoom(); +} + +function zoomFit() { + zoomFactor = null; + applyZoom(); +} + +/* ------------------------- directive controls ------------------------- */ + +// Controls that change the map's layout or styling are source-of-truth: each +// writes a `%%metro :` directive into the editor and is synced back from +// it, so the change is saved with the map and travels with export/share. (The +// animate/chevrons/debug toggles are preview overlays handled separately.) + +// The selector picks the brand (palette identity); light/dark is the separate +// Mode control, so brand and mode stay independent. Legacy sources may still +// carry `%%metro style: dark`, which reads back as the nfcore brand. +const THEME_KEYS = ["nfcore", "seqera"]; +const STYLE_ALIASES = { dark: "nfcore" }; + +// [control id, directive key, kind] +const DIRECTIVE_CONTROLS = [ + ["opt-line-spread", "line_spread", "choice"], + ["opt-diamond-style", "diamond_style", "choice"], + ["opt-line-order", "line_order", "choice"], + ["opt-center-ports", "center_ports", "bool"], + ["opt-compact-offsets", "compact_offsets", "bool"], + ["opt-track-gap", "track_gap", "number"], + ["opt-font-scale", "font_scale", "number"], + ["opt-fold-threshold", "fold_threshold", "number"], + ["opt-x-spacing", "x_spacing", "number"], + ["opt-y-spacing", "y_spacing", "number"], +]; + +function readDirective(key) { + const m = editor + .getValue() + .match(new RegExp(`^\\s*%%metro\\s+${key}:\\s*(.+?)\\s*$`, "m")); + return m ? m[1] : null; +} + +// value === null removes the directive line; otherwise it is set (inserted +// after a %%metro title: line if present, else at the top - directives must +// precede the graph block). +function setDirective(key, value) { + const lines = editor.getValue().split("\n"); + const idx = lines.findIndex((l) => + new RegExp(`^\\s*%%metro\\s+${key}:`).test(l), + ); + if (value === null) { + if (idx >= 0) + editor.replaceRange("", { line: idx, ch: 0 }, { line: idx + 1, ch: 0 }); + } else if (idx >= 0) { + const updated = lines[idx].replace( + new RegExp(`(%%metro\\s+${key}:\\s*).*`), + `$1${value}`, + ); + editor.replaceRange( + updated, + { line: idx, ch: 0 }, + { line: idx, ch: lines[idx].length }, + ); + } else { + const titleIdx = lines.findIndex((l) => /^\s*%%metro\s+title:/.test(l)); + const at = titleIdx >= 0 ? titleIdx + 1 : 0; + editor.replaceRange(`%%metro ${key}: ${value}\n`, { line: at, ch: 0 }); + } +} + +function applyDirectiveControl(id, key, kind) { + const control = el(id); + let value; + if (kind === "bool") { + value = control.checked ? "true" : null; + } else { + const raw = control.value.trim(); + value = raw === "" ? null : raw; + } + setDirective(key, value); + doRender(); +} + +function themeKeyFromSource() { + const value = (readDirective("style") || "").toLowerCase(); + const key = STYLE_ALIASES[value] || value; + return THEME_KEYS.includes(key) ? key : "nfcore"; +} + +function setThemeDirective(themeKey) { + setDirective("style", themeKey); + doRender(); +} + +// Render mode (light/dark) is a property of the produced map, distinct from the +// playground UI theme. It defaults to the UI theme but is set independently via +// the Mode control, persisted as %%metro mode: so it travels with the map. +function modeFromSource() { + const value = (readDirective("mode") || "").toLowerCase(); + if (value === "light" || value === "dark") return value; + return document.documentElement.dataset.theme === "light" ? "light" : "dark"; +} + +// The preview SVG inherits the preview container's color-scheme (it carries no +// scheme of its own), so its light-dark() chrome shows the chosen render mode +// regardless of the surrounding UI theme. +function applyPreviewMode(mode) { + el("preview").style.colorScheme = mode; +} + +function setModeDirective(mode) { + setDirective("mode", mode); + applyPreviewMode(mode); + doRender(); +} + +const _TRUE = new Set(["true", "yes", "1"]); + +function syncDirectiveControls() { + el("opt-theme").value = themeKeyFromSource(); + const mode = modeFromSource(); + el("opt-mode").value = mode; + applyPreviewMode(mode); + for (const [id, key, kind] of DIRECTIVE_CONTROLS) { + const value = readDirective(key); + if (kind === "bool") + el(id).checked = _TRUE.has((value || "").toLowerCase()); + else el(id).value = value ?? ""; + } +} + +/* ----------------------------- line colors ---------------------------- */ + +const LINE_RE = + /^\s*%%metro\s+line:\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*(#[0-9a-fA-F]{3,8})/; + +function expandHex(hex) { + if (/^#[0-9a-fA-F]{3}$/.test(hex)) { + return "#" + hex.slice(1).replace(/./g, (c) => c + c); + } + return /^#[0-9a-fA-F]{6}$/.test(hex) ? hex : null; +} + +function parseLineDefs() { + const defs = []; + const doc = editor.getValue().split("\n"); + doc.forEach((line, n) => { + const m = line.match(LINE_RE); + if (m) defs.push({ line: n, id: m[1], name: m[2], color: m[3] }); + }); + return defs; +} + +// Rebuild the swatch row only when the set of lines changes, not when a colour +// changes: tearing down a live + + + nf-metro playground (test harness) + + + + + +
+
+
+
+ + + + Insert + + + + + + Lines +
+
+ + +
+ +
+
+ + + + + + +
+ +
+ Export + + + + + + +
+ +
+ Advanced options +
+ Layout + + + + + + + + + +
+
+ +
+ Edit map + + + + + + + Click an element to select it. +
+ +
+ +
+ + + +
+ + + + + +
+
+

Starting Python runtime…

+

+ First load fetches the WASM runtime (~10 MB); subsequent + loads are cached. +

+
+
+
+ + + + + + + + +
+ + + + + + + + diff --git a/website/public/playground/style.css b/website/public/playground/style.css new file mode 100644 index 000000000..0f1bfa087 --- /dev/null +++ b/website/public/playground/style.css @@ -0,0 +1,746 @@ +:root { + color-scheme: dark; + --bg: #0b0e14; + --panel: #11161f; + --panel-2: #161c27; + --border: #232b39; + --text: #c9d1d9; + --muted: #7d8794; + --accent: #2dd4bf; + --accent-press: #14b8a6; + --danger: #f0716f; + --danger-bg: #2a1414; +} + +/* Light mode mirrors the docs site. `color-scheme` is also what the inlined + preview SVG inherits, so its light-dark() chrome follows the toggle. */ +:root[data-theme="light"] { + color-scheme: light; + --bg: #ffffff; + --panel: #f6f7f9; + --panel-2: #eceef1; + --border: #d8dde4; + --text: #1f2530; + --muted: #5a6472; + --accent: #0d9488; + --accent-press: #0f766e; + --danger: #c0392b; + --danger-bg: #fdeaea; +} + +* { + box-sizing: border-box; +} + +.theme-toggle { + margin-left: auto; + width: 32px; + height: 28px; + background: transparent; + border: 1px solid var(--border); + border-radius: 6px; + color: var(--text); + font-size: 14px; + line-height: 1; + cursor: pointer; +} +.theme-toggle:hover { + border-color: var(--accent); +} + +html, +body { + margin: 0; + height: 100%; + background: var(--bg); + color: var(--text); + font: + 14px/1.45 -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Helvetica, + Arial, + sans-serif; +} + +body { + display: flex; + flex-direction: column; +} + +#bar { + display: flex; + align-items: center; + gap: 10px 18px; + padding: 10px 16px; + background: var(--panel); + border-bottom: 1px solid var(--border); +} + +.brand { + font-weight: 600; + font-size: 15px; + letter-spacing: 0.2px; +} +.brand .muted { + color: var(--muted); + font-weight: 400; +} +.brand .beta { + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.7px; + color: var(--accent); + border: 1px solid var(--accent); + border-radius: 10px; + padding: 1px 7px; + vertical-align: middle; +} + +.pane-toolbar { + display: flex; + align-items: center; + gap: 8px 12px; + flex-wrap: wrap; + padding: 8px 12px; + background: var(--panel); + border-bottom: 1px solid var(--border); + min-height: 41px; +} + +.pane-toolbar label { + display: inline-flex; + align-items: center; + gap: 6px; + color: var(--muted); + font-size: 12px; + white-space: nowrap; +} +.pane-toolbar label.check { + gap: 5px; +} + +.advanced { + border-bottom: 1px solid var(--border); +} +.advanced > summary { + list-style: none; + cursor: pointer; + user-select: none; + padding: 7px 12px; + font-size: 12px; + color: var(--muted); + background: var(--panel); + display: flex; + align-items: center; + gap: 6px; +} +.advanced > summary::-webkit-details-marker { + display: none; +} +.advanced > summary::before { + content: "▸"; + font-size: 10px; + transition: transform 0.12s ease; +} +.advanced[open] > summary::before { + transform: rotate(90deg); +} +.advanced > summary:hover { + color: var(--text); +} +.advanced .advanced-controls { + border-bottom: none; +} + +.swatches { + display: flex; + align-items: center; + gap: 6px; + flex-wrap: wrap; +} +.swatch { + display: inline-flex; + align-items: center; + gap: 4px; + font-size: 11px; + color: var(--muted); +} +.swatch input[type="color"] { + width: 20px; + height: 20px; + padding: 0; + border: 1px solid var(--border); + border-radius: 4px; + background: none; + cursor: pointer; +} +.swatch input[type="color"]::-webkit-color-swatch-wrapper { + padding: 2px; +} +.swatch input[type="color"]::-webkit-color-swatch { + border: none; + border-radius: 2px; +} +.swatches:empty::after { + content: "none defined"; + color: var(--muted); + font-size: 11px; + font-style: italic; +} + +.group-label { + color: var(--muted); + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.6px; +} +.sep { + width: 1px; + align-self: stretch; + background: var(--border); + margin: 2px 4px; +} + +select, +input[type="number"] { + background: var(--panel-2); + color: var(--text); + border: 1px solid var(--border); + border-radius: 6px; + padding: 4px 6px; + font: inherit; + font-size: 12px; +} +input[type="number"] { + width: 68px; +} +input[type="checkbox"] { + accent-color: var(--accent); +} + +button { + background: var(--panel-2); + color: var(--text); + border: 1px solid var(--border); + border-radius: 6px; + padding: 5px 10px; + font: inherit; + font-size: 12px; + cursor: pointer; +} +button:hover { + border-color: var(--accent); +} +button:active { + background: var(--accent-press); + border-color: var(--accent-press); + color: #02120f; +} +button:disabled { + opacity: 0.45; + cursor: not-allowed; +} + +#split { + flex: 1; + display: grid; + grid-template-columns: minmax(280px, 38%) 1fr; + min-height: 0; +} + +#editor-pane, +#preview-pane { + position: relative; + min-width: 0; + min-height: 0; + display: flex; + flex-direction: column; +} +#editor-pane { + border-right: 1px solid var(--border); +} + +.CodeMirror { + flex: 1; + height: auto; + font-family: "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace; + font-size: 13px; + background: var(--bg); + color: var(--text); +} +.CodeMirror-gutters { + background: var(--panel); + border-right: 1px solid var(--border); +} +.CodeMirror-cursor { + border-left: 2px solid var(--text); +} +.CodeMirror-focused .CodeMirror-cursor { + border-left: 2px solid var(--accent); +} +.CodeMirror-selected { + background: #2a3344 !important; +} +.CodeMirror-focused .CodeMirror-selected { + background: #31507a !important; +} +.CodeMirror-line::selection, +.CodeMirror-line > span::selection { + background: #31507a; +} +:root[data-theme="light"] .CodeMirror-selected { + background: #d5dbe6 !important; +} +:root[data-theme="light"] .CodeMirror-focused .CodeMirror-selected { + background: #b9cdf0 !important; +} +.cm-s-default .cm-comment { + color: #5c6b7a; +} +.cm-metro-directive { + color: var(--accent); + font-weight: 600; +} +.cm-metro-keyword { + color: #c792ea; +} +.cm-metro-line { + color: #ffcb6b; +} +.cm-metro-arrow { + color: #82aaff; +} + +#error { + background: var(--danger-bg); + color: var(--danger); + border-top: 1px solid var(--danger); + padding: 8px 12px; + font-family: "SF Mono", Menlo, monospace; + font-size: 12px; + white-space: pre-wrap; + max-height: 30%; + overflow: auto; +} + +#preview-pane { + background: var(--bg); +} +#preview { + flex: 1; + overflow: auto; + padding: 18px; + display: flex; + align-items: flex-start; + justify-content: center; +} +/* When zoomed past the viewport, left-align so the start stays scrollable. */ +#preview.zoomed { + justify-content: flex-start; +} +/* flex-shrink:0 so an explicit zoom width isn't shrunk back to the container. */ +#preview svg { + max-width: 100%; + height: auto; + flex-shrink: 0; +} +/* Dim the preview while the Python renderer is running. The class is set just + before a setTimeout(0) so the browser gets one paint cycle to show it. */ +#preview.rendering { + opacity: 0.45; + cursor: wait; +} + +#zoom-controls { + position: absolute; + right: 16px; + bottom: 16px; + display: flex; + gap: 1px; + background: var(--border); + border: 1px solid var(--border); + border-radius: 8px; + overflow: hidden; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4); + z-index: 5; +} +#zoom-controls button { + border: none; + border-radius: 0; + background: var(--panel-2); + color: var(--text); + min-width: 34px; + height: 30px; + font-size: 15px; + line-height: 1; + cursor: pointer; +} +#zoom-controls button#zoom-fit { + font-size: 12px; +} +#zoom-controls button:hover { + background: var(--accent-press); + color: #02120f; +} + +.overlay { + position: absolute; + inset: 0; + background: rgba(11, 14, 20, 0.92); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 10px; + text-align: center; + padding: 24px; +} +.spinner { + width: 34px; + height: 34px; + border: 3px solid var(--border); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.muted { + color: var(--muted); +} +.small { + font-size: 12px; +} +.hidden { + display: none !important; +} + +#toast { + position: fixed; + bottom: 18px; + left: 50%; + transform: translateX(-50%); + background: var(--panel-2); + border: 1px solid var(--accent); + color: var(--text); + padding: 8px 16px; + border-radius: 8px; + font-size: 13px; + box-shadow: 0 6px 24px rgba(0, 0, 0, 0.4); + z-index: 20; +} + +.report-btn { + margin-left: auto; + border-color: var(--danger); + color: var(--danger); +} +.report-btn:hover { + border-color: var(--danger); + background: var(--danger-bg); +} + +.build-hint { + font-family: "SF Mono", Menlo, Consolas, monospace; + text-decoration: none; + opacity: 0.5; +} +.build-hint:hover { + opacity: 1; + text-decoration: underline; +} + +.modal-overlay { + position: fixed; + inset: 0; + background: rgba(4, 6, 10, 0.66); + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + z-index: 30; +} +.modal { + width: min(560px, 100%); + background: var(--panel); + border: 1px solid var(--border); + border-radius: 12px; + padding: 20px 22px; + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5); +} +.modal h2 { + margin: 0 0 8px; + font-size: 17px; +} +.modal p { + margin: 0 0 14px; +} +.modal label { + display: block; + margin-bottom: 6px; + font-size: 13px; + color: var(--text); +} +.modal label .req { + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + color: var(--danger); +} +.modal textarea { + width: 100%; + background: var(--bg); + color: var(--text); + border: 1px solid var(--border); + border-radius: 8px; + padding: 10px; + font: inherit; + font-size: 13px; + resize: vertical; +} +.modal textarea:focus { + outline: none; + border-color: var(--accent); +} +.modal-actions { + display: flex; + justify-content: flex-end; + gap: 10px; + margin-top: 16px; +} +.modal-actions button.ghost { + color: var(--muted); +} +.modal a { + color: var(--accent); +} +.modal code { + background: var(--bg); + border: 1px solid var(--border); + border-radius: 4px; + padding: 1px 5px; + font-size: 12px; +} +.modal-error { + margin-top: 12px; + color: var(--danger); + background: var(--danger-bg); + border: 1px solid var(--danger); + border-radius: 8px; + padding: 8px 10px; + font-size: 12px; + white-space: pre-wrap; +} + +.modal input[type="file"] { + width: 100%; + color: var(--text); + font-size: 12px; +} +.logo-preview { + display: block; + margin-top: 12px; + max-width: 100%; + max-height: 120px; + background: repeating-conic-gradient(#80808033 0% 25%, transparent 0% 50%) + 50% / 16px 16px; + border: 1px solid var(--border); + border-radius: 6px; +} + +.mode-btn[aria-pressed="true"] { + background: var(--accent); + border-color: var(--accent); + color: #02120f; +} +.mode-btn[aria-pressed="true"]:hover { + border-color: var(--accent); +} + +/* Hit-target affordance while a build mode is active. */ +#preview.mode-add-station [data-section-id], +#preview.mode-add-edge [data-station-id] { + cursor: crosshair; +} +#preview.mode-add-station svg, +#preview.mode-add-edge svg { + cursor: default; +} + +/* Selection + connect-source highlight, applied to concrete SVG shapes. */ +#preview .nfm-sel { + outline: 2px solid var(--accent); + outline-offset: 3px; +} +#preview .nfm-edge-src { + outline: 2px dashed #ffcb6b; + outline-offset: 3px; +} + +.prop-panel { + position: absolute; + right: 16px; + bottom: 16px; + width: 248px; + max-height: calc(100% - 110px); + overflow: auto; + background: var(--panel); + border: 1px solid var(--border); + border-radius: 10px; + box-shadow: 0 10px 32px rgba(0, 0, 0, 0.45); + padding: 12px 14px; + z-index: 15; +} +.prop-head { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; +} +.prop-kind { + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.6px; + color: var(--accent); +} +.prop-head button.ghost { + border: none; + background: none; + color: var(--muted); + font-size: 18px; + line-height: 1; + padding: 0 4px; +} +.prop-row { + display: flex; + flex-direction: column; + gap: 4px; + margin-bottom: 10px; +} +.prop-row label { + font-size: 11px; + color: var(--muted); +} +.prop-row input[type="text"] { + background: var(--panel-2); + color: var(--text); + border: 1px solid var(--border); + border-radius: 6px; + padding: 5px 7px; + font: inherit; + font-size: 12px; +} +.prop-row input[type="text"]:focus { + outline: none; + border-color: var(--accent); +} +.prop-grid { + display: flex; + gap: 8px; +} +.prop-grid input[type="number"] { + width: 100%; +} +.prop-edges { + display: flex; + flex-direction: column; + gap: 6px; +} +.prop-edge { + display: flex; + align-items: center; + gap: 6px; + font-size: 11px; +} +.prop-edge .ends { + flex: 1; + color: var(--text); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.prop-edge select { + flex: 0 0 auto; +} +.prop-edge button.add { + padding: 2px 7px; +} +.prop-edge button.del { + color: var(--danger); + border-color: var(--danger); + padding: 2px 7px; +} +.prop-empty { + color: var(--muted); + font-style: italic; + font-size: 12px; +} +.prop-delete { + width: 100%; + margin-top: 4px; + color: var(--danger); + border-color: var(--danger); +} +.prop-delete:hover { + background: var(--danger-bg); + border-color: var(--danger); +} +.prop-action { + width: 100%; + margin-top: 4px; +} + +.line-picker { + position: absolute; + z-index: 18; + min-width: 140px; + background: var(--panel); + border: 1px solid var(--border); + border-radius: 8px; + box-shadow: 0 10px 32px rgba(0, 0, 0, 0.5); + padding: 6px; +} +.line-picker .picker-title { + font-size: 11px; + color: var(--muted); + padding: 2px 6px 6px; +} +.line-picker button { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + border: none; + background: none; + text-align: left; + padding: 5px 6px; + border-radius: 6px; +} +.line-picker button:hover { + background: var(--panel-2); +} +.line-picker .dot { + width: 12px; + height: 12px; + border-radius: 50%; + flex: 0 0 auto; + border: 1px solid var(--border); +} + +@media (max-width: 720px) { + #split { + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + } + #editor-pane { + border-right: none; + border-bottom: 1px solid var(--border); + } +} diff --git a/website/public/playground/sw.js b/website/public/playground/sw.js new file mode 100644 index 000000000..6b2e5e630 --- /dev/null +++ b/website/public/playground/sw.js @@ -0,0 +1,76 @@ +"use strict"; + +// Keep in sync with PYODIDE_VERSION in app.js. Bumping this constant +// changes the cache name, which causes the activate handler to evict all +// assets from the previous version. +const PYODIDE_VERSION = "v0.27.2"; +const PYODIDE_BASE = `https://cdn.jsdelivr.net/pyodide/${PYODIDE_VERSION}/full/`; +const CACHE_NAME = `nfm-playground-${PYODIDE_VERSION}`; + +// The deploy stamps a content hash into each dev wheel's build tag, so a +// wheel URL names one immutable build and is safe to cache indefinitely. +const WHEEL_URL = /\/wheels\/[^/]+\.whl$/; + +function shouldCache(url) { + // wheels/index.json is fetched with cache: "no-store" by app.js for wheel + // discovery, so it is excluded by WHEEL_URL requiring the .whl suffix. + if (url.startsWith(PYODIDE_BASE)) return true; + return WHEEL_URL.test(url); +} + +self.addEventListener("install", (event) => { + self.skipWaiting(); + // WASM and other large assets are lazily cached on first fetch once the SW + // controls the page; only the entry script is precached here. + event.waitUntil( + (async () => { + const cache = await caches.open(CACHE_NAME); + try { + await cache.add(`${PYODIDE_BASE}pyodide.js`); + } catch (_) { + // Don't fail install when the CDN is unreachable. + } + })(), + ); +}); + +self.addEventListener("activate", (event) => { + event.waitUntil( + (async () => { + const keys = await caches.keys(); + await Promise.all( + keys + .filter((k) => k.startsWith("nfm-playground-") && k !== CACHE_NAME) + .map((k) => caches.delete(k)), + ); + await self.clients.claim(); + })(), + ); +}); + +self.addEventListener("fetch", (event) => { + const url = event.request.url; + if (!shouldCache(url)) return; + + event.respondWith( + (async () => { + const cache = await caches.open(CACHE_NAME); + const cached = await cache.match(url); + if (cached) return cached; + const response = await fetch(event.request); + if (response.ok) { + await cache.put(url, response.clone()); + // A fresh wheel hash supersedes earlier builds; drop their entries so + // the cache holds only the current wheel rather than one per deploy. + if (WHEEL_URL.test(url)) { + for (const req of await cache.keys()) { + if (req.url !== url && WHEEL_URL.test(req.url)) { + await cache.delete(req); + } + } + } + } + return response; + })(), + ); +}); diff --git a/website/src/assets/logo.svg b/website/src/assets/logo.svg new file mode 100644 index 000000000..c9e369527 --- /dev/null +++ b/website/src/assets/logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/website/src/assets/seqera-logo.svg b/website/src/assets/seqera-logo.svg new file mode 100644 index 000000000..d24b6dc87 --- /dev/null +++ b/website/src/assets/seqera-logo.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/src/components/EditLink.astro b/website/src/components/EditLink.astro new file mode 100644 index 000000000..9e6a4f831 --- /dev/null +++ b/website/src/components/EditLink.astro @@ -0,0 +1,21 @@ +--- +/* docs/ is symlinked into src/content/docs, so Starlight derives each page's + filePath as src/content/docs/ and editLink.baseUrl concatenates to a + path that doesn't exist on GitHub (the symlinked path isn't editable either). + Rewrite the edit URL to the real repo file (docs/) before the default + link renders; pages outside the docs collection keep Starlight's own URL. + + This reads Starlight route internals (starlightRoute.entry.filePath and + editUrl). Re-check on a Starlight major upgrade: if either is renamed or + editUrl becomes a getter, the rewrite would silently stop applying. */ +import Default from "@astrojs/starlight/components/EditLink.astro"; +import { GITHUB_URL } from "../site"; + +const route = Astro.locals.starlightRoute; +const match = route.entry.filePath.match(/src\/content\/docs\/(.+)$/); +if (route.editUrl && match) { + route.editUrl = new URL(`${GITHUB_URL}/edit/main/docs/${match[1]}`); +} +--- + + diff --git a/website/src/components/GitHubLink.astro b/website/src/components/GitHubLink.astro new file mode 100644 index 000000000..876ed2b8c --- /dev/null +++ b/website/src/components/GitHubLink.astro @@ -0,0 +1,31 @@ +--- +/* Version-aware GitHub link for the header. Each version is its own build, so + the base segment (latest | dev | x.y.z) identifies what's being viewed and + the link points at the matching place on GitHub: a release's tag page for a + pinned version, the newest release for `latest`, the repo for dev/local. */ +import { base, SITE_BASE, GITHUB_URL } from "../site"; + +const segment = base.startsWith(SITE_BASE) + ? base.slice(SITE_BASE.length).replace(/\/$/, "") + : ""; +const version = segment || "dev"; + +let href = GITHUB_URL; +let label = "View source on GitHub"; +if (version === "latest") { + href = `${GITHUB_URL}/releases/latest`; + label = "View the latest release on GitHub"; +} else if (version !== "dev") { + href = `${GITHUB_URL}/releases/tag/v${version}`; + label = `View v${version} on GitHub`; +} +--- + + + + diff --git a/website/src/components/Head.astro b/website/src/components/Head.astro new file mode 100644 index 000000000..8b9679907 --- /dev/null +++ b/website/src/components/Head.astro @@ -0,0 +1,34 @@ +--- +/* Emit the Degular @font-face + preload via Astro's Fonts API. `` must + live in , and Starlight only allows head *components* through an + override - hence this thin wrapper. preload ensures the heading font is + fetched before first paint, avoiding the page-title FOUT. */ +import Default from "@astrojs/starlight/components/Head.astro"; +import { Font } from "astro:assets"; +import { ClientRouter } from "astro:transitions"; +--- + + + +{/* SPA-style navigation: fetch + swap the DOM in place instead of a full + reload, so clicks feel instant. Enabling also turns on + Astro's link prefetching (defaults to `hover`), so the next page is usually + already cached by the time it's clicked. astro-mermaid re-runs on + astro:after-swap, so diagrams survive navigation. */} + +{/* A swap copies the incoming document's `data-theme` (the server default, + "dark") onto , and Starlight's pre-paint theme script only runs on a + full load, so the visitor's resolved theme is lost on client-side navigation. + Re-resolve and re-apply it after each swap. The listener is on `document`, + which survives swaps, so registering once holds. */} + diff --git a/website/src/components/Header.astro b/website/src/components/Header.astro new file mode 100644 index 000000000..943bb4f72 --- /dev/null +++ b/website/src/components/Header.astro @@ -0,0 +1,86 @@ +--- +import config from "virtual:starlight/user-config"; +import Search from "virtual:starlight/components/Search"; +import ThemeSelect from "virtual:starlight/components/ThemeSelect"; +import Logo from "../assets/logo.svg"; +import VersionSwitcher from "./VersionSwitcher.astro"; +import GitHubLink from "./GitHubLink.astro"; +import { base } from "../site"; + +const { siteTitleHref } = Astro.locals.starlightRoute; + +const shouldRenderSearch = + config.pagefind || + config.components.Search !== "@astrojs/starlight/components/Search.astro"; + +const links = [ + { label: "Guide", href: `${base}guide/` }, + { label: "Gallery", href: `${base}gallery/` }, + { label: "Pipelines", href: `${base}pipelines/` }, + // reload:true forces a full navigation so CDN scripts (CodeMirror, Pyodide) + // and app.js re-initialise from scratch instead of being skipped by ClientRouter. + { label: "Playground", href: `${base}playground/`, reload: true }, +]; +--- + +
+
+ + +
+ +
+ + + {shouldRenderSearch && } + + +
+ +
+ {shouldRenderSearch && } + +
+
+ + diff --git a/website/src/components/Metro.astro b/website/src/components/Metro.astro new file mode 100644 index 000000000..a55dc30a7 --- /dev/null +++ b/website/src/components/Metro.astro @@ -0,0 +1,203 @@ +--- +import { Code } from "@astrojs/starlight/components"; +import ZoomableSVG from "@components/ZoomableSVG.astro"; + +// One primitive for every nf-metro map in the docs. It renders up to three +// uniformly-framed sections for a committed `.mmd` source - the Mermaid source, +// the CLI command, and the live map - at build time (no pre-generated SVGs). +// +// `purpose` is a shorthand that sets all three at once for a common intent; +// the `mmd` / `command` / `render` props override individual sections. Each +// section state is "open" (shown, expanded), "collapsed" (shown, folded), or +// false (hidden). +// +// `clean` bypasses all sections and outputs just the inline SVG wrapped in +// ZoomableSVG - for embedding directly in a hero or other contexts that need +// the map without any
chrome. Ignores purpose/mmd/command/render. +// +// The rendered SVG arrives through the `?metro` Vite plugin as an imported +// module string. Importing it (rather than rendering to a runtime string and +// using set:html) is what lets its `light-dark()` chrome follow the page theme +// and keeps its embedded `` logo through the production HTML build. + +type SectionState = "open" | "collapsed" | false; + +interface Props { + // Repo-relative path to the source, e.g. "examples/guide/01_minimal.mmd". + src: string; + // Intent preset for the three sections (overridden by the per-section props). + // teach - source + map open, no command (the default; guide examples). + // showcase - map open, source and command available but folded (gallery). + // reference - command + map open, source folded. + purpose?: "teach" | "showcase" | "reference"; + // Per-section overrides. + mmd?: SectionState; + command?: SectionState; + render?: SectionState; + // Render with the --debug layout overlay. + debug?: boolean; + // Treat the source as a Nextflow DAG and convert it (--from-nextflow). + fromNextflow?: boolean; + // title for the source block; defaults to the src path. + title?: string; + // Output only the inline SVG (in a ZoomableSVG); no
chrome. + // Ignores purpose/mmd/command/render. For hero and embed contexts. + clean?: boolean; +} + +const PURPOSES: Record< + NonNullable, + { mmd: SectionState; command: SectionState; render: SectionState } +> = { + teach: { mmd: "open", command: false, render: "open" }, + showcase: { mmd: "collapsed", command: "collapsed", render: "open" }, + reference: { mmd: "collapsed", command: "open", render: "open" }, +}; + +const { + src, + purpose = "teach", + mmd, + command, + render, + debug = false, + fromNextflow = false, + title, + clean = false, +} = Astro.props; + +const preset = PURPOSES[purpose]; +const mmdState = clean ? false : (mmd ?? preset.mmd); +const commandState = clean ? false : (command ?? preset.command); +const renderState = clean ? "open" : (render ?? preset.render); + +if (fromNextflow && debug) { + // No combined `?metro&nextflow&debug` glob exists; fail loudly rather than + // silently render one mode and drop the other. + throw new Error( + `: \`debug\` and \`fromNextflow\` cannot be combined.`, + ); +} + +// Committed source files live one level above the Astro project. Each glob is +// scoped to what its render mode can consume, so the build only shells out to +// nf-metro for maps a page can actually request: +// - raw source: any committed .mmd (cheap, just text). +// - plain render: metro maps under examples/ and the top-level test fixtures +// (NOT tests/fixtures/nextflow, whose DAGs are not valid metro). +// - debug overlay: only the top-level examples that the guide demonstrates it on. +// - Nextflow conversion: only the DAG fixtures. +const rawSources = { + ...import.meta.glob("../../../examples/**/*.mmd", { query: "?raw", import: "default" }), + ...import.meta.glob("../../../tests/fixtures/**/*.mmd", { query: "?raw", import: "default" }), +}; +const svgSources = { + ...import.meta.glob("../../../examples/**/*.mmd", { query: "?metro", import: "default" }), + ...import.meta.glob("../../../tests/fixtures/*.mmd", { query: "?metro", import: "default" }), +}; +const svgDebugSources = import.meta.glob("../../../examples/**/*.mmd", { + query: "?metro&debug", + import: "default", +}); +const svgNextflowSources = import.meta.glob( + "../../../tests/fixtures/nextflow/**/*.mmd", + { query: "?metro&nextflow", import: "default" }, +); + +// Each render mode pairs its source map with the scope named in the not-found +// error, so the selection and the message can't drift apart. +type Sources = Record Promise>; +const RENDER_MODES: Record = { + plain: { + mods: svgSources, + scope: "examples/** and tests/fixtures/*.mmd (top level only)", + }, + debug: { mods: svgDebugSources, scope: "examples/**" }, + nextflow: { mods: svgNextflowSources, scope: "tests/fixtures/nextflow/**" }, +}; +const renderMode = fromNextflow ? "nextflow" : debug ? "debug" : "plain"; + +const key = `../../../${src}`; + +function resolve(mods: Sources, what: string, scope: string) { + const loader = mods[key]; + if (!loader) { + throw new Error( + `: no ${what} found. Globbed: ${scope}. ` + + `If this is a .mmd in a new subdirectory, extend the matching glob in Metro.astro.`, + ); + } + return loader(); +} + +const source = + mmdState !== false + ? ((await resolve( + rawSources, + "source", + "examples/** and tests/fixtures/**", + )) as string) + : null; +const { mods: renderMods, scope: renderScope } = RENDER_MODES[renderMode]; +const svg = + renderState !== false + ? ((await resolve(renderMods, "render", renderScope)) as string) + : null; + +const stem = src.split("/").pop()?.replace(/\.mmd$/, "") ?? "map"; +const cliCommand = + `nf-metro render ${src} -o ${stem}.svg` + + (debug ? " --debug" : "") + + (fromNextflow ? " --from-nextflow" : ""); +const codeTitle = title ?? src; +--- + +{ + clean ? ( + + + + ) : ( +
+ { + mmdState !== false && ( +
+ Mermaid source + +
+ ) + } + { + commandState !== false && ( +
+ CLI command + +
+ ) + } + { + renderState !== false && ( +
+ Rendered map + + + +
+ ) + } +
+ ) +} + + diff --git a/website/src/components/PageFrame.astro b/website/src/components/PageFrame.astro new file mode 100644 index 000000000..6fb788dce --- /dev/null +++ b/website/src/components/PageFrame.astro @@ -0,0 +1,189 @@ +--- +/* Override of Starlight's PageFrame so we can render a full-width site footer + as a sibling of `.main-frame` (a direct child of `.page`, which is a + full-viewport flex column). This makes the footer span the whole width like + the navbar, escaping the sidebar-offset content pane. + + The Seqera wordmark's dark fill (#201637) is swapped to currentColor so it + adapts to light/dark mode; the green mark stays constant. */ +import MobileMenuToggle from "virtual:starlight/components/MobileMenuToggle"; +import { Icon } from "@astrojs/starlight/components"; +import seqeraSvgRaw from "../assets/seqera-logo.svg?raw"; +import { GITHUB_URL } from "../site"; + +const { hasSidebar } = Astro.locals.starlightRoute; +const seqeraSvg = seqeraSvgRaw.replace( + /fill="#201637"/g, + 'fill="currentColor"', +); +--- + +
+
+ { + hasSidebar && ( + + ) + } +
+ + +
+ + diff --git a/website/src/components/PageTitle.astro b/website/src/components/PageTitle.astro new file mode 100644 index 000000000..5c3a9134f --- /dev/null +++ b/website/src/components/PageTitle.astro @@ -0,0 +1,28 @@ +--- +/* Override of Starlight's PageTitle so the page title can carry inline code. + Starlight renders the frontmatter `title` as plain text, so backtick-wrapped + segments (e.g. `data-*`) would otherwise show their literal backticks. We + split the title on backticks and render the odd segments as . */ +const title = Astro.locals.starlightRoute.entry.data.title; +const segments = title.split("`"); +--- + +

+ { + segments.map((segment, i) => + i % 2 === 1 ? {segment} : segment, + ) + } +

+ + diff --git a/website/src/components/ThemeSelect.astro b/website/src/components/ThemeSelect.astro new file mode 100644 index 000000000..1119b2797 --- /dev/null +++ b/website/src/components/ThemeSelect.astro @@ -0,0 +1,57 @@ +--- +/* Replaces Starlight's auto/light/dark dropdown with a single sun/moon toggle. + Uses the same `starlight-theme` storage + data-theme mechanism. */ +--- + + + + + + diff --git a/website/src/components/VersionSwitcher.astro b/website/src/components/VersionSwitcher.astro new file mode 100644 index 000000000..2a0122055 --- /dev/null +++ b/website/src/components/VersionSwitcher.astro @@ -0,0 +1,90 @@ +--- +/* Documentation version picker. Each version is a separately-deployed directory + under SITE_BASE (/nf-metro/latest/, /nf-metro/dev/, /nf-metro/0.7.2/, plus the + frozen pre-Astro MkDocs builds). The list comes from versions.json at the + gh-pages root, maintained by the deploy workflow; selecting an entry navigates + to the equivalent page under that version. The server renders the current + version as a single option so there's no layout shift before the script runs; + the script fills in the rest and degrades to that static label if the manifest + is absent (e.g. local `astro dev`, where versions.json isn't served). */ +import { base, SITE_BASE } from "../site"; + +const segment = base.startsWith(SITE_BASE) + ? base.slice(SITE_BASE.length).replace(/\/$/, "") + : ""; +const current = segment || "dev"; +--- + + + + + + diff --git a/website/src/components/ZoomableSVG.astro b/website/src/components/ZoomableSVG.astro new file mode 100644 index 000000000..f3e1cdf45 --- /dev/null +++ b/website/src/components/ZoomableSVG.astro @@ -0,0 +1,235 @@ +--- +// Click-to-expand lightbox for an inline SVG: a native shell wrapping +// svg-pan-zoom for scroll-zoom and drag-pan. The SVG stays inline (not an ) +// so its light-dark() chrome follows the page color-scheme in WebKit; the +// off-the-shelf SVG lightboxes (e.g. starlight-image-zoom) only fit-to-viewport +// and don't pan/zoom into detail, which is why the dialog shell is local. +--- + +
+ + +
+ + + + diff --git a/website/src/content.config.ts b/website/src/content.config.ts new file mode 100644 index 000000000..4becdce48 --- /dev/null +++ b/website/src/content.config.ts @@ -0,0 +1,32 @@ +import { defineCollection } from "astro:content"; +import { docsLoader } from "@astrojs/starlight/loaders"; +import { docsSchema } from "@astrojs/starlight/schema"; +import { file } from "astro/loaders"; +import { z } from "astro:content"; + +const gallerySchema = z.object({ + order: z.number(), + title: z.string(), + src: z.string(), + description: z.string(), + category: z.string(), +}); + +const pipelinesSchema = z.object({ + title: z.string(), + src: z.string(), + repo_url: z.string().url(), + description: z.string(), +}); + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), + gallery: defineCollection({ + loader: file("./src/content/gallery.json"), + schema: gallerySchema, + }), + pipelines: defineCollection({ + loader: file("./src/content/pipelines.json"), + schema: pipelinesSchema, + }), +}; diff --git a/website/src/content/docs b/website/src/content/docs new file mode 120000 index 000000000..48c4a0c02 --- /dev/null +++ b/website/src/content/docs @@ -0,0 +1 @@ +../../../docs \ No newline at end of file diff --git a/website/src/fonts/Degular-Semibold.woff2 b/website/src/fonts/Degular-Semibold.woff2 new file mode 100644 index 000000000..52fbe1c45 Binary files /dev/null and b/website/src/fonts/Degular-Semibold.woff2 differ diff --git a/website/src/grammars/lark.tmLanguage.json b/website/src/grammars/lark.tmLanguage.json new file mode 100644 index 000000000..12aca7e8e --- /dev/null +++ b/website/src/grammars/lark.tmLanguage.json @@ -0,0 +1,119 @@ +{ + "displayName": "Lark grammar", + "name": "lark", + "scopeName": "source.lark", + "aliases": ["lark-grammar"], + "patterns": [ + { + "include": "#comment" + }, + { + "include": "#directive" + }, + { + "include": "#definition" + }, + { + "include": "#regexp" + }, + { + "include": "#string" + }, + { + "include": "#terminal-ref" + }, + { + "include": "#operator" + }, + { + "include": "#number" + } + ], + "repository": { + "comment": { + "match": "//.*$", + "name": "comment.line.double-slash.lark" + }, + "directive": { + "match": "%(ignore|import|declare|override|extend)\\b", + "name": "keyword.control.directive.lark" + }, + "definition": { + "comment": "A rule (lowercase) or terminal (uppercase) being defined, with an optional .priority, up to its colon.", + "match": "^[ \\t]*(?:(_?[A-Z][A-Z0-9_]*)|(_?\\??[a-z][a-z0-9_]*))(\\.\\-?[0-9]+)?[ \\t]*(:)", + "captures": { + "1": { + "name": "entity.name.type.terminal.lark" + }, + "2": { + "name": "entity.name.function.rule.lark" + }, + "3": { + "name": "constant.numeric.priority.lark" + }, + "4": { + "name": "keyword.operator.definition.lark" + } + } + }, + "regexp": { + "begin": "/(?![ \\t])", + "end": "/[imslux]*", + "name": "string.regexp.lark", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.lark" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.lark" + } + }, + "patterns": [ + { + "match": "\\\\.", + "name": "constant.character.escape.lark" + } + ] + }, + "string": { + "patterns": [ + { + "begin": "\"", + "end": "\"i?", + "name": "string.quoted.double.lark", + "patterns": [ + { + "match": "\\\\.", + "name": "constant.character.escape.lark" + } + ] + }, + { + "begin": "'", + "end": "'i?", + "name": "string.quoted.single.lark", + "patterns": [ + { + "match": "\\\\.", + "name": "constant.character.escape.lark" + } + ] + } + ] + }, + "terminal-ref": { + "match": "\\b_?[A-Z][A-Z0-9_]*\\b", + "name": "support.constant.terminal.lark" + }, + "operator": { + "match": "->|[|?*+~()\\[\\]]", + "name": "keyword.operator.lark" + }, + "number": { + "match": "\\b[0-9]+\\b", + "name": "constant.numeric.lark" + } + } +} diff --git a/website/src/grammars/metro.tmLanguage.json b/website/src/grammars/metro.tmLanguage.json new file mode 100644 index 000000000..fffc1f4b4 --- /dev/null +++ b/website/src/grammars/metro.tmLanguage.json @@ -0,0 +1,112 @@ +{ + "displayName": "Mermaid / nf-metro", + "name": "metro", + "scopeName": "source.metro", + "aliases": ["mmd", "metro-map"], + "patterns": [ + { + "include": "#metro-directive" + }, + { + "include": "#comment" + }, + { + "include": "#keyword" + }, + { + "include": "#edge" + }, + { + "include": "#edgelabel" + }, + { + "include": "#nodelabel" + }, + { + "include": "#color" + }, + { + "include": "#number" + } + ], + "repository": { + "metro-directive": { + "begin": "(%%metro)[ \\t]+([a-zA-Z_]+:)", + "beginCaptures": { + "1": { + "name": "keyword.control.directive.metro" + }, + "2": { + "name": "support.type.property-name.metro" + } + }, + "end": "$", + "patterns": [ + { + "include": "#color" + }, + { + "match": "\\|", + "name": "punctuation.separator.metro" + }, + { + "match": "\\b(true|false|left|right|top|bottom|bundle|centered|rails|solid|dashed|dotted|definition|span|straight|symmetric)\\b", + "name": "constant.language.metro" + }, + { + "include": "#number" + } + ] + }, + "comment": { + "match": "%%.*$", + "name": "comment.line.percentage.mermaid" + }, + "keyword": { + "match": "\\b(graph|flowchart|subgraph|end|direction|classDef|class|style|linkStyle)\\b|(?<=\\b(?:graph|flowchart)[ \\t])(LR|RL|TB|TD|BT)\\b", + "name": "keyword.control.mermaid" + }, + "edge": { + "match": "(-{2,3}>|<-{2,3}|-\\.->|-\\.-|={2,3}>|--|===|~~~)", + "name": "keyword.operator.edge.mermaid" + }, + "edgelabel": { + "begin": "\\|", + "end": "\\|", + "name": "string.other.edgelabel.mermaid", + "beginCaptures": { + "0": { + "name": "punctuation.definition.edgelabel.mermaid" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.definition.edgelabel.mermaid" + } + } + }, + "nodelabel": { + "begin": "[\\[({]", + "end": "[\\])}]", + "name": "string.quoted.nodelabel.mermaid", + "beginCaptures": { + "0": { + "name": "punctuation.definition.nodelabel.mermaid" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.definition.nodelabel.mermaid" + } + } + }, + "color": { + "match": "#[0-9A-Fa-f]{3,8}\\b", + "name": "constant.other.color.rgb-value.hex" + }, + "number": { + "match": "\\b[0-9]+(\\.[0-9]+)?\\b", + "name": "constant.numeric.mermaid" + } + } +} diff --git a/website/src/lib/rebase-links.mjs b/website/src/lib/rebase-links.mjs new file mode 100644 index 000000000..0bbbf4cda --- /dev/null +++ b/website/src/lib/rebase-links.mjs @@ -0,0 +1,42 @@ +import { visit } from "unist-util-visit"; + +const PROD_BASE = "/nf-metro/"; + +/** + * Rewrite production-base internal links to the build's actual base. + * + * Docs are authored with absolute `/nf-metro/` links - readable and + * stable regardless of where a build is deployed. Versioned deploys set a + * different base (e.g. `/nf-metro/dev/`, `/nf-metro/0.7.2/`), so the same page + * lives under that prefix instead. This rewrites the authored prefix to the + * active base so links resolve at runtime on every deploy, and so the links + * validator (a rehype pass, which runs after this remark pass) sees the + * resolved URL and validates it against real pages. + * + * @param {string} base The Astro `base`, always ending in `/`. + */ +export function remarkRebaseLinks({ base }) { + if (base === PROD_BASE) return () => {}; + + const rebase = (url) => + typeof url === "string" && url.startsWith(PROD_BASE) + ? base + url.slice(PROD_BASE.length) + : url; + + return (tree) => { + visit(tree, (node) => { + if (node.type === "link") { + node.url = rebase(node.url); + } else if ( + node.type === "mdxJsxFlowElement" || + node.type === "mdxJsxTextElement" + ) { + for (const attr of node.attributes ?? []) { + if (attr.type === "mdxJsxAttribute" && attr.name === "href") { + attr.value = rebase(attr.value); + } + } + } + }); + }; +} diff --git a/website/src/lib/render-metro.mjs b/website/src/lib/render-metro.mjs new file mode 100644 index 000000000..af9a585d3 --- /dev/null +++ b/website/src/lib/render-metro.mjs @@ -0,0 +1,264 @@ +/** + * Vite plugin that resolves `.mmd?metro` imports to the map's inline SVG, + * rendered at build time via the `nf-metro` CLI. The component imports + * maps through this plugin (`import.meta.glob(..., { query: '?metro' })`) so the + * SVG arrives as a normal module string: an inlined `` whose `light-dark()` + * chrome follows the page's color-scheme, and whose elements (e.g. an embedded + * legend logo ``) survive the production HTML build, which a runtime + * `set:html` string does not. + * + * Query flags select the render mode: `?metro&debug` adds the layout overlay, + * `?metro&nextflow` converts a Nextflow DAG first. + * + * Rendered SVGs are cached by SHA-256 of the (mode, source) pair under + * website/.metro-cache/ (git-ignored), so re-builds only shell out on the first + * encounter of each unique map. + * + * At the start of a production build the plugin pre-warms the cache by invoking + * `nf-metro render-many` once with all corpus maps, amortising Python startup + * across the full set rather than spawning one process per map. + * + * Requires `nf-metro` on PATH (activate the nf-core micromamba env). + */ + +import { createHash } from "node:crypto"; +import { execFileSync } from "node:child_process"; +import { + existsSync, + mkdirSync, + readdirSync, + readFileSync, + unlinkSync, + writeFileSync, +} from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const CACHE_DIR = join(__dirname, "../../.metro-cache"); +mkdirSync(CACHE_DIR, { recursive: true }); + +// Repo root (two levels above the Astro project). nf-metro resolves a map's +// relative asset paths (e.g. `%%metro logo: examples/...png`) against the +// working directory, so renders must run from here or the logo is dropped. +const REPO_ROOT = join(__dirname, "../../.."); + +// Part of the cache key, so a released layout change invalidates cached SVGs +// instead of silently serving stale renders for unchanged sources. (An editable +// install whose code changed without a version bump still needs the cache +// cleared - `serve_docs.sh --rebuild` does that.) +let NF_METRO_VERSION = "unknown"; +try { + NF_METRO_VERSION = execFileSync("nf-metro", ["--version"], { + cwd: REPO_ROOT, + }) + .toString() + .trim(); +} catch { + /* nf-metro absent at init; renderMetroFile reports it clearly on first use */ +} + +/** drawsvg emits an XML prolog; strip it before inlining into HTML. */ +const XML_PROLOG_RE = /^<\?xml.*?\?>\s*/; + +/** + * Recursively collect .mmd files under `dir`. + * @param {string} dir + * @param {boolean} recursive When false, only top-level files are returned. + * @returns {string[]} Absolute paths. + */ +function findMmdFiles(dir, recursive = true) { + const results = []; + let entries; + try { + entries = readdirSync(dir, { withFileTypes: true }); + } catch { + return results; + } + for (const entry of entries) { + if (entry.isFile() && entry.name.endsWith(".mmd")) { + results.push(join(dir, entry.name)); + } else if (recursive && entry.isDirectory()) { + results.push(...findMmdFiles(join(dir, entry.name), true)); + } + } + return results; +} + +/** + * Compute the cache key for a given (mode, source) pair. + * Must stay in sync with the hash in renderMetroFile. + * @param {string} source Raw .mmd source text. + * @param {string} mode Render mode string: "", "d", "n". + * @returns {string} 16-character hex hash. + */ +function cacheHash(source, mode) { + return createHash("sha256") + .update(`${NF_METRO_VERSION}\n${mode}\n${source}`) + .digest("hex") + .slice(0, 16); +} + +/** + * Pre-warm the .metro-cache by rendering all corpus maps in a single + * `nf-metro render-many` call. Maps whose cache entry already exists are + * skipped. Called once at the start of each production build; individual + * load() calls then hit the warm cache without spawning a new process. + * + * Mirror of Metro.astro's import.meta.glob patterns: + * examples/**\/*.mmd → plain mode + * examples/*.mmd → also debug mode + * tests/fixtures/*.mmd → plain mode (top-level only) + * tests/fixtures/nextflow/** → nextflow mode + */ +function prewarmMetroCache() { + if (NF_METRO_VERSION === "unknown") { + console.warn( + "nf-metro: not on PATH; skipping build-time cache pre-warm. " + + "Individual renders will still run on demand.", + ); + return; + } + + /** @type {Array<{input:string, output:string, debug:boolean, from_nextflow:boolean, no_self_color_scheme:boolean, no_manifest:boolean}>} */ + const jobs = []; + + function addJob(file, mode) { + const source = readFileSync(file, "utf-8"); + const hash = cacheHash(source, mode); + const cacheFile = join(CACHE_DIR, `${hash}.svg`); + if (!existsSync(cacheFile)) { + jobs.push({ + input: file, + output: cacheFile, + debug: mode === "d", + from_nextflow: mode === "n", + no_self_color_scheme: true, + layout_options: { manifest: false }, + }); + } + } + + // examples/**/*.mmd → plain; examples/*.mmd → also debug + const examplesDir = join(REPO_ROOT, "examples"); + for (const file of findMmdFiles(examplesDir, true)) { + addJob(file, ""); + if (dirname(file) === examplesDir) { + addJob(file, "d"); + } + } + + // tests/fixtures/*.mmd (top-level only) → plain + const fixturesDir = join(REPO_ROOT, "tests", "fixtures"); + for (const file of findMmdFiles(fixturesDir, false)) { + addJob(file, ""); + } + + // tests/fixtures/nextflow/**/*.mmd → nextflow + for (const file of findMmdFiles(join(fixturesDir, "nextflow"), true)) { + addJob(file, "n"); + } + + if (jobs.length === 0) { + console.log("nf-metro: cache already warm, skipping pre-warm."); + return; + } + + console.log(`nf-metro: pre-warming cache — rendering ${jobs.length} map(s)...`); + const manifestPath = join(tmpdir(), "metro-batch.json"); + writeFileSync(manifestPath, JSON.stringify(jobs), "utf-8"); + try { + execFileSync("nf-metro", ["render-many", manifestPath], { + cwd: REPO_ROOT, + stdio: "inherit", + }); + } catch (err) { + console.warn( + "nf-metro render-many failed; individual renders will fall back " + + `to per-file mode.\n${err.message}`, + ); + } finally { + try { + unlinkSync(manifestPath); + } catch { + /* best-effort */ + } + } +} + +/** + * Render a committed `.mmd` file to inline SVG markup. + * @param {string} file Absolute path to the source `.mmd`. + * @param {{ debug?: boolean, fromNextflow?: boolean }} [opts] + * @returns {string} inline `` markup + */ +export function renderMetroFile(file, { debug = false, fromNextflow = false } = {}) { + const source = readFileSync(file, "utf-8"); + const mode = `${debug ? "d" : ""}${fromNextflow ? "n" : ""}`; + const hash = cacheHash(source, mode); + const cacheFile = join(CACHE_DIR, `${hash}.svg`); + + try { + return readFileSync(cacheFile, "utf-8").replace(XML_PROLOG_RE, ""); + } catch (e) { + if (e.code !== "ENOENT") throw e; + } + + const tmpOutput = join(tmpdir(), `metro-${hash}.svg`); + // Render the real file (not a temp copy) from the repo root so the map's + // relative asset paths resolve. + const args = [ + "render", + file, + "-o", + tmpOutput, + "--no-self-color-scheme", + "--no-manifest", + ]; + if (debug) args.push("--debug"); + if (fromNextflow) args.push("--from-nextflow"); + + try { + execFileSync("nf-metro", args, { + cwd: REPO_ROOT, + stdio: ["ignore", "pipe", "pipe"], + }); + } catch (err) { + const stderr = err.stderr?.toString().trim() || ""; + throw new Error( + `nf-metro render failed for ${file}:\n${stderr}\n\n` + + `Make sure 'nf-metro' is on PATH (activate the nf-core micromamba env).`, + ); + } + + const svg = readFileSync(tmpOutput, "utf-8").replace(XML_PROLOG_RE, ""); + try { + unlinkSync(tmpOutput); + } catch { + /* best-effort cleanup */ + } + writeFileSync(cacheFile, svg, "utf-8"); + return svg; +} + +/** @returns {import('vite').Plugin} */ +export function metroVitePlugin() { + return { + name: "nf-metro-svg", + buildStart() { + prewarmMetroCache(); + }, + load(id) { + const [file, query = ""] = id.split("?"); + if (!file.endsWith(".mmd")) return; + const params = new URLSearchParams(query); + if (!params.has("metro")) return; + const svg = renderMetroFile(file, { + debug: params.has("debug"), + fromNextflow: params.has("nextflow"), + }); + return { code: `export default ${JSON.stringify(svg)};`, map: null }; + }, + }; +} diff --git a/website/src/lib/starlight-git-fix.mjs b/website/src/lib/starlight-git-fix.mjs new file mode 100644 index 000000000..0f810b8de --- /dev/null +++ b/website/src/lib/starlight-git-fix.mjs @@ -0,0 +1,99 @@ +/** + * Vite plugin that fixes Starlight's `lastUpdated` feature when the content + * collection directory is a symlink. + * + * Starlight pre-computes git commit dates at build time by running: + * git log --name-status -- + * where = website/src/content/docs (a symlink to ../../docs). + * Git tracks files at docs/, not through the symlink, so the scan returns + * nothing and every page gets undefined for lastUpdated. + * + * We intercept the `virtual:starlight/git-info` module before Starlight + * builds it, resolve the symlink to the real path, run the same git scan + * against that, and return paths relative to the real docs directory so + * Starlight's `endsWith` lookup works regardless of which form entry.filePath + * takes at runtime. + */ + +import { spawnSync } from "node:child_process"; +import { realpathSync } from "node:fs"; +import { resolve, relative } from "node:path"; +import { fileURLToPath } from "node:url"; + +const symlinkDocsPath = fileURLToPath( + new URL("../content/docs", import.meta.url), +); + +function getRepoRoot(directory) { + const result = spawnSync("git", ["rev-parse", "--show-toplevel"], { + cwd: directory, + encoding: "utf-8", + }); + if (result.error) return directory; + try { + return realpathSync(result.stdout.trim()); + } catch { + return directory; + } +} + +function buildGitDateMap() { + let realDocsPath; + try { + realDocsPath = realpathSync(symlinkDocsPath); + } catch { + return []; + } + + const repoRoot = getRepoRoot(realDocsPath); + const gitLog = spawnSync( + "git", + ["log", "--format=t:%ct", "--name-status", "--", realDocsPath], + { cwd: repoRoot, encoding: "utf-8", maxBuffer: 10 * 1024 * 1024 }, + ); + if (gitLog.error) return []; + + let runningDate = Date.now(); + const latestDates = new Map(); + for (const line of gitLog.stdout.split("\n")) { + if (line.startsWith("t:")) { + runningDate = parseInt(line.slice(2), 10) * 1000; + } + const tab = line.lastIndexOf("\t"); + if (tab === -1) continue; + const file = line.slice(tab + 1); + latestDates.set(file, Math.max(latestDates.get(file) ?? 0, runningDate)); + } + + return [...latestDates.entries()].map(([file, date]) => { + const fullPath = resolve(repoRoot, file); + // Path relative to real docs dir; Starlight uses endsWith() for lookup + // against entry.filePath, so this short form works for both symlinked + // and real absolute paths. + const relPath = relative(realDocsPath, fullPath).replace(/\\/g, "/"); + return [relPath, date]; + }); +} + +export function starlightGitFix() { + return { + name: "nfm-starlight-git-fix", + enforce: "pre", + resolveId(id) { + if (id === "virtual:starlight/git-info") + return "\0virtual:nfm/git-info"; + }, + load(id) { + if (id !== "\0virtual:nfm/git-info") return; + const data = buildGitDateMap(); + return ` +const data = ${JSON.stringify(data)}; +export const getNewestCommitDate = (file) => { + const entry = data.find(([path]) => file.endsWith(path)); + if (!entry) throw new Error('No git history for "' + file + '"'); + return new Date(entry[1]); +}; +`; + }, + }; +} diff --git a/website/src/pages/gallery/[entry].astro b/website/src/pages/gallery/[entry].astro new file mode 100644 index 000000000..bed904716 --- /dev/null +++ b/website/src/pages/gallery/[entry].astro @@ -0,0 +1,52 @@ +--- +import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; +import { getCollection } from "astro:content"; +import Metro from "@components/Metro.astro"; +import { base } from "../../site"; + +export async function getStaticPaths() { + const entries = await getCollection("gallery"); + return entries.map((entry) => ({ + params: { entry: entry.id }, + props: { entry }, + })); +} + +const { entry } = Astro.props; +const { title, src, description, category } = entry.data; +--- + + + +

{description}

+ + + + diff --git a/website/src/pages/gallery/index.astro b/website/src/pages/gallery/index.astro new file mode 100644 index 000000000..41c80a97f --- /dev/null +++ b/website/src/pages/gallery/index.astro @@ -0,0 +1,99 @@ +--- +import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; +import { getCollection } from "astro:content"; +import Metro from "@components/Metro.astro"; +import { base } from "../../site"; + +const allEntries = await getCollection("gallery"); +const entries = allEntries.sort((a, b) => a.data.order - b.data.order); + +// Group entries by category, preserving gallery.yaml insertion order. +const byCategory = new Map(); +for (const entry of entries) { + const cat = entry.data.category; + if (!byCategory.has(cat)) byCategory.set(cat, []); + byCategory.get(cat)!.push(entry); +} + +function slugify(text: string): string { + return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); +} + +const headings = Array.from(byCategory.keys()).map((cat) => ({ + depth: 2, + slug: slugify(cat), + text: cat, +})); +--- + + +

+ Examples covering the full range of layout patterns. +

+ + { + Array.from(byCategory.entries()).map(([category, items]) => ( + + )) + } +
+ + diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro new file mode 100644 index 000000000..2b39f750f --- /dev/null +++ b/website/src/pages/index.astro @@ -0,0 +1,221 @@ +--- +/* Home page. A standalone Astro route (not a content-collection entry) that + renders the custom hero inside the full Starlight shell via . + Keeps the docs sidebar (template: 'doc'); the auto page-title

is hidden + home-only by the scoped global style below, since the hero renders its own + wordmark. */ +import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; +import { Icon } from "@astrojs/starlight/components"; +import Logo from "../assets/logo.svg"; +import { base, GITHUB_URL } from "../site"; +import Metro from "../components/Metro.astro"; +--- + + +
+ +
+

+

+ nf-metro generates transit-style SVG diagrams from Mermaid definitions + using %%metro directives. Like a real metro map, the layout + isn't necessarily geographic, nor a verbatim trace of every step. Use it + to convey what a workflow means scientifically, not just what it runs, + with every line, colour, and position a deliberate choice. A natural fit + for nf-core and other Nextflow pipelines. +

+ +
+ +
+
+ + +
+

Install

+

+ nf-metro is a Python package. Pick your channel - it requires Python + 3.10+. +

+ +
+
+ + + +
+ +
+

+ Install the latest release from PyPI. +

+
+
pip install nf-metro
+
+
+ + +
+
+ + +
+

Quick start

+

+ Render, validate, and inspect a .mmd file. The CLI reference documents every flag. +

+
+
# Render a .mmd definition into a standalone SVG metro map
+nf-metro render examples/simple_pipeline.mmd -o pipeline.svg
+
+# Check a file for errors without producing any output
+nf-metro validate examples/simple_pipeline.mmd
+
+# Print the parsed structure: sections, lines, stations, edges
+nf-metro info examples/simple_pipeline.mmd
+
+# Or emit a self-contained interactive HTML page (pan, zoom, line isolation)
+nf-metro render examples/simple_pipeline.mmd --format html -o pipeline.html
+
+
+ + +
+

Go further

+ +
+
+
+ + + + diff --git a/website/src/pages/pipelines/[entry].astro b/website/src/pages/pipelines/[entry].astro new file mode 100644 index 000000000..9f126cbb6 --- /dev/null +++ b/website/src/pages/pipelines/[entry].astro @@ -0,0 +1,54 @@ +--- +import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; +import { getCollection } from "astro:content"; +import Metro from "@components/Metro.astro"; +import { base } from "../../site"; + +export async function getStaticPaths() { + const entries = await getCollection("pipelines"); + return entries.map((entry) => ({ + params: { entry: entry.id }, + props: { entry }, + })); +} + +const { entry } = Astro.props; +const { title, src, description, repo_url } = entry.data; +--- + + + +

+ {description} GitHub +

+ +
+ + diff --git a/website/src/pages/pipelines/index.astro b/website/src/pages/pipelines/index.astro new file mode 100644 index 000000000..a8bcbd3ea --- /dev/null +++ b/website/src/pages/pipelines/index.astro @@ -0,0 +1,83 @@ +--- +import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; +import { getCollection } from "astro:content"; +import Metro from "@components/Metro.astro"; +import { base } from "../../site"; + +const entries = await getCollection("pipelines"); + +function slugify(text: string): string { + return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); +} + +const headings = entries.map((entry) => ({ + depth: 2, + slug: slugify(entry.data.title), + text: entry.data.title, +})); +--- + + +

+ Real-world pipelines rendered with nf-metro. See the{" "} + Gallery for layout pattern examples and the{ + " " + } + Guide for how to write your own. +

+ + { + entries.map((entry) => ( +
+

+ {entry.data.title} +

+

+ {entry.data.description}{" "} + GitHub +

+ +
+ )) + } +
+ + diff --git a/website/src/pages/playground.astro b/website/src/pages/playground.astro new file mode 100644 index 000000000..c15a03f02 --- /dev/null +++ b/website/src/pages/playground.astro @@ -0,0 +1,1243 @@ +--- +/* playground.astro - Interactive nf-metro diagram editor, promoted from + public/playground/index.html into the Astro build so it inherits + Starlight's header, sidebar, and theme switching automatically. + + The playground JS/HTML logic is ported as-is. Key structural changes: + - The old standalone
is removed; Starlight provides nav. + - btn-report is moved into the preview-pane toolbar. + - CSS is adapted: scoped to .nfm-playground to avoid leaking into Starlight. + - Starlight layout is overridden via :has(#split) so the split pane fills + the viewport (footer hidden, content chain made flex end-to-end). + - app.js and style.css stay in public/playground/ (relative URLs resolve + identically since the page is still served from /playground/). +*/ +import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; +import { base } from "../site"; +--- + + +
+
+
+
+ + + + Insert + + + + + + Lines +
+
+ + +
+ +
+
+ + + + + + + +
+ +
+ Export + + + + +
+ + +
+
+ +
+ Advanced options +
+ Layout + + + + + + + + +
+
+ +
+ Edit map + + + + + + + Click an element to select it. +
+ +
+ +
+ + + +
+ + + + + +
+
+

Starting Python runtime…

+

+ First load fetches the WASM runtime (~10 MB); subsequent loads + are cached. +

+
+
+
+ + + + + + + + +
+ + + + + + + + +
+ + diff --git a/website/src/repo.ts b/website/src/repo.ts new file mode 100644 index 000000000..5e5def477 --- /dev/null +++ b/website/src/repo.ts @@ -0,0 +1,10 @@ +/** + * Single source of truth for the GitHub owner/repo and the Pages origin. + * + * On a repository transfer, update the values here and everything else follows: + * the canonical site URL, edit links, the header GitHub icon, and the version + * switcher's release links all derive from these. + */ +export const REPO = "seqeralabs/nf-metro"; +export const GITHUB_URL = `https://github.com/${REPO}`; +export const PAGES_ORIGIN = "https://seqeralabs.github.io"; diff --git a/website/src/site.ts b/website/src/site.ts new file mode 100644 index 000000000..d6f5b223c --- /dev/null +++ b/website/src/site.ts @@ -0,0 +1,12 @@ +/** Site base path, normalised to a trailing slash (respects `base` in astro.config). */ +export const base = import.meta.env.BASE_URL.replace(/\/?$/, "/"); + +/** + * GitHub Pages project root, constant across versioned deploys. `base` carries + * the version segment (e.g. /nf-metro/latest/); SITE_BASE is the root the + * version switcher strips and re-prefixes to build cross-version URLs. + */ +export const SITE_BASE = "/nf-metro/"; + +/** GitHub owner/repo and URL - single source of truth lives in ./repo. */ +export { REPO, GITHUB_URL } from "./repo"; diff --git a/website/src/styles/custom.css b/website/src/styles/custom.css new file mode 100644 index 000000000..0ea8a45cf --- /dev/null +++ b/website/src/styles/custom.css @@ -0,0 +1,599 @@ +/* ============================================================ + nf-metro docs - Seqera brand theme for Starlight. + Light is the default Seqera canvas (pure white, brand-dark text); + dark is a fully-neutral grey scene. Single green voltage (#31C9AC) + used sparingly on CTAs, active state, and the logo mark. + Fonts: Degular (display/headings/wordmark), Inter (body), + JetBrains Mono (code). + Tokens sourced from seqeralabs/web DESIGN.md. + ============================================================ */ + +@import "@fontsource/inter/latin-400.css"; +@import "@fontsource/inter/latin-500.css"; +@import "@fontsource/inter/latin-600.css"; +@import "@fontsource/jetbrains-mono/latin-400.css"; +@import "@fontsource/jetbrains-mono/latin-700.css"; + +/* Degular (Seqera display face) is provided by Astro's Fonts API - see the + `fonts` config in astro.config.mjs and the in src/components/Head.astro, + which emit the @font-face (+ a metric-matched fallback) and preload it. + `--nfm-degular` is the cssVariable it exposes. */ + +/* ---- Seqera tokens: LIGHT (default canvas) ---- */ +:root { + --nfm-accent: #31c9ac; /* Seqera Green - the single brand voltage */ + --nfm-accent-hover: #0cae8e; /* Green/700 */ + --nfm-accent-text: #065647; /* Green/1000 - WCAG-safe green text/links */ + --nfm-accent-soft: #e2f7f3; /* Green/100 - soft brand tint surface */ + --nfm-brand: #201637; /* Brand dark */ + + --nfm-bg: #ffffff; /* surface-page */ + --nfm-bg-deep: #f7f7f7; /* code blocks / inset wells */ + --nfm-surface: #f7f7f7; /* elevated cards / panels */ + --nfm-surface-2: #eaebeb; /* higher elevation / inline code */ + --nfm-line: #dddede; /* border-default */ + --nfm-line-soft: #eaebeb; /* border-muted */ + --nfm-ink: #201637; /* text-default (headlines, strong) */ + --nfm-ink-dim: #545555; /* body copy */ + --nfm-ink-mute: #919393; /* metadata, helper text */ + + --nfm-glow: rgba(49, 201, 172, 0.05); + --nfm-ease: cubic-bezier(0.16, 1, 0.3, 1); + --nfm-display: var( + --nfm-degular + ); /* Degular + metric-matched fallback, from the Fonts API */ +} + +/* ---- Seqera tokens: DARK (fully-neutral grey, no purple tint) ---- */ +:root[data-theme="dark"] { + --nfm-accent: #31c9ac; /* constant across modes */ + --nfm-accent-hover: #56d3ba; /* Green/400 */ + --nfm-accent-text: #56d3ba; /* green text reads on dark */ + --nfm-accent-soft: #065647; /* surface-brand dark = deep green */ + --nfm-brand: #201637; + + --nfm-bg: #242424; /* Grey/1100 - page floor */ + --nfm-bg-deep: #1a1a1a; /* recessed code wells */ + --nfm-surface: #2b2b2b; /* elevated cards / panels */ + --nfm-surface-2: #333333; /* inline code / higher elevation */ + --nfm-line: #3a3a3a; + --nfm-line-soft: #2e2e2e; + --nfm-ink: #ffffff; + --nfm-ink-dim: #cfd0d1; /* Grey/400 */ + --nfm-ink-mute: #919393; /* Grey/800 */ + + --nfm-glow: rgba(49, 201, 172, 0.07); +} + +/* Drive `color-scheme` from the active theme so inlined metro-map SVGs - which + colour their chrome with `light-dark()` - follow the light/dark toggle. The + SVGs declare no `color-scheme` of their own, so they inherit this one. */ +:root, +:root[data-theme="light"] { + color-scheme: light; +} +:root[data-theme="dark"] { + color-scheme: dark; +} + +/* ---- Drive Starlight tokens from the brand ---- */ +:root, +:root[data-theme="light"] { + --sl-color-bg: var(--nfm-bg); + --sl-color-bg-nav: var(--nfm-bg); + --sl-color-bg-sidebar: var(--nfm-bg); + --sl-color-bg-inline-code: var(--nfm-surface-2); + --sl-color-bg-accent: var(--nfm-accent); + + --sl-color-text: var(--nfm-ink-dim); + --sl-color-text-accent: var(--nfm-accent-text); + --sl-color-text-invert: var(--nfm-brand); + + --sl-color-white: var(--nfm-ink); + --sl-color-gray-1: var(--nfm-ink); + --sl-color-gray-2: var(--nfm-ink-dim); + --sl-color-gray-3: var(--nfm-ink-mute); + --sl-color-gray-4: var(--nfm-ink-mute); + --sl-color-gray-5: var(--nfm-line); + --sl-color-gray-6: var(--nfm-surface); + --sl-color-gray-7: var(--nfm-surface-2); + --sl-color-black: var(--nfm-bg); + + --sl-color-hairline-light: var(--nfm-line-soft); + --sl-color-hairline: var(--nfm-line-soft); + --sl-color-hairline-shade: var(--nfm-line); + + --sl-color-accent-low: var(--nfm-accent-soft); + --sl-color-accent: var(--nfm-accent-text); + --sl-color-accent-high: var(--nfm-ink); + + --sl-color-bg-codeblock: var(--nfm-bg-deep); + + --sl-font: + "Inter", -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", + Arial, sans-serif; + --sl-font-system-mono: + "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, + monospace; +} + +/* wordmark metro-line colours: light + dark variants of the Nextflow green */ +:root, +:root[data-theme="light"], +:root[data-theme="dark"] { + --nfm-line-a: #31c9ac; /* Nextflow Green/500 - light line */ + --nfm-line-b: #0a967b; /* Nextflow Green/800 - dark line */ +} + +/* very subtle brand glow behind the page */ +body { + background: + radial-gradient(1100px 560px at 82% -10%, var(--nfm-glow), transparent 60%), + var(--sl-color-bg); +} + +/* ---- Headings in Degular, Seqera negative tracking ---- */ +.sl-markdown-content :is(h1, h2, h3, h4, h5, h6), +.content-panel h1#_top { + font-family: var(--nfm-display); + font-weight: 600; + letter-spacing: -0.025em; +} +.sidebar-content .group-label > span, +summary .group-label span { + letter-spacing: 0.02em; +} + +/* inline code inside headings reads large at the heading font-size; nudge down */ +.sl-markdown-content :is(h1, h2, h3, h4, h5, h6) code, +.content-panel h1#_top code { + font-size: 90%; +} + +/* active sidebar link: green tint + green text */ +nav.sidebar a[aria-current="page"], +nav.sidebar a[aria-current="page"]:hover { + color: var(--nfm-accent-text); + background-color: var(--nfm-accent-soft); +} + +/* links in prose carry the brand green */ +.sl-markdown-content a { + color: var(--nfm-accent-text); +} + +/* ============================================================ + Logo wordmark (SiteTitle + hero). + ============================================================ */ +.nfm-logo { + display: block; +} + +.site-title.nfm { + display: inline-flex; + align-items: center; +} +.site-title.nfm .nfm-logo { + height: 40px; + width: auto; +} + +/* ============================================================ + Custom top navbar (Header.astro) + ============================================================ */ +.nfm-topnav { + display: flex; + align-items: center; + gap: 2px; +} +.nfm-topnav a.link { + font-family: var(--sl-font-system-mono); + font-size: 13px; + color: var(--nfm-ink-dim); + padding: 7px 11px; + border-radius: 4px; + white-space: nowrap; + text-decoration: none; + transition: + color 0.2s var(--nfm-ease), + background 0.2s var(--nfm-ease); +} +.nfm-topnav a.link:hover { + color: var(--nfm-ink); + background: var(--nfm-surface-2); +} + +.nfm-ver-select { + font-family: var(--sl-font-system-mono); + font-size: 12px; + color: var(--nfm-ink-dim); + padding: 4px 26px 4px 10px; + border: 1px solid var(--nfm-line); + border-radius: 999px; + white-space: nowrap; + cursor: pointer; + appearance: none; + background-color: transparent; + /* Caret chevron drawn inline so no external asset is needed. */ + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none' stroke='%23888' stroke-width='1.5'%3E%3Cpath d='M1 1l4 4 4-4'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 9px center; + transition: + color 0.2s var(--nfm-ease), + border-color 0.2s var(--nfm-ease); +} +.nfm-ver-select:hover { + color: var(--nfm-ink); + border-color: var(--nfm-accent); +} +.nfm-ver-select option { + color: var(--nfm-ink); + background: var(--nfm-surface-2); +} + +.nfm-github { + display: inline-flex; + align-items: center; + color: var(--nfm-ink-dim); + transition: color 0.2s var(--nfm-ease); +} +.nfm-github:hover { + color: var(--nfm-ink); +} + +.nfm-theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + padding: 0; + border: 1px solid transparent; + border-radius: 4px; + color: var(--nfm-ink-dim); + background: transparent; + cursor: pointer; + transition: + color 0.2s var(--nfm-ease), + background 0.2s var(--nfm-ease); +} +.nfm-theme-toggle:hover { + color: var(--nfm-ink); + background: var(--nfm-surface-2); +} +.nfm-theme-toggle svg { + width: 18px; + height: 18px; + display: block; +} +.nfm-theme-toggle .moon { + display: none; +} +:root[data-theme="dark"] .nfm-theme-toggle .sun { + display: none; +} +:root[data-theme="dark"] .nfm-theme-toggle .moon { + display: block; +} + +/* ============================================================ + Wider content column. + Starlight's default is 45rem, which squeezes the multi-column + CLI/option tables. Widen the whole content column to 56rem. + https://github.com/withastro/starlight/discussions/2180 + ============================================================ */ +:root { + --sl-content-width: 56rem; +} + +/* ============================================================ + HOME PAGE (rendered by src/pages/index.astro, scoped under .home) + ============================================================ */ +.home { + color: var(--nfm-ink-dim); + font-size: 16px; + line-height: 1.6; +} +.home a { + color: inherit; + text-decoration: none; +} +.home .mono { + font-family: var(--sl-font-system-mono); +} +.home code { + font-family: var(--sl-font-system-mono); + font-size: 0.88em; + background: var(--nfm-surface-2); + color: var(--nfm-ink); + padding: 0.12em 0.4em; + border-radius: 4px; +} + +/* left-aligned home, wider than the prose column */ +.sl-container:has(.home) { + max-width: 64rem; + margin-inline-start: 0; + margin-inline-end: auto; +} + +.home .hero { + padding: 4px 0 56px; +} +/* project name writ large - the hero wordmark (~2× size, capped to the column) */ +.home .hero-name { + margin: 0 0 26px; + padding: 0; + border: 0; + line-height: 1; +} +.home .hero .nfm-logo.big { + width: 100%; + max-width: 860px; + height: auto; + display: block; +} +.home .hero-sub { + max-width: 60ch; + font-size: 19px; + color: var(--nfm-ink-dim); + margin: 0 0 28px; +} + +.home .cta-row { + display: flex; + flex-wrap: wrap; + gap: 12px; + align-items: center; +} +.home .btn { + display: inline-flex; + align-items: center; + gap: 9px; + font-family: var(--sl-font-system-mono); + font-size: 13px; + font-weight: 500; + padding: 9px 18px; + border-radius: 4px; + border: 1px solid; + cursor: pointer; + transition: + background 0.2s var(--nfm-ease), + color 0.2s var(--nfm-ease), + border-color 0.2s var(--nfm-ease); +} +.home .btn .arr { + transition: transform 0.2s var(--nfm-ease); +} +.home .btn:hover .arr { + transform: translateX(3px); +} +@media (prefers-reduced-motion: reduce) { + .home .btn:hover .arr { + transform: none; + } +} +.home .btn-primary { + background: var(--nfm-accent); + color: var(--nfm-brand); + border-color: var(--nfm-accent-hover); +} +.home .btn-primary:hover { + background: var(--nfm-accent-hover); + color: #fff; +} +.home .btn-ghost { + background: transparent; + color: var(--nfm-ink); + border-color: var(--nfm-line); +} +.home .btn-ghost:hover { + border-color: var(--nfm-accent); +} +.home .btn svg { + width: 15px; + height: 15px; +} + +/* hero map figure */ +.home .hero-map { + margin-top: 40px; + border: 1px solid var(--nfm-line); + border-radius: 16px; + overflow: hidden; + background: var(--nfm-surface); + box-shadow: 0 25px 50px -22px rgba(32, 22, 55, 0.25); +} +.home .hero-map .zoomable-svg { + display: block; + line-height: 0; +} +.home .hero-map svg { + display: block; + width: 100%; + height: auto; +} + +/* code block */ +.home .code { + border: 1px solid var(--nfm-line-soft); + border-radius: 4px; + background: var(--nfm-bg-deep); + font-family: var(--sl-font-system-mono); + font-size: 13px; + line-height: 1.7; + overflow: hidden; +} +.home .code pre { + margin: 0; + padding: 13px 16px; + overflow-x: auto; + white-space: pre; +} +.home .code .ps { + color: var(--nfm-accent-text); +} +.home .code .flag { + color: var(--nfm-accent-text); +} +.home .code .arg { + color: var(--nfm-ink-dim); +} +.home .code .cmt { + color: var(--nfm-ink-mute); +} + +/* sections */ +.home section { + padding-bottom: 56px; +} +.home .section-head { + display: flex; + align-items: baseline; + gap: 14px; + margin-bottom: 16px; +} +.home h2 { + font-family: var(--nfm-display); + font-weight: 600; + font-size: clamp(24px, 3vw, 32px); + letter-spacing: -0.025em; + margin: 0; + color: var(--nfm-ink); + border: 0; + padding: 0; +} +.home .lede { + max-width: 68ch; + color: var(--nfm-ink-dim); + font-size: 16.5px; + margin: 6px 0 0; +} + +/* install: tabbed card */ +.home .install-card { + margin-top: 24px; + border: 1px solid var(--nfm-line); + border-radius: 4px; + overflow: hidden; + background: var(--nfm-bg); +} +.home .tabs { + display: flex; + gap: 0; + border-bottom: 1px solid var(--nfm-line); + background: var(--nfm-surface); +} +.home .tab { + display: inline-flex; + align-items: center; + gap: 8px; + cursor: pointer; + font-family: var(--sl-font-system-mono); + font-size: 13px; + font-weight: 500; + color: var(--nfm-ink-mute); + padding: 12px 18px; + background: transparent; + border: 0; + border-bottom: 2px solid transparent; + margin-bottom: -1px; + transition: + color 0.15s var(--nfm-ease), + border-color 0.15s var(--nfm-ease), + background 0.15s var(--nfm-ease); +} +.home .tab svg { + width: 16px; + height: 16px; + opacity: 0.85; +} +.home .tab:hover { + color: var(--nfm-ink); + background: var(--nfm-bg); +} +.home .tab.is-active { + color: var(--nfm-ink); + background: var(--nfm-bg); + border-bottom-color: var(--nfm-accent); +} +.home .tab-panel { + padding: 18px 20px; +} +.home .tab-panel[hidden] { + display: none; +} +.home .tab-panel p { + margin: 0 0 12px; + font-size: 14.5px; + color: var(--nfm-ink-dim); +} +.home .tab-panel .code { + font-size: 13px; +} + +/* multi-line code block (quick start) */ +.home .code.block { + margin-top: 22px; +} + +/* explore cards */ +.home .explore { + margin-top: 24px; + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 14px; +} +.home .ex-card { + display: block; + border: 1px solid var(--nfm-line); + padding: 18px 20px; + background: var(--nfm-bg); + transition: + border-color 0.15s var(--nfm-ease), + background 0.15s var(--nfm-ease); +} +.home .ex-card:hover { + border-color: var(--nfm-accent); + background: var(--nfm-surface); +} +.home .ex-card h3 { + font-family: var(--nfm-display); + font-size: 16px; + font-weight: 600; + letter-spacing: -0.015em; + margin: 0 0 6px; + color: var(--nfm-ink); + display: flex; + align-items: center; + gap: 7px; +} +.home .ex-card .arr { + color: var(--nfm-accent-text); + transition: transform 0.2s var(--nfm-ease); +} +.home .ex-card:hover .arr { + transform: translateX(3px); +} +.home .ex-card p { + margin: 0; + font-size: 14px; + color: var(--nfm-ink-mute); +} +.home .explore-sec { + border-bottom: 0; +} + +@media (max-width: 720px) { + .home .explore { + grid-template-columns: 1fr; + } + .home .tabs { + overflow-x: auto; + } +} +@media (prefers-reduced-motion: reduce) { + .home .ex-card:hover .arr { + transform: none; + } +} diff --git a/website/tsconfig.json b/website/tsconfig.json new file mode 100644 index 000000000..8bf91d3bb --- /dev/null +++ b/website/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +}