|View source on GitHub|
Map various PRNG seed flavors to a seed
tfp.substrates.numpy.random.sanitize_seed( seed, salt=None, name=None )
This function implements TFP's standard PRNG seeding semantics. See https://github.com/tensorflow/probability/blob/main/PRNGS.md for details.
sanitize_seed maps any seed flavor to a
"stateless-compatible" seed. Under TensorFlow and NumPy this means:
- If the
seedargument is an
None, we use
tf.random.stateless_uniformto statefully draw a pair of unbounded
int32s and wrap them into a Tensor.
- If the
seedargument is a stateless-compatible seed already, we just cast it to an
Under JAX, this function only accepts outputs from
a no-op except for the salting behavior described below.
This, any function that accepts a
seed argument can be written in
stateless-seed style internally, and acquires TFP's
seed-type-directed stateless/stateful switching behavior by just
running the input seed through
sanitize_seed on entry.
sanitize_seed function also allows salting the seed: if a user
accidentally passes the same stateful seed to two different calls to
sanitize_seed with different salts, they will get independent
randomness. We may micro-optimize by removing salting from
sanitize_seed of already-stateless seeds in the future, as using a
stateless seed already requires seed uniqueness discipline.