Skip to content

Commit 63445e9

Browse files
1ucian0mtreinishjakelishman
authored
remove internal add_control (#13177)
* rename module * simplify tests * reno * Reword release note --------- Co-authored-by: Matthew Treinish <mtreinish@kortar.org> Co-authored-by: Jake Lishman <jake@binhbar.com>
1 parent f82689f commit 63445e9

4 files changed

Lines changed: 11 additions & 6 deletions

File tree

qiskit/circuit/gate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def control(
135135
"""
136136
if not annotated: # captures both None and False
137137
# pylint: disable=cyclic-import
138-
from .add_control import add_control
138+
from ._add_control import add_control
139139

140140
return add_control(self, num_ctrl_qubits, label, ctrl_state)
141141

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
upgrade_circuits:
3+
- |
4+
The internal function ``qiskit.circuit.add_control.add_control`` was removed, as it is not part of the
5+
public API. It had fragile preconditions to uphold and was a common source of bugs. Uses of ``add_control(SomeGate(...), ...)``
6+
should change to ``SomeGate(...).control(...)`` using :meth:`.Gate.control` instead, which is far safer.

test/python/circuit/test_controlled_gate.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
from qiskit.quantum_info.operators.predicates import matrix_equal, is_unitary_matrix
2828
from qiskit.quantum_info.random import random_unitary
2929
from qiskit.quantum_info.states import Statevector
30-
import qiskit.circuit.add_control as ac
3130
from qiskit.transpiler.passes import UnrollCustomDefinitions, BasisTranslator
3231
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
3332
from qiskit.converters.circuit_to_dag import circuit_to_dag
@@ -1584,10 +1583,10 @@ class TestSingleControlledRotationGates(QiskitTestCase):
15841583
gry = ry.RYGate(theta)
15851584
grz = rz.RZGate(theta)
15861585

1587-
ugu1 = ac._unroll_gate(gu1, ["p", "u", "cx"])
1588-
ugrx = ac._unroll_gate(grx, ["p", "u", "cx"])
1589-
ugry = ac._unroll_gate(gry, ["p", "u", "cx"])
1590-
ugrz = ac._unroll_gate(grz, ["p", "u", "cx"])
1586+
ugu1 = u1.U1Gate(theta).definition
1587+
ugrx = rx.RXGate(theta).definition
1588+
ugry = ry.RYGate(theta).definition
1589+
ugrz = rz.RZGate(theta).definition
15911590
ugrz.params = grz.params
15921591

15931592
cgu1 = ugu1.control(num_ctrl)

0 commit comments

Comments
 (0)