Skip to main content

Python binding for nil-gate: Tiny, header‑only, change‑driven DAG library (C++20) with C-API

Project description

nil-gate

Python binding for nil-gate — a tiny, change-driven DAG library for C++20.

Features

  • Change-Driven Execution: Only recompute when inputs change
  • Type-Safe Ports: External, mutable, and read-only port abstractions
  • Multiple Runners: Choose between immediate, async, and soft-blocking execution strategies
  • Minimal Dependencies: Header-only C++ core with optional FFI bindings
  • Cross-Language: C++, Lua, Python, and extensible to other languages

Installation

pip install nil-gate

Quick Start

import nil_gate

# Create a core with SoftBlocking runner
core = nil_gate.create_core()

# Define a simple equality function
def eq(l, r):
    return l == r

# Setup: create a port and a doubling node
def setup(graph):
    port = graph.port(eq, 21)
    doubler = graph.node(
        lambda args: args.outputs[0].set_value(args.inputs[0] * 2),
        [port],
        [eq],
    )
    return port, doubler.outputs()[0]

# Execute setup
port = out = None
def store_result(graph):
    global port, out
    port, out = setup(graph)

core.post(store_result)
core.commit()

# Update input and observe output
core.post(lambda graph: port.to_direct().set_value(42))
core.commit()

print(out.value())  # Output: 84

core.destroy()

API Reference

Core

Main entry point for the graph execution engine.

core = nil_gate.create_core()
Method Description
commit() Flush pending mutations and trigger execution
post(fn) Schedule fn(graph) to run on next commit()
apply(fn) Run fn(graph) immediately and block until complete
destroy() Unset runner and destroy core; invalidates instance

Graph

Passed as an argument to post() / apply() callbacks. Do not store beyond callback scope.

Method Description
port(eq, value=None) Create external port with equality function
node(fn, inputs, outputs) Register a node with inputs and outputs

Ports

Three port types for different access patterns:

  • EPort — External port (created with graph.port())

    • to_direct()MPort (mutable handle)
    • as_input()RPort (read-only handle)
  • MPort — Mutable port (write and read values)

    • set_value(v) / unset_value()
    • value() / has_value()
    • as_input()RPort
  • RPort — Read-only port (read values only)

    • value() / has_value()
    • as_input()RPort

NodeArgs

Argument passed to node execution callback.

Field Type Description
core Core Core handle (valid during call)
inputs list[Any] Current input values
outputs list[MPort] Output port handles

Memory Model

The Python binding uses ctypes to interact with the C API. Key points:

  • Python values are stored in an internal registry and passed as opaque tokens to C
  • Equality functions (eq) are called by C to determine if values have changed
  • Cleanup is automatic when ports are destroyed, but call core.destroy() explicitly when done

Documentation

For detailed API documentation and more examples, visit:

License

CC BY-NC-ND 4.0

Support

For issues, questions, or contributions, visit the GitHub repository.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

nil_gate-1.6.7-py3-none-manylinux_2_35_x86_64.whl (43.1 kB view details)

Uploaded Python 3manylinux: glibc 2.35+ x86-64

nil_gate-1.6.7-py3-none-any.whl (42.9 kB view details)

Uploaded Python 3

File details

Details for the file nil_gate-1.6.7-py3-none-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for nil_gate-1.6.7-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 930e252851c4f131cdf25000ba7d8248e1f87dfb9ff438ece433fa40aea33801
MD5 da30a1192186040840e283a45544ea50
BLAKE2b-256 fe3f32cd3735ad51443c9b450f4791ec16c3b93ffb7c489e29b2c65dac608cfd

See more details on using hashes here.

File details

Details for the file nil_gate-1.6.7-py3-none-any.whl.

File metadata

  • Download URL: nil_gate-1.6.7-py3-none-any.whl
  • Upload date:
  • Size: 42.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for nil_gate-1.6.7-py3-none-any.whl
Algorithm Hash digest
SHA256 cd8bdf788a32e631e1c628908117902ee38b0da19dfdecf8cd2580a391714bdc
MD5 14d74939675ec40b2f362acde3b4e0a8
BLAKE2b-256 6b935452b6392a004fb35a87d4f15f1f679a5d1d62b32b9f6a7cde7dcb4e73ab

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