# Nodes

## Chance and stochastic nodes

SignalFlow has a number of stochastic nodes, which make use of a pseudo-random number generator (RNG) to produce unpredictable output values.

Each object of these `StochasticNode`

subclasses stores its own RNG. By default, the RNG is seeded with a random value, so that each run will generate a different set of outputs. However, to create a repeatable pseudo-random output, the `seed`

of the node's RNG can be set to a known value:

```
>>> r = RandomUniform(0, 1)
>>> r.process(1024)
>>> r.output_buffer[0][:4]
array([0.48836085, 0.64326525, 0.79819506, 0.8489549 ], dtype=float32)
>>> r.set_seed(123)
>>> r.process(1024)
>>> r.output_buffer[0][:4]
array([0.7129553 , 0.42847094, 0.6908848 , 0.7191503 ], dtype=float32)
>>> r.set_seed(123)
>>> r.process(1024)
>>> r.output_buffer[0][:4]
array([0.7129553 , 0.42847094, 0.6908848 , 0.7191503 ], dtype=float32)
```

Note the identical sequences generated after repeatedly setting the seed to a known value.

Warning

Calling `node.process()`

is generally not good practice, as it does not recursively process all of the node's inputs (unlike when a node is embedded within an AudioGraph, which correctly handles recursion and cyclical loops). Please use at your peril!

→ Next: Node reference library

Created: 2022-04-01