Boson Sampling State¶
- class SamplingState(d: int, connector: BaseConnector, config: Config | None = None)¶
A state dedicated for Boson Sampling (or related) simulations.
When using
SamplingSimulator, the simulation results will contain an instance of this class, containing the input occupation numbers and the interferometer to be applied.Example usage:
>>> import piquasso as pq >>> >>> from scipy.stats import unitary_group >>> >>> d = 7 >>> >>> interferometer_matrix = unitary_group.rvs(d) >>> >>> with pq.Program() as program: >>> pq.Q(all) | pq.StateVector([1, 1, 1, 0, 0, 0, 0]) >>> pq.Q(all) | pq.Interferometer(interferometer_matrix) >>> pq.Q(all) | pq.ParticleNumberMeasurement() >>> >>> simulator = pq.SamplingSimulator(d=d) >>> >>> result = simulator.execute(program, shots=3) >>> >>> result.samples [(0, 0, 0, 0, 2, 1, 0), (3, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 2, 1)]
- Parameters:
d (int) – The number of modes.
connector (BaseConnector) – Instance containing calculation functions.
config (Config) – Instance containing constants for the simulation.
- interferometer¶
The interferometer matrix corresponding to the circuit.
- is_lossy¶
Returns True if the state is lossy, otherwise False.
- validate() None¶
Validates the current state.
- Raises:
InvalidState – If the interferometer matrix is non-unitary, or the input state is invalid.
- property d¶
The number of modes.
- property norm¶
The norm of the state.
- get_particle_detection_probability(occupation_number: ndarray) float¶
Returns the particle number detection probability using the occupation number specified as a parameter.
- property state_vector¶
The state vector representation of this state.
This implementation follows Algorithm 1 (SLOS_full) from Strong Simulation of Linear Optical Processes.