Skip to main content

Add your description here

Project description

regelum

docs tests python uv

regelum

regelum is a framework for prototyping and simulating dynamic systems and general dataflows. It introduces Phased Reactive Systems (PRS): systems that execute one tick at a time, activate different groups of nodes in different phases, and move between phases with explicit transitions.

Any algorithm written with regelum can be decomposed into a graph of phases with conditional transitions. Each phase is represented as a DAG of computational primitives called nodes: stateful computation units with two namespaces, Inputs and State. A state variable written by one node can be used as an input of another node, while a node can also read its own previous state directly in update.

regelum deliberately leans on Python syntax sugar. The API is inspired by frameworks such as FastAPI, Typer, Pydantic, SQLModel, SQLAlchemy, FastStream, and others that made Python annotations, descriptors, nested classes, and declarative function signatures into compact framework DSLs. In regelum, Node, State, Var, Input(src=...), and update(...) provide a concise way to write computation nodes while the built-in compiler/resolver derives the execution order and validates the graph.

Overview

  • Nodes declare typed inputs and state variables, then compute their next state in update.
  • Phases decide which node instances are active together and how control moves between phases.
  • Continuous nodes declare ODE state and are integrated through ODESystem phases.
  • Compilation resolves links, schedules nodes, and catches structural mistakes before runtime: unresolved inputs, ambiguous references, invalid phase graphs, and computations that cannot be guaranteed to resolve.

The best entry point is the Learn overview:

Quick Example

import regelum as rg


class TemperatureSensor(rg.Node):
    class State(rg.NodeState):
        temperature: float = rg.Var(init=19.0)

    def update(self) -> State:
        return self.State(temperature=21.5)


class HeaterController(rg.Node):
    class Inputs(rg.NodeInputs):
        temperature: float = rg.Input(
            src=TemperatureSensor.State.temperature,
        )

    class State(rg.NodeState):
        heater_on: bool

    def update(self, inputs: Inputs) -> State:
        return self.State(heater_on=inputs.temperature < 22.0)


class HeatingCycles(rg.Node):
    class Inputs(rg.NodeInputs):
        heater_on: bool = rg.Input(src=HeaterController.State.heater_on)

    class State(rg.NodeState):
        count: int = rg.Var(init=0)

    def update(self, inputs: Inputs, prev_state: State) -> State:
        return self.State(
            count=prev_state.count + int(inputs.heater_on),
        )


sensor = TemperatureSensor(name="room_sensor")
controller = HeaterController(name="heater_controller")
cycles = HeatingCycles(name="heating_cycles")

system = rg.PhasedReactiveSystem(
    phases=[
        rg.Phase(
            "control",
            nodes=(sensor, controller, cycles),
            transitions=(rg.Goto(rg.terminate),),
            is_initial=True,
        ),
    ],
)

system.step()
print(system.read(controller.State.heater_on))

Installation

Recommended: use uv.

uv add regelum

For local development from this repository:

uv sync --all-groups
uv run pytest tests
uv run ty check src tests
uv run mkdocs serve

Examples

uv run regelum-pendulum
uv run marimo edit examples/free_pendulum/rg-examples-free-pendulum.py
uv run marimo edit examples/controlled_pendulum/rg-examples-controlled-pendulum.py
uv run regelum-video-player
uv run regelum-instance-connect

Release Process

Create a GitHub Release tagged like v0.2.0. The publish workflow builds the package, derives the version from the tag, and uploads artifacts to PyPI.

After installation, users can verify the packaged version:

import regelum

print(regelum.__version__)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

regelum-0.3.5.tar.gz (102.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

regelum-0.3.5-py3-none-any.whl (135.9 kB view details)

Uploaded Python 3

File details

Details for the file regelum-0.3.5.tar.gz.

File metadata

  • Download URL: regelum-0.3.5.tar.gz
  • Upload date:
  • Size: 102.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for regelum-0.3.5.tar.gz
Algorithm Hash digest
SHA256 6c51c4eba6ce5c138783853e220880c929e41462352fc52ad8e7b0a38a7e5e22
MD5 1f0b56c4a8c8ae3256181cc349b5f8f8
BLAKE2b-256 2f2b86b943c02fd9f44183781c0f103e511cbd1fc8dd15ded932d6e26cad0491

See more details on using hashes here.

File details

Details for the file regelum-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: regelum-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 135.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for regelum-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e2a6bff175e9571b1c655b6668218adad0e85f35fa680ab189183c03c6c8527f
MD5 a96ddf61caba6e927eeae1b525025a1e
BLAKE2b-256 aac1d327f3f2096e93cc07a23e8ff698dcc9af9f6f338e5e08c1c491429723a8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page