# Completeness relation of kraus operators not satisfied in Fake backends

With the following code

from qiskit.providers.fake_provider import FakeGuadalupe
from qiskit.providers.aer.noise import NoiseModel
import numpy as np

nm = NoiseModel.from_backend(backend)

print(nm._local_quantum_errors['cx'][(0,1)].circuits[0])
print(len(nm._local_quantum_errors['cx'][(0,1)].circuits[0][1][0].params))

k11=np.transpose(nm._local_quantum_errors['cx'][(0,1)].circuits[0][1][0].params[0].conj())*nm._local_quantum_errors['cx'][(0,1)].circuits[0][1][0].params[0]
k22=np.transpose(nm._local_quantum_errors['cx'][(0,1)].circuits[0][1][0].params[1].conj())*nm._local_quantum_errors['cx'][(0,1)].circuits[0][1][0].params[1]
k33=np.transpose(nm._local_quantum_errors['cx'][(0,1)].circuits[0][1][0].params[2].conj())*nm._local_quantum_errors['cx'][(0,1)].circuits[0][1][0].params[2]
print(k11+k22+k33)


I get the following output:

     ┌────────────┐┌───────┐
q_0: ┤0           ├┤ kraus ├
│  Pauli(II) │├───────┤
q_1: ┤1           ├┤ kraus ├
└────────────┘└───────┘
3
[[1.        +0.j 0.        +0.j]
[0.        +0.j 0.99257842+0.j]]


But I think that this means that the completeness relation of the kraus operators is not satisfied. Am I missing anything?

• I don't know how the noise model is derived in this context, but have you considered the possibility that real noise does not preserve trace (i.e. you have loss)? Dec 11, 2023 at 16:15