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 | |
|---|---|---|---|
| los_lang-3.3.7.tar.gz | 280.2 kB | 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
|