From 0e6a04f67e5a46c25d66705c0307eabccba6b3a5 Mon Sep 17 00:00:00 2001 From: ar7 Date: Fri, 19 Jun 2020 01:28:54 +0800 Subject: [PATCH 01/17] fixed issue 3929 --- qiskit/circuit/register.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index d21671225590..6c25d888cbaa 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -19,6 +19,7 @@ """ import re import itertools +import numbers from qiskit.circuit.exceptions import CircuitError @@ -117,7 +118,7 @@ def __getitem__(self, key): CircuitError: if the `key` is not an integer. QiskitIndexError: if the `key` is not in the range `(0, self.size)`. """ - if not isinstance(key, (int, slice, list)): + if not isinstance(key, (int, slice, list, numbers.Integral)): raise CircuitError("expected integer or slice index into register") if isinstance(key, slice): return self._bits[key] From 7544283b60b9f9bbbe30a5002886b855c6afdbaa Mon Sep 17 00:00:00 2001 From: ar7 Date: Sun, 21 Jun 2020 02:53:43 +0800 Subject: [PATCH 02/17] release note for #4591 --- ...egerforQuantumRegisterSize-2e9a6cc033bc962e.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml diff --git a/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml new file mode 100644 index 000000000000..19546b986912 --- /dev/null +++ b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml @@ -0,0 +1,13 @@ +--- +prelude: > + allow use of type integer for for QuantumRegister size + +issues: + - | + QuantumRegister allows only int, slice, list to denote size + +fixes: + - | + Added numbers.Integral as another allowable type to denote size of QuantumRegister + + From e9e049eac7baf8831eea566bd179fb2e25411c68 Mon Sep 17 00:00:00 2001 From: Arun Raja <43485111+arunraja-hub@users.noreply.github.com> Date: Mon, 22 Jun 2020 17:20:41 +0800 Subject: [PATCH 03/17] Update qiskit/circuit/register.py Co-authored-by: Julien Gacon --- qiskit/circuit/register.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index 6c25d888cbaa..72b52be7f3b2 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -118,7 +118,7 @@ def __getitem__(self, key): CircuitError: if the `key` is not an integer. QiskitIndexError: if the `key` is not in the range `(0, self.size)`. """ - if not isinstance(key, (int, slice, list, numbers.Integral)): + if not isinstance(key, (numbers.Integral, slice, list)): raise CircuitError("expected integer or slice index into register") if isinstance(key, slice): return self._bits[key] From efdb422cedde4d526fc4610cd78d1a757b8f51ec Mon Sep 17 00:00:00 2001 From: Arun Raja <43485111+arunraja-hub@users.noreply.github.com> Date: Mon, 22 Jun 2020 17:21:00 +0800 Subject: [PATCH 04/17] Update releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml Co-authored-by: Julien Gacon --- ...lowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml index 19546b986912..58f7e03dcffc 100644 --- a/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml +++ b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml @@ -1,13 +1,5 @@ --- -prelude: > - allow use of type integer for for QuantumRegister size - -issues: - - | - QuantumRegister allows only int, slice, list to denote size - fixes: - | Added numbers.Integral as another allowable type to denote size of QuantumRegister - From 487b455b369fb1f66a1d3a74481ca86c7e4134a7 Mon Sep 17 00:00:00 2001 From: Arun Raja <43485111+arunraja-hub@users.noreply.github.com> Date: Tue, 23 Jun 2020 17:32:38 +0800 Subject: [PATCH 05/17] Update releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml Co-authored-by: Julien Gacon --- .../allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml index 58f7e03dcffc..eba0a346200a 100644 --- a/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml +++ b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml @@ -1,5 +1,6 @@ --- fixes: - | - Added numbers.Integral as another allowable type to denote size of QuantumRegister + Use numbers.Integral instead of Python's built-in ``int`` as + input type to denote the size of a ``QuantumRegister``. From e42801ef333e76c8fcebdf85d0a868715ad33001 Mon Sep 17 00:00:00 2001 From: ar7 Date: Tue, 23 Jun 2020 18:46:13 +0800 Subject: [PATCH 06/17] test for passing different types of integer as register sizes --- test/python/circuit/test_circuit_registers.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/python/circuit/test_circuit_registers.py b/test/python/circuit/test_circuit_registers.py index 02d1dc1f85ed..6a44eb8eb952 100644 --- a/test/python/circuit/test_circuit_registers.py +++ b/test/python/circuit/test_circuit_registers.py @@ -58,6 +58,17 @@ def test_qarg_numpy_int_size(self): self.assertEqual(qr1.name, "q") self.assertEqual(qr1.size, 10) self.assertEqual(type(qr1), QuantumRegister) + + def test_register_int_types(self): + """Test attempt to pass different types of integer as register sizes + """ + ints = [int(2), float(2), np.int(2) ] + for size in ints: + with self.subTest(size=size): + qr = QuantumRegister(size) + cr = ClassicalRegister(size) + self.assertEqual(qr.size, 2) + self.assertEqual(cr.size, 2) def test_numpy_array_of_registers(self): """Test numpy array of Registers . From c0bd2bb968debf7dd4109a11adebcc8867fc4cda Mon Sep 17 00:00:00 2001 From: ar7 Date: Wed, 24 Jun 2020 21:03:07 +0800 Subject: [PATCH 07/17] fixed lint issues --- test/python/circuit/test_circuit_registers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/python/circuit/test_circuit_registers.py b/test/python/circuit/test_circuit_registers.py index 6a44eb8eb952..5e11e3a688bc 100644 --- a/test/python/circuit/test_circuit_registers.py +++ b/test/python/circuit/test_circuit_registers.py @@ -58,13 +58,13 @@ def test_qarg_numpy_int_size(self): self.assertEqual(qr1.name, "q") self.assertEqual(qr1.size, 10) self.assertEqual(type(qr1), QuantumRegister) - + def test_register_int_types(self): - """Test attempt to pass different types of integer as register sizes + """Test attempt to pass different types of integer as register size """ - ints = [int(2), float(2), np.int(2) ] + ints = [int(2), float(2), np.int(2)] for size in ints: - with self.subTest(size=size): + with self.subTest(size=size): qr = QuantumRegister(size) cr = ClassicalRegister(size) self.assertEqual(qr.size, 2) From c1ad60eb361748a0697780c008068e082fc972ae Mon Sep 17 00:00:00 2001 From: Julien Gacon Date: Wed, 24 Jun 2020 16:08:20 +0200 Subject: [PATCH 08/17] add test for np.int32 and 64 --- test/python/circuit/test_circuit_registers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/python/circuit/test_circuit_registers.py b/test/python/circuit/test_circuit_registers.py index 5e11e3a688bc..0d8baa975f59 100644 --- a/test/python/circuit/test_circuit_registers.py +++ b/test/python/circuit/test_circuit_registers.py @@ -62,7 +62,7 @@ def test_qarg_numpy_int_size(self): def test_register_int_types(self): """Test attempt to pass different types of integer as register size """ - ints = [int(2), float(2), np.int(2)] + ints = [int(2), float(2), np.int(2), np.int32(2), np.int64(2)] for size in ints: with self.subTest(size=size): qr = QuantumRegister(size) From 7542af2ee1a9f73f1e76cd97eeaeac9b2d6bf932 Mon Sep 17 00:00:00 2001 From: ar7 Date: Thu, 25 Jun 2020 00:03:47 +0800 Subject: [PATCH 09/17] added tests for int32 and int64 --- test/python/circuit/test_circuit_registers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/python/circuit/test_circuit_registers.py b/test/python/circuit/test_circuit_registers.py index 5e11e3a688bc..0d8baa975f59 100644 --- a/test/python/circuit/test_circuit_registers.py +++ b/test/python/circuit/test_circuit_registers.py @@ -62,7 +62,7 @@ def test_qarg_numpy_int_size(self): def test_register_int_types(self): """Test attempt to pass different types of integer as register size """ - ints = [int(2), float(2), np.int(2)] + ints = [int(2), float(2), np.int(2), np.int32(2), np.int64(2)] for size in ints: with self.subTest(size=size): qr = QuantumRegister(size) From 69476afb6323c06b09111c0c0ef6edcfab5ea071 Mon Sep 17 00:00:00 2001 From: Arun Raja <43485111+arunraja-hub@users.noreply.github.com> Date: Tue, 30 Jun 2020 22:59:08 +0800 Subject: [PATCH 10/17] Update releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml Co-authored-by: Julien Gacon --- .../allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml index eba0a346200a..b137a7bb03e2 100644 --- a/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml +++ b/releasenotes/notes/allowIntegerforQuantumRegisterSize-2e9a6cc033bc962e.yaml @@ -2,5 +2,5 @@ fixes: - | Use numbers.Integral instead of Python's built-in ``int`` as - input type to denote the size of a ``QuantumRegister``. + supported index to ``QuantumRegister`` and ``ClassicalRegister``. From 38fb6e713d0f7c7b6e489587a6391bc18aceddc3 Mon Sep 17 00:00:00 2001 From: ar7 Date: Wed, 8 Jul 2020 15:07:51 +0800 Subject: [PATCH 11/17] resolved issue 3929 --- qiskit/circuit/register.py | 2 +- test/python/circuit/test_circuit_registers.py | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index 72b52be7f3b2..fb478433103c 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -118,7 +118,7 @@ def __getitem__(self, key): CircuitError: if the `key` is not an integer. QiskitIndexError: if the `key` is not in the range `(0, self.size)`. """ - if not isinstance(key, (numbers.Integral, slice, list)): + if not isinstance(key, (numbers.Number, int, numbers.Integral, slice, list)): raise CircuitError("expected integer or slice index into register") if isinstance(key, slice): return self._bits[key] diff --git a/test/python/circuit/test_circuit_registers.py b/test/python/circuit/test_circuit_registers.py index 0d8baa975f59..d47ccf5b2d20 100644 --- a/test/python/circuit/test_circuit_registers.py +++ b/test/python/circuit/test_circuit_registers.py @@ -60,15 +60,16 @@ def test_qarg_numpy_int_size(self): self.assertEqual(type(qr1), QuantumRegister) def test_register_int_types(self): - """Test attempt to pass different types of integer as register size + """Test attempt to pass different types of integer as indices + of QuantumRegister and ClassicalRegister """ - ints = [int(2), float(2), np.int(2), np.int32(2), np.int64(2)] - for size in ints: - with self.subTest(size=size): - qr = QuantumRegister(size) - cr = ClassicalRegister(size) - self.assertEqual(qr.size, 2) - self.assertEqual(cr.size, 2) + ints = [int(2), np.int(2), np.int32(2), np.int64(2)] + for index in ints: + with self.subTest(index=index): + qr = QuantumRegister(4) + cr = ClassicalRegister(4) + self.assertEqual(qr[index], qr[2]) + self.assertEqual(cr[index], cr[2]) def test_numpy_array_of_registers(self): """Test numpy array of Registers . From 6375707d83bdc7dbdf0db1564fa78e71c907eec7 Mon Sep 17 00:00:00 2001 From: Arun Raja <43485111+arunraja-hub@users.noreply.github.com> Date: Wed, 8 Jul 2020 17:08:22 +0800 Subject: [PATCH 12/17] Update qiskit/circuit/register.py Co-authored-by: Julien Gacon --- qiskit/circuit/register.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index fb478433103c..766984084570 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -118,7 +118,9 @@ def __getitem__(self, key): CircuitError: if the `key` is not an integer. QiskitIndexError: if the `key` is not in the range `(0, self.size)`. """ - if not isinstance(key, (numbers.Number, int, numbers.Integral, slice, list)): + if not isinstance(key, (numbers.Integral, slice, list)): + if isinstance(key, numbers.Number): + raise CircuitError("register index cannot be a float/complex, must be integer or slice") raise CircuitError("expected integer or slice index into register") if isinstance(key, slice): return self._bits[key] From f8eb8018e9520c8815d0a9cc5e392df624e05831 Mon Sep 17 00:00:00 2001 From: ar7 Date: Tue, 21 Jul 2020 20:32:35 +0800 Subject: [PATCH 13/17] resolved 3929 --- qiskit/circuit/register.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index fb478433103c..79e1cf84d31f 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -118,7 +118,7 @@ def __getitem__(self, key): CircuitError: if the `key` is not an integer. QiskitIndexError: if the `key` is not in the range `(0, self.size)`. """ - if not isinstance(key, (numbers.Number, int, numbers.Integral, slice, list)): + if not isinstance(key, (int, numbers.Integral, slice, list)): raise CircuitError("expected integer or slice index into register") if isinstance(key, slice): return self._bits[key] From 95f48dd1f2da73a292c7cfd50545888223640612 Mon Sep 17 00:00:00 2001 From: ar7 Date: Tue, 21 Jul 2020 21:32:52 +0800 Subject: [PATCH 14/17] resolved --- qiskit/circuit/register.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index be65d8b2e02d..5f015b02f9ad 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -118,13 +118,7 @@ def __getitem__(self, key): CircuitError: if the `key` is not an integer. QiskitIndexError: if the `key` is not in the range `(0, self.size)`. """ -<<<<<<< HEAD - if not isinstance(key, (int, numbers.Integral, slice, list)): -======= - if not isinstance(key, (numbers.Integral, slice, list)): - if isinstance(key, numbers.Number): - raise CircuitError("register index cannot be a float/complex, must be integer or slice") ->>>>>>> 6375707d83bdc7dbdf0db1564fa78e71c907eec7 + if not isinstance(key, (numbers.Integral, int, slice, list)): raise CircuitError("expected integer or slice index into register") if isinstance(key, slice): return self._bits[key] @@ -160,3 +154,4 @@ def __eq__(self, other): def __hash__(self): """Make object hashable, based on the name and size to hash.""" return self._hash + \ No newline at end of file From 916fd0529dd0500005471f580b2fd687381c7315 Mon Sep 17 00:00:00 2001 From: ar7 Date: Tue, 21 Jul 2020 23:40:04 +0800 Subject: [PATCH 15/17] resolved --- qiskit/circuit/register.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index 5f015b02f9ad..796de29b88fd 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -153,5 +153,4 @@ def __eq__(self, other): def __hash__(self): """Make object hashable, based on the name and size to hash.""" - return self._hash - \ No newline at end of file + return self._hash \ No newline at end of file From 7287f29fc0381c86a8ec55bff19f639ed8e7bd7c Mon Sep 17 00:00:00 2001 From: Arun Raja <43485111+arunraja-hub@users.noreply.github.com> Date: Wed, 22 Jul 2020 00:37:09 +0800 Subject: [PATCH 16/17] Update qiskit/circuit/register.py Co-authored-by: Kevin Krsulich --- qiskit/circuit/register.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index 796de29b88fd..50853912b539 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -153,4 +153,4 @@ def __eq__(self, other): def __hash__(self): """Make object hashable, based on the name and size to hash.""" - return self._hash \ No newline at end of file + return self._hash From 58b7bf0c1b28cfdb955570d9ea7c5223b6eba334 Mon Sep 17 00:00:00 2001 From: Julien Gacon Date: Tue, 21 Jul 2020 22:44:26 +0200 Subject: [PATCH 17/17] numbers.Integral includes int --- qiskit/circuit/register.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/circuit/register.py b/qiskit/circuit/register.py index 50853912b539..72b52be7f3b2 100644 --- a/qiskit/circuit/register.py +++ b/qiskit/circuit/register.py @@ -118,7 +118,7 @@ def __getitem__(self, key): CircuitError: if the `key` is not an integer. QiskitIndexError: if the `key` is not in the range `(0, self.size)`. """ - if not isinstance(key, (numbers.Integral, int, slice, list)): + if not isinstance(key, (numbers.Integral, slice, list)): raise CircuitError("expected integer or slice index into register") if isinstance(key, slice): return self._bits[key]