Boson Sampling Simulator

class SamplingSimulator(d: int | None = None, config: Config | None = None, connector: BaseConnector | None = None)

A simulator dedicated for Boson Sampling (or related) simulations.

Generally, this simulator can be used to simulate passive linear optical circuits with Fock state inputs, photon number measurements, and photon losses.

The simulation (when executed) results in an instance of SamplingState or with the samples generated from it (see Result).

Example usage:

import numpy as np
import piquasso as pq

from scipy.stats import unitary_group

d = 5

U = unitary_group.rvs(d)

with pq.Program() as program:
    pq.Q() | pq.StateVector([1, 1, 1, 0, 0])

    pq.Q() | pq.Interferometer(U)

    pq.Q(all) | pq.ParticleNumberMeasurement()

simulator = pq.SamplingSimulator(d=5)
result = simulator.execute(program, shots=100)
Supported preparations:

StateVector.

Supported gates:

Interferometer, Beamsplitter, Phaseshifter, MachZehnder, Fourier, Interferometer.

Supported measurements:

ParticleNumberMeasurement.

Supported channels:

Loss.

create_initial_state(d=None)

Creates an initial state with no instructions executed.

Note

This is not necessarily a vacuum state.

Returns:

The initial state of the simulation.

Return type:

State

execute(program: Program, shots: int | None = 1, initial_state: State | None = None) Result

Executes the specified program.

Parameters:
  • program (Program) – The program to execute.

  • initial_state (State, optional) – A state to execute the instructions on. Defaults to the state created by create_initial_state().

  • shots (int, optional) – The number of times the program should execute. If it is None, the simulator will execute the program once, returning the exact probability distribution instead of samples. Defaults to 1.

Raises:

InvalidParameter – When shots is not a positive integer or not None.

Returns:

The result of the simulation containing the resulting state and samples if any measurement is specified in program.

Return type:

Result

execute_instructions(instructions: List[Instruction], initial_state: State | None = None, shots: int | None = 1) Result

Executes the specified instruction list.

Parameters:
  • instructions (List[Instruction]) – The instructions to execute.

  • initial_state (State, optional) – A state to execute the instructions on. Defaults to the state created by create_initial_state().

  • shots (int, optional) – The number of times the program should be execute. If it is None, the simulator will execute the program once, returning the exact probability distribution instead of samples. Defaults to 1.

Raises:
  • InvalidParameter – When shots is not a positive integer or not None.

  • InvalidSimulation – When the number of modes cannot be inferred and d was not provided during simulator initialization.

Returns:

The result of the simulation containing the resulting state and samples if any measurement is specified in instructions.

Return type:

Result

validate(program: Program) None

Validates the specified program.

Raises:
  • InvalidInstruction – When invalid instructions are defined in the program.

  • InvalidSimulation – When the instructions are valid, but the simulator couldn’t execute the specified program.

Parameters:

program (Program) – The program to validate.