SequentialSimulator#

class bayesflow.simulators.SequentialSimulator(simulators: Sequence[Simulator], expand_outputs: bool = True, replace_inputs: bool = True)[source]#

Bases: Simulator

Combines multiple simulators into one, sequentially.

Initialize a SequentialSimulator.

Parameters:
simulatorsSequence[Simulator]

A sequence of simulator instances to be executed sequentially. Each simulator should return dictionary outputs and may depend on outputs from previous simulators.

expand_outputsbool, optional

If True, 1D output arrays are expanded with an additional dimension at the end. Default is True.

replace_inputsbool, optional

If True, **kwargs are auto-batched and replace simulator outputs.

sample(batch_shape: tuple[int, ...], **kwargs) dict[str, ndarray][source]#

Sample sequentially from the internal simulator.

Parameters:
batch_shapeShape

The shape of the batch to sample. Typically, a tuple indicating the number of samples, but it also accepts an int.

**kwargs

Additional keyword arguments passed to each simulator. These may include previously sampled outputs used as inputs for subsequent simulators.

Returns:
datadict of str to np.ndarray

A dictionary containing the combined outputs from all simulators. Keys are output names and values are sampled arrays. If expand_outputs is True, 1D arrays are expanded to have shape (…, 1).

rejection_sample(batch_shape: tuple[int, ...], predicate: Callable[[dict[str, ndarray]], ndarray], *, axis: int = 0, sample_size: int = None, **kwargs) dict[str, ndarray]#