Skip to main content

A functional reactive platform used to process time-series streams. Provides support for backtest (simulation) and realtime time-series processing. Using a forward propagation graph with a microtask scheduler for the runtime engine.

Project description

hgraph

A functional reactive programming engine with a Python front-end.

This provides a DSL and runtime to support the computation of results over time, featuring a graph based directed acyclic dependency graph and the concept of time-series properties. The language is function-based, and promotes composition to extend behaviour.

Here is a simple example:

from hgraph import graph, evaluate_graph, GraphConfiguration, const, debug_print

@graph
def main():
    a = const(1)
    c = a + 2
    debug_print("a + 2", c)

evaluate_graph(main, GraphConfiguration())

Results in:

[1970-01-01 00:00:00.000385][1970-01-01 00:00:00.000001] a + 2: 3

See this for more information.

Development

The project is currently configured to make use of uv for dependency management. Take a look at the website to see how best to install the tool.

Here are some useful commands:

First, create a virtual environment in the project directory:

uv venv

Then use the following command to install the project and its dependencies:

# Install the project with all dependencies
uv pip install -e .

# Install with optional dependencies
uv pip install -e ".[docs,web,notebook]"

# Install with all optional dependencies
uv pip install -e ".[docs,web,notebook,test]"

PyCharm can make use of the virtual environment created by uv to setup the project.

Run Tests

# No Coverage
python -m pytest
# Generate Coverage Report
python -m pytest --cov=hgraph --cov-report=xml

Indexing with Context7 MCP

This repository includes a baseline configuration for Context7 MCP to improve code search and retrieval quality.

  • See docs/context7_indexing.md for guidance.
  • The root-level context7.yaml config sets sensible include/exclude rules, priorities, and summarization hints.

Packaging, CI, and Releases

This project uses scikit-build-core and cibuildwheel to build and publish cross-platform wheels, with uv as the package/venv manager.

  • Local build (PEP 517):

    # Build a wheel into dist/
    uv build -v
    # Optionally build sdist too
    uv build -v --sdist
    
  • Optional Conan (developer builds only):

    # Conan is not required for packaging but may be used in local builds
    uv tool install conan
    # Example of enabling Conan provider for a local build
    CMAKE_ARGS="-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=conan_provider.cmake" uv build -v
    
  • macOS notes:

    • Wheels target Apple Silicon (arm64) and require a macOS deployment target high enough for libc++ floating-point to_chars used by std::format.
    • The build system enforces MACOSX_DEPLOYMENT_TARGET=15.0 (arm64) during Release Wheels and sets a default in CMake if unset.
    • You can override locally via:
      CMAKE_ARGS="-DCMAKE_OSX_DEPLOYMENT_TARGET=15.0 -DCMAKE_OSX_ARCHITECTURES=arm64" uv build -v
      
  • Windows notes:

    • Build uses MSVC (Visual Studio 2022, x64). No MinGW.
    • If stack traces via backward-cpp are enabled, Windows links Dbghelp and Imagehlp automatically.
  • Linux notes:

    • Release wheels are built inside manylinux containers; optional backward-cpp integrations are disabled there for portability.

CI summary

  • .github/workflows/ci.yml builds wheels on Linux/macOS/Windows for smoke validation, runs tests on Linux only (fast path), and repairs Linux wheels with auditwheel.
  • .github/workflows/release-wheels.yml builds publish-grade wheels with cibuildwheel (Linux manylinux, macOS arm64, Windows AMD64), builds an sdist, validates with twine, and publishes to PyPI via Trusted Publishing.

Releasing (tag-driven)

Releases are automated via GitHub Actions with PyPI Trusted Publishing.

Prerequisites:

  • Enable Trusted Publishing for this GitHub repository in the PyPI project settings (Project → Settings → Trusted Publishers). No API token is needed once OIDC is configured.
  • Ensure pyproject.toml [project].version matches the tag you plan to push (e.g., 0.4.112).

Steps:

# Update version in pyproject.toml to match your release
# Then tag and push the tag to trigger the release workflow

git tag -a v_0.4.112 -m "release 0.4.112"
git push origin v_0.4.112

The workflow will:

  • Build wheels for Linux (manylinux), macOS (arm64, macOS 15.0 target), and Windows (AMD64, MSVC)
  • Build an sdist
  • Validate with twine check
  • Publish all distributions to PyPI (skips existing files)

Artifacts are uploaded for inspection as part of the workflow run.

CLion configuration tips

  • Use the project venv Python for nanobind discovery:
    • CMake option: -DPython_EXECUTABLE=${PROJECT_ROOT}/.venv/bin/python
  • If you need Conan, use the preamble to ensure Python/nanobind are discovered first, then the Conan provider:
    • CMake option: -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=${PROJECT_ROOT}/conan_preamble.cmake;${PROJECT_ROOT}/conan_provider.cmake
  • Select the _hgraph target to build the extension.

Troubleshooting

  • Nanobind not found / Python ordering in CMake:
    • Pass -DPython_EXECUTABLE=... (or -DPython3_EXECUTABLE=...) and, if using Conan, use the conan_preamble.cmake before conan_provider.cmake.
  • I also find it helpful to perform an uv sync with at least --all-groups before setting up the cmake.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

hgraph-0.5.15.tar.gz (7.2 MB view details)

Uploaded Source

Built Distributions

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

hgraph-0.5.15-cp312-cp312-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.12Windows x86-64

hgraph-0.5.15-cp312-cp312-musllinux_1_2_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

hgraph-0.5.15-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

hgraph-0.5.15-cp312-cp312-macosx_15_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

File details

Details for the file hgraph-0.5.15.tar.gz.

File metadata

  • Download URL: hgraph-0.5.15.tar.gz
  • Upload date:
  • Size: 7.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hgraph-0.5.15.tar.gz
Algorithm Hash digest
SHA256 e3a9c3f4dfceddb0dc5f123fd4536d7a6e57cac2ee21f001da657c695d6c220a
MD5 7212467ae6eae9de5d20d3ab59dd5460
BLAKE2b-256 12dc45356eff12177e3a4aab59ccf1707d29ae6f0d23ca6bf19a1d15f0715cf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.15.tar.gz:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.15-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: hgraph-0.5.15-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hgraph-0.5.15-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 890f56bad2306ff91185083a4eaad2416003ece7c6ca5d5734479273b48d95ad
MD5 640b60489a7493002463e3b1b3216108
BLAKE2b-256 7382d40773ebb5c0395a9987fa6925e1b16899fb2dec102ce6ec504c49fff7c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.15-cp312-cp312-win_amd64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.15-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for hgraph-0.5.15-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 db54db9ea288ec007dff7a236b2e4e3cc47051e86c22618dbd3fcf4381d69422
MD5 e7800e92ad5323b809c117109e0d6c1b
BLAKE2b-256 52157777f3a16e060b8ea2cb36cca92935a4baf5e80c77d0ce80a310623281a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.15-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.15-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for hgraph-0.5.15-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 89bef528950e78eabfcb60e6e8c1cb3ef629f5f59a6a1a0d4b8fd2a3c21c1458
MD5 109a262c648ef236c373126944bde520
BLAKE2b-256 2023312e3dd4c3698dd4c8b1981717f4d2fd9ad912acf29e4b9a35bac99bdd77

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.15-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.15-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for hgraph-0.5.15-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1ec167a308ea5a934e3acc2e113e7398632d7aa3fc61e21c032af59f3aa9d182
MD5 2f5f9123a283840a95433b27e865203b
BLAKE2b-256 9a001ada4c3089c423c2022c34b23a3a199e9bc6c06dd1abddb9d2aeb138442a

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.15-cp312-cp312-macosx_15_0_arm64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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