graph_generators

graph_generators

TVBO graph generators — declarative typed DAGs, one resolver.

A curated GraphGenerator under tvbo/database/graph_generators/ is defined by its procedure: block: an ordered DAG of typed steps whose options are schema fields. :mod:tvbo.graph_generators.procedural resolves that DAG to SymPy and renders it through the printer tables in tvbo/codegen/code.py, so eager construction at Network load time and emitted backend source are the same expressions rendered twice. There are no per-generator Python materialisers.

Two kinds of generator sit outside the DAG, both through the standard bindings slot: library wrappers (Graphs.jl / NetworkX families) and the documented Callable exception below, for a construction the backend-independent primitive set genuinely cannot express.

The helper below is a thin convenience wrapper over the resolver (it holds no generation algorithm) for scripts and notebooks that want a matrix directly.

Functions

Name Description
random_reservoir Materialise a RandomReservoir adjacency through the typed-DAG resolver.
weight_shuffle Materialise a WeightShuffle null-model adjacency: permute the non-zero weights.

random_reservoir

graph_generators.random_reservoir(
    n_nodes,
    sparsity=0.1,
    spectral_radius=0.95,
    weight_distribution=None,
    seed=None,
)

Materialise a RandomReservoir adjacency through the typed-DAG resolver.

weight_shuffle

graph_generators.weight_shuffle(source, preserve='binary_mask', seed=None)

Materialise a WeightShuffle null-model adjacency: permute the non-zero weights.

This is the documented exception to the typed-DAG rule: a masked extract, a permutation and a scatter are not expressible in the backend-independent primitive set. Boolean-mask extraction in particular cannot survive expression parsing at all — M[M != 0] evaluates its comparison to a plain Python True before an expression tree is ever built. So the algorithm lives here as ordinary Python, reached through the generator’s bindings.python binding like any other library wrapper.

preserve='binary_mask' keeps the {0, nonzero} pattern and permutes the weight values among their existing positions, so density and topology are held fixed while the weight-to-edge assignment is randomised.

Parameters

Name Type Description Default
source str IRI, path or database name of the reference Network to shuffle. required
preserve str Structural property to hold fixed. Only binary_mask is implemented. 'binary_mask'
seed int | None PRNG seed; None means 0, matching the generator’s declared default. None

Returns

Name Type Description
dict {"weights": ndarray} — the permuted adjacency matrix.