def test_init_with_cirq_circuit(): qreg = cirq.LineQubit.range(2) circ = cirq.Circuit(cirq.H.on(qreg[0]), cirq.CNOT.on(*qreg)) real = np.zeros(shape=(16, 16)) noisy_op = NoisyOperation(circ, real) assert isinstance(noisy_op._ideal, cirq.Circuit) assert _equal(noisy_op.ideal_circuit(), circ, require_qubit_equality=True) assert set(noisy_op.qubits) == set(qreg) assert np.allclose(noisy_op.ideal_unitary, cirq.unitary(circ)) assert np.allclose(noisy_op.real_matrix, real) assert noisy_op.real_matrix is not real
def test_init_with_pyquil_program(): circ = pyquil.Program(pyquil.gates.H(0), pyquil.gates.CNOT(0, 1)) cirq_qreg = cirq.LineQubit.range(2) cirq_circ = cirq.Circuit(cirq.H.on(cirq_qreg[0]), cirq.CNOT.on(*cirq_qreg)) real = np.zeros(shape=(16, 16)) noisy_op = NoisyOperation(circ, real) assert isinstance(noisy_op._ideal, cirq.Circuit) assert _equal(noisy_op._ideal, cirq_circ) assert noisy_op.ideal_circuit() == circ assert noisy_op._native_ideal == circ assert noisy_op._native_type == "pyquil" assert np.allclose(noisy_op.ideal_unitary, cirq.unitary(cirq_circ)) assert np.allclose(noisy_op.real_matrix, real) assert noisy_op.real_matrix is not real
def test_unknown_real_matrix(): qreg = qiskit.QuantumRegister(2) circ = qiskit.QuantumCircuit(qreg) _ = circ.h(qreg[0]) _ = circ.cnot(*qreg) cirq_qreg = cirq.LineQubit.range(2) cirq_circ = cirq.Circuit(cirq.H.on(cirq_qreg[0]), cirq.CNOT.on(*cirq_qreg)) noisy_op = NoisyOperation(circ) assert isinstance(noisy_op._ideal, cirq.Circuit) assert _equal(noisy_op._ideal, cirq_circ) assert noisy_op.ideal_circuit() == circ assert noisy_op._native_ideal == circ assert noisy_op._native_type == "qiskit" assert np.allclose(noisy_op.ideal_unitary, cirq.unitary(cirq_circ)) with pytest.raises(ValueError, match="Real matrix is unknown."): _ = noisy_op.real_matrix
def test_init_with_qiskit_circuit(): qreg = qiskit.QuantumRegister(2) circ = qiskit.QuantumCircuit(qreg) _ = circ.h(qreg[0]) _ = circ.cnot(*qreg) cirq_qreg = cirq.LineQubit.range(2) cirq_circ = cirq.Circuit(cirq.H.on(cirq_qreg[0]), cirq.CNOT.on(*cirq_qreg)) real = np.zeros(shape=(16, 16)) noisy_op = NoisyOperation(circ, real) assert isinstance(noisy_op._ideal, cirq.Circuit) assert _equal(noisy_op._ideal, cirq_circ) assert noisy_op.ideal_circuit() == circ assert noisy_op._native_ideal == circ assert noisy_op._native_type == "qiskit" assert np.allclose(noisy_op.ideal_unitary, cirq.unitary(cirq_circ)) assert np.allclose(noisy_op.real_matrix, real) assert noisy_op.real_matrix is not real