From bc648ce6113117a3a855e46ce0556ff38a7b052c Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 14:27:16 -0400 Subject: [PATCH 01/11] remove redundant name check for add_register on the python side --- qiskit/circuit/quantumcircuit.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index f33154b758e4..5a0a325fada0 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -3636,11 +3636,6 @@ def add_register(self, *regs: Register | int | Sequence[Bit]) -> None: ) for register in regs: - if isinstance(register, Register) and any( - register.name == reg.name for reg in self.qregs + self.cregs - ): - raise CircuitError(f'register name "{register.name}" already exists') - if isinstance(register, AncillaRegister): for bit in register: if bit not in self._qubit_indices: From 294badccf7daf41fdd3a7f4ea4fbdf9e29e930f4 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 15:40:23 -0400 Subject: [PATCH 02/11] add performance release note --- .../notes/create-register-performance-fe392209793d151f.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 releasenotes/notes/create-register-performance-fe392209793d151f.yaml diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml new file mode 100644 index 000000000000..b047ec9c40b0 --- /dev/null +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -0,0 +1,5 @@ +performance: + - | + Improves performance when creating `QuantumCircuit` with many registers. + Refer to #7133 for more details. + From 416d7e1d78ced3476d92c6c5ab9658098afa2cb6 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 15:53:49 -0400 Subject: [PATCH 03/11] modify performance release note --- create-registers.py | 33 +++++++++++++++++++ ...register-performance-fe392209793d151f.yaml | 6 ++-- 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 create-registers.py diff --git a/create-registers.py b/create-registers.py new file mode 100644 index 000000000000..c98eb52a3639 --- /dev/null +++ b/create-registers.py @@ -0,0 +1,33 @@ +import time + +from qiskit.circuit import ClassicalRegister, QuantumCircuit + +start = time.time() +size = 10 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 1000 +print("n=10: ", elapsed) + +start = time.time() +size = 100 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 100 +print("n=100: ", elapsed) + +start = time.time() +size = 1000 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 1000 +print("n=1000: ", elapsed) + +start = time.time() +size = 10_000 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 1000 +print("n=10000: ", elapsed) + +qc = QuantumCircuit(ClassicalRegister(5, "a"), ClassicalRegister(5, "b")) diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml index b047ec9c40b0..9fafdee10940 100644 --- a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -1,5 +1,7 @@ performance: - | - Improves performance when creating `QuantumCircuit` with many registers. - Refer to #7133 for more details. + Improves runtime performance when creating `QuantumCircuit` with many + registers. See PR `#16678 ` + for performance details. + From 0887a5e290396586253f170133436bad31739431 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 16:55:30 -0400 Subject: [PATCH 04/11] remove create registers test file --- create-registers.py | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 create-registers.py diff --git a/create-registers.py b/create-registers.py deleted file mode 100644 index c98eb52a3639..000000000000 --- a/create-registers.py +++ /dev/null @@ -1,33 +0,0 @@ -import time - -from qiskit.circuit import ClassicalRegister, QuantumCircuit - -start = time.time() -size = 10 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 1000 -print("n=10: ", elapsed) - -start = time.time() -size = 100 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 100 -print("n=100: ", elapsed) - -start = time.time() -size = 1000 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 1000 -print("n=1000: ", elapsed) - -start = time.time() -size = 10_000 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 1000 -print("n=10000: ", elapsed) - -qc = QuantumCircuit(ClassicalRegister(5, "a"), ClassicalRegister(5, "b")) From f0108cf49932da039be5e949af2a8a16cd9e2783 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 17:36:21 -0400 Subject: [PATCH 05/11] modify release notes with performance details --- .../create-register-performance-fe392209793d151f.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml index 9fafdee10940..4df4b150743c 100644 --- a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -1,7 +1,6 @@ performance: - | - Improves runtime performance when creating `QuantumCircuit` with many - registers. See PR `#16678 ` - for performance details. - - + Improves runtime performance of the `add_register()` method on + `QuantumCircuit`. Consequently, this change has performance improvements + for creating `QuantumCircuit` as well. Generally, the time complexity of + checking if a register name exists was reduced from O(n) from O(1). From e7b12c16197d8f4cc52da600c1eb283ee894dbd8 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 17:41:53 -0400 Subject: [PATCH 06/11] improve release notes language --- create-registers.py | 33 +++++++++++++++++++ ...register-performance-fe392209793d151f.yaml | 4 +-- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 create-registers.py diff --git a/create-registers.py b/create-registers.py new file mode 100644 index 000000000000..2a6aacf98e0c --- /dev/null +++ b/create-registers.py @@ -0,0 +1,33 @@ +import time + +from qiskit.circuit import ClassicalRegister, QuantumCircuit + +start = time.time() +size = 10 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 1000 +print("n=10: ", elapsed) + +start = time.time() +size = 100 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 1000 +print("n=100: ", elapsed) + +start = time.time() +size = 1000 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 1000 +print("n=1000: ", elapsed) + +start = time.time() +size = 10_000 +qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) +end = time.time() +elapsed = (end - start) * 1000 +print("n=10000: ", elapsed) + +qc = QuantumCircuit(ClassicalRegister(5, "a"), ClassicalRegister(5, "b")) diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml index 4df4b150743c..a4a9a90978ea 100644 --- a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -1,6 +1,6 @@ performance: - | Improves runtime performance of the `add_register()` method on - `QuantumCircuit`. Consequently, this change has performance improvements - for creating `QuantumCircuit` as well. Generally, the time complexity of + `QuantumCircuit`. Consequently, this change improves performance when + creating `QuantumCircuit` as well. Generally, the time complexity of checking if a register name exists was reduced from O(n) from O(1). From b076c0e1ba13ada700fe9094593adc9372bb3723 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 17:49:56 -0400 Subject: [PATCH 07/11] touch on redundant error handling in release note --- .../notes/create-register-performance-fe392209793d151f.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml index a4a9a90978ea..74f4b70d0428 100644 --- a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -3,4 +3,5 @@ performance: Improves runtime performance of the `add_register()` method on `QuantumCircuit`. Consequently, this change improves performance when creating `QuantumCircuit` as well. Generally, the time complexity of - checking if a register name exists was reduced from O(n) from O(1). + checking register name presence was reduced from O(n) from O(1). This was + achieved by removing redundant error checking. From 6e15638a9dd9253812c92b9910b3ae27b38cbbc2 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 17:50:32 -0400 Subject: [PATCH 08/11] remove test program --- create-registers.py | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 create-registers.py diff --git a/create-registers.py b/create-registers.py deleted file mode 100644 index 2a6aacf98e0c..000000000000 --- a/create-registers.py +++ /dev/null @@ -1,33 +0,0 @@ -import time - -from qiskit.circuit import ClassicalRegister, QuantumCircuit - -start = time.time() -size = 10 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 1000 -print("n=10: ", elapsed) - -start = time.time() -size = 100 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 1000 -print("n=100: ", elapsed) - -start = time.time() -size = 1000 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 1000 -print("n=1000: ", elapsed) - -start = time.time() -size = 10_000 -qc = QuantumCircuit(*(ClassicalRegister(5, f"cr_{i:05}") for i in range(size))) -end = time.time() -elapsed = (end - start) * 1000 -print("n=10000: ", elapsed) - -qc = QuantumCircuit(ClassicalRegister(5, "a"), ClassicalRegister(5, "b")) From 3fa6f558912648b0ab1ce5f9dc794fb43c8d9702 Mon Sep 17 00:00:00 2001 From: David Cohen Date: Tue, 28 Jul 2026 17:52:53 -0400 Subject: [PATCH 09/11] fix release note typo --- .../notes/create-register-performance-fe392209793d151f.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml index 74f4b70d0428..0c223ad34fa1 100644 --- a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -3,5 +3,5 @@ performance: Improves runtime performance of the `add_register()` method on `QuantumCircuit`. Consequently, this change improves performance when creating `QuantumCircuit` as well. Generally, the time complexity of - checking register name presence was reduced from O(n) from O(1). This was + checking register name presence was reduced to O(1) from O(n). This was achieved by removing redundant error checking. From 3b99b0c0efff7068ad423021266d7361d26347db Mon Sep 17 00:00:00 2001 From: "David F. Cohen" Date: Wed, 29 Jul 2026 10:30:34 -0400 Subject: [PATCH 10/11] Update releasenotes/notes/create-register-performance-fe392209793d151f.yaml Co-authored-by: Raynel Sanchez <87539502+raynelfss@users.noreply.github.com> --- .../notes/create-register-performance-fe392209793d151f.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml index 0c223ad34fa1..89a868933b5d 100644 --- a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -1,7 +1,7 @@ performance: - | - Improves runtime performance of the `add_register()` method on - `QuantumCircuit`. Consequently, this change improves performance when - creating `QuantumCircuit` as well. Generally, the time complexity of + Improves runtime performance of the :py:meth:`~.QuantumCircuit.add_register()` method on + :py:class:`~.QuantumCircuit`. Consequently, this change improves performance when + creating :py:class:`~.QuantumCircuit` as well. Generally, the time complexity of checking register name presence was reduced to O(1) from O(n). This was achieved by removing redundant error checking. From 8aa1893ed05004b8bc3c0797c59e4d5810eccbff Mon Sep 17 00:00:00 2001 From: "David F. Cohen" Date: Wed, 29 Jul 2026 10:31:19 -0400 Subject: [PATCH 11/11] Apply suggestion from @raynelfss Co-authored-by: Raynel Sanchez <87539502+raynelfss@users.noreply.github.com> --- .../notes/create-register-performance-fe392209793d151f.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml index 89a868933b5d..b2859ddb5d88 100644 --- a/releasenotes/notes/create-register-performance-fe392209793d151f.yaml +++ b/releasenotes/notes/create-register-performance-fe392209793d151f.yaml @@ -3,5 +3,5 @@ performance: Improves runtime performance of the :py:meth:`~.QuantumCircuit.add_register()` method on :py:class:`~.QuantumCircuit`. Consequently, this change improves performance when creating :py:class:`~.QuantumCircuit` as well. Generally, the time complexity of - checking register name presence was reduced to O(1) from O(n). This was + checking register name presence was reduced to :math:`O(1)` from :math:`O(n)`. This was achieved by removing redundant error checking.