def test_three_qubit_depolarizing_representation_error(): q0, q1, q2 = LineQubit.range(3) with pytest.raises(ValueError): represent_operation_with_global_depolarizing_noise( Circuit(CCNOT(q0, q1, q2)), 0.05, )
def test_two_qubit_representation_norm(gate: Gate, noise: float): qreg = LineQubit.range(2) optimal_norm = two_qubit_depolarizing_overhead(noise) norm = represent_operation_with_global_depolarizing_noise( Circuit(gate(*qreg)), noise, ).norm assert np.isclose(optimal_norm, norm)
def test_single_qubit_representation_norm(gate: Gate, noise: float): q = LineQubit(0) optimal_norm = single_qubit_depolarizing_overhead(noise) norm = represent_operation_with_global_depolarizing_noise( Circuit(gate(q)), noise, ).norm assert np.isclose(optimal_norm, norm)
def test_depolarizing_representation_with_choi(gate: Gate, noise: float): """Tests the representation by comparing exact Choi matrices.""" qreg = LineQubit.range(gate.num_qubits()) ideal_choi = _operation_to_choi(gate.on(*qreg)) op_rep = represent_operation_with_global_depolarizing_noise( Circuit(gate.on(*qreg)), noise, ) choi_components = [] for noisy_op, coeff in op_rep.basis_expansion.items(): implementable_circ = noisy_op.circuit() # Apply noise after each sequence. # NOTE: noise is not applied after each operation. depolarizing_op = DepolarizingChannel(noise, len(qreg))(*qreg) implementable_circ.append(depolarizing_op) sequence_choi = _circuit_to_choi(implementable_circ) choi_components.append(coeff * sequence_choi) combination_choi = np.sum(choi_components, axis=0) assert np.allclose(ideal_choi, combination_choi, atol=10 ** -6)