Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_bit_index_mix_list(self):
"""Test mix of bit and index in list indexing"""
qr = QuantumRegister(2)
qc = QuantumCircuit(qr)
expected = QuantumCircuit(qr)
expected.h([qr[0], qr[1]])
qc.h([qr[0], 1])
self.assertEqual(qc, expected)
def test_cx_equivalence_1cx_random(self):
"""Check random circuits with 1 cx
gates locally equivalent to a cx
"""
qr = QuantumRegister(2, name='q')
qc = QuantumCircuit(qr)
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[0])
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[1])
qc.cx(qr[1], qr[0])
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[0])
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[1])
sim = UnitarySimulatorPy()
U = execute(qc, sim).result().get_unitary()
self.assertEqual(two_qubit_cnot_decompose.num_basis_gates(U), 1)
qc = QuantumCircuit(qr)
qc.cx(qr[1], qr[0])
U = execute(qc, sim).result().get_unitary()
vec = two_qubit_local_invariants(U)
assert_allclose(vec, [0, 0, 1])
qr = QuantumRegister(2, name='q')
qc = QuantumCircuit(qr)
qc.cx(qr[1], qr[0])
qc.cx(qr[0], qr[1])
U = execute(qc, sim).result().get_unitary()
vec = two_qubit_local_invariants(U)
assert_allclose(vec, [0, 0, -1])
qr = QuantumRegister(2, name='q')
qc = QuantumCircuit(qr)
qc.swap(qr[1], qr[0])
U = execute(qc, sim).result().get_unitary()
vec = two_qubit_local_invariants(U)
assert_allclose(vec, [-1, 0, -3])
def test_cx_equivalence_3cx_random(self):
"""Check random circuits with 3 cx
gates are outside the 0, 1, and 2
qubit regions.
"""
qr = QuantumRegister(2, name='q')
qc = QuantumCircuit(qr)
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[0])
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[1])
qc.cx(qr[1], qr[0])
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[0])
rnd = 2*np.pi*np.random.random(size=3)
qc.u3(rnd[0], rnd[1], rnd[2], qr[1])
qc.cx(qr[0], qr[1])
rnd = 2*np.pi*np.random.random(size=3)
def test_append_opaque_wrong_dimension(self):
"""test appending opaque gate to wrong dimension wires.
"""
qr = QuantumRegister(2)
circ = QuantumCircuit(qr)
opaque_gate = Gate(name='crz_2', num_qubits=2, params=[0.5])
self.assertRaises(CircuitError, circ.append, opaque_gate, [qr[0]])
def test_convert_to_bfunc_plus_conditional(self):
"""Verify assemble_circuits converts conditionals from QASM to Qobj."""
qr = QuantumRegister(1)
cr = ClassicalRegister(1)
qc = QuantumCircuit(qr, cr)
qc.h(qr[0]).c_if(cr, 1)
qobj = assemble(qc)
validate_qobj_against_schema(qobj)
bfunc_op, h_op = qobj.experiments[0].instructions
self.assertEqual(bfunc_op.name, 'bfunc')
self.assertEqual(bfunc_op.mask, '0x1')
self.assertEqual(bfunc_op.val, '0x1')
self.assertEqual(bfunc_op.relation, '==')
self.assertTrue(hasattr(h_op, 'conditional'))
self.assertEqual(bfunc_op.register, h_op.conditional)
def test_pop_gate(self):
"""Verify removing a gate via circuit.data.pop."""
qr = QuantumRegister(2)
qc = QuantumCircuit(qr)
qc.h(0)
qc.cx(0, 1)
qc.h(1)
last_h = qc.data.pop()
expected_qc = QuantumCircuit(qr)
expected_qc.h(0)
expected_qc.cx(0, 1)
self.assertEqual(qc, expected_qc)
self.assertEqual(last_h, (HGate(), [qr[1]], []))
def test_disassemble_single_circuit(self):
"""Test assembling a single circuit.
"""
qr = QuantumRegister(2, name='q')
cr = ClassicalRegister(2, name='c')
circ = QuantumCircuit(qr, cr, name='circ')
circ.h(qr[0])
circ.cx(qr[0], qr[1])
circ.measure(qr, cr)
qobj = assemble(circ, shots=2000, memory=True)
circuits, run_config_out, headers = disassemble(qobj)
run_config_out = RunConfig(**run_config_out)
self.assertEqual(run_config_out.n_qubits, 2)
self.assertEqual(run_config_out.memory_slots, 2)
self.assertEqual(run_config_out.shots, 2000)
self.assertEqual(run_config_out.memory, True)
self.assertEqual(len(circuits), 1)
self.assertEqual(circuits[0], circ)
self.assertEqual({}, headers)
def test_list_indexing(self):
"""test list indexing"""
qr = QuantumRegister(10)
cr = QuantumRegister(10)
qc = QuantumCircuit(qr, cr)
ind = [0, 1, 8, 9]
qc.h(qr[ind])
self.assertEqual(len(qc.data), len(ind))
for (gate, qargs, _), index in zip(qc.data, ind):
self.assertEqual(gate.name, 'h')
self.assertEqual(len(qargs), 1)
self.assertEqual(qargs[0].index, index)
qc = QuantumCircuit(qr, cr)
ind = [0, 1, 8, 9]
qc.cx(qr[ind], qr[2:6])
for (gate, qargs, _), ind1, ind2 in zip(qc.data, ind, range(2, 6)):
self.assertEqual(gate.name, 'cx')
self.assertEqual(len(qargs), 2)
self.assertEqual(qargs[0].index, ind1)
self.assertEqual(qargs[1].index, ind2)
def construct_circuit(self, mode='circuit', register=None):
# pylint: disable=import-outside-toplevel
from qiskit import BasicAer
if mode == 'vector':
if self._state_vector is None:
if self._circuit is not None:
self._state_vector = np.asarray(q_execute(self._circuit, BasicAer.get_backend(
'statevector_simulator')).result().get_statevector(self._circuit))
return self._state_vector
elif mode == 'circuit':
if self._circuit is None:
# create empty quantum circuit
circuit = QuantumCircuit()
if register is None:
register = QuantumRegister(self._num_qubits, name='q')
if isinstance(register, QuantumRegister):
circuit.add_register(register)
elif isinstance(register, list):
for q in register:
if isinstance(q, Qubit):
if not circuit.has_register(q.register):
circuit.add_register(q.register)
else:
raise AquaError('Unexpected qubit type {}.'.format(type(q)))
else:
raise AquaError('Unexpected register type {}.'.format(type(register)))