DistinguishablePhotonMitigation

DistinguishablePhotonMitigation reduces errors associated with partial photon distinguishability and unwanted multi-photon emission. It runs related experiments with fewer input photons and combines their results using the noise characterization of the computer.

The order controls how far the correction is expanded:

>>> import perceval as pcvl
>>>
>>> computer.mitigations = [pcvl.DistinguishablePhotonMitigation(order=1)]

A larger order can correct higher-order contributions but requires more sub-computations (scaling as \(\sum_{k=0}^{order} C_k^n\)). It should be increased only when the execution budget and the input photon count justify the extra work.

For workflows containing several input photon counts, pass a dictionary to select a different order for each count:

>>> mitigation = pcvl.DistinguishablePhotonMitigation({2: 1, 4: 2, 6: 3})

Practical considerations

  • The experiment input must be a FockState.

  • The technique uses the computer’s noise model, especially indistinguishability and g2.

  • It has no effect when the photons are perfectly indistinguishable and g2 is zero.

  • Requested samples and shots are divided among the generated sub-computations. Very small budgets may therefore be incompatible with a high order.

  • Output states containing more photons than the original input are removed as part of the correction, meaning all g2 related output states are lost in the process.

The overhead() method reports how many sub-computations a given input state would require and can help choose an appropriate order before launching an execution:

>>> mitigation = pcvl.DistinguishablePhotonMitigation(order=2)
>>> mitigation.overhead(pcvl.FockState("|1,1,1>"))
7
class perceval.runtime.error_mitigation.distinguishable_photon_mitigation.DistinguishablePhotonMitigation(order)

Partial distinguishability and g2 mitigation. Only FockState inputs are supported. All output states having more than the input number of photons are filtered out.

Mitigates errors associated with noise photons errors (distinguishability and g2) by preparing computations with fewer photons and recombining them through corrections based on the partial distinguishability ‘orthogonal bad bits’ model.

Parameters:

order (int | dict[int, int]) – Extent of photon error mitigation. If an integer is given, the correction is fixed up to order or the input photon number. If a dict is given, it the input photon number as key and the corresponding order as value.

extend_computation(computation, imperfections)

Add computations for every possible sub-n photon number up to a given specified order of correction.

Return type:

list[Computation]

overhead(input_state)

Return the number of sub-computations needed for a given input state based on the instance order.

Parameters:

input_state (FockState) – Provided input-state or number of photons.

Return type:

int