Skip to content

somatize

Declare a graph. Run it across machines. Then ask it what it did — and what you were trying to find out.

A graph is one expression

a >> (b | c) >> d, and a node is one thing: forward(input, ctx) takes what arrived along the edges and returns what it produced. No filter type, no step type, no return value that tells them apart. The graph is compiled and executed in Rust.

Where it runs is a suffix

.on("cuda:0") is a device, .at("worker1") is another machine, .cached() is a value worth keeping. The graph says what exists and those say where and what is remembered — five orthogonal facts, and confusing them is the easy mistake.

It tells you what happened

A run emits facts as it goes, including from the machines it was spread over — a Watcher is a hole in the core, so a notebook is told live and a store is written for later. The record is read back with a price list, and it draws.

And whether the network is learning

Dead units, saturation, a step-to-weight ratio that has gone. A diagnosis is an opinion about the stored record, which is what makes arguing with a threshold cost a scan instead of an afternoon of GPU. And probe asks what can be said before the first step is taken.

A search that needs no coordinator

A trial is a number, ask is a function of it, and a shared folder settles who gets which — so a machine that claimed trial 7 derives it without replaying six. Halton and Sobol cover the space for every prefix, which is what stops two machines proposing neighbours.

And what you were trying to find out

The half a repository loses. somatize-tree writes down questions, hypotheses, attempts, findings and decisions in a DAG beside the code — then go takes you back to a move by the name you remember, instead of a hash you do not.

Terminal window
pip install 'somatize[viz]'

The Rust is compiled inside the wheel; viz adds plotly, which every figure here needs. Then a first graph in five minutes, or the thirteen notebooks, which ship executed with their outputs.