LOS — Language for Optimization Specification
LOS is a Language for Optimization Specification. It compiles human-readable model definitions into executable Python code (currently using PuLP as the primary engine), keeping your business logic clean and your data pipeline separate.
"Write Math, Run Python."
Installation
pip install los-lang
Or install from source:
git clone https://github.com/jowpereira/los.git
cd los
pip install -e .
Quick Start
1. Write a Model (production.los)
import "products.csv"
import "factories.csv"
set Products
set Factories
param Cost[Products]
param Capacity[Factories]
var qty[Products, Factories] >= 0
minimize:
sum(qty[p,f] * Cost[p] for p in Products, f in Factories)
subject to:
capacity_limit:
sum(qty[p,f] for p in Products) <= Capacity[f]
for f in Factories
2. Prepare Data
products.csv
Products,Cost
WidgetA,10
WidgetB,15
factories.csv
Factories,Capacity
Factory1,1000
Factory2,2000
3. Solve (solve.py)
import los
result = los.solve("production.los")
if result.is_optimal:
print(f"Optimal Cost: {result.objective}")
print(result.get_variable("qty", as_df=True))
Why LOS?
| Feature | LOS | Raw PuLP/Pyomo |
|---|---|---|
| Readability | Whiteboard-like syntax | Python boilerplate |
| Data Binding | Native CSV imports | Manual DataFrame wrangling |
| Security | Sandboxed execution | Full Python access |
| Debug | Inspect generated code (model.code()) |
Black box |
| Solver | CBC, GLPK, Gurobi, CPLEX (via PuLP) | Same |
| Backends | PuLP (Pyomo planned) | N/A |
Advanced: Manual Data Binding
For dynamic data (APIs, databases), inject DataFrames directly:
import los
import pandas as pd
df = pd.DataFrame({"Products": ["A", "B"], "Cost": [10, 20]})
result = los.solve("model.los", data={"Products": df})
Documentation
| Document | Description |
|---|---|
| User Manual | Full syntax reference and API guide |
| Security Policy | Sandbox details and threat model |
| Changelog | Version history |
| Backlog | Roadmap and future features |
| Contributing | How to contribute |
License
MIT © Jonathan Pereira
Metadata
Release files for los-lang 3.3.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| los_lang-3.3.7.tar.gz | 280.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| los_lang-3.3.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 358.9 kB
Release files / los_lang-3.3.7.tar.gz
| Download URL | los_lang-3.3.7.tar.gz |
|---|---|
| Size | 280.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
102ef55433f2ac2104dafed9f2008479177953e10a7723d5ff6572c170ff0d08
|
|
BLAKE2b-256 checksum How to use checksums |
4994cedf2e91ecec9f9a0d01cd9ff6f0ed62f6f30a9f82af274d12e14d606937
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.7.9
|
Release files / los_lang-3.3.7-py3-none-any.whl
| Download URL | los_lang-3.3.7-py3-none-any.whl |
|---|---|
| Size | 78.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
59800c82845fc199f9608826f408c5aa59f7e51f7353dac06b3d256ffc3706e3
|
|
BLAKE2b-256 checksum How to use checksums |
16f48120d434bdb4e1db1d315b18403e7cab542567d22d1ef720eef2210de236
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.7.9
|
Security for los-lang 3.3.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.