Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
92e5ed8
docs: drop the effects row from the PyPSA-1.3.0 parity table, a featu…
FBumann Aug 31, 2026
307ad30
chore(main): release 0.0.0-alpha.54 (#307)
energy-models-release-please[bot] Aug 31, 2026
8dfd17d
docs(ceiling): load-time unit checking has its own refusal, where the…
FBumann Aug 31, 2026
af627b4
chore(main): release 0.0.0-alpha.55 (#311)
energy-models-release-please[bot] Aug 31, 2026
db63d3c
feat(program): the conjuncts of a where mask are the program's to giv…
FBumann Sep 1, 2026
55d2c98
chore(main): release 0.0.0-alpha.56 (#314)
energy-models-release-please[bot] Sep 1, 2026
5dfa6be
fix(program): a program describes a mathematical program rather than …
FBumann Sep 1, 2026
18644cd
chore(main): release 0.0.0-alpha.57 (#316)
energy-models-release-please[bot] Sep 1, 2026
53cc352
feat(program): a resolved where is a first-class Mask whose leaves ca…
FBumann Sep 1, 2026
71461da
chore(main): release 0.0.0-alpha.58 (#328)
energy-models-release-please[bot] Sep 1, 2026
fcfb7b8
fix(parser): a parsed expression cannot be rewritten under another pa…
FBumann Sep 1, 2026
02121b8
feat(parser): a refused expression names the rewrite rather than only…
FBumann Sep 1, 2026
09b0238
chore(main): release 0.0.0-alpha.59 (#333)
energy-models-release-please[bot] Sep 1, 2026
01920d1
fix(language): the language reference states which case arms are refu…
FBumann Sep 1, 2026
2600bfd
chore(main): release 0.0.0-alpha.60 (#335)
energy-models-release-please[bot] Sep 1, 2026
5bf6d75
chore(program): a resolved where is described by the guard and the ca…
FBumann Sep 1, 2026
337d169
perf(program): a mask walks its leaves once and every question reads …
FBumann Sep 1, 2026
9c8013a
chore(parser): a parsed where says its leaves are unresolved, so wrap…
FBumann Sep 1, 2026
3657ec6
chore(main): release 0.0.0-alpha.61 (#339)
energy-models-release-please[bot] Sep 1, 2026
b865bc1
fix(language): a declaration named what no expression could write is …
FBumann Sep 1, 2026
1e6da02
chore(main): release 0.0.0-alpha.62 (#343)
energy-models-release-please[bot] Sep 1, 2026
10c9d60
build: the fourteen type rules the gate names are errors, so a regres…
FBumann Sep 1, 2026
0b8bd03
build: a declared return type is checked rather than trusted, so an u…
FBumann Sep 1, 2026
bb8e67f
chore: the alpha.61 entry lists the one change it shipped, rather tha…
FBumann Sep 1, 2026
3f3f858
refactor(language): an operator, a declaration kind and a notation na…
FBumann Sep 1, 2026
ffd8d71
chore(main): release 0.0.0-alpha.63 (#348)
energy-models-release-please[bot] Sep 1, 2026
3dbd9b2
feat(parser): a refused where string names the rewrite for pandas and…
FBumann Sep 1, 2026
7c2123a
chore(main): release 0.0.0-alpha.64 (#353)
energy-models-release-please[bot] Sep 1, 2026
d212157
refactor(language): a translation policy and a bound's side name the …
FBumann Sep 1, 2026
12b4041
refactor(typesetting): a format spells the operators the language nam…
FBumann Sep 1, 2026
3b3eb7d
chore(main): release 0.0.0-alpha.65 (#356)
energy-models-release-please[bot] Sep 1, 2026
ea6fe79
perf: a model loads, lowers and typesets three to eight times faster …
FBumann Sep 1, 2026
aace35a
chore(main): release 0.0.0-alpha.66 (#360)
energy-models-release-please[bot] Sep 1, 2026
31cbfd2
build(deps): bump the gh-actions group with 3 updates (#361)
dependabot[bot] Sep 2, 2026
711a917
chore: drop a mask join with nothing to join, and a duplicate arm in …
FBumann Sep 2, 2026
f24ddd3
refactor: every rule two passes shared has one home, and a docstring …
FBumann Sep 2, 2026
556af30
refactor: a built-in's one positional argument is stated once, and a …
FBumann Sep 2, 2026
db96a54
refactor(typesetting): the legend reads what the equations returned r…
FBumann Sep 2, 2026
537eadf
refactor(piecewise): one block expands itself, holding its names, fra…
FBumann Sep 2, 2026
c7c2833
refactor: resolution is one method per node kind, and each operator's…
FBumann Sep 2, 2026
b25a602
refactor(model): each cross-declaration rule is one method, so a refu…
FBumann Sep 2, 2026
6a7a473
test: a sequence of cases is one parametrized test, a literal asserti…
FBumann Sep 2, 2026
88de056
chore(main): release 0.0.0-alpha.67 (#373)
energy-models-release-please[bot] Sep 2, 2026
d0fc640
feat(program): a model says whether an axis may be built a window at …
FBumann Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
fetch-depth: 0
persist-credentials: false
- name: Set up pixi
uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
with:
locked: true
# Off, deliberately: this job publishes the artifact a tag ships, and
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
persist-credentials: false

- name: Set up pixi
uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
with:
# `--locked`: pixi.lock is the environment, and a run that quietly
# re-solved would not be testing what a contributor has.
Expand All @@ -64,7 +64,7 @@ jobs:
# is not a conda package. Keyed on the lockfile so a tectonic upgrade
# gets a fresh bundle rather than a stale one.
- name: Cache the tectonic bundle
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/.cache/Tectonic
key: tectonic-${{ runner.os }}-${{ hashFiles('pixi.lock') }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pypsa-references.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
- uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
with:
run-install: false
- name: every rung solves to its record
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard (optional).
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
uses: github/codeql-action/upload-sarif@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
sarif_file: results.sarif
2 changes: 1 addition & 1 deletion .github/workflows/update-lockfiles.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Set up pixi
uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
with:
run-install: false
- name: Update lockfiles
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.0.0-alpha.53"
".": "0.0.0-alpha.67"
}
104 changes: 104 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,110 @@ contained a literal `## [X.Y.Z]` heading, release-please inserts above the first
`##` it finds, and so the entire release landed inside the comment and rendered
nowhere.

## [0.0.0-alpha.67](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.66...v0.0.0-alpha.67) (2026-09-02)


### Refactoring

* a built-in's one positional argument is stated once, and a degree question names the tree it walks ([#364](https://github.com/energy-models/math-spec/issues/364)) ([556af30](https://github.com/energy-models/math-spec/commit/556af3053e0bb32ca8bf60e656b9455b98068981))
* every rule two passes shared has one home, and a docstring says what a caller needs rather than why ([#363](https://github.com/energy-models/math-spec/issues/363)) ([f24ddd3](https://github.com/energy-models/math-spec/commit/f24ddd3089da12aa75715560992822a5a3ee818b))
* **model:** each cross-declaration rule is one method, so a refusal names the rule that raised it ([#369](https://github.com/energy-models/math-spec/issues/369)) ([b25a602](https://github.com/energy-models/math-spec/commit/b25a602d21a6bb91d597f663f8bcf0b97f95aed8))
* **piecewise:** one block expands itself, holding its names, frame and mask once ([#367](https://github.com/energy-models/math-spec/issues/367)) ([537eadf](https://github.com/energy-models/math-spec/commit/537eadf76f52615c83235e0dfbbdd2af5fa70588))
* resolution is one method per node kind, and each operator's dim rule is one function ([#368](https://github.com/energy-models/math-spec/issues/368)) ([c7c2833](https://github.com/energy-models/math-spec/commit/c7c283347869fbd45e0ff851d0112bfcbc09f98c))
* **typesetting:** the legend reads what the equations returned rather than state left on the walk ([#366](https://github.com/energy-models/math-spec/issues/366)) ([db96a54](https://github.com/energy-models/math-spec/commit/db96a54d55996a9e4cc89a3f837303149475211b))

## [0.0.0-alpha.66](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.65...v0.0.0-alpha.66) (2026-09-01)


### Performance

* a model loads, lowers and typesets three to eight times faster ([#357](https://github.com/energy-models/math-spec/issues/357)) ([ea6fe79](https://github.com/energy-models/math-spec/commit/ea6fe798c85118750294b642463b16aa0935065f))

## [0.0.0-alpha.65](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.64...v0.0.0-alpha.65) (2026-09-01)


### Refactoring

* **language:** a translation policy and a bound's side name the values they can be, rather than being a string ([#354](https://github.com/energy-models/math-spec/issues/354)) ([d212157](https://github.com/energy-models/math-spec/commit/d2121572496bf7e624cfa5e38c348cfbed4b71ad))
* **typesetting:** a format spells the operators the language names, rather than any string a walk happens to ask for ([#352](https://github.com/energy-models/math-spec/issues/352)) ([12b4041](https://github.com/energy-models/math-spec/commit/12b404126dbe00e28ad16b4736dbe90dfda833d0))

## [0.0.0-alpha.64](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.63...v0.0.0-alpha.64) (2026-09-01)


### Features

* **parser:** a refused where string names the rewrite for pandas and C connective habits ([#346](https://github.com/energy-models/math-spec/issues/346)) ([3dbd9b2](https://github.com/energy-models/math-spec/commit/3dbd9b261dd82fc5cd52924ecdd03b18ddd88c14))

## [0.0.0-alpha.63](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.62...v0.0.0-alpha.63) (2026-09-01)


### Refactoring

* **language:** an operator, a declaration kind and a notation name the values they can be, rather than being a string ([#345](https://github.com/energy-models/math-spec/issues/345)) ([3f3f858](https://github.com/energy-models/math-spec/commit/3f3f8581baabc51882ad4e1d97fb774ae1944dc3))

## [0.0.0-alpha.62](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.61...v0.0.0-alpha.62) (2026-09-01)


### Bug Fixes

* **language:** a declaration named what no expression could write is refused, rather than loading unreferenceable ([#340](https://github.com/energy-models/math-spec/issues/340)) ([b865bc1](https://github.com/energy-models/math-spec/commit/b865bc15fde7e5a7714cdf809f5f0b9e6e6f44e5))

## [0.0.0-alpha.61](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.60...v0.0.0-alpha.61) (2026-09-01)


### Performance

* **program:** a mask walks its leaves once and every question reads that walk ([#338](https://github.com/energy-models/math-spec/issues/338)) ([337d169](https://github.com/energy-models/math-spec/commit/337d1697724980356c8d911bf21242a19a6f517a))

## [0.0.0-alpha.60](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.59...v0.0.0-alpha.60) (2026-09-01)


### Bug Fixes

* **language:** the language reference states which case arms are refused, and the refusal says what actually breaks ([#336](https://github.com/energy-models/math-spec/issues/336)) ([01920d1](https://github.com/energy-models/math-spec/commit/01920d1be4f6dbd6965f6f0e7e683543384cc744))

## [0.0.0-alpha.59](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.58...v0.0.0-alpha.59) (2026-09-01)


### Bug Fixes

* **parser:** a parsed expression cannot be rewritten under another pass ([#329](https://github.com/energy-models/math-spec/issues/329)) ([fcfb7b8](https://github.com/energy-models/math-spec/commit/fcfb7b8a3e2c66cd03da316994154b9c2dd493d0))

## [0.0.0-alpha.58](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.57...v0.0.0-alpha.58) (2026-09-01)


### Features

* **program:** a resolved where is a first-class Mask whose leaves carry their dims, and the where grammar is package-private ([#327](https://github.com/energy-models/math-spec/issues/327)) ([53cc352](https://github.com/energy-models/math-spec/commit/53cc3522e917a5849ce3150585c2c9e05a8ea162))

## [0.0.0-alpha.57](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.56...v0.0.0-alpha.57) (2026-09-01)


### Bug Fixes

* **program:** a program describes a mathematical program rather than being one, and claims neither linearity nor a storage format ([#315](https://github.com/energy-models/math-spec/issues/315)) ([5dfa6be](https://github.com/energy-models/math-spec/commit/5dfa6be817fb49999571b2fdc8b8b820371f80d0))

## [0.0.0-alpha.56](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.55...v0.0.0-alpha.56) (2026-09-01)


### Features

* **program:** the conjuncts of a where mask are the program's to give, not each consumer's to re-derive ([#313](https://github.com/energy-models/math-spec/issues/313)) ([db63d3c](https://github.com/energy-models/math-spec/commit/db63d3ca90079e4031a9339ea7749c0567b31be9))

## [0.0.0-alpha.55](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.54...v0.0.0-alpha.55) (2026-08-31)


### Documentation

* **ceiling:** load-time unit checking has its own refusal, where the data-prep row used to answer for it ([#272](https://github.com/energy-models/math-spec/issues/272)) ([8dfd17d](https://github.com/energy-models/math-spec/commit/8dfd17df17993f1209fe479734c3dee756fcc384))

## [0.0.0-alpha.54](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.53...v0.0.0-alpha.54) (2026-08-31)


### Documentation

* drop the effects row from the PyPSA-1.3.0 parity table, a feature that release does not have ([#305](https://github.com/energy-models/math-spec/issues/305)) ([92e5ed8](https://github.com/energy-models/math-spec/commit/92e5ed84c14c59e8068a7814722950f936e2925a))

## [0.0.0-alpha.53](https://github.com/energy-models/math-spec/compare/v0.0.0-alpha.52...v0.0.0-alpha.53) (2026-08-31)


Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,14 +128,15 @@ builds reads the second.
That seam is [one page](docs/reference/language/reading.md), and it is the whole
of it.

And the same file says, in print:
And that same `spec` says, in print — read and checked once, then printed
three ways:

```python
symbols = 'dispatch.symbols.yaml' # optional: a dict, a path, or a SymbolTable

ms.to_latex('dispatch.yaml', symbols=symbols) # amsmath align
ms.to_typst('dispatch.yaml') # compiles without a TeX toolchain
ms.to_markdown('dispatch.yaml') # renders as-is on GitHub
ms.to_latex(spec, symbols=symbols) # amsmath align
ms.to_typst(spec) # compiles without a TeX toolchain
ms.to_markdown(spec) # renders as-is on GitHub
```

Drop the symbol table and the same model prints as $\mathit{load}_t$,
Expand Down
Loading