Skip to main content

Togeari

Togeari: many sequential KIR jobs, one out-of-order machine, pluggable engines, every result checkable against the reference

A machine that runs thousands of KIR jobs at once, out of order, on pluggable engines, and checks recorded runs against the reference interpreter.

A KIR program describes one job as a plain sequential run: call this node, branch on that value, loop over these items. Togeari runs many such jobs together the way an out-of-order CPU core runs a thread. Inside a job it overlaps everything the sequential run cannot tell apart; across jobs it batches calls to the same engine and keeps every engine unit busy. kohakunode's reference interpreter defines what each job must produce, and the conformance checker replays recorded runs through it.

$ python examples/parallel/machine.py
part 1: one city, one job
  conformance: 1/1 jobs match the reference
  Kyoto   weather           |###############        |  0.00s
  Kyoto   events            |##########             |  0.00s
  Kyoto   traffic           |############           |  0.00s
  Kyoto   survey north      |#####                  |  0.00s
  Kyoto   survey harbor     |#####                  |  0.00s
  Kyoto   survey old town   |#####                  |  0.00s
  Kyoto   survey west       |#####                  |  0.00s
  Kyoto   survey station    |#####                  |  0.00s
  Kyoto   alert             |               ####### |  0.30s
  summary: storm, 15 events, traffic 0.5, storm warning for Kyoto, district scores [5, 2, 6, 8, 9]
  strands at once (peak): 3
  calls in flight at once (peak): 8
  (a strand ends once it has fetched its code; its calls stay in flight after it)
  one job: 0.45s; the same calls one after another: 1.40s

One job of a sequentially written program (examples/parallel): the two parallel arms, an independent lookup and five district surveys all run at once; the surveys do not wait for the storm branch to be decided, and alert starts the moment weather returns.

When each call of one job ran, against the same calls one after another

When to use it

  • Many jobs, each a small program of calls to slow things: models on a GPU, HTTP services, heavy Python functions. You write one job as plain sequential code; the machine overlaps everything that sequential code cannot tell apart, inside a job and across jobs.
  • You need the results to be exactly what the sequential code gives. Every recorded job can be replayed through the kohakunode reference interpreter, and a mismatch names the call.
  • Calls of one kind should be batched across jobs (a GPU model wants 64 items at once even though each job sends one), and several engine units should share the work and fail over.

It is not a workflow scheduler for long-lived tasks or a cluster manager: one machine is one Python process with one dispatcher thread, and engines bring their own workers, processes or servers.

Concepts

The machine is built like an out-of-order CPU core, with jobs as threads:

CPU Togeari
thread job one run of a KIR entry over one source item
instruction statement a node call, assignment, branch or loop step
program counter strand a job's point of fetch; parallel, run-ahead and each add strands
register renaming value slots every write gets its own slot, so later writes never disturb earlier readers
reorder buffer window a job's unfinished statements, retired in program order
precise exception fault taken at retire in program order; younger work is squashed; @try handles it
functional unit engine unit one worker pool, model or service endpoint
issue port lane the queue in front of interchangeable units of one engine kind
instruction memory code memory every loaded program, shared by all jobs; a job carries only addresses
flowchart LR
    src[("source")] --> adm["admission"] --> jobs["resident jobs<br/>(strands, slots, window)"]
    jobs -->|"ready call"| lanes["lanes<br/>(queue, form, pick unit)"]
    lanes --> units["engine units<br/>(threads, processes, GPU, HTTP)"]
    units -->|"result via inbox"| jobs
    jobs -->|"retired in order"| sink[("sink")]
    jobs -.->|"recorded calls"| ref["kohakunode reference<br/>(togeari conform)"]
  • Out of order, exactly. Each job is a thread; each statement an instruction. Writes are renamed to value slots, statements issue as soon as their inputs exist, and a per-job window retires them in program order. Failures are precise: they are taken in program order, younger work is squashed, and @try behaves as in the sequential run.
  • Run-ahead without guessing. A branch whose condition is still being computed parks; the code after its reconvergence point keeps going. each runs one strand per item. Nothing runs on a path the sequential run would not take.
  • One job, many strands; many jobs, one machine. A job is never split into sub-jobs: its strands share one window and one order. Thousands of jobs, of any number of programs, share one code memory and one dispatcher.
  • Lanes and multi-issue. A lane holds interchangeable units of one engine kind (call, batch or stream). It queues ready calls from every job, forms batches, picks units by a policy, multi-issues to every unit with free capacity, retries on unit errors, fails over, times out, and takes units in and out while running.
  • Engines are contracts. The machine defines what an engine provides and how it behaves (B1–B7: submit never blocks, exactly one result per item, honest capacity, item errors apart from unit errors). check_engine and togeari units test any engine against them. Builtins: PythonCallEngine (threads or processes), WebCallEngine (any HTTP service), TorchEngine (models sharing devices under one scheduler).
  • Effects stay in order. ordered nodes run when the sequential run would reach them; mutates nodes change values in place without older readers seeing it.
  • Plugins at every seam. Admission, submit, results, faults, the sink, unit state, the event bus, queries and commands. Counters, the run report, the trace, the conformance recorder, the HTTP inspector and the budget are ordinary plugins.
  • Inspectable and supervised. Queries and commands go through the dispatcher's inbox and see one consistent state. A failing job fails alone, a failing plugin is disabled, and a dead dispatcher answers every caller instead of hanging.
  • Proof. Every node call of a recorded job is kept in retire order; togeari conform replays it through kohakunode, and --reexecute runs chosen nodes again to catch a result delivered to the wrong statement.
  • Two cores, one protocol. The dispatcher is written twice: in Python, the reference, and in Rust (togeari._rs, in every wheel), which makes the same decisions in the same order 1.9–5.1× faster and leaves the GIL to engine threads while it waits. The Rust core runs by default; core="python" runs the reference (speed).

Install

pip install togeari              # core (kohakunode >= 0.2.2)
pip install "togeari[web]"       # WebCallEngine (httpx)
pip install "togeari[torch]"     # TorchEngine
pip install "togeari[vault]"     # KohakuVault store, source and sink
pip install "togeari[report]"    # zstd-compressed run report events

Wheels cover CPython 3.10–3.14 on Linux x86_64 / aarch64, Windows x64 and macOS arm64; each carries the native extension togeari._rs, so the Rust core runs with nothing more to install. Elsewhere pip builds the sdist, which needs a Rust toolchain (rustup). From a clone (Windows PowerShell or bash), also with a Rust toolchain to build the extension:

git clone https://github.com/KohakuBlueleaf/Togeari && cd Togeari
uv venv -p 3.12
uv pip install -e ".[web,vault,dev]"     # add torch from the index matching your driver
togeari doctor

togeari doctor prints versions, the core a machine runs, devices and any leftover worker processes. A machine runs the native Rust core when the extension is built and the Python core, the reference, otherwise (core="auto"); Machine(core="python" | "rust") (or TOGEARI_CORE=python|rust) picks one, and asking for "rust" without the extension is a construction error (native core). Both make the same decisions in the same order.

Quick start

A machine is a program, its node library, and where each node runs:

from pathlib import Path

from kohakunode import NodeLibrary

from togeari import Inline, Lane, Machine, Use
from togeari.engines.python import PythonCallEngine
from togeari.io import Iterable, Memory

lib = NodeLibrary("demo")


@lib.node(outputs=["y"])
def slow_double(x: int) -> int:
    return 2 * x


@lib.node(outputs=["total"])
def add_up(ys: list) -> int:
    return sum(ys)


PROGRAM = """
@def (xs: list)main(total):
    ys = []
    (xs)each(x, `one`)
    one:
        (x)slow_double(y)
        (ys, y)append(ys)
    (ys)add_up(total)
"""

work = Lane([PythonCallEngine(workers=4, mode="thread")], name="work")
machine = Machine(
    program=PROGRAM,
    entry="main",
    libraries=[lib],
    bind={"slow_double": Use(work), "add_up": Inline(), "kir.std.*": Inline()},
)
with machine:
    sink = Memory()
    machine.run(Iterable([{"xs": [1, 2, 3]}, {"xs": [4, 5]}]), sink)
    print(sorted(r.outputs["total"] for r in sink.records))

It prints [12, 18]. Records reach the sink as jobs finish, so their order is not the input order. Keys are strings (Iterable without key= gives "0", "1", …), so sort by a value the job carries, or give key=. A str program is KIR text; a Path is a file.

For a machine module (a file with build() returning the machine, a source and a sink), with the module's folder on PYTHONPATH so the CLI can import its node library:

togeari check   examples/hello/machine.py              # build, start no unit, print every problem
togeari run     examples/hello/machine.py --report runs/hello
togeari conform runs/hello --lib nodes:lib             # replay every recorded job
togeari conform runs/hello --lib nodes:lib --reexecute compose
togeari decode  examples/hello/hello.kir --entry greet --lib nodes:lib
togeari units   examples/hello/machine.py              # engine behaviour checks on every unit
Command Does
togeari check MACHINE builds the machine without starting a unit and prints every problem
togeari run MACHINE [--limit N] [--report DIR] runs the module's source into its sink; with --report, a full run report
togeari conform DIR [--lib M:A] [--run ID] [--reexecute NODE] [--no-engine-errors] replays recorded jobs through the reference; re-executes the named nodes
togeari decode PROGRAM --entry E [--lib M:A] prints the decode tables of one entry
togeari units MACHINE [--unit U] [--rounds N] runs the engine behaviour checks (B1–B7) on every unit with samples
togeari doctor versions, devices, leftover worker processes

Examples

Example Shows
hello each, switch, @try around a slow service; conformance against the reference
multi_unit one lane, three units of different speed; the fastest goes down and comes back
trace_replay stream, call and batch lanes side by side on replayed latency samples
parallel one job's independent work at once: parallel arms, run-ahead past a branch, an each fan-out, with a timeline
mixed the builtin engines together: an HTTP registry, Python worker processes, a network on cuda:0, ordered log writes, every job recorded and conformed

Their output on the release tree (the default core, Rust):

$ python examples/hello/machine.py
Ayu: 3 cards ['Hello, Ayu!', 'Konnichiwa, Ayu!', 'Bonjour, Ayu!']
Bao: 4 cards ['Ni hao, Bao!', 'Hola, Bao!', 'Hallo, Bao!', 'Hello, Bao!']
Chi: 1 cards ['Konnichiwa, Chi!']
Dev: 3 cards ['Bonjour, Dev!', '?, Dev!', 'Hello, Dev!']
Eli: 0 cards []
conformance: 5/5 jobs match the reference
5 jobs, 38 node calls in 1.04s

$ python examples/multi_unit/machine.py
40 jobs in 2.10s, wrong results: none
conformance: 40/40 jobs match the reference
lane work: retries 1, units down 1, back up 1
  unit slow    state up    items   84  errors {}
  unit medium  state up    items  171  errors {}
  unit fast    state up    items  225  errors {'SimOutage': 1}

$ python examples/trace_replay/machine.py
60 documents in 1.71s, kept 41
one job at a time, one call at a time: about 40.4s
  lane fetch  submitted   60  batch sizes {}
  lane score  submitted  243  batch sizes {7: 8, 5: 3, 6: 11, 4: 10, 3: 3, 10: 1, 11: 1, 8: 3, 9: 1, 2: 1, 1: 1}
  lane parse  submitted  243  batch sizes {}
conformance: 60/60 jobs match the reference

$ python examples/mixed/machine.py          # an HTTP registry, 8 worker processes, a network on cuda:0
st003: calm/strong    ['calm/strong', 'calm/strong', 'calm/strong', 'calm/strong', 'calm/strong', 'pulse/strong', 'calm/strong']
st004: calm/weak      ['calm/weak', 'calm/weak', 'calm/weak', 'calm/weak', 'calm/weak', 'calm/weak', 'calm/weak', 'calm/weak']
...
... 120 stations, 0 failed
conformance: 120/120 jobs match the reference
ordered log: 0 problem(s)
120 jobs, 5634 node calls in 3.27s

$ PYTHONPATH=examples/mixed togeari conform runs/mixed/report --reexecute features --reexecute classify --reexecute majority
run 20261022-014140-77768-7bd5a8: 120/120 conform; 0 with weak values; 0 weak digests
120/120 jobs conform; 0 with weak values; 0 weak digests

In mixed, twelve stations are unknown to the registry: their lookup fails inside @try, the fault is taken in program order, and the job continues with gain 1.0. Each station's note lines reach the survey log in window order, followed by its verdict, while the windows themselves are computed out of order.

Builtin parts

Engine Kind For
PythonCallEngine(workers, mode="thread" | "process", transport="pickle" | "shm", imports=) call node functions off the dispatcher; process workers import node libraries at start, restart after a crash, and are killed and replaced when a cancelled item hangs
WebCallEngine(base_url, max_inflight, rate, pool_size, health_path, connect_timeout_s, on_unit_error) call any HTTP service through an adapter (JsonHttp); Retry-After, 429 / 503 and connections that do not open as unit errors; on_unit_error lets the other requests finish ("block") or answers them at once ("cancel"); a token bucket
TorchEngine(devices, memory_cap_gb, schedule, isolation) batch, one unit per model models sharing devices: co_resident, swappable, priority_streams; thread or process isolation; allocator cap set before weights load
SimCall / SimBatch / SimStream any simulated engines with latency models, item errors and outages
Policy Builtins
admission Fixed(n), TargetLoad(lane, waiting=), MemoryBound(bytes), All(...)
issue order Fifo, OldestJobFirst, DeepestFirst, LaneAware, HintPriority
batch forming SizeOrWait(size, wait_ms), Bucketed(inner, key), Greedy
unit choice LeastLoaded, Throughput, Affinity(key=), RoundRobin, ByHint
Plugin Does
Counters() per-second counters: dispatcher, lanes, units, jobs, work
RunReport(path) spec.json, env.json, metrics.jsonl, events.jsonl[.zst], records, summary.json, written as the run goes
Perfetto(path) a trace with a track per unit, lane queue and dispatcher phase
Recorder(path) conformance records per run, programs keyed by semantic hash (RunReport embeds one)
Inspector(port=0) HTTP queries, JSON commands (host / origin checked, a random access token by default) and an event stream
Budget(max_jobs=, max_calls_per_node=, walltime_s=) stops admitting or blocks submits past its caps

The main knobs (the full table, with the debug knobs and the Machine arguments, is in writing a machine):

Knob Default
window 64 unfinished statements per job
retire_buffer 4096 done statements waiting to retire, per job
run_ahead True park at a pending branch and continue after it
mutates "copy-if-speculative" or "wait", "copy-always"
record None the fraction of jobs recorded for conformance
events "sampled" or "all", "counters"
snapshot_every None retire boundaries between job snapshots
step_budget None instructions a job may execute
plugin_errors "disable" or "log"
gc_threshold (50000, 20, 100) the process collector threshold while running; None keeps the process's own
squash_reuse 1024 results kept per job after a taken fault, reused when the refetched call's inputs match; 0 re-sends
squash_reuse_bytes 64 MiB bytes of those results kept per job; None: no byte cap
gil_offer_us None the Rust core's least time between two GIL offers to other threads; None offers only while it waits for events

Every knob can change while the machine runs (machine.command("set_knob", ...)).

Speed: the Python and Rust cores

The Rust core makes the Python core's decisions 1.9–5.1× faster. Measured in one run of scripts/studies/p8/s8.py --scale full on one workstation (CPython 3.13, one GPU): every measurement runs each variant once per round in a rotating order; medians of five rounds (ceiling) or three (the rest). Every table, the method and the rule that chose the defaults: the cores compared.

Dispatcher ceiling (simulated engines that answer at once, so the dispatcher is the only cost):

workload Python core Rust core Rust / Python
a chain of inline nodes 84,445 calls/s (11.8 µs/call) 431,650 calls/s (2.3 µs/call) 5.11×
a chain of calls on an engine lane 30,588 calls/s (32.7 µs/call) 57,184 calls/s (17.5 µs/call) 1.87×
each with batched calls 42,507 calls/s (23.5 µs/call) 117,849 calls/s (8.5 µs/call) 2.77×

Dispatcher ceiling by core and gil_offer_us

Scaling (dispatcher µs per resident job or per each item; lower is better):

shape Python core Rust core Rust, gil_offer_us=0 Rust, gil_offer_us=300
500 resident jobs 52.0 34.1 43.0 34.2
2,000 resident jobs 52.7 39.8 41.4 32.7
8,000 resident jobs 55.5 41.5 51.0 39.2
each over 250 items 82.6 34.6 56.8 33.3
each over 1,000 items 79.5 37.6 62.9 30.1
each over 4,000 items 78.7 31.2 59.9 30.9

Dispatcher cost as the machine grows, by core

GIL contention (an engine fed from its own thread, items/s, while the dispatcher runs a chain workload paced at 100, 300 and 1000 jobs/s, or at its ceiling):

engine core idle 100/s 300/s 1000/s ceiling
torch, worker process Python 7,395 7,474 7,449 895 511
Rust 7,344 7,372 7,398 6,884 562
Rust, gil_offer_us=0 7,623 7,448 7,397 7,037 1,739
Rust, gil_offer_us=300 7,676 7,576 7,268 6,987 1,970
torch, thread Python 8,927 6,730 5,399 767 307
Rust 8,236 7,369 6,525 3,735 409
Rust, gil_offer_us=0 8,390 7,343 6,909 4,195 562
Rust, gil_offer_us=300 8,441 7,089 6,269 3,274 486
Python work, 8 processes Python 2,793 2,631 2,472 1,759 1,344
Rust 2,808 2,752 2,656 2,371 1,733
Rust, gil_offer_us=0 2,843 2,665 2,617 2,254 1,806
Rust, gil_offer_us=300 2,775 2,632 2,616 2,252 1,673

At its ceiling the Python core runs about 25,000 calls/s and the Rust core about 40,000–47,000, so the ceiling column compares engines next to a dispatcher doing more work on Rust.

Engine throughput under dispatcher load, by core

gil_offer_us. The default, None, gives the fastest dispatcher, and below its ceiling the dispatcher waits for events often enough, releasing the GIL each time, that engine threads run nearly as if it were idle: a torch network in a worker process keeps 6,884 items/s with the dispatcher at 1000 jobs/s, against 895 on the Python core. At the ceiling the dispatcher never waits, so other threads get the GIL only at the interpreter's switch interval (562 items/s). gil_offer_us=300 offers it at most every 300 µs of the dispatcher's time and keeps 1,970 items/s there, at a cost of up to 18% to the dispatcher (inline chains with RunReport, whose threads take each offer); 0 offers at every chance and costs up to 45% on those chains.

Measured

All on one desktop machine with one GPU for the device rows; each block names its method and the blocks below the Python core's. Full tables: docs/performance.

Dispatcher ceiling, Python core (scripts/benches/dispatcher_ceiling.py: simulated engines that answer at once, so the dispatcher is the only cost; median of five rounds):

workload node calls/s jobs/s dispatcher busy
a chain of inline nodes 78,989 3,950 0.99
a chain of calls on an engine lane 28,702 1,435 0.81
each with batched calls 39,729 393 0.92

With the process's own collector threshold (gc_threshold=None), interleaved in the same rounds: 69,551, 26,872 and 37,393 node calls/s (the default is 6–14% ahead).

Dispatcher ceiling per workload, default collector knob and the process's own

Cost does not grow with load (scripts/benches/scaling.py, dispatcher µs per job or per each item; the minimum of three runs):

resident jobs 500 2,000 8,000
µs per job 54.2 55.8 56.4
items in one each 250 1,000 4,000
µs per item 77.9 78.4 82.2

A loop iteration costs the same at any count too: 66–87 µs from 250 to 8,000 iterations, for jump loops and repeated mutates alike (tests/scaling).

One job against its calls one after another (examples/parallel, regenerated by scripts/docs/plots.py): one job 0.45 s against 1.40 s; four jobs 0.71 s against 4.71 s.

examples/parallel: the machine against the same calls one after another

Engines (study S1, scripts/studies/s1/run.py --scale full, 33 configurations, one run each):

measurement result
handoff to a worker process, 1 KB / 2 MB pipe 183 µs / 4.8 ms; shared memory 59 µs / 1.0 ms
pure-Python CPU work, 8 workers thread 364 items/s; process 2,748 items/s
GIL-releasing work, 8 workers thread 4,035 items/s; process 3,380 items/s
a 64 × 1024 network through a lane, dispatcher at 100 jobs/s thread 4,050 items/s (busy 0.40); process 5,609 items/s (busy 0.63)
two models sharing the device (with both / alone) priority_streams 0.53 / 0.95; co_resident 0.50 / 0.47; swappable 0.17 / 0.11
HTTP client CPU per request 0.61–0.83 ms; a rate-limited lane holds 100 and 500 requests/s exactly

The builtin defaults follow these numbers: PythonCallEngine(mode="thread", transport="shm") with shared memory from 1 MiB, TorchEngine(schedule= "priority_streams", isolation="thread").

examples/mixed (120 jobs, three engines, every job recorded; one run each): 5,634 node calls in 4.07 s (29 jobs/s) on the Python core and 3.27 s (37 jobs/s) on the Rust core; 120 / 120 jobs conform in replay and in re-execution.

How measured:

  • The ceiling rows are the median of five interleaved rounds; the scaling rows the minimum of three runs; S1 and examples/mixed one run each. S1 shared the machine with short example runs during its first 9 minutes (M1 and the first M2 configurations).
  • The benches record nothing and publish events to no subscriber; the examples record every job (record=1.0) and run RunReport where shown, so their times include recording (a digest and a copy per call) and event writing.
  • "dispatcher busy" is the dispatcher thread's busy fraction: its time outside the inbox wait over the run's wall time.
  • tests/scaling fails when the cost at 4N is above twice the cost at N.
  • S1: each phase is a 1 s warm-up then a 2.5 s window; raw JSON and logs in runs/s1/full/.

Architecture

Packages under src/togeari/:

flowchart LR
    examples["machine modules, examples, CLI"] --> machine["core.construct: Machine"]
    machine --> program["core.program: code memory, decode tables, bind"]
    machine --> runtime["core.runtime: dispatcher"]
    runtime --> lanes["core.lanes"]
    lanes --> policies["core.policies"]
    lanes --> contracts["core.contracts: engines, results, work items"]
    runtime --> plugin["core.plugin + core.observe: hooks, bus"]
    engines["engines: python, web, torch"] --> contracts
    plugins["plugins: counters, report, recorder, inspector, budget"] --> plugin
    conformance["conformance"] --> kohakunode["kohakunode reference"]
    program --> kohakunode

src/togeari-rust/ is the Rust core (togeari._rs): the dispatcher's state, stages and builtin policies, and native lanes, with modules mirroring core/. core.construct picks the core a machine runs; everything around the dispatcher (engines, plugins, stores, the CLI) is the same Python for both.

A statement's path through the machine:

flowchart LR
    fetch["fetch: rename writes to slots"] --> wait{"inputs filled?"}
    wait -->|"no"| park["wait on the slots"]
    park --> wait
    wait -->|"yes"| issue["issue: policy order"]
    issue --> inline["inline node: run on the dispatcher"]
    issue --> lane["lane queue"]
    lane --> form["form a batch / pick a unit"] --> engine["engine unit"]
    engine -->|"done -> inbox"| writeback["writeback: fill slots, wake waiters"]
    inline --> writeback
    writeback --> retire["retire in program order"]
    retire -->|"fault taken"| squash["squash younger; @try handler"]
    retire --> sink["job ends: record to the sink"]

Inside one job: strands share one window and one order key space:

flowchart LR
    s0["strand 0: main"] -->|"branch condition pending: park"| s1["strand 1: code after the branch, reading phis"]
    s0 -->|"each over 5 items"| it["5 iteration strands, started in index order"]
    s0 --> win[("one window, retired in key order")]
    s1 --> win
    it --> win

One call across the threads (the dispatcher is the only thread that touches job state):

sequenceDiagram
    participant D as dispatcher
    participant L as lane
    participant E as engine thread / process
    participant I as inbox
    D->>D: fetch, rename, inputs ready
    D->>L: enqueue the work item
    L->>E: submit (returns at once)
    E-->>I: done(results)
    I->>D: next cycle drains the inbox
    D->>D: writeback: fill the slot, wake waiters
    D->>D: retire in program order

A fault inside @try, taken in program order:

flowchart LR
    call["(x)parse(y) fails"] --> mark["marked failed at once"]
    mark --> squash["younger statements squashed<br/>(finished results kept for reuse)"]
    squash --> head{"oldest unfinished?"}
    head -->|"yes"| take["fault taken"]
    take --> handler["handler strand runs<br/>err bound to the failure"]
    handler --> refetch["code after the try fetched again"]

A lane:

flowchart LR
    q[("bucketed queue")] --> former["former: batch when full or waited"]
    former --> sel["selector: unit order, admits"]
    sel --> u1["unit A"]
    sel --> u2["unit B"]
    sel --> u3["unit C (down: health polls)"]
    u1 -->|"UnitError"| retry["back to the queue after backoff"] --> q

Where plugins hook in:

flowchart LR
    src["source item"] -->|"pre_admit, vote_admit"| job["job admitted"]
    job -->|"on_job_start"| run["statements run"]
    run -->|"pre_submit"| unit["engine unit"]
    unit -->|"post_result"| wb["writeback"]
    wb --> run
    run -->|"on_fault"| run
    run -->|"on_job_end, pre_sink"| sink["sink"]
    bus[("event bus")] -->|"on_event (own thread)"| plugins["plugins"]
    lanes["lanes"] -->|"on_unit_state"| plugins
    plugins -->|"contribute_queries / commands / policies"| inbox["dispatcher inbox"]

Documentation

Where Read it for
docs/concepts what the machine is: jobs as sequential runs, the CPU picture, strands, engines and lanes, plugins, the conformance proof
docs/guides writing a machine, an engine, a plugin; the builtin engines; stores, sources and sinks; tuning; conformance; the examples
docs/internals every module: program layer, runtime, lanes, plugins, engines, verification, the native core
docs/performance every measured table and how it was measured; the cores compared

Checks

python -m pytest tests -q -m "not gpu"                      # CPU only (seeds default 20)
python -m pytest tests -q -m gpu                            # the tests on cuda:0, on their own
TOGEARI_SEEDS=300 python -m pytest tests/machine/generated -q
python scripts/benches/dispatcher_ceiling.py
python scripts/benches/scaling.py
python scripts/studies/s1/run.py --scale full               # thread vs process, transports, GPU sharing
python scripts/studies/p8/s8.py --scale full                # the cores compared, every gil_offer_us
TOGEARI_CORE=python python -m pytest tests -q -m "not gpu"  # the suite on the reference core

The generated suite runs programs from kohakunode.testing.progen (switch, parallel, ordered and mutates nodes with aliases, each with exits, @try around each, failing nodes) under 12 configurations (windows 1 / 64 / 256, injected item errors and unit outages, early forming, every selector, run-ahead off, every mutates mode, a content store, a pass-through plugin on every hook), several programs in one machine with one loaded mid-run, snapshot resume and positional reruns; every job is re-executed against the reference.

Contributing

Open an issue first for a feature. The code conventions are in CLAUDE.md: black and ruff at line length 100, no imports inside functions, nested folders, short comments that say what the code does, docs that describe what exists, and every check able to fail on a broken implementation. Run the checks above before a pull request.

License

Apache-2.0.

Metadata

Release files for togeari 0.2.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 togeari 0.2.0
File Size Uploaded Provenance
togeari-0.2.0.tar.gz 333.3 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for togeari 0.2.0
File
togeari-0.2.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
togeari-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
togeari-0.2.0-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
togeari-0.2.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
togeari-0.2.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
togeari-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
togeari-0.2.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
togeari-0.2.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
togeari-0.2.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
togeari-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
togeari-0.2.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
togeari-0.2.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
togeari-0.2.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
togeari-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
togeari-0.2.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
togeari-0.2.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
togeari-0.2.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
togeari-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
togeari-0.2.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
togeari-0.2.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 23.6 MB

Release files / togeari-0.2.0.tar.gz

Download URL togeari-0.2.0.tar.gz
Size 333.3 kB
Tags Source
SHA-256 checksum
How to use checksums
6115d59ad2d8fc189192270c2fbad1c34ba1ef04c7894e78532c025738efca7c
BLAKE2b-256 checksum
How to use checksums
1a12a93e471aeab3136e379a4b4b0d6ff55bbe1bfba1c49807e66589037ddf9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp314-cp314-win_amd64.whl

Download URL togeari-0.2.0-cp314-cp314-win_amd64.whl
Size 1.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
63f8f3378d922c87063646640fda828dc05d37348dc3c3767bd78542a6007e51
BLAKE2b-256 checksum
How to use checksums
9838b68b8b4d0486efd97e20dcc34aa07c7bd901c87cf7eec2856102b0424346
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL togeari-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
64a611b19bbe8210c853291bbeb13f766d20b87062aef2dd0ed3c881bb98466b
BLAKE2b-256 checksum
How to use checksums
61906a7629de97561bd5b2bd920c9031849be387eb5669603d6e6792175749f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL togeari-0.2.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
2df205258ddc89aa6ec5e4c0fded2c44184baf642cac0e308fbf6275fda46842
BLAKE2b-256 checksum
How to use checksums
c921645a6ca3b0bda8d76981ca83a388b8b40dee181293bc2649096cd2defaed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL togeari-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
10a5b4d36762f58c60ddfe5d50238da14dc9e486d3049153469b24c8269f1a4c
BLAKE2b-256 checksum
How to use checksums
65c256a4890cbed8575dee584c5bf4946b045e6284b02b03cac1c9c04ecbc560
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp313-cp313-win_amd64.whl

Download URL togeari-0.2.0-cp313-cp313-win_amd64.whl
Size 1.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
f282bae9b134929af6b7e9330c43f68dff7472c9a1227e094faea174b92edf2d
BLAKE2b-256 checksum
How to use checksums
f443d8a8a1624a0d5600cad80e08d1a3b31a2b796cc9b7fd82ea7d76cf8e677d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL togeari-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e204284480a71a2c87acb1c5c329ebee23f027333b87614da2a60ceec3933afd
BLAKE2b-256 checksum
How to use checksums
25693b01049c6a937010bb683eca6da12f86256e0294421797f2e90393b99aa5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL togeari-0.2.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
fcd65b5f2faa75639777714812b009d19893df241db2abf282fc5475988de20a
BLAKE2b-256 checksum
How to use checksums
01272bc716f3314b701d007ada8add5787597742271bb519f9f949ef01888c64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL togeari-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5eaa01fd8ed73db9f0bb82abf2dd1cf22f06d16ddea4f617f5c3165be6dda963
BLAKE2b-256 checksum
How to use checksums
37d9f02c77b58d4570e1ff6d72f4fd632ea6f07454fed953fa85b2595141d06b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp312-cp312-win_amd64.whl

Download URL togeari-0.2.0-cp312-cp312-win_amd64.whl
Size 1.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
75daf529d97b629ecfe3909003ccb9d747621ee4272b38aa6c0425db621975ff
BLAKE2b-256 checksum
How to use checksums
1d60e1abd2eb434a53512ad0fc372c407e1ce1e31c6b4dd8cf7afe828520040c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL togeari-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
54e73a667796e8ed008488920432e6dd067a5004c121d169ffd4d87e86ebdf25
BLAKE2b-256 checksum
How to use checksums
ee5b2303f65f49e6d82f39a4473b1eefc20e65ce633cdd608b5f5834ca713325
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL togeari-0.2.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f91e98eff07d0c35ef280acdc91fc061c470b297ab53a1730d828963f9024ead
BLAKE2b-256 checksum
How to use checksums
ecb815695e562009c725558f9806a5854f19fc8809f2768246f02fedfde8d5c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL togeari-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1c32c402454c845bdb53ba22c207383f942ed6bf2e3bc4f3e090adc88a9997f5
BLAKE2b-256 checksum
How to use checksums
8543f0a5784bfec385c72b29665dcaf50064df88ac1b346b8f9a4af89c988862
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp311-cp311-win_amd64.whl

Download URL togeari-0.2.0-cp311-cp311-win_amd64.whl
Size 1.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
9555ae5e4462c5242166531438044a2781c07e70e5e3457158faca9001b9ff0f
BLAKE2b-256 checksum
How to use checksums
97bbedbfff7e07b96dc75c1e73ee291328959385bd4657a82021d3f9229183b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL togeari-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6634bd7f6e095ea3905f16c790f177918fb9e2151e78f52487da7a7f132d9268
BLAKE2b-256 checksum
How to use checksums
66d4aca1dd536c259fca1f2c515621d48a67a5b1649e0a4dc10a589334fd00b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL togeari-0.2.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
d26cc684597dfac64a2efecfb9c09c49b4ed5db13d3cd8e021089bcc81d39130
BLAKE2b-256 checksum
How to use checksums
2cf10eced6a1029eb50828b5f9eb274616cb64846641a26f01de95551140804a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL togeari-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
52c3003dfdf64908eabb697b9b069469f631587267fda18b991706a40fef4e64
BLAKE2b-256 checksum
How to use checksums
dda881de515d7f2e7adbb57d4d1e99c8b2c26d05a80097627a77379f583d6c6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp310-cp310-win_amd64.whl

Download URL togeari-0.2.0-cp310-cp310-win_amd64.whl
Size 1.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
7224087c64ba9e43a623a6ac2e613f1b1053afc474ad9132181fb2a30d4608ff
BLAKE2b-256 checksum
How to use checksums
5c7d3d23225e7492a79a78f3c9ffdd42fa879cbadba26cfab033dec8e64a7023
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL togeari-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
25308927fbb5eafe13b6f76cd47b763a379af40637abd41cc0c565369d91f679
BLAKE2b-256 checksum
How to use checksums
8aef05dde928ce6c43bc5d3e8e4f720f86bd636e374a0d82dd7c997b170d4824
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL togeari-0.2.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
223f5882bc7e1d56843ecf9aef4a94c8bc22da3e24aaca477724e45153b9febf
BLAKE2b-256 checksum
How to use checksums
e78d6a4b5b1972a94edf73df53549667ab08fd39b85e7c7b138bc77bcff1048f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / togeari-0.2.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL togeari-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cbb6e344df0485ff51d5addbd98eefbbbace04bfc6ded17f5b2638098a79072f
BLAKE2b-256 checksum
How to use checksums
b6686193bda1ea3d4fa6663f5d22fa17366a3b17ea375180eb3be7b997e68b3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Security for togeari 0.2.0

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.

Full provenance

All 21 files in this release have been uploaded with provenance metadata.

Select from 21 files

Attestation for togeari-0.2.0.tar.gz

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 Oct 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.2.0 This release

21 release files Full provenance

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