Source code for acqdp.circuit.noise

from acqdp.circuit.circuit import Channel, Circuit
import numpy as np


[docs]def Depolarization(px=0.25, py=None, pz=None): """Single-qubit depolarizing channel. :param px: One of the three parameters to describe the single-qubit depolarizing channel. :type px: :class:`float`. :param py: One of the three parameters to describe the single-qubit depolarizing channel. :type py: :class:`float`. :param pz: One of the three parameters to describe the single-qubit depolarizing channel. :type pz: :class:`float`. :returns: :class:`Mixture` -- the single-qubit depolarizing channel. """ if py is None: py = px if pz is None: pz = px res = Channel( 1, np.array([[[[1 - px - py, 0], [0, 1 - 2 * pz - px - py]], [[0, px + py], [px - py, 0]]], [[[0, px - py], [px + py, 0]], [[1 - px - py - 2 * pz, 0], [0, 1 - px - py]]]])) return res
[docs]def Dephasing(pz=0.5): """Single-qubit dephasing channel, also called the phase-damping channel. :param pz: The parameter to describe the single-qubit dephasing channel. :type pz: :class:`float`. :returns: :class:`Mixture` -- the single-qubit dephasing channel with given parameter. """ return Depolarization(0, 0, pz)
[docs]def AmplitudeDampling(p=0.1): res = Channel( 1, np.array([[[[1, 0], [0, np.sqrt(1 - p)]], [[0, p], [0, 0]]], [[[0, 0], [0, 0]], [[np.sqrt(1 - p), 0], [0, 1 - p]]]])) return res
[docs]def add_noise(circuit, noise_channel): c = Circuit() for k in circuit.operations_by_name: operation = circuit.operations_by_name[k]['operation'] qubits = circuit.operations_by_name[k]['qubits'] time_step = circuit.operations_by_name[k]['time_step'] new_op = Circuit() | operation for a in new_op._output_indices[0]: new_op.append(noise_channel, [a]) c.append(new_op, qubits=qubits, time_step=time_step, name=k) return c