docs: the readme and home page lead with four benefits for energy system modellers, in cards with icons, and the readme is under half its length - #1743
Merged
Conversation
…icons, and the readme is a third of its length The README follows math-spec's: badges, a tagline, a short intro that names math-spec as the language, then four benefits, each a bold lead-in, one sentence and a link. It drops the benchmark paragraphs, the internals diagram, the Why list, the linopy code block, the walkthrough paragraph and the commented install block. Words: 1321 to about 510. The home page includes the README's badges, intro and benefits as snippets, so the text lives once. It used to carry six hand-written cards whose benchmark claim had drifted from the README's. The benefits render as cards with Material Design icons, chosen in CSS by where each card's link points, and the whole card is the link, as on math-spec's home page. "Where to next" is a list. Words: 1034 to about 650. The guide's link to the home page's model points at the renamed heading. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y
Merging this PR will not alter performance
Comparing Footnotes
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y
…, speed with a minimal api, and validation against pypsa The cards follow what an energy system modeller values: - tables in, tables out: any Arrow table or a parquet path in, tables out, and an archive of parquet files ready for DuckDB, plots or BI; - decomposition: scenario sweeps, rolling horizons and myopic pathways in one call, each window checked against the model's coupling; - fast, and hard to get wrong: sparsity costs nothing, the API is a handful of verbs, and a sweep keeps the solver loaded; - validated against PyPSA: all 16 rungs match PyPSA's objective, and 12 match its duals row for row (two are integer models, and rungs 12 and 14 differ on some rows). Icons: table-arrow-right, chart-gantt, speedometer, transmission-tower, from Material Design Icons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y
The Gantt icon becomes split.svg, drawn for this card: a block, an arrow, and three slices, in the filled weight of the other three icons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y
…dates and warm starts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y
… keep='progress' warm-starts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y
…nd third link the archiving how-to and the benchmark results The docs use decomposition for Benders, which about/decomposition.md says specsolve ships no driver for, so the card takes the name of its reference page. Card 1 links archiving a solve, which covers tables out and the archive; card 3 links the benchmark results rather than their method. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y
FBumann
added this pull request to stack #1749
September 25, 2026 09:35
FBumann
added a commit
that referenced
this pull request
Sep 25, 2026
…y window (#1746) > **Prompt:** About the links used: Are there better targets for each box? Or is sth missing from the docs? Like a decomposition tutorial? And tables in/out? What should it show? Data contract? Preparing data? The archiving? > [!NOTE] > The following content was generated by AI. The user's follow-up was "Yes. Stacked PR for 2". This PR is stacked on #1743. ## What this changes A new tutorial, "Sweep a model" (`docs/sweep.md`), runs `solve_over` twice. First it solves once per scenario. Then it solves window by window, carrying storage state between windows. The home page card "Sweeps and rolling horizons built in" now links it, instead of the 3,000-word reference. <details><summary>Method, gate output, alternatives</summary> - `docs/sweep.md`, 458 words of prose. Every block runs at build time (markdown-exec), so each output is what the code printed. 1. **One solve per scenario:** `EachCoordinate('scenario')` on `examples/dispatch.yaml`, with a low and a high load. Objectives 7500.0 and 16200.0, and the `p` schedule per scenario. 2. **Window by window:** - `EachWindow('hour', steps=3, lookahead=3, into='snapshot')` on the cyclic `examples/storage.yaml` is refused before any window is solved. The page quotes the message whole. - `examples/rolling/horizon.yaml` with `carry={'soc_initial': 'soc'}` then solves 3 windows, and reads back one 8-hour schedule with `original_index=True`. 3. **Myopic pathways:** one sentence, and a link to `examples/myopic/run.py`. That example needs about ten tables, too many to run on this page. - `mkdocs.yml`: a nav entry under Tutorials. - `docs/lifecycle.md`: "Fix, relax, remove" gets a "Where next" that chains to the next tutorial. - `README.md` and `docs/stylesheets/extra.css`: the card links `…/sweep/` and keeps its icon. - Step 2 uses two models. No example model shows both the refusal and the windowed solve, and patching a spec on the page would add steps. - Gates (pixi is not installable in this session; a Python 3.12 venv with the docs group's pins stood in): - `python -m zensical build --strict`: "No issues found". The build runs every block. - `pytest tests/test_doc_examples.py tests/test_docs_site.py tests/test_models_gallery.py`: `486 passed, 3 skipped`. - `ruff check .`, `ruff format --check .` (0.16.1): clean. - Sentences: n 27, median 14, none over 25. - Not run: the full suite, `pixi run check`. </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y --- _Generated by [Claude Code](https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y)_ Co-authored-by: Claude <noreply@anthropic.com>
fluxopt-release-bot Bot
added a commit
that referenced
this pull request
Sep 25, 2026
🤖 I have created a release *beep* *boop* --- ## [0.0.1-alpha.358](v0.0.1-alpha.357...v0.0.1-alpha.358) (2026-09-25) ### Documentation * a tutorial feeds the dispatch model from parquet, reads the answer as tables and queries its archive ([#1747](#1747)) ([5ecc2ec](5ecc2ec)) * a tutorial solves one model once per scenario and then window by window ([#1746](#1746)) ([7c15f18](7c15f18)) * the readme and home page lead with four benefits for energy system modellers, in cards with icons, and the readme is under half its length ([#1743](#1743)) ([e14f3b8](e14f3b8)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: fluxopt-release-bot[bot] <307443024+fluxopt-release-bot[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
The following content was generated by AI.
Later prompts set the four benefits:
Later prompts also set the tagline ("Keep the native solver connected for warmstarts, quick updates… Stay brief!") and the link targets ("Are there better targets for each box?", then "Yes. Stacked PR for 2"). The user chose the icons from rendered option sheets.
The README and home page now follow math-spec's (energy-models/mathspec#698, energy-models/mathspec#699). They show badges, a tagline, a short intro, and four benefits. On the home page each benefit is a card with an icon, and the whole card is the link. README: 1,321 → about 540 words. Home page: 1,034 → 663.
Stacked on this: #1746 (sweep tutorial) → #1747 (tables tutorial) → #1748 (annotated solve block). The two tutorials repoint cards 1 and 2 to themselves.
Method, gate output, alternatives
Tagline, in the README and the home page hero: "Solve an optimisation model written in YAML. Attach your data as tables, and keep the solver loaded for quick updates and warm starts."
update()keeps the solver with the model on it, andkeep='progress'carries on from the last solve.The four benefits (README
benefitssnippet, which the home page includes)howto/archiving/(docs: a tutorial feeds the dispatch model from parquet, reads the answer as tables and queries its archive #1747 repoints it to the tables tutorial)reference/sweeps/(docs: a tutorial solves one model once per scenario and then window by window #1746 repoints it to the sweep tutorial). The docs use "decomposition" for Benders, whichabout/decomposition.mdsays specsolve ships no driver for, so the card takes its reference page's name.update()puts new numbers on it, andkeep='progress'warm-starts from the last run. The API is a handful of verbs. →about/benchmarks-scaling.html, the results rather than the method page.examples/pypsa_ladder/What math-spec's PRs asked for, and what this takes from them
grid cards; the icons come from CSS, chosen by each card's link; the whole card is the link.README
introsnippet that names math-spec as the language, names the solvers, and says the same file can build alinopy.Model.docs/.Home page: the six hand-written cards are gone. Their benchmark claim ("2–4x faster than linopy") had drifted from the README's "1.01x to 1.29x". The page includes the README's
badges,introandbenefits, so the text lives once. "Where to next" is a list.Cards (
docs/stylesheets/extra.css)li:has(> a[href$="…"])picks each card's icon by where its link points.docs/stylesheets/icons/:table-arrow-right,speedometerandtransmission-towerare Material Design Icons, Apache-2.0, Pictogrammers.split.svgis drawn for the sweeps card, MIT.Also:
docs/guide.mdlinkedindex.md#the-whole-thing-in-one-model. It now links#a-model-is-one-file.Gates (pixi is not installable in this session; a Python 3.12 venv with the docs group's pins stood in):
python -m zensical build --strict: "No issues found".pytest tests/test_doc_examples.py tests/test_docs_site.py tests/test_models_gallery.py: passed. The README example solves to 1920.0.ruff check .,ruff format --check .(0.16.1): clean.pixi run check.Not done:
docs/README.md, the docs folder index, is unchanged.🤖 Generated with Claude Code
https://claude.ai/code/session_01A89tReSh8rTBG9ocy7688y