Context
The 60_linear_algebra_2 chapter now has Hinton step-sliders in several elimination / iteration notebooks, but they are built two different ways:
150 (Inverse matrix / Gauss–Jordan) uses the shared helper matshow.hinton_step_slider, which computes one common_max_weight across all frames (box sizes are comparable step-to-step — you can watch a pivot shrink), is CI-guarded (renders the final frame headless, interactive in Colab), and accepts a titles= argument. Used at 3×3 / 4×4 / 7×7.
102 (Gauss elimination, n×n) has a bespoke inline slider (gauss_elimination_steps(...) → ipywidgets.interact/IntSlider) with nice per-step titles, but each frame calls a local hinton(matrix) with no fixed scale, so every frame rescales independently — a box of a given size can mean different magnitudes from step to step.
Proposed
-
Unify 102 onto matshow.hinton_step_slider. Keep the per-step titles (the helper takes titles=), gain the shared scale (cross-step comparability — the whole point of the slider), and drop the duplicated bespoke code + the local hinton definition.
-
Add the slider to notebooks that lack one:
100 (Systems of Linear Equations) — has hinton() but no slider.
125 (Five-Node Truss) — no Hinton / slider at all.
- Both walk through an elimination/solve that a per-step scrubber would make clearer.
Done =
Parked from the 2026-06-01 session (sliders were just added to 150 4×4/7×7 in #444); building deferred.
Context
The
60_linear_algebra_2chapter now has Hinton step-sliders in several elimination / iteration notebooks, but they are built two different ways:150(Inverse matrix / Gauss–Jordan) uses the shared helpermatshow.hinton_step_slider, which computes onecommon_max_weightacross all frames (box sizes are comparable step-to-step — you can watch a pivot shrink), is CI-guarded (renders the final frame headless, interactive in Colab), and accepts atitles=argument. Used at 3×3 / 4×4 / 7×7.102(Gauss elimination, n×n) has a bespoke inline slider (gauss_elimination_steps(...)→ipywidgets.interact/IntSlider) with nice per-step titles, but each frame calls a localhinton(matrix)with no fixed scale, so every frame rescales independently — a box of a given size can mean different magnitudes from step to step.Proposed
Unify
102ontomatshow.hinton_step_slider. Keep the per-step titles (the helper takestitles=), gain the shared scale (cross-step comparability — the whole point of the slider), and drop the duplicated bespoke code + the localhintondefinition.102currently defines its own localhinton; switching to the helper meansimport matshow, so confirm102has the Colab clone cell that cloneskwlee2025cpp/nmisp_py(cf. CI can't catch a missing Colab clone cell — add a static check (tests/test_colab_clone_cell.py) #442).150already has it.Add the slider to notebooks that lack one:
100(Systems of Linear Equations) — hashinton()but no slider.125(Five-Node Truss) — no Hinton / slider at all.Done =
gauss_*helper supports it, collect frames via asnapshots=list (as in150); otherwise retain per-step matrices in the existing loop.matshow.hinton_step_slider(snapshots, titles=...); keep the CI guard (already in the helper).CI=true jupyter nbconvert --execute); introduce no new Colab-clone gaps (CI can't catch a missing Colab clone cell — add a static check (tests/test_colab_clone_cell.py) #442).Parked from the 2026-06-01 session (sliders were just added to
1504×4/7×7 in #444); building deferred.