Skip to content

Commit

Permalink
seeding test_uc.py (and add ddt) (#7630)
Browse files Browse the repository at this point in the history
* a more deterministic test_uc.py

* seeing test/python/circuit/test_uc.py

* ddt

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
1ucian0 and mergify[bot] authored Feb 11, 2022
1 parent fcec842 commit a6aa300
Showing 1 changed file with 32 additions and 32 deletions.
64 changes: 32 additions & 32 deletions test/python/circuit/test_uc.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@

import unittest

import itertools
from ddt import ddt
from test import combine # pylint: disable=wrong-import-order

import numpy as np
from scipy.linalg import block_diag
Expand All @@ -33,42 +34,41 @@
_id = np.eye(2, 2)
_not = np.matrix([[0, 1], [1, 0]])

squs_list = [
[_not],
[_id],
[_id, _id],
[_id, 1j * _id],
[_id, _not, _id, _not],
[random_unitary(2).data for i in range(2**2)],
[random_unitary(2).data for i in range(2**3)],
[random_unitary(2).data for i in range(2**4)],
]

up_to_diagonal_list = [True, False]


@ddt
class TestUCGate(QiskitTestCase):
"""Qiskit UCGate tests."""

def test_ucg(self):
@combine(
squs=[
[_not],
[_id],
[_id, _id],
[_id, 1j * _id],
[_id, _not, _id, _not],
[random_unitary(2, seed=541234).data for i in range(2**2)],
[random_unitary(2, seed=975163).data for i in range(2**3)],
[random_unitary(2, seed=629462).data for i in range(2**4)],
],
up_to_diagonal=[True, False],
)
def test_ucg(self, squs, up_to_diagonal):
"""Test uniformly controlled gates."""
for squs, up_to_diagonal in itertools.product(squs_list, up_to_diagonal_list):
with self.subTest(single_qubit_unitaries=squs, up_to_diagonal=up_to_diagonal):
num_con = int(np.log2(len(squs)))
q = QuantumRegister(num_con + 1)
qc = QuantumCircuit(q)
qc.uc(squs, q[1:], q[0], up_to_diagonal=up_to_diagonal)
# Decompose the gate
qc = transpile(qc, basis_gates=["u1", "u3", "u2", "cx", "id"])
# Simulate the decomposed gate
simulator = BasicAer.get_backend("unitary_simulator")
result = execute(qc, simulator).result()
unitary = result.get_unitary(qc)
if up_to_diagonal:
ucg = UCGate(squs, up_to_diagonal=up_to_diagonal)
unitary = np.dot(np.diagflat(ucg._get_diagonal()), unitary)
unitary_desired = _get_ucg_matrix(squs)
self.assertTrue(matrix_equal(unitary_desired, unitary, ignore_phase=True))
num_con = int(np.log2(len(squs)))
q = QuantumRegister(num_con + 1)
qc = QuantumCircuit(q)
qc.uc(squs, q[1:], q[0], up_to_diagonal=up_to_diagonal)
# Decompose the gate
qc = transpile(qc, basis_gates=["u1", "u3", "u2", "cx", "id"])
# Simulate the decomposed gate
simulator = BasicAer.get_backend("unitary_simulator")
result = execute(qc, simulator).result()
unitary = result.get_unitary(qc)
if up_to_diagonal:
ucg = UCGate(squs, up_to_diagonal=up_to_diagonal)
unitary = np.dot(np.diagflat(ucg._get_diagonal()), unitary)
unitary_desired = _get_ucg_matrix(squs)
self.assertTrue(matrix_equal(unitary_desired, unitary, ignore_phase=True))


def _get_ucg_matrix(squs):
Expand Down

0 comments on commit a6aa300

Please sign in to comment.