Prior art and credit¶
The projects specsolve is derived from, and how to cite them.
Calliope (Apache-2.0) is
where the YAML you write comes from: solver-ready math as a reviewable file,
a block per component, dims:, a where: string over AND/OR/NOT,
bounds:, active:, and parsing with pyparsing rather than eval. Our expressions is their global_expressions,
and our piecewise is their piecewise_constraints. What is ours is the
semantics underneath: one expression per block, macros that take arguments, a
schema closed at every level, and the absence and degree-1 laws
(the ten rules).
Their math is the corpus we score coverage against, not a specification we
match
(the limits).
File portability is not a goal: a Calliope model does not load here.
linopy (MIT) is the vocabulary, the oracle and the denominator. Where a concept is already theirs, we copy the spelling. Every language feature is differentially tested against a linopy build, and the benchmarks measure specsolve against it. Coming from linopy maps one to the other. The ported models in the gallery and their reference optima are PyPSA's.
No code from any of them is vendored, so none of this is a licence obligation. Neither project has reviewed this one, and mistakes in the comparisons above are ours.
If you cite this project, cite the two it is built on:
@article{Pfenninger2018,
doi = {10.21105/joss.00825}, year = {2018}, publisher = {The Open Journal},
volume = {3}, number = {29}, pages = {825},
author = {Stefan Pfenninger and Bryn Pickering},
title = {Calliope: a multi-scale energy systems modelling framework},
journal = {Journal of Open Source Software}
}
@article{Hofmann2023,
doi = {10.21105/joss.04823}, year = {2023}, publisher = {The Open Journal},
volume = {8}, number = {84}, pages = {4823},
author = {Fabian Hofmann},
title = {Linopy: Linear optimization with n-dimensional labeled variables},
journal = {Journal of Open Source Software}
}