Skip to content

Commit

Permalink
refactor(circuits): rename QAOALineCircuit to QAOAPathCircuit
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrorrivero committed Mar 18, 2024
1 parent a04776c commit 5004882
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 29 deletions.
4 changes: 2 additions & 2 deletions quantum_enablement/circuits/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

"""Quantum circuit library and tools."""

from ._qaoa import QAOALineCircuit
from ._qaoa import QAOAPathCircuit

__all__ = [
"QAOALineCircuit",
"QAOAPathCircuit",
]
4 changes: 2 additions & 2 deletions quantum_enablement/circuits/_qaoa.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@


# TODO: add graph max-cut weights input arg
class QAOALineCircuit(QuantumCircuit):
class QAOAPathCircuit(QuantumCircuit):
"""Parameterized QAOA acyclic line graph quantum circuit.
The cost parameter-vector is labeled γ, and the mixer
Expand All @@ -49,7 +49,7 @@ def __init__(
barriers = bool(barriers)
measurements = bool(measurements)

super().__init__(num_qubits, name=f"QAOALineCircuit<{num_qubits}, {depth}>")
super().__init__(num_qubits, name=f"QAOAPathCircuit<{num_qubits}, {depth}>")

gammas = ParameterVector("γ", depth // 2)
betas = ParameterVector("β", depth // 2)
Expand Down
50 changes: 25 additions & 25 deletions test/unit/circuits/test_qaoa.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from pytest import mark, raises # pylint: disable=import-error
from qiskit import QuantumCircuit

from quantum_enablement.circuits._qaoa import QAOALineCircuit
from quantum_enablement.circuits._qaoa import QAOAPathCircuit


def two_qubit_depth_filter(instruction):
Expand All @@ -26,16 +26,16 @@ def two_qubit_depth_filter(instruction):
return num_qubits > 1 and name != "barrier"


class TestQAOALineCircuit:
"""Test suite for the QAOALineCircuit class."""
class TestQAOAPathCircuit:
"""Test suite for the QAOAPathCircuit class."""

@mark.parametrize("num_qubits", [4, 6])
@mark.parametrize("depth", [0, 2, 4])
def test_creation(self, num_qubits, depth):
"""Test QAOALineCircuit creation."""
circuit = QAOALineCircuit(num_qubits, depth, barriers=False, measurements=False)
"""Test QAOAPathCircuit creation."""
circuit = QAOAPathCircuit(num_qubits, depth, barriers=False, measurements=False)
op_counts = circuit.count_ops()
assert isinstance(circuit, QuantumCircuit), "QAOALineCircuit must be a QuantumCircuit."
assert isinstance(circuit, QuantumCircuit), "QAOAPathCircuit must be a QuantumCircuit."
assert circuit.num_qubits == num_qubits, "Wrong number of qubits."
assert circuit.depth(two_qubit_depth_filter) == depth, "Wrong two-qubit depth."
assert circuit.num_parameters == depth, "Wrong number of parameters."
Expand All @@ -48,58 +48,58 @@ def test_creation(self, num_qubits, depth):
assert op_counts.get("measure", 0) == 0, "Wrong number of measurements."

def test_defaults(self):
"""Test QAOALineCircuit defaults."""
circuit = QAOALineCircuit(4, 4) # Note: default barriers and measurements are False.
"""Test QAOAPathCircuit defaults."""
circuit = QAOAPathCircuit(4, 4) # Note: default barriers and measurements are False.
op_counts = circuit.count_ops()
assert op_counts.get("barrier", 0) == 0, "By default barriers should not be present."
assert op_counts.get("measure", 0) == 0, "By default measurements should not be present."

@mark.parametrize("num_qubits", [4, 6])
@mark.parametrize("depth", [0, 2, 4])
def test_barriers(self, num_qubits, depth):
"""Test QAOALineCircuit barriers."""
circuit = QAOALineCircuit(num_qubits, depth, barriers=True, measurements=False)
"""Test QAOAPathCircuit barriers."""
circuit = QAOAPathCircuit(num_qubits, depth, barriers=True, measurements=False)
op_counts = circuit.count_ops()
assert op_counts.get("barrier", 0) == depth // 2, "Wrong number of barriers."
# circuit.remove_operations("barrier")
# assert circuit == QAOALineCircuit(num_qubits, depth, measurements=False, barriers=False)
# assert circuit == QAOAPathCircuit(num_qubits, depth, measurements=False, barriers=False)

@mark.parametrize("num_qubits", [4, 6])
@mark.parametrize("depth", [0, 2, 4])
def test_measurements(self, num_qubits, depth):
"""Test QAOALineCircuit measurements."""
circuit = QAOALineCircuit(num_qubits, depth, barriers=False, measurements=True)
"""Test QAOAPathCircuit measurements."""
circuit = QAOAPathCircuit(num_qubits, depth, barriers=False, measurements=True)
op_counts = circuit.count_ops()
assert op_counts.get("measure", 0) == num_qubits, "Wrong number of measurements."
assert op_counts.get("barrier", 0) == 1, "Measurements should be preceded by a barrier."
# circuit.remove_final_measurements()
# assert circuit == QAOALineCircuit(num_qubits, depth, measurements=False, barriers=False)
# assert circuit == QAOAPathCircuit(num_qubits, depth, measurements=False, barriers=False)

@mark.parametrize("num_qubits", [4, 6])
@mark.parametrize("depth", [0, 2, 4])
def test_name(self, num_qubits, depth):
"""Test QAOALineCircuit name."""
circuit = QAOALineCircuit(num_qubits, depth)
assert circuit.name == f"QAOALineCircuit<{num_qubits}, {depth}>", "Wrong circuit name."
"""Test QAOAPathCircuit name."""
circuit = QAOAPathCircuit(num_qubits, depth)
assert circuit.name == f"QAOAPathCircuit<{num_qubits}, {depth}>", "Wrong circuit name."

def test_invalid_num_qubits(self):
"""Test QAOALineCircuit with invalid number of qubits."""
"""Test QAOAPathCircuit with invalid number of qubits."""
with raises(ValueError, match=r"Number of qubits \(2\) must be greater than two."):
QAOALineCircuit(2, 2)
QAOAPathCircuit(2, 2)

with raises(ValueError, match=r"Number of qubits \(3\) must be even\."):
QAOALineCircuit(3, 2)
QAOAPathCircuit(3, 2)

with raises(TypeError, match=r"Invalid num\. qubits type .*, expected <int>\."):
QAOALineCircuit("4", 2) # type: ignore
QAOAPathCircuit("4", 2) # type: ignore

def test_invalid_depth(self):
"""Test QAOALineCircuit with invalid depth."""
"""Test QAOAPathCircuit with invalid depth."""
with raises(ValueError, match=r"Depth \(-1\) must be positive\."):
QAOALineCircuit(4, -1)
QAOAPathCircuit(4, -1)

with raises(ValueError, match=r"Depth \(1\) must be even\."):
QAOALineCircuit(4, 1)
QAOAPathCircuit(4, 1)

with raises(TypeError, match=r"Invalid depth type .*, expected <int>\."):
QAOALineCircuit(4, "2") # type: ignore
QAOAPathCircuit(4, "2") # type: ignore

0 comments on commit 5004882

Please sign in to comment.