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 doubler(args):
    args.outputs[0].set_value(args.inputs[0] * 2)

def setup(graph):
    port = graph.port(eq, 21)
    node_out = graph.node(
        doubler,
        [port],
        [eq],
    )
    return port, node_out.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
def update_input(graph):
    port.to_direct().set_value(42)

core.post(update_input)
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)
  • MPort — Mutable port (write and read values)

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

    • value() / has_value()

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

Lifetime Notes

Core instances are owning handles. The Python binding uses GC finalizers to call core.destroy() if the object is collected while still active. Finalizer timing is nondeterministic and may not run at shutdown, so call core.destroy() for deterministic teardown.

Graph objects passed to post()/apply() callbacks are non-owning views and must not be stored or destroyed. The NodeArgs instance passed to node functions is also borrowed and only valid for the duration of the callback.

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.9-py3-none-manylinux_2_35_x86_64.whl (43.2 kB view details)

Uploaded Python 3manylinux: glibc 2.35+ x86-64

nil_gate-1.6.9-py3-none-any.whl (43.0 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for nil_gate-1.6.9-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ceb96c857f18a6db50a0d2abef3bec32f20b2108569cd26dda7cf9e1cfe5d3f1
MD5 b0b969a10b5d3ba957286a2df07a51a2
BLAKE2b-256 288805fff7300f4df45468448f928b2e02db7c45f7c8df822ca2373a47041611

See more details on using hashes here.

File details

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

File metadata

  • Download URL: nil_gate-1.6.9-py3-none-any.whl
  • Upload date:
  • Size: 43.0 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.9-py3-none-any.whl
Algorithm Hash digest
SHA256 7ef8c464d837f891d90f79b5b7a80d7dc359a7f08bbac8a811055b5e8e749532
MD5 8bc8f459e91c8f83136293748db9fb4e
BLAKE2b-256 843cb8b8e0318d6fa7c74c3e0211281ac19ecb7f16cbb8f3c5f53f76224910c3

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