Built artifacts, not source. Each *.html / *.js pair here is a model
compiled to WebAssembly by artesian;
the *.whl files are the Python wheels the page installs in the reader’s
browser via Pyodide.
The wheels are shared by every exercise in this directory. panel and
bokeh are together about 35 MB and are what makes that worth doing: paid
once here, they would otherwise be paid once per exercise. Adding a second
exercise costs roughly 30 KB, not 35 MB. Keep new exercises in this same
directory for that reason.
To rebuild, or to add another:
pip install artesian
artesian build path/to/your_app.py -o exercises/apps -p path/to/model -r numpy
artesian pins panel and bokeh to whatever versions the build environment
has, so a rebuild does not silently pull new 35 MB wheels into git history.
Upgrading them is a deliberate act.
Record what each application was built from, so a result a student reports can be reproduced years later. A wheel’s version number is not sufficient evidence on its own: a build from a modified working tree carries the same version as the release it was branched from, and is indistinguishable by filename.
| model | GRLP v2.1.0 (tag), the release pip install grlp gives |
| application source | GRLP demo/responsive-figure @ 1d9d2533a9fb (interactive_demo/grlp_panel.py) |
| built | 2026-09-02 |
| panel / bokeh | 1.9.4 / 3.9.2 |
| browser requirements | numpy, scipy |
Verified at build time: every module in the shipped wheel is byte-identical to
the v2.1.0 tag.
networkx is deliberately not requested. GRLP gained its river-network code
after v2.1.0, so the tagged release neither imports it nor declares it as a
dependency; asking for it made every reader download about 1 MB of wheel that
was never used.
Do not hand-edit anything here except this file.