Skip to content

REF: Upgrade to ironlab 0.16 and remove the figure workarounds - #33

Merged
thclark merged 1 commit into
mainfrom
ironlab-0.16
Oct 26, 2026
Merged

thclark merged 1 commit into
mainfrom
ironlab-0.16

Conversation

@thclark

@thclark thclark commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Moves every yFoil figure to ironlab 0.16.0, removes the workarounds that 0.12 forced, and builds the branch-coverage occupancy figures with ironlab instead of matplotlib.

Workarounds removed

These were recorded in thclark/ironlab#76–#80:

  • yfoil plot analysis: Cp is drawn on a reversed axis (suction up) instead of −Cp.
  • yfoil plot foil:
    • The axes keep equal aspect, in the viewer too, instead of limits widened from plot areas measured on 0.12 renders.
    • It has two keys: the curves, and the markers (each shape and side colour explained once, as custom items).
    • It cycles six dash patterns instead of four.
  • Legends:
    • Key rows are sized to fit their legends, replacing hand-calibrated row weights and trial PDF exports.
    • A base or default case is drawn on top but listed first, on a row of its own.
    • Stacks that share x show tick labels on the bottom row only.
  • Aerofoil-series sheets: regular ticks shared by every panel, left-aligned titles, and the original titles restored. The held parameters title each panel's legend so the titles fit.
  • Comparison sheets (series-cases, known-issues):
    • NaN values are marked by ticks pinned to the top edge, so the axes autoscale again.
    • Reference lines are hline/vline, which span the axes at any zoom.
    • Case names are set in monospace.
  • Transition-position strip: rows are named by case on a categorical axis, first at the top. The numbering series and NaN placeholder points are gone.
  • Saving: figures::save refuses a figure whose layout overflows a legend, clashes two legend entries or puts text off the page. It checks with layout_warnings(), without exporting a PDF.

Not removed

  • The aerofoil outline under the Cp plot stays a separate strip: ironlab decided against inset axes (#80).
  • Off-scale values are still clamped at the axis edge: ironlab decided against clamp-and-flag (#78).

Occupancy figures

The branch map and case × subroutine matrix are ironlab figures built in Rust (thclark/ironlab#74). The branch map uses occupancy under grouped category rows; the case matrix uses cells, with turned monospace case labels and a panel colourbar.

  • Counts: ironlab has no table chart yet (Add table chart type ironlab#121), so the per-subroutine counts from the matrix's margin are now a published table, subroutine-counts.
  • Removed: plot.py, studies/figures/ (render.sh, style.py, the uv/matplotlib pin) and the two committed SVGs.

Regenerated figures

Every committed .fig is regenerated, because files saved by 0.12 (schema 0.4) are rejected by 0.16:

  • the user guide's figures, by scripts/guide-figures.sh;
  • each study's figures, re-rendered from the run its docs were already published from and republished with cargo xtask publish, so no table numbers change;
  • the docs' ironlab-web bundle in scripts/docs.sh, pinned to 0.16.0 with its checksum.

All 52 figures load with no validation or layout warnings.

Figure "labels" are renamed to "tags", after ironlab. docs/development/conventions/figures.md, CLAUDE.md and the user guide are updated.

Checks

  • clippy -D warnings on the workspace, and cargo fmt --check
  • lib, application and apparatus tests, and each study crate's tests
  • ci/no-deviations.sh and scripts/docs-check.py

The execution and subroutine suites were not run; nothing in them touches figures.

Move every figure to ironlab 0.16.0 and drop the workarounds that 0.12
forced, recorded in thclark/ironlab#76-#80:

- yfoil plot analysis draws Cp on a reversed axis instead of -Cp.
- yfoil plot foil keeps equal aspect instead of limits widened from
  plot areas measured on 0.12 renders, has a curve key and a marker key
  of custom items, and cycles six dash patterns.
- Key rows are fitted (fit_row) instead of hand-sized weights and trial
  PDF exports; a base or default case is drawn last but listed first on
  a row of its own; stacks sharing x show tick labels on the bottom row.
- Aerofoil-series sheets share regular ticks and left-aligned titles,
  with the original titles restored.
- Comparison sheets mark NaN values with axes-fraction ticks at the top
  edge, so the axes autoscale again, draw reference lines with
  hline/vline and set case names in monospace.
- The transition-position strip names its rows by case on a categorical
  axis.
- figures::save refuses a figure whose layout overflows a legend, clashes
  two entries or puts text off the page, without exporting a PDF.

Build the branch-coverage branch map and case matrix as ironlab
occupancy and cell figures in Rust (thclark/ironlab#74), and remove the
matplotlib path (plot.py, studies/figures/) and the committed SVGs. The
per-subroutine counts the matrix had in its margin are a published table,
until ironlab has a table chart (thclark/ironlab#121).

Regenerate every committed figure (schema 0.4 files are rejected), each
study from the run its docs were published from so no table changes, and
pin the docs' ironlab-web bundle to 0.16.0. Rename figure labels to tags
after ironlab.
@thclark
thclark merged commit 0424401 into main Oct 26, 2026
5 checks passed
@thclark
thclark deleted the ironlab-0.16 branch October 27, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant