def test_apply_noise_to_moments_initialization_2QubitNoise_2( circuit_2qubit, noise_2qubit, noise_1qubit, noise_1qubit_2 ): circ = apply_noise_to_moments( circuit_2qubit, [noise_1qubit, noise_2qubit, noise_1qubit_2], target_qubits=QubitSet([0, 1]), position="initialization", ) expected = ( Circuit() .add_instruction(Instruction(noise_1qubit, 0)) .add_instruction(Instruction(noise_1qubit, 1)) .add_instruction(Instruction(noise_2qubit, [0, 1])) .add_instruction(Instruction(noise_1qubit_2, 0)) .add_instruction(Instruction(noise_1qubit_2, 1)) .add_instruction(Instruction(Gate.X(), 0)) .add_instruction(Instruction(Gate.Y(), 1)) .add_instruction(Instruction(Gate.X(), 0)) .add_instruction(Instruction(Gate.X(), 1)) .add_instruction(Instruction(Gate.CNot(), [0, 1])) ) assert circ == expected
def test_apply_multiple_noise_1QubitNoise_2(circuit_2qubit, noise_1qubit, noise_1qubit_2): circ = circuit_2qubit.apply_gate_noise( noise_1qubit, target_gates=[Gate.X], ).apply_gate_noise( noise_1qubit_2, target_qubits=[0], ) expected = (Circuit().add_instruction(Instruction( Gate.X(), 0)).add_instruction(Instruction(noise_1qubit_2, 0)).add_instruction( Instruction(noise_1qubit, 0)).add_instruction( Instruction(Gate.Y(), 1)).add_instruction( Instruction(Gate.X(), 0)).add_instruction( Instruction(noise_1qubit_2, 0)).add_instruction( Instruction(noise_1qubit, 0)).add_instruction( Instruction(Gate.X(), 1)).add_instruction( Instruction( noise_1qubit, 1)).add_instruction( Instruction( Gate.CNot(), [0, 1])).add_instruction( Instruction( noise_1qubit_2, 0))) assert circ == expected
def test_apply_noise_to_gates_2QubitNoise_2( circuit_3qubit, noise_2qubit, noise_1qubit, noise_1qubit_2 ): circ = apply_noise_to_gates( circuit_3qubit, [noise_1qubit, noise_2qubit, noise_1qubit_2], target_gates=[Gate.CZ], target_qubits=QubitSet([1, 2]), ) expected = ( Circuit() .add_instruction(Instruction(Gate.X(), 0)) .add_instruction(Instruction(Gate.Y(), 1)) .add_instruction(Instruction(Gate.CNot(), [0, 1])) .add_instruction(Instruction(Gate.Z(), 2)) .add_instruction(Instruction(Gate.CZ(), [2, 1])) .add_instruction(Instruction(noise_1qubit, 1)) .add_instruction(Instruction(noise_1qubit, 2)) .add_instruction(Instruction(noise_2qubit, [2, 1])) .add_instruction(Instruction(noise_1qubit_2, 1)) .add_instruction(Instruction(noise_1qubit_2, 2)) .add_instruction(Instruction(Gate.CNot(), [0, 2])) .add_instruction(Instruction(Gate.CZ(), [1, 2])) .add_instruction(Instruction(noise_1qubit, 1)) .add_instruction(Instruction(noise_1qubit, 2)) .add_instruction(Instruction(noise_2qubit, [1, 2])) .add_instruction(Instruction(noise_1qubit_2, 1)) .add_instruction(Instruction(noise_1qubit_2, 2)) ) assert circ == expected
def y(target: QubitSetInput) -> Iterable[Instruction]: """Registers this function into the circuit class. Args: target (Qubit, int, or iterable of Qubit / int): Target qubit(s) Returns: Iterable[Instruction]: `Iterable` of Y instructions. Examples: >>> circ = Circuit().y(0) >>> circ = Circuit().y([0, 1, 2]) """ return [Instruction(Gate.Y(), target=qubit) for qubit in QubitSet(target)]
def test_noise_not_applied_1QubitNoise_1(circuit_2qubit, noise_2qubit): circ = circuit_2qubit.apply_gate_noise( [noise_2qubit], target_qubits=[1], target_gates=[], ) expected = (Circuit().add_instruction(Instruction( Gate.X(), 0)).add_instruction(Instruction(Gate.Y(), 1)).add_instruction( Instruction(Gate.X(), 0)).add_instruction(Instruction( Gate.X(), 1)).add_instruction(Instruction(Gate.CNot(), [0, 1]))) assert circ == expected
def test_apply_initialization_noise_1QubitNoise_1(circuit_2qubit, noise_1qubit): circ = circuit_2qubit.apply_initialization_noise( [noise_1qubit], target_qubits=[0, 1], ) expected = (Circuit().add_instruction(Instruction( noise_1qubit, 0)).add_instruction(Instruction(noise_1qubit, 1)).add_instruction( Instruction(Gate.X(), 0)).add_instruction(Instruction( Gate.Y(), 1)).add_instruction(Instruction(Gate.X(), 0)).add_instruction( Instruction(Gate.X(), 1)).add_instruction( Instruction(Gate.CNot(), [0, 1]))) assert circ == expected
def test_apply_gate_noise_2QubitNoise2_parametrized( circuit_2qubit_parametrized, noise_2qubit): circ = circuit_2qubit_parametrized.apply_gate_noise( noise_2qubit, target_gates=[Gate.XY], target_qubits=[0, 1], ) expected = (Circuit().add_instruction(Instruction( Gate.X(), 0)).add_instruction(Instruction(Gate.Y(), 1)).add_instruction( Instruction(Gate.X(), 0)).add_instruction( Instruction(Gate.Rx(np.pi), 1)).add_instruction( Instruction(Gate.XY(np.pi / 2), [0, 1])).add_instruction( Instruction(noise_2qubit, [0, 1]))) assert circ == expected
def test_apply_noise_to_moments_readout_1QubitNoise_2(circuit_2qubit, noise_1qubit): circ = apply_noise_to_moments( circuit_2qubit, [noise_1qubit], target_qubits=QubitSet(1), position="readout", ) expected = (Circuit().add_instruction(Instruction( Gate.X(), 0)).add_instruction(Instruction(Gate.Y(), 1)).add_instruction( Instruction(Gate.X(), 0)).add_instruction(Instruction( Gate.X(), 1)).add_instruction(Instruction( Gate.CNot(), [0, 1])).add_instruction(Instruction(noise_1qubit, 1))) assert circ == expected
def test_apply_noise_to_gates_1QubitNoise_2(circuit_2qubit, noise_1qubit): circ = apply_noise_to_gates( circuit_2qubit, [noise_1qubit], target_gates=[Gate.X], target_qubits=QubitSet(0), ) expected = (Circuit().add_instruction(Instruction( Gate.X(), 0)).add_instruction(Instruction(noise_1qubit, 0)).add_instruction( Instruction(Gate.Y(), 1)).add_instruction(Instruction( Gate.X(), 0)).add_instruction(Instruction( noise_1qubit, 0)).add_instruction(Instruction( Gate.X(), 1)).add_instruction(Instruction(Gate.CNot(), [0, 1]))) assert circ == expected
def test_apply_gate_noise_1QubitNoise_1_unitary(circuit_2qubit_with_unitary, noise_1qubit): circ = circuit_2qubit_with_unitary.apply_gate_noise( noise_1qubit, target_unitary=np.array([[0, 1], [1, 0]]), target_qubits=[0, 1], ) expected = ( Circuit() .add_instruction(Instruction(Gate.X(), 0)) .add_instruction(Instruction(Gate.Y(), 1)) .add_instruction(Instruction(Gate.X(), 0)) .add_instruction(Instruction(Gate.X(), 1)) .add_instruction(Instruction(Gate.CNot(), [0, 1])) .add_instruction(Instruction(Gate.Unitary(np.array([[0, 1], [1, 0]]), "U"), 0)) .add_instruction(Instruction(noise_1qubit, 0)) ) assert circ == expected
def test_apply_noise_to_gates_1QubitNoise_not_dense(circuit_2qubit_not_dense, noise_1qubit): circ = apply_noise_to_gates( circuit_2qubit_not_dense, [noise_1qubit], target_qubits=QubitSet([0, 1]), target_gates=None, ) expected_moments = Moments() expected_moments._add(Instruction(Gate.X(), 0), noise_index=1) expected_moments.add_noise(Instruction(noise_1qubit, 0), "gate_noise", 1) expected_moments._add(Instruction(Gate.Y(), 1), noise_index=1) expected_moments.add_noise(Instruction(noise_1qubit, 1), "gate_noise", 1) expected_moments._add(Instruction(Gate.X(), 0), noise_index=1) expected_moments.add_noise(Instruction(noise_1qubit, 0), "gate_noise", 1) expected_moments._add(Instruction(Gate.CNot(), [0, 1]), noise_index=2) expected_moments.add_noise(Instruction(noise_1qubit, 0), "gate_noise", 1) expected_moments.add_noise(Instruction(noise_1qubit, 1), "gate_noise", 2) assert circ.moments == expected_moments