Hello, I am relatively new to using Perceval and had a question about incorporating noise models.
It looks like Simulator
is what should be used for simulating the full evolution of state vectors, i.e., to obtain amplitudes (as discussed in this previous forum post). Is there any way to still obtain amplitudes while including noise? For instance, by either using (1) Simulator
with a noisy Source
or (2) a NoiseModel
within a Processor
.
I ideally want to be able to compare the output state of a noisy circuit to the ideal output. Specifically, I’d like to compute or approximate something like <𝛙_noisy| 𝛙_ideal> or Tr(ρ_noisy ρ_ideal), more generally. I think the white paper mentioned such noisy simulators as a desired feature in future versions of Perceval. Have there been updates in this respect?
To elaborate slightly on these two approaches mentioned above:
- Use
Simulator
with a noisySource
might look something like (omitting necessary imports):
noisy_source = Source(losses=0.1, indistinguishability=0.95)
noisy_input = noisy_source.generate_distribution(ideal_input) # requires BasicState input
noisy_evolution = sim.evolve_svd(noisy_input)
The issue here is that the argument of generate_distribution()
needs to be a BasicState, whereas I’d like to simulation the dynamics of more general state vectors. Can the SVD outputs (like noisy_evolution
above) from various inputs be naturally combined in some way?
- Use
Processor
rather thanSimulator
. This seems to have the downside of letting us access the final state probabilities but not amplitudes. The upside is thatProcessor
s seem more conducive to including noise (i.e., via aNoiseModel
) in the current implementation of Perceval.
Hope that is not too vague, please let me know if you need any more information. I look forward to hearing back!
Cheers,
Kevin