Glossary¶
The one definition of each name this project uses. The rest hang off one distinction:
A spec is the math you write. A model is that spec with your data on it. A result is one answer read back.
The chain¶
- Spec
- The math before any data: a YAML file, a mapping, or a
Specfrommath_spec.to_spec. It carries no numbers, and every verb takes it first. What it may contain is the language. - Program
- The spec lowered to the plan a build reads its rows off: what
checkreturns, still with no data. The two states are the language's (reading a loaded model). - Model
- A spec with data attached: what
buildreturns (lpspec.Model). One model feeds any sink:solve(),write(path),row(...),diagnostics().update(...)puts new numbers on it in place. - Result
- One answer read back from a solve:
objective,primal(name),dual(name),expression(name). It owns its tables, so it outlives its model.
The verbs¶
- check · build · solve · write
check(spec)validates and lowers.build(spec, sources)returns a Model.solveandwritebuild and then solve or stream in one call. There is no Python API for constructing a spec.- update
model.update(sources)puts new numbers on a built model in place, naming only what changed. A change that moves a mask rebuilds and solves cold.- Buildable
- The type alias for a spec argument:
str | Path | dict | Spec | Program. - Source
- The type alias for one value of
sources. The shapes it covers are the data contract. - Label
- One member of a dimension,
windsay, and its type alias:int | float | str | datetime. A sweep's slice key is a label too, andEachCoordinate(dim)slices on one label ofdimat a time.
The data¶
- Index
- A dimension's labels in order, supplied under the dimension's own key in
sources.shiftreads that order positionally (the data contract). - Coordinate
- One point of a declaration's dimensions: one snapshot for one generator. A parameter has a value at each coordinate it covers, or no row there. The language calls the dimensions themselves the declaration's frame (named expressions).
- Table
- A polars
DataFramewith one column per dimension, avaluecolumn and one row per coordinate: what a parameter arrives as, and whatprimalhands back. - Mask
- The
where:on a declaration. What an excluded coordinate means is absence.
How it runs¶
- Lane
- One of two ways a spec is executed. The relational lane (the default)
validates at load time, lowers to the plan and streams on polars. The
linopy lane (
lpspec.linopy, the[linopy]extra) builds the same spec as alinopy.Model. Both accept the same language (relationship to linopy). - Engine
- The relational lane's builder: it fills the model's tables from the attached data and hands them to a sink.
- Sink
- Where the built tables land: a solver (
highs,gurobi,xpress) or a file writer (.lp,.mps).linopyis a lane, not a sink. - Sources
- The data you attach: parameter, dimension and lookup names to tables, and dimension names to their labels.
- attach
- Fitting sources onto a spec to make a Model; what
builddoes andupdatedoes again. Never "bind", so thatboundmeans one thing.
The built form¶
- Tables
- The built model as a sink sees it:
cols(bounds, type),obj,rows,matrix(CSR),quadandsos. - keep
- How much of a session
model.solvecarries to the next solve:solver(default),progress(its work too) ornothing(the verbs). - solve_over (a sweep)
- Solve one spec once per slice of an axis and fold the answers into a
Runs, releasing each slice's model as it goes.
bound means one thing¶
- bound
- A lower or upper limit on a variable or a constraint row: the
bounds:of a declaration, theBOUNDSsection of an.mpsfile, an absent bound the solver reads as infinity. Nothing else; data is attached, never bound.