From 580b9b90113398a0fda0af10f2251dec115468c9 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 27 Oct 2023 15:18:00 -0400 Subject: [PATCH] Make unrealized `SingleQubitQPDGate` has definition of `None` rather than error Fixes #417 according to https://github.com/Qiskit-Extensions/circuit-knitting-toolbox/issues/417#issuecomment-1783385101 --- .../cutting/qpd/instructions/qpd_gate.py | 16 +++++----------- test/cutting/qpd/instructions/test_qpd_gate.py | 7 +------ 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/circuit_knitting/cutting/qpd/instructions/qpd_gate.py b/circuit_knitting/cutting/qpd/instructions/qpd_gate.py index 76571d0b4..840cd0874 100644 --- a/circuit_knitting/cutting/qpd/instructions/qpd_gate.py +++ b/circuit_knitting/cutting/qpd/instructions/qpd_gate.py @@ -14,14 +14,12 @@ from __future__ import annotations -from abc import ABC, abstractmethod - from qiskit.circuit import QuantumCircuit, Instruction, CircuitInstruction from ..qpd_basis import QPDBasis -class BaseQPDGate(Instruction, ABC): +class BaseQPDGate(Instruction): """Base class for a gate to be decomposed using quasiprobability decomposition.""" def __init__( @@ -101,11 +99,6 @@ def __eq__(self, other): and self.label == other.label ) - @abstractmethod - def _define(self) -> None: - """Generate a decomposed gate.""" - raise NotImplementedError # pragma: no cover - class TwoQubitQPDGate(BaseQPDGate): """Two qubit gate to be decomposed using quasiprobability decomposition.""" @@ -198,9 +191,10 @@ def _set_qubit_id(self, qubit_id: int) -> None: def _define(self) -> None: if self.basis_id is None: - raise ValueError( - "Missing 'basis_id': unable to realize SingleQubitQPDGate." - ) + # With basis_id is not set, it does not make sense to define this + # operation in terms of more fundamental instructions, so we have + # self.definition remain as None. + return qc = QuantumCircuit(1) base = self.basis.maps[self.basis_id] for op in base[self.qubit_id]: diff --git a/test/cutting/qpd/instructions/test_qpd_gate.py b/test/cutting/qpd/instructions/test_qpd_gate.py index 114d62477..066e79a3e 100644 --- a/test/cutting/qpd/instructions/test_qpd_gate.py +++ b/test/cutting/qpd/instructions/test_qpd_gate.py @@ -92,12 +92,7 @@ def test_qubit_id_out_of_range(self): def test_missing_basis_id(self): maps = [([XGate()], [YGate()])] basis = QPDBasis(maps, [1.0]) - with pytest.raises(ValueError) as e_info: - SingleQubitQPDGate(basis=basis, qubit_id=0).definition - self.assertEqual( - "Missing 'basis_id': unable to realize SingleQubitQPDGate.", - e_info.value.args[0], - ) + assert SingleQubitQPDGate(basis=basis, qubit_id=0).definition is None def test_compare_1q_and_2q(self): maps = [([XGate()], [YGate()])]