Question about Noise Models for State Vector Simulation in Perceval

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:

  1. Use Simulator with a noisy Source 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?

  1. Use Processor rather than Simulator. This seems to have the downside of letting us access the final state probabilities but not amplitudes. The upside is that Processors seem more conducive to including noise (i.e., via a NoiseModel) 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

Hello Kevin,

The source model that we use in perceval is only aimed at reproducing the behaviour of actual sources that we use in our QPU, in which the photons are not produced with entanglement.

If your goal is to create superposed noisy states, the only way is to do that by hand. One possibility would be to create your distribution for one BasicState, iterate on the resulting SVDistribution, and fill a new SVDistribution with superposed StateVector with the annotations that you have in the SVDistribution.
However, while this would work for indistinguishability, I’m not sure that this method would be correct for loss and g2.

Then, you would have to do as in your point 1.

I hope this will help you,

Cheers,
Aurélien

Hi Aurélien,

Thanks for your reply! It makes sense that your source model is particular to actual quantum-dot based single-photon sources Quandela uses.

It is also not clear to me whether iterating over SVDistributions would be correct for loss and g2. It sounds like my best option is to create the noisy state vector input by hand.

Cheers,
Kevin