Graph Algebra¶
Combinators for composing graphs: series(), parallel(), split(), merge().
algebra ¶
FAUST-style block diagram algebra for composing DSP graphs.
Provides four binary combinators -- series, parallel, split,
merge -- that compose :class:Graph objects into new :class:Graph
objects using :class:Subgraph wiring and expansion.
Importing this module monkey-patches Graph.__rshift__ (>>) and
Graph.__floordiv__ (//) for operator-based composition::
from gen_dsp.graph.algebra import series, parallel, split, merge
chain = lpf >> hpf # series
stack = lpf // hpf # parallel
series ¶
Pipe a's outputs into b's inputs positionally.
Requires len(a.outputs) == len(b.inputs).
Result: inputs = a.inputs, outputs = b.outputs, params = merged(a+b).
parallel ¶
Stack a and b side by side with independent I/O.
No constraints on I/O counts. Result: inputs = a_prefixed + b_prefixed, outputs = a_prefixed + b_prefixed.
split ¶
Fan-out: a's outputs cyclically distributed to fill b's inputs.
Requires len(b.inputs) % len(a.outputs) == 0.
Result: inputs = a.inputs, outputs = b.outputs, params = merged(a+b).
merge ¶
Fan-in: a's outputs summed in groups to feed b's inputs.
Requires len(a.outputs) % len(b.inputs) == 0.
When k=1 (equal counts), degenerates to direct wiring (like series).
For k>1, BinOp(op="add") chain nodes sum each group.