Skip to main content

fluxopt

Energy system optimization with linopy — detailed dispatch, scaled to multi period planning.

PyPI Downloads License: MIT Python 3.12+ Ruff

Early development — the API may change between releases. Planned features and progress are tracked in Issues.

Installation

pip install fluxopt

Includes the HiGHS solver out of the box.

Quick Start

# A gas boiler covers a heat demand, minimizing fuel cost
from datetime import datetime
from fluxopt import Carrier, Converter, Effect, Flow, Port, optimize

result = optimize(
    timesteps=[datetime(2024, 1, 1, h) for h in range(4)],
    carriers=[Carrier(id='gas'), Carrier(id='heat')],
    effects=[Effect(id='cost')],
    ports=[
        Port(id='grid', imports=[
            Flow(carrier='gas', size=500, effects_per_flow_hour={'cost': 0.04})
        ]),
        Port(id='demand', exports=[
            Flow(carrier='heat', size=100, fixed_relative_profile=[0.4, 0.7, 0.5, 0.6])
        ])
    ],
    converters=[
        Converter.boiler(
            'boiler',
            thermal_efficiency=0.9,
            fuel_flow=Flow(carrier='gas', size=300),
            thermal_flow=Flow(carrier='heat', size=200)
        )
    ],
    objective_effects='cost',
)

print(f"Total cost: {result.objective:.2f}")
print(result.flow_rates)

Roadmap

fluxopt is evolving into a family of packages with a lean core and optional companions:

                          ┌──────────────┐
                          │   fluxopt    │  core: model building, solving, results, IO
                          └──────┬───────┘
        ┌──────────────┬─────────┼──────────────┬──────────────┐
        │              │         │              │              │
 fluxopt-plot   fluxopt-yaml  fluxopt-tsam  fluxopt-marimo  (examples)
   plotting      YAML+CSV    time series    interactive     cross-package
   (plotly)       loader     aggregation       apps          notebooks

Companion packages depend on core — core has no knowledge of companions.

Companion packages

Package Role Versioning · Tier fluxopt pin Status
fluxopt-plot Result visualization (Plotly) Semver · Experimental — method signatures may change Tight (>=A.B,<A.C), validated per release Scaffolded — docs · #51
fluxopt-yaml Declarative model loader (YAML + CSV → Elements) Semver · Experimental — YAML schema may change Tight (>=A.B,<A.C), validated per release Scaffolded — docs · #52
fluxopt-tsam Time series aggregation — input pre-processing, possibly result disaggregation Semver · Experimental — round-trip schema may evolve Undecided — depends on whether representative-period primitives live in core (→ loose) or in this package (→ tight) Planned
fluxopt-marimo Interactive exploration & dashboards (marimo apps) CalVer (YYYY.MM.PATCH) · Experimental — apps are templates Tight (>=A.B,<A.C), validated per release Planned

Tight-pinned companions release on every fluxopt minor; validation is automated via scheduled CI. fluxopt-tsam's pin policy is blocked on an architectural decision — if representative-period primitives live in core, tsam stays a thin adapter (loose pin); if they live in tsam, the package owns deep round-trip behavior (tight pin).

Milestones

Cross-cutting work not tied to a single companion package:

Milestone Description Status Issue
Result.stats accessor Cached xarray properties for post-processing Planned #49
.plot stub on Result Discoverable property, helpful error if plot package absent Planned #50
ReadTheDocs migration Automatic versioned docs from git tags Planned #53
Remove plotly from core Keep core lean — plotting deps in fluxopt-plot only Planned #54

Stability Tiers

Component Tier Policy
Core modeling API Stable Semver. Deprecation warnings before removal.
Stats accessor Semi-stable Breaking changes allowed between minor versions with changelog entry.

Companion packages have their own stability policies — see the table above.

See #47 for the full architecture discussion.

Development

Requires uv and Python >= 3.12.

uv sync --group dev      # Install deps
uv run pytest -v         # Run tests
uv run ruff check .      # Lint
uv run ruff format .     # Format

License

MIT

Metadata

Release files for fluxopt 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fluxopt 0.1.0
File Size Uploaded
fluxopt-0.1.0.tar.gz 65.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fluxopt 0.1.0
File Interpreter ABI Platform
fluxopt-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 137.5 kB

Release files / fluxopt-0.1.0.tar.gz

Download URL fluxopt-0.1.0.tar.gz
Size 65.4 kB
Tags Source
SHA-256 checksum
How to use checksums
faa62e4c279525b429d94c9b7c19d121245b3f30fe314975222a7f1c6d088dae
BLAKE2b-256 checksum
How to use checksums
3ad5a979708d89357bd343d35c8cafd57912e8152652a19c960df756c5fba8b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.

Transparency log

Release files / fluxopt-0.1.0-py3-none-any.whl

Download URL fluxopt-0.1.0-py3-none-any.whl
Size 72.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
625a3e0695ae706658a8779f923b49791a8a54d0d73343f046e795905e6ea81a
BLAKE2b-256 checksum
How to use checksums
e6955fe616d47c2fc46b3d0cb504999b23cae1024853dabda8f93312253e1c76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.8

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page