NoisySamplingSimulator
The NoisySamplingSimulator is a special simulator dedicated to sample states from a noisy input state.
It is completely separated from the other simulators, and, as such, it is not available through the SimulatorFactory.
As its name suggests, it requires a sampling able backend such as CliffordClifford2017.
The NoisySamplingSimulator exposes two simulation methods:
samplesthat returns a python dictionary with a BSSamples in the “results” fieldsample_countthat returns a python dictionary with a BSCount in the “results” field
Note that these two methods require a SVDistribution without superposed states (but can be annotated),
since we can’t retrieve the probability amplitudes from the backend.
Also, this simulator can only simulate non-polarized unitary circuits.
Using a NoisySamplingSimulator
import perceval as pcvl
sim = pcvl.NoisySamplingSimulator(pcvl.Clifford2017Backend())
sim.set_circuit(pcvl.BS()) # Now, sim holds a 2 modes circuit
# Physical and logical selection
sim.set_selection(min_detected_photons_filter = 2) # Other fields: heralds (accounting only the output), postselect
sim.set_detectors([pcvl.Detector.threshold(), pcvl.Detector.pnr()])
svd = pcvl.SVDistribution({pcvl.BasicState("|{_:0}, {_:1}>"): 1})
# Sample stream
print(sim.samples(svd, 5)["results"]) # Random sampling; results may change at each run
# [ |1,1>, |0,2>, |0,2>, |1,1>, |1,1> ]
# Sample count
print(sim.sample_count(svd, max_samples = 10, max_shots = 10)["results"])
# {
# |1,1>: 7
# |0,2>: 2
# }
- class perceval.simulators.NoisySamplingSimulator(sampling_backend)
Simulates a sampling, using a perfect sampling algorithm. It is used to take advantage of a parallel sampling algorithm, by computing multiple output states at once, while taking noise and post-processing (heralds, post-selection, detector characteristics) into account
- Parameters:
sampling_backend (
ASamplingBackend) – Instance of a sampling-capable back-end
- compute_physical_logical_perf(value)
Tells the simulator to compute or not the physical and logical performances when possible
- Parameters:
value (
bool) – True to compute the physical and logical performances, False otherwise.
- format_results(results, physical_perf, logical_perf)
Format the simulation results by computing the global performance, and returning the physical and logical performances only if needed.
- Parameters:
results – the simulation results
physical_perf – the physical performance
logical_perf – the logical performance
- keep_heralds(value)
Tells the simulator to keep or discard ancillary modes in output states
- Parameters:
value (
bool) – True to keep ancillaries/heralded modes, False to discard them (default is keep).
- log_resources(method, extra_parameters)
Log resources of the noisy sampling simulator
- Parameters:
method (
str) – name of the method usedextra_parameters (
dict) –extra parameters to log
Extra parameter can be:
max_samples
max_shots
- property min_detected_photons_filter
- Returns:
The minimum number of detected photons filter. Counts both user-defined minimum number of photons and heralds
- sample_count(svd, max_samples, max_shots=None, progress_callback=None)
Run a noisy sampling simulation and retrieve the results
- Parameters:
svd (
SVDistribution|tuple[Source,BasicState]) – The noisy input, expressed as a mixed state, or a tuple containing the source and the perfect input statemax_samples (
int) – Max expected samples of interest in the resultsmax_shots (
Optional[int]) – Shots limit before the sampling ends (you might get fewer samples than expected)progress_callback (
Optional[Callable[[float,str],Optional[dict]]]) – A progress callback
- Return type:
dict- Returns:
A dictionary of the form { “results”: BSCount, “physical_perf”: float, “logical_perf”: float }
results is the post-selected output state sample count
physical_perf is the performance computed from the detected photon filter
logical_perf is the performance computed from the post-selection
- samples(svd, max_samples, max_shots=None, progress_callback=None)
Run a noisy sampling simulation and retrieve the results
- Parameters:
svd (
SVDistribution|tuple[Source,FockState]) – The noisy input, expressed as a mixed state, or a tuple containing the source and the perfect input statemax_samples (
int) – Max expected samples of interest in the resultsmax_shots (
Optional[int]) – Shots limit before the sampling ends (you might get fewer samples than expected)progress_callback (
Optional[callable]) – A progress callback
- Return type:
dict- Returns:
A dictionary of the form { “results”: BSSamples, “physical_perf”: float, “logical_perf”: float }
results is the post-selected output state sample stream
physical_perf is the performance computed from the detected photon filter
logical_perf is the performance computed from the post-selection
- set_circuit(circuit)
Set the circuit to simulate the sampling on
- Parameters:
circuit (
ACircuit) – A unitary circuit
- set_detectors(detector_list)
- Parameters:
detector_list (
list[IDetector]) – A list of detectors to simulate
- set_min_detected_photons_filter(value)
Set the physical detection filter. Any output state with less than this threshold gets discarded.
- Parameters:
value (
int) – Minimal photon count in output states of interest.
- set_selection(min_detected_photons_filter=None, postselect=None, heralds=None)
Set multiple selection filters at once to remove unwanted states from computed output distribution
- Parameters:
min_detected_photons_filter (
Optional[int]) – minimum number of detected photons in the output distributionpostselect (
Optional[PostSelect]) – a post-selection functionheralds (
Optional[dict]) – expected detections (heralds). Only corresponding states will be selected, others are filtered out. Mapping of heralds. For instance {5: 0, 6: 1} means 0 photon is expected on mode 5 and 1 on mode 6.
ExqaliburNoisySamplingSimulator
The ExqaliburNoisySamplingSimulator does the same things as the NoisySamplingSimulator, but its methods
are implemented in exqalibur so it runs faster.
Also, this simulator requires the backend to be a wrapper around a pure exqalibur sampling backend. The CliffordClifford2017 backend is an example of such a backend.
- class perceval.simulators.ExqaliburNoisySamplingSimulator(sampling_backend)
Simulates a sampling, using a perfect sampling algorithm. It is used to take advantage of a parallel sampling algorithm, by computing multiple output states at once, while taking noise and post-processing (heralds, post-selection, detector characteristics) into account.
This particular sampling simulator runs exclusively using exqalibur methods for an even faster.
- Parameters:
sampling_backend (
ExqaliburBackendWrapper) – Instance of a sampling-capable exqalibur-wrapped back-end
- compute_physical_logical_perf(value)
Tells the simulator to compute or not the physical and logical performances when possible
- Parameters:
value (
bool) – True to compute the physical and logical performances, False otherwise.
- format_results(results, physical_perf, logical_perf)
Format the simulation results by computing the global performance, and returning the physical and logical performances only if needed.
- Parameters:
results – the simulation results
physical_perf – the physical performance
logical_perf – the logical performance
- keep_heralds(value)
Tells the simulator to keep or discard ancillary modes in output states
- Parameters:
value (
bool) – True to keep ancillaries/heralded modes, False to discard them (default is keep).
- log_resources(method, extra_parameters)
Log resources of the noisy sampling simulator
- Parameters:
method (
str) – name of the method usedextra_parameters (
dict) –extra parameters to log
Extra parameter can be:
max_samples
max_shots
- property min_detected_photons_filter
- Returns:
The minimum number of detected photons filter. Counts both user-defined minimum number of photons and heralds
- sample_count(svd, max_samples, max_shots=None, progress_callback=None)
Run a noisy sampling simulation and retrieve the results
- Parameters:
svd (
SVDistribution|tuple[Source,BasicState]) – The noisy input, expressed as a mixed state, or a tuple containing the source and the perfect input statemax_samples (
int) – Max expected samples of interest in the resultsmax_shots (
Optional[int]) – Shots limit before the sampling ends (you might get fewer samples than expected)progress_callback (
Optional[Callable[[float,str],Optional[dict]]]) – A progress callback
- Return type:
dict- Returns:
A dictionary of the form { “results”: BSCount, “physical_perf”: float, “logical_perf”: float }
results is the post-selected output state sample count
physical_perf is the performance computed from the detected photon filter
logical_perf is the performance computed from the post-selection
- samples(svd, max_samples, max_shots=None, progress_callback=None)
Run a noisy sampling simulation and retrieve the results
- Parameters:
svd (
SVDistribution|tuple[Source,FockState]) – The noisy input, expressed as a mixed state, or a tuple containing the source and the perfect input statemax_samples (
int) – Max expected samples of interest in the resultsmax_shots (
Optional[int]) – Shots limit before the sampling ends (you might get fewer samples than expected)progress_callback (
Optional[Callable[[float,str],Optional[dict]]]) – A progress callback
- Return type:
dict- Returns:
A dictionary of the form { “results”: BSSamples, “physical_perf”: float, “logical_perf”: float }
results is the post-selected output state sample stream
physical_perf is the performance computed from the detected photon filter
logical_perf is the performance computed from the post-selection
- set_circuit(circuit)
Set the circuit to simulate the sampling on
- Parameters:
circuit (
ACircuit) – A unitary circuit
- set_detectors(detector_list)
- Parameters:
detector_list (
Optional[list[Optional[IDetector]]]) – A list of detectors to simulate
- set_min_detected_photons_filter(value)
Set the physical detection filter. Any output state with less than this threshold gets discarded.
- Parameters:
value (
int) – Minimal photon count in output states of interest.
- set_selection(min_detected_photons_filter=None, postselect=None, heralds=None)
Set multiple selection filters at once to remove unwanted states from computed output distribution
- Parameters:
min_detected_photons_filter (
Optional[int]) – minimum number of detected photons in the output distributionpostselect (
Optional[PostSelect]) – a post-selection functionheralds (
Optional[dict]) – expected detections (heralds). Only corresponding states will be selected, others are filtered out. Mapping of heralds. For instance {5: 0, 6: 1} means 0 photon is expected on mode 5 and 1 on mode 6.