From 9c470dfcf3288dd64d10dd0453ea1505a261fb53 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Mon, 16 Oct 2023 16:46:43 -0400 Subject: [PATCH 01/43] cosine definition --- .../templates/state_preparations/__init__.py | 1 + .../state_preparations/cosine_window.py | 128 ++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 pennylane/templates/state_preparations/cosine_window.py diff --git a/pennylane/templates/state_preparations/__init__.py b/pennylane/templates/state_preparations/__init__.py index dc00ab1c905..16d3e6b64f2 100644 --- a/pennylane/templates/state_preparations/__init__.py +++ b/pennylane/templates/state_preparations/__init__.py @@ -20,3 +20,4 @@ from .basis import BasisStatePreparation from .arbitrary_state_preparation import ArbitraryStatePreparation from .basis_qutrit import QutritBasisStatePreparation +from .cosine_window import CosineWindow diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py new file mode 100644 index 00000000000..dc37630fd48 --- /dev/null +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -0,0 +1,128 @@ +# Copyright 2018-2021 Xanadu Quantum Technologies Inc. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +r""" +Contains the CosineWindow template. +""" +import numpy as np +import pennylane as qml +from pennylane.operation import AnyWires, StatePrepBase +from pennylane.wires import Wires, WireError +from pennylane import math + + +class CosineWindow(StatePrepBase): + r"""CosineWindow(wires) + Prepare the initial state following a cosine wave function. + + .. math:: + + |\psi\rangle = \frac{\sqrt{2}}{\sqrt{2**m}} \sum_{k=0}^{2**m-1} \cos(\frac{\pi k}{2**m} - \frac{\pi}{2}) |k\rangle, + + where :math:`m` is the number of wires. + + .. note:: + + The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. + + + **Details:** + + * Number of wires: Any (the operation can act on any number of wires) + * Number of parameters: 0 + * Gradient recipe: None + + + Args: + wires (Sequence[int] or int): the wire(s) the operation acts on + id (str): custom label given to an operator instance, + can be useful for some applications where the instance has to be identified. + + **Example** + + >>> dev = qml.device('default.qubit', wires=2) + >>> @qml.qnode(dev) + ... def example_circuit(): + ... qml.CosineWindow(wires=range(2)) + ... return qml.probs() + >>> print(example_circuit()) + [1.87469973e-33 2.50000000e-01 5.00000000e-01 2.50000000e-01] + """ + num_wires = AnyWires + num_params = 0 + """int: Number of trainable parameters that the operator depends on.""" + + def __init__(self, wires, id=None): + super().__init__(wires=wires, id=id) + + + @staticmethod + def compute_decomposition(state, wires): + r"""Representation of the operator as a product of other operators (static method). : + + Args: + wires (Iterable, Wires): the wire(s) the operation acts on + + Returns: + list[Operator]: decomposition into lower level operations + """ + + decomp_ops = [] + + decomp_ops.append(qml.Hadamard(wires=wires[-1])) + decomp_ops.append(qml.RZ(-np.pi, wires=wires[-1])) + decomp_ops.append(qml.adjoint(qml.QFT)(wires=wires)) + + for ind, wire in enumerate(wires): + decomp_ops.append(qml.PhaseShift(np.pi * 2 ** (- ind - 1), wires=wire)) + + return decomp_ops + + + def state_vector(self, wire_order=None): + num_op_wires = len(self.wires) + op_vector_shape = (-1,) + (2,) * num_op_wires if self.batch_size else (2,) * num_op_wires + vector = np.array([np.sqrt(2) * np.cos(-np.pi/2 + np.pi *x/2**(num_op_wires))/np.sqrt(2 ** num_op_wires) for x in range(2**num_op_wires)]) + op_vector = math.reshape(vector, op_vector_shape) + + if wire_order is None or Wires(wire_order) == self.wires: + return op_vector + + wire_order = Wires(wire_order) + if not wire_order.contains_wires(self.wires): + raise WireError(f"Custom wire_order must contain all {self.name} wires") + + num_total_wires = len(wire_order) + indices = tuple( + [Ellipsis] + [slice(None)] * num_op_wires + [0] * (num_total_wires - num_op_wires) + ) + ket_shape = [2] * num_total_wires + if self.batch_size: + # Add broadcasted dimension to the shape of the state vector + ket_shape = [self.batch_size] + ket_shape + + ket = np.zeros(ket_shape, dtype=np.complex128) + ket[indices] = op_vector + + # unless wire_order is [*self.wires, *rest_of_wire_order], need to rearrange + if self.wires != wire_order[:num_op_wires]: + current_order = self.wires + list(Wires.unique_wires([wire_order, self.wires])) + desired_order = [current_order.index(w) for w in wire_order] + if self.batch_size: + # If the operation is broadcasted, the desired order must include the batch dimension + # as the first dimension. + desired_order = [0] + [d + 1 for d in desired_order] + + ket = ket.transpose(desired_order) + + return math.convert_like(ket, op_vector) \ No newline at end of file From fd23ba944b28c2d06466f6732a5c4d613dda191e Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Mon, 16 Oct 2023 17:07:42 -0400 Subject: [PATCH 02/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index dc37630fd48..c5596a1d875 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -27,9 +27,9 @@ class CosineWindow(StatePrepBase): .. math:: - |\psi\rangle = \frac{\sqrt{2}}{\sqrt{2**m}} \sum_{k=0}^{2**m-1} \cos(\frac{\pi k}{2**m} - \frac{\pi}{2}) |k\rangle, + |\psi\rangle = \sqrt{2^{1-m}}\frac{\sqrt{2}}{\sqrt{2^m}} \sum_{k=0}^{2^m-1} \cos(\frac{\pi k}{2^m} - \frac{\pi}{2}) |k\rangle, - where :math:`m` is the number of wires. + where :math:`m` is the number of wires. .. note:: From 43273047413b8952e29d7d16d968d80c899d1b74 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Mon, 16 Oct 2023 18:52:06 -0400 Subject: [PATCH 03/43] image --- .../state_preparations/cosine_window.png | Bin 0 -> 92885 bytes .../state_preparations/cosine_window.py | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 doc/_static/templates/state_preparations/cosine_window.png diff --git a/doc/_static/templates/state_preparations/cosine_window.png b/doc/_static/templates/state_preparations/cosine_window.png new file mode 100644 index 0000000000000000000000000000000000000000..e127e8002ebc90f5e1adf971d4eff3a5fdca86b7 GIT binary patch literal 92885 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ô!`mlqdnP}QmGX}Zw$vZOspcfg(%RdG?r|Qp?s~+~y)M>d# zA|#HqCegu`L#4zsFWuUwkeL&p7F!nSGxkxk`KC{+ytL%<_KFQ6!Uy={{*G z)>XY(K2EQwvu?T9d*FfpM*etH(E7Mn))GV}mt~tCtR6>$A1HGn+cl4|N?4hVwH0Oxe1JEO)tItsq}L+bO< zt4|i|xO&mY63mGbxRJy#_umPoQSb*KzbAklu;qELVbenmjW0d zG~fFiBN~31<|4BecIO(vKlF6~&0sg6t{i*c=bR-LvYntz`eW~I=T+M;*L$1H?)^fe z>q77>ez)ya@n)ZTKqtZU1ek+ONh0*T+lKZ1qo=OFR!|8T0BUf{{~((X!M&|VirArOKR*F@`4T!;?Ajv zixe66GID*qsu4t6^OXK#4B4c=7TZ8bgik=}{!z5S$qPNLPw&7PbM0QZybQF*?3s`) z6KC_DTaY=_iJ1~x)p{DP)v*H1NWaxqdeb(B7Y`JlJu84fxyQ}FcYDWL3Rs{mRqqd6 z%+lK* L+6(kO%|L(_$`cTz9f7yje{Tk-F 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 G=>G#$!{g5Y literal 0 HcmV?d00001 diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index c5596a1d875..96f9d532cc2 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -27,10 +27,15 @@ class CosineWindow(StatePrepBase): .. math:: - |\psi\rangle = \sqrt{2^{1-m}}\frac{\sqrt{2}}{\sqrt{2^m}} \sum_{k=0}^{2^m-1} \cos(\frac{\pi k}{2^m} - \frac{\pi}{2}) |k\rangle, + |\psi\rangle = \sqrt{2^{1-m}} \sum_{k=0}^{2^m-1} \cos(\frac{\pi k}{2^m} - \frac{\pi}{2}) |k\rangle, where :math:`m` is the number of wires. + .. figure:: ../../_static/templates/state_preparations/cosine_window.png + :align: center + :width: 65% + :target: javascript:void(0); + .. note:: The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. From 53303b02bcfdb210727c2581b3ba48c5269f694c Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Mon, 16 Oct 2023 19:12:49 -0400 Subject: [PATCH 04/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 96f9d532cc2..c9e4ebf7b6e 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -73,7 +73,8 @@ def __init__(self, wires, id=None): @staticmethod def compute_decomposition(state, wires): - r"""Representation of the operator as a product of other operators (static method). : + r"""Representation of the operator as a product of other operators (static method). + It is efficiently decomposed from one QFT over all qubits and one-qubit rotation gates. Args: wires (Iterable, Wires): the wire(s) the operation acts on From 3fdf9bc0cd6fc136902517e7fbdd152016120226 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Mon, 16 Oct 2023 19:13:36 -0400 Subject: [PATCH 05/43] Update cosine_window.py --- .../templates/state_preparations/cosine_window.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index c9e4ebf7b6e..1666a86c32b 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -70,7 +70,6 @@ class CosineWindow(StatePrepBase): def __init__(self, wires, id=None): super().__init__(wires=wires, id=id) - @staticmethod def compute_decomposition(state, wires): r"""Representation of the operator as a product of other operators (static method). @@ -90,15 +89,21 @@ def compute_decomposition(state, wires): decomp_ops.append(qml.adjoint(qml.QFT)(wires=wires)) for ind, wire in enumerate(wires): - decomp_ops.append(qml.PhaseShift(np.pi * 2 ** (- ind - 1), wires=wire)) + decomp_ops.append(qml.PhaseShift(np.pi * 2 ** (-ind - 1), wires=wire)) return decomp_ops - def state_vector(self, wire_order=None): num_op_wires = len(self.wires) op_vector_shape = (-1,) + (2,) * num_op_wires if self.batch_size else (2,) * num_op_wires - vector = np.array([np.sqrt(2) * np.cos(-np.pi/2 + np.pi *x/2**(num_op_wires))/np.sqrt(2 ** num_op_wires) for x in range(2**num_op_wires)]) + vector = np.array( + [ + np.sqrt(2) + * np.cos(-np.pi / 2 + np.pi * x / 2 ** (num_op_wires)) + / np.sqrt(2**num_op_wires) + for x in range(2**num_op_wires) + ] + ) op_vector = math.reshape(vector, op_vector_shape) if wire_order is None or Wires(wire_order) == self.wires: @@ -131,4 +136,4 @@ def state_vector(self, wire_order=None): ket = ket.transpose(desired_order) - return math.convert_like(ket, op_vector) \ No newline at end of file + return math.convert_like(ket, op_vector) From 77d566a89900190efdc3dce6b019566e294e3759 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 09:05:53 -0400 Subject: [PATCH 06/43] adding tests --- doc/releases/changelog-dev.md | 4 + .../test_cosine_window.py | 83 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 tests/templates/test_state_preparations/test_cosine_window.py diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md index 1ac65dd0770..e3d4ccfcdcd 100644 --- a/doc/releases/changelog-dev.md +++ b/doc/releases/changelog-dev.md @@ -82,6 +82,9 @@ [(#4620)](https://github.com/PennyLaneAI/pennylane/pull/4620) [(#4632)](https://github.com/PennyLaneAI/pennylane/pull/4632) +* `CosineWindow` has been added. Prepare the initial state following a cosine wave function. + [(#4683)](https://github.com/PennyLaneAI/pennylane/pull/4683) +

Improvements 🛠

* `pennylane.devices.preprocess` now offers the transforms `decompose`, `validate_observables`, `validate_measurements`, @@ -394,6 +397,7 @@ This release contains contributions from (in alphabetical order): +Guillermo Alonso, Utkarsh Azad, Stepan Fomichev, Joana Fraxanet, diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py new file mode 100644 index 00000000000..65218acb214 --- /dev/null +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -0,0 +1,83 @@ +# Copyright 2018-2021 Xanadu Quantum Technologies Inc. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Unit tests for the CosineWindow template. +""" +# pylint: disable=too-few-public-methods +import pytest +import numpy as np +import pennylane as qml +from pennylane import numpy as pnp + + +class TestDecomposition: + """Tests that the template defines the correct decomposition.""" + + def test_correct_gates_single_wire(self): + """Test that the correct gates are applied.""" + + op = qml.CosineWindow(wires=[0]) + queue = op.expand().operations + + assert queue[0].name == "Hadamard" + assert queue[1].name == "RZ" + assert queue[2].name == "Adjoint(QFT)" + assert queue[3].name == "PhaseShift" + + assert np.isclose(queue[3].data[0], np.pi / 2) + + def test_correct_gates_many_wires(self): + """Test that the correct gates are applied on on two wires.""" + + op = qml.CosineWindow(wires=[0, 1, 2, 3, 4]) + queue = op.expand().operations + + assert queue[0].name == "Hadamard" + assert queue[1].name == "RZ" + assert queue[2].name == "Adjoint(QFT)" + + for ind, q in enumerate(queue[3:]): + assert q.name == "PhaseShift" + assert np.isclose(q.data[0], np.pi / 2 ** (ind + 1)) + + def test_custom_wire_labels(self, tol): + """Test that template can deal with non-numeric, nonconsecutive wire labels.""" + + dev = qml.device("default.qubit", wires=3) + dev2 = qml.device("default.qubit", wires=["z", "a", "k"]) + + @qml.qnode(dev) + def circuit(): + qml.CosineWindow(wires=range(3)) + return qml.expval(qml.Identity(0)), qml.state() + + @qml.qnode(dev2) + def circuit2(): + qml.CosineWindow(wires=["z", "a", "k"]) + return qml.expval(qml.Identity("z")), qml.state() + + res1, state1 = circuit() + res2, state2 = circuit2() + + assert np.allclose(res1, res2, atol=tol, rtol=0) + assert np.allclose(state1, state2, atol=tol, rtol=0) + + +class TestInputs: + """Test inputs and pre-processing.""" + + def test_id(self): + """Tests that the id attribute can be set.""" + template = qml.CosineWindow(wires=[0, 1, 2], id="a") + assert template.id == "a" From d41709c341c61e2097873077e817c0c2fdf2960c Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 09:21:03 -0400 Subject: [PATCH 07/43] Update test_cosine_window.py --- .../templates/test_state_preparations/test_cosine_window.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index 65218acb214..9f0b4f66d89 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -51,7 +51,7 @@ def test_correct_gates_many_wires(self): assert q.name == "PhaseShift" assert np.isclose(q.data[0], np.pi / 2 ** (ind + 1)) - def test_custom_wire_labels(self, tol): + def test_custom_wire_labels(self): """Test that template can deal with non-numeric, nonconsecutive wire labels.""" dev = qml.device("default.qubit", wires=3) @@ -70,8 +70,8 @@ def circuit2(): res1, state1 = circuit() res2, state2 = circuit2() - assert np.allclose(res1, res2, atol=tol, rtol=0) - assert np.allclose(state1, state2, atol=tol, rtol=0) + assert np.allclose(res1, res2) + assert np.allclose(state1, state2) class TestInputs: From ecd2fbfbd4476843f004b37a4c16d03039c17c63 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 09:26:22 -0400 Subject: [PATCH 08/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 1666a86c32b..5424548086a 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -71,7 +71,7 @@ def __init__(self, wires, id=None): super().__init__(wires=wires, id=id) @staticmethod - def compute_decomposition(state, wires): + def compute_decomposition(wires): r"""Representation of the operator as a product of other operators (static method). It is efficiently decomposed from one QFT over all qubits and one-qubit rotation gates. From 914029834e4d5d4fdc3da5b8640260df910d8b3c Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 11:08:43 -0400 Subject: [PATCH 09/43] [ci skip] --- .../state_preparations/cosine_window.py | 2 +- .../test_cosine_window.py | 183 ++++++++++++++++++ 2 files changed, 184 insertions(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 5424548086a..04973f729e8 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -85,7 +85,7 @@ def compute_decomposition(wires): decomp_ops = [] decomp_ops.append(qml.Hadamard(wires=wires[-1])) - decomp_ops.append(qml.RZ(-np.pi, wires=wires[-1])) + decomp_ops.append(qml.RZ(np.pi, wires=wires[-1])) decomp_ops.append(qml.adjoint(qml.QFT)(wires=wires)) for ind, wire in enumerate(wires): diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index 9f0b4f66d89..05f36fbeaea 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -81,3 +81,186 @@ def test_id(self): """Tests that the id attribute can be set.""" template = qml.CosineWindow(wires=[0, 1, 2], id="a") assert template.id == "a" + + +class TestStateVector: + """Test the state_vector() method of various CosineWindow operations.""" + + @pytest.mark.parametrize( + "num_wires,wire_order,one_position", + [ + (2, None), + (2, [1, 2]), + (3, [0, 1, 2]), + (3, [1, 2, 0]), + (3, [2, 1, 0]), + (4, [3, 2, 0, 1]), + ], + ) + def test_CosineWindow_state_vector(self, num_wires, wire_order): + """Tests that CosineWindow state_vector returns kets as expected.""" + + op = qml.CosineWindow(wires = range(num_wires)) + + dev = qml.device("default.qubit", wires = num_wires) + @qml.qnode(dev) + def circuit(): + qml.CosineWindow(wires = wire_order) + return qml.state() + state_op = circuit() + ket = np.reshape(op.state_vector(wire_order=wire_order), (-1,)) + assert np.allclose(state_op, ket) + + + @pytest.mark.parametrize( + "num_wires,wire_order,one_positions", + [ + (2, None, [(0, 1, 0), (1, 0, 1)]), + (2, [1, 2], [(0, 1, 0), (1, 0, 1)]), + (3, [0, 1, 2], [(0, 0, 1, 0), (1, 0, 0, 1)]), + (3, ["a", 1, 2], [(0, 0, 1, 0), (1, 0, 0, 1)]), + (3, [1, 2, 0], [(0, 1, 0, 0), (1, 0, 1, 0)]), + (3, [1, 2, "a"], [(0, 1, 0, 0), (1, 0, 1, 0)]), + (3, [2, 1, 0], [(0, 0, 1, 0), (1, 1, 0, 0)]), + (4, [3, 2, 0, 1], [(0, 0, 0, 0, 1), (1, 0, 1, 0, 0)]), + ], + ) + def test_StatePrep_state_vector_broadcasted(self, num_wires, wire_order, one_positions): + """Tests that StatePrep state_vector returns kets with broadcasting as expected.""" + qsv_op = qml.StatePrep([[0, 0, 1, 0], [0, 1, 0, 0]], wires=[1, 2]) # |10>, |01> + ket = qsv_op.state_vector(wire_order=wire_order) + assert ket[one_positions[0]] == 1 == ket[one_positions[1]] + ket[one_positions[0]] = ket[one_positions[1]] = 0 + # everything else should be zero, as we assert below + assert np.allclose(np.zeros((2,) * (num_wires + 1)), ket) + + def test_StatePrep_reordering(self): + """Tests that wires get re-ordered as expected.""" + qsv_op = qml.StatePrep(np.array([1, -1, 1j, -1j]) / 2, wires=[0, 1]) + ket = qsv_op.state_vector(wire_order=[2, 1, 3, 0]) + expected = np.zeros((2, 2, 2, 2), dtype=np.complex128) + expected[0, :, 0, :] = np.array([[1, 1j], [-1, -1j]]) / 2 + assert np.array_equal(ket, expected) + + def test_StatePrep_reordering_broadcasted(self): + """Tests that wires get re-ordered as expected with broadcasting.""" + qsv_op = qml.StatePrep(np.array([[1, -1, 1j, -1j], [1, -1j, -1, 1j]]) / 2, wires=[0, 1]) + ket = qsv_op.state_vector(wire_order=[2, 1, 3, 0]) + expected = np.zeros((2,) * 5, dtype=np.complex128) + expected[0, 0, :, 0, :] = np.array([[1, 1j], [-1, -1j]]) / 2 + expected[1, 0, :, 0, :] = np.array([[1, -1], [-1j, 1j]]) / 2 + assert np.array_equal(ket, expected) + + @pytest.mark.all_interfaces + @pytest.mark.parametrize("interface", ["numpy", "jax", "torch", "tensorflow"]) + def test_StatePrep_state_vector_preserves_parameter_type(self, interface): + """Tests that given an array of some type, the resulting state vector is also that type.""" + qsv_op = qml.StatePrep(qml.math.array([0, 0, 0, 1], like=interface), wires=[1, 2]) + assert qml.math.get_interface(qsv_op.state_vector()) == interface + assert qml.math.get_interface(qsv_op.state_vector(wire_order=[0, 1, 2])) == interface + + @pytest.mark.all_interfaces + @pytest.mark.parametrize("interface", ["numpy", "jax", "torch", "tensorflow"]) + def test_StatePrep_state_vector_preserves_parameter_type_broadcasted(self, interface): + """Tests that given an array of some type, the resulting state vector is also that type.""" + qsv_op = qml.StatePrep( + qml.math.array([[0, 0, 0, 1], [1, 0, 0, 0]], like=interface), wires=[1, 2] + ) + assert qml.math.get_interface(qsv_op.state_vector()) == interface + assert qml.math.get_interface(qsv_op.state_vector(wire_order=[0, 1, 2])) == interface + + def test_StatePrep_state_vector_bad_wire_order(self): + """Tests that the provided wire_order must contain the wires in the operation.""" + qsv_op = qml.StatePrep([0, 0, 0, 1], wires=[0, 1]) + with pytest.raises(WireError, match="wire_order must contain all StatePrep wires"): + qsv_op.state_vector(wire_order=[1, 2]) + + @pytest.mark.parametrize("vec", [[0] * 4, [1] * 4]) + def test_StatePrep_state_norm_not_one_fails(self, vec): + """Tests that the state-vector provided must have norm equal to 1.""" + with pytest.raises(ValueError, match="Sum of amplitudes-squared does not equal one."): + _ = qml.StatePrep(vec, wires=[0, 1]) + + def test_StatePrep_wrong_param_size_fails(self): + """Tests that the parameter must be of shape (2**num_wires,).""" + with pytest.raises(ValueError, match="State vector must have shape"): + _ = qml.StatePrep([0, 1], wires=[0, 1]) + + @pytest.mark.parametrize( + "num_wires,wire_order,one_position", + [ + (2, None, (0, 1)), + (2, [1, 2], (0, 1)), + (2, [2, 1], (1, 0)), + (3, [0, 1, 2], (0, 0, 1)), + (3, ["a", 1, 2], (0, 0, 1)), + (3, [1, 2, 0], (0, 1, 0)), + (3, [1, 2, "a"], (0, 1, 0)), + ], + ) + def test_BasisState_state_vector(self, num_wires, wire_order, one_position): + """Tests that BasisState state_vector returns kets as expected.""" + basis_op = qml.BasisState([0, 1], wires=[1, 2]) + ket = basis_op.state_vector(wire_order=wire_order) + assert qml.math.shape(ket) == (2,) * num_wires + assert ket[one_position] == 1 + ket[one_position] = 0 # everything else should be zero, as we assert below + assert np.allclose(np.zeros((2,) * num_wires), ket) + + @pytest.mark.parametrize( + "state", + [ + np.array([0, 0]), + np.array([1, 0]), + np.array([0, 1]), + np.array([1, 1]), + ], + ) + @pytest.mark.parametrize("device_wires", [3, 4, 5]) + @pytest.mark.parametrize("op_wires", [[0, 1], [1, 0], [2, 0]]) + def test_BasisState_state_vector_computed(self, state, device_wires, op_wires): + """Test BasisState initialization on a subset of device wires.""" + basis_op = qml.BasisState(state, wires=op_wires) + basis_state = basis_op.state_vector(wire_order=list(range(device_wires))) + + one_index = [0] * device_wires + for op_wire, idx_value in zip(op_wires, state): + if idx_value == 1: + one_index[op_wire] = 1 + one_index = tuple(one_index) + + assert basis_state[one_index] == 1 + basis_state[one_index] = 0 + assert not np.any(basis_state) + + @pytest.mark.all_interfaces + @pytest.mark.parametrize("interface", ["numpy", "jax", "torch", "tensorflow"]) + @pytest.mark.parametrize("dtype_like", [0, 0.0]) + def test_BasisState_state_vector_preserves_parameter_type(self, interface, dtype_like): + """Tests that given an array of some type, the resulting state_vector is also that type.""" + basis_state = qml.math.cast_like(qml.math.asarray([0, 1], like=interface), dtype_like) + basis_op = qml.BasisState(basis_state, wires=[1, 2]) + assert qml.math.get_interface(basis_op.state_vector()) == interface + assert qml.math.get_interface(basis_op.state_vector(wire_order=[0, 1, 2])) == interface + + def test_BasisState_state_vector_bad_wire_order(self): + """Tests that the provided wire_order must contain the wires in the operation.""" + basis_op = qml.BasisState([0, 1], wires=[0, 1]) + with pytest.raises(WireError, match="wire_order must contain all BasisState wires"): + basis_op.state_vector(wire_order=[1, 2]) + + def test_BasisState_explicitly_checks_0_1(self): + """Tests that BasisState gives a clear error if a value other than 0 or 1 is given.""" + op = qml.BasisState([2, 1], wires=[0, 1]) + with pytest.raises( + ValueError, match="BasisState parameter must consist of 0 or 1 integers." + ): + _ = op.state_vector() + + def test_BasisState_wrong_param_size(self): + """Tests that the parameter must be of length num_wires.""" + op = qml.BasisState([0], wires=[0, 1]) + with pytest.raises( + ValueError, match="BasisState parameter and wires must be of equal length." + ): + _ = op.state_vector() \ No newline at end of file From 906b539ba7aa4e7050c64af3e2f77db5724eba22 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:24:22 -0400 Subject: [PATCH 10/43] tests --- .../state_preparations/cosine_window.py | 5 +- .../test_cosine_window.py | 192 ++---------------- 2 files changed, 17 insertions(+), 180 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 04973f729e8..d017fda7911 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -95,7 +95,7 @@ def compute_decomposition(wires): def state_vector(self, wire_order=None): num_op_wires = len(self.wires) - op_vector_shape = (-1,) + (2,) * num_op_wires if self.batch_size else (2,) * num_op_wires + op_vector_shape = (-1,) + (2,) * num_op_wires vector = np.array( [ np.sqrt(2) @@ -118,9 +118,6 @@ def state_vector(self, wire_order=None): [Ellipsis] + [slice(None)] * num_op_wires + [0] * (num_total_wires - num_op_wires) ) ket_shape = [2] * num_total_wires - if self.batch_size: - # Add broadcasted dimension to the shape of the state vector - ket_shape = [self.batch_size] + ket_shape ket = np.zeros(ket_shape, dtype=np.complex128) ket[indices] = op_vector diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index 05f36fbeaea..37015529e49 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -18,8 +18,7 @@ import pytest import numpy as np import pennylane as qml -from pennylane import numpy as pnp - +from pennylane.wires import WireError class TestDecomposition: """Tests that the template defines the correct decomposition.""" @@ -86,181 +85,22 @@ def test_id(self): class TestStateVector: """Test the state_vector() method of various CosineWindow operations.""" - @pytest.mark.parametrize( - "num_wires,wire_order,one_position", - [ - (2, None), - (2, [1, 2]), - (3, [0, 1, 2]), - (3, [1, 2, 0]), - (3, [2, 1, 0]), - (4, [3, 2, 0, 1]), - ], - ) - def test_CosineWindow_state_vector(self, num_wires, wire_order): - """Tests that CosineWindow state_vector returns kets as expected.""" - - op = qml.CosineWindow(wires = range(num_wires)) - - dev = qml.device("default.qubit", wires = num_wires) - @qml.qnode(dev) - def circuit(): - qml.CosineWindow(wires = wire_order) - return qml.state() - state_op = circuit() - ket = np.reshape(op.state_vector(wire_order=wire_order), (-1,)) - assert np.allclose(state_op, ket) - - - @pytest.mark.parametrize( - "num_wires,wire_order,one_positions", - [ - (2, None, [(0, 1, 0), (1, 0, 1)]), - (2, [1, 2], [(0, 1, 0), (1, 0, 1)]), - (3, [0, 1, 2], [(0, 0, 1, 0), (1, 0, 0, 1)]), - (3, ["a", 1, 2], [(0, 0, 1, 0), (1, 0, 0, 1)]), - (3, [1, 2, 0], [(0, 1, 0, 0), (1, 0, 1, 0)]), - (3, [1, 2, "a"], [(0, 1, 0, 0), (1, 0, 1, 0)]), - (3, [2, 1, 0], [(0, 0, 1, 0), (1, 1, 0, 0)]), - (4, [3, 2, 0, 1], [(0, 0, 0, 0, 1), (1, 0, 1, 0, 0)]), - ], - ) - def test_StatePrep_state_vector_broadcasted(self, num_wires, wire_order, one_positions): - """Tests that StatePrep state_vector returns kets with broadcasting as expected.""" - qsv_op = qml.StatePrep([[0, 0, 1, 0], [0, 1, 0, 0]], wires=[1, 2]) # |10>, |01> - ket = qsv_op.state_vector(wire_order=wire_order) - assert ket[one_positions[0]] == 1 == ket[one_positions[1]] - ket[one_positions[0]] = ket[one_positions[1]] = 0 - # everything else should be zero, as we assert below - assert np.allclose(np.zeros((2,) * (num_wires + 1)), ket) - - def test_StatePrep_reordering(self): - """Tests that wires get re-ordered as expected.""" - qsv_op = qml.StatePrep(np.array([1, -1, 1j, -1j]) / 2, wires=[0, 1]) - ket = qsv_op.state_vector(wire_order=[2, 1, 3, 0]) - expected = np.zeros((2, 2, 2, 2), dtype=np.complex128) - expected[0, :, 0, :] = np.array([[1, 1j], [-1, -1j]]) / 2 - assert np.array_equal(ket, expected) - - def test_StatePrep_reordering_broadcasted(self): - """Tests that wires get re-ordered as expected with broadcasting.""" - qsv_op = qml.StatePrep(np.array([[1, -1, 1j, -1j], [1, -1j, -1, 1j]]) / 2, wires=[0, 1]) - ket = qsv_op.state_vector(wire_order=[2, 1, 3, 0]) - expected = np.zeros((2,) * 5, dtype=np.complex128) - expected[0, 0, :, 0, :] = np.array([[1, 1j], [-1, -1j]]) / 2 - expected[1, 0, :, 0, :] = np.array([[1, -1], [-1j, 1j]]) / 2 - assert np.array_equal(ket, expected) - - @pytest.mark.all_interfaces - @pytest.mark.parametrize("interface", ["numpy", "jax", "torch", "tensorflow"]) - def test_StatePrep_state_vector_preserves_parameter_type(self, interface): - """Tests that given an array of some type, the resulting state vector is also that type.""" - qsv_op = qml.StatePrep(qml.math.array([0, 0, 0, 1], like=interface), wires=[1, 2]) - assert qml.math.get_interface(qsv_op.state_vector()) == interface - assert qml.math.get_interface(qsv_op.state_vector(wire_order=[0, 1, 2])) == interface - - @pytest.mark.all_interfaces - @pytest.mark.parametrize("interface", ["numpy", "jax", "torch", "tensorflow"]) - def test_StatePrep_state_vector_preserves_parameter_type_broadcasted(self, interface): - """Tests that given an array of some type, the resulting state vector is also that type.""" - qsv_op = qml.StatePrep( - qml.math.array([[0, 0, 0, 1], [1, 0, 0, 0]], like=interface), wires=[1, 2] - ) - assert qml.math.get_interface(qsv_op.state_vector()) == interface - assert qml.math.get_interface(qsv_op.state_vector(wire_order=[0, 1, 2])) == interface + def test_CosineWindow_state_vector(self): + """Tests that the state vector is correct for a single wire.""" + op = qml.CosineWindow(wires=[0]) + res = op.state_vector() + expected = np.array([0.0, 1.0]) + assert np.allclose(res, expected) - def test_StatePrep_state_vector_bad_wire_order(self): + def test_CosineWindow_state_vector_bad_wire_order(self): """Tests that the provided wire_order must contain the wires in the operation.""" - qsv_op = qml.StatePrep([0, 0, 0, 1], wires=[0, 1]) - with pytest.raises(WireError, match="wire_order must contain all StatePrep wires"): + qsv_op = qml.StatePrep(wires=[0, 1]) + with pytest.raises(WireError, match="wire_order must contain all CosineWindow wires"): qsv_op.state_vector(wire_order=[1, 2]) - @pytest.mark.parametrize("vec", [[0] * 4, [1] * 4]) - def test_StatePrep_state_norm_not_one_fails(self, vec): - """Tests that the state-vector provided must have norm equal to 1.""" - with pytest.raises(ValueError, match="Sum of amplitudes-squared does not equal one."): - _ = qml.StatePrep(vec, wires=[0, 1]) - - def test_StatePrep_wrong_param_size_fails(self): - """Tests that the parameter must be of shape (2**num_wires,).""" - with pytest.raises(ValueError, match="State vector must have shape"): - _ = qml.StatePrep([0, 1], wires=[0, 1]) - - @pytest.mark.parametrize( - "num_wires,wire_order,one_position", - [ - (2, None, (0, 1)), - (2, [1, 2], (0, 1)), - (2, [2, 1], (1, 0)), - (3, [0, 1, 2], (0, 0, 1)), - (3, ["a", 1, 2], (0, 0, 1)), - (3, [1, 2, 0], (0, 1, 0)), - (3, [1, 2, "a"], (0, 1, 0)), - ], - ) - def test_BasisState_state_vector(self, num_wires, wire_order, one_position): - """Tests that BasisState state_vector returns kets as expected.""" - basis_op = qml.BasisState([0, 1], wires=[1, 2]) - ket = basis_op.state_vector(wire_order=wire_order) - assert qml.math.shape(ket) == (2,) * num_wires - assert ket[one_position] == 1 - ket[one_position] = 0 # everything else should be zero, as we assert below - assert np.allclose(np.zeros((2,) * num_wires), ket) - - @pytest.mark.parametrize( - "state", - [ - np.array([0, 0]), - np.array([1, 0]), - np.array([0, 1]), - np.array([1, 1]), - ], - ) - @pytest.mark.parametrize("device_wires", [3, 4, 5]) - @pytest.mark.parametrize("op_wires", [[0, 1], [1, 0], [2, 0]]) - def test_BasisState_state_vector_computed(self, state, device_wires, op_wires): - """Test BasisState initialization on a subset of device wires.""" - basis_op = qml.BasisState(state, wires=op_wires) - basis_state = basis_op.state_vector(wire_order=list(range(device_wires))) - - one_index = [0] * device_wires - for op_wire, idx_value in zip(op_wires, state): - if idx_value == 1: - one_index[op_wire] = 1 - one_index = tuple(one_index) - - assert basis_state[one_index] == 1 - basis_state[one_index] = 0 - assert not np.any(basis_state) - - @pytest.mark.all_interfaces - @pytest.mark.parametrize("interface", ["numpy", "jax", "torch", "tensorflow"]) - @pytest.mark.parametrize("dtype_like", [0, 0.0]) - def test_BasisState_state_vector_preserves_parameter_type(self, interface, dtype_like): - """Tests that given an array of some type, the resulting state_vector is also that type.""" - basis_state = qml.math.cast_like(qml.math.asarray([0, 1], like=interface), dtype_like) - basis_op = qml.BasisState(basis_state, wires=[1, 2]) - assert qml.math.get_interface(basis_op.state_vector()) == interface - assert qml.math.get_interface(basis_op.state_vector(wire_order=[0, 1, 2])) == interface - - def test_BasisState_state_vector_bad_wire_order(self): - """Tests that the provided wire_order must contain the wires in the operation.""" - basis_op = qml.BasisState([0, 1], wires=[0, 1]) - with pytest.raises(WireError, match="wire_order must contain all BasisState wires"): - basis_op.state_vector(wire_order=[1, 2]) - - def test_BasisState_explicitly_checks_0_1(self): - """Tests that BasisState gives a clear error if a value other than 0 or 1 is given.""" - op = qml.BasisState([2, 1], wires=[0, 1]) - with pytest.raises( - ValueError, match="BasisState parameter must consist of 0 or 1 integers." - ): - _ = op.state_vector() - - def test_BasisState_wrong_param_size(self): - """Tests that the parameter must be of length num_wires.""" - op = qml.BasisState([0], wires=[0, 1]) - with pytest.raises( - ValueError, match="BasisState parameter and wires must be of equal length." - ): - _ = op.state_vector() \ No newline at end of file + def test_CosineWindow_state_vector_wire_order(self): + """Tests that the state vector is correct for a single wire.""" + op = qml.CosineWindow(wires=[0, 1]) + res = op.state_vector(wire_order=[1, 0]) ** 2 + expected = np.array([0.0, 0.5, 0.25, 0.25]) + assert np.allclose(res, expected) From a7036a9eadf2e7c5e1b558afcc808100014eb28e Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:57:01 -0400 Subject: [PATCH 11/43] fixing tests --- pennylane/templates/state_preparations/cosine_window.py | 6 ++++-- .../templates/test_state_preparations/test_cosine_window.py | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index d017fda7911..97274bb5976 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -95,7 +95,7 @@ def compute_decomposition(wires): def state_vector(self, wire_order=None): num_op_wires = len(self.wires) - op_vector_shape = (-1,) + (2,) * num_op_wires + op_vector_shape = (-1,) + (2,) * num_op_wires if self.batch_size else (2,) * num_op_wires vector = np.array( [ np.sqrt(2) @@ -118,6 +118,9 @@ def state_vector(self, wire_order=None): [Ellipsis] + [slice(None)] * num_op_wires + [0] * (num_total_wires - num_op_wires) ) ket_shape = [2] * num_total_wires + if self.batch_size: + # Add broadcasted dimension to the shape of the state vector + ket_shape = [self.batch_size] + ket_shape ket = np.zeros(ket_shape, dtype=np.complex128) ket[indices] = op_vector @@ -130,7 +133,6 @@ def state_vector(self, wire_order=None): # If the operation is broadcasted, the desired order must include the batch dimension # as the first dimension. desired_order = [0] + [d + 1 for d in desired_order] - ket = ket.transpose(desired_order) return math.convert_like(ket, op_vector) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index 37015529e49..f91321624c4 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -20,6 +20,7 @@ import pennylane as qml from pennylane.wires import WireError + class TestDecomposition: """Tests that the template defines the correct decomposition.""" From 5529669e5c2e0df641287c8767f4223f2a7167eb Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 14:21:07 -0400 Subject: [PATCH 12/43] typo test --- tests/templates/test_state_preparations/test_cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index f91321624c4..a677720b874 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -95,7 +95,7 @@ def test_CosineWindow_state_vector(self): def test_CosineWindow_state_vector_bad_wire_order(self): """Tests that the provided wire_order must contain the wires in the operation.""" - qsv_op = qml.StatePrep(wires=[0, 1]) + qsv_op = qml.CosineWindow(wires=[0, 1]) with pytest.raises(WireError, match="wire_order must contain all CosineWindow wires"): qsv_op.state_vector(wire_order=[1, 2]) From 386112cd01dd22c5a4e8994faa0ff085b8452f5d Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 14:40:32 -0400 Subject: [PATCH 13/43] reshaping test --- tests/templates/test_state_preparations/test_cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index a677720b874..ea18c7d08cb 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -102,6 +102,6 @@ def test_CosineWindow_state_vector_bad_wire_order(self): def test_CosineWindow_state_vector_wire_order(self): """Tests that the state vector is correct for a single wire.""" op = qml.CosineWindow(wires=[0, 1]) - res = op.state_vector(wire_order=[1, 0]) ** 2 + res = np.reshape(op.state_vector(wire_order=[1, 0]) ** 2, (-1,)) expected = np.array([0.0, 0.5, 0.25, 0.25]) assert np.allclose(res, expected) From 3704848d0e53961dd079e0af901339ba03971252 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:36:20 -0400 Subject: [PATCH 14/43] thumbnail + codefactor --- .../thumbnail_cosine_window.png | Bin 0 -> 72999 bytes doc/introduction/templates.rst | 4 ++++ doc/releases/changelog-dev.md | 17 +++++++++++++++++ .../state_preparations/cosine_window.py | 2 +- .../test_cosine_window.py | 2 +- 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 doc/_static/templates/state_preparations/thumbnail_cosine_window.png diff --git a/doc/_static/templates/state_preparations/thumbnail_cosine_window.png b/doc/_static/templates/state_preparations/thumbnail_cosine_window.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fad95a8e0aa22279e824a0546a327676b796a7 GIT binary patch literal 72999 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 fasPi;_LQ13` :figure: _static/templates/subroutines/arbitrarystateprep.png +.. gallery-item:: + :description: :doc:`CosineWindow <../code/api/pennylane.CosineWindow>` + :figure: _static/templates/state_preparations/thumbnail_cosine_window.png + .. raw:: html
diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md index e3d4ccfcdcd..22364ff3ddb 100644 --- a/doc/releases/changelog-dev.md +++ b/doc/releases/changelog-dev.md @@ -85,6 +85,23 @@ * `CosineWindow` has been added. Prepare the initial state following a cosine wave function. [(#4683)](https://github.com/PennyLaneAI/pennylane/pull/4683) + ```python + import pennylane as qml + import matplotlib.pyplot as plt + + dev = qml.device('default.qubit', wires=4) + + @qml.qnode(dev) + def example_circuit(): + qml.CosineWindow(wires=range(4)) + return qml.state() + output = example_circuit() + + # Graph showing state amplitudes + plt.bar(range(len(output)), output) + plt.show() + ``` +

Improvements 🛠

* `pennylane.devices.preprocess` now offers the transforms `decompose`, `validate_observables`, `validate_measurements`, diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 97274bb5976..0d613494639 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -71,7 +71,7 @@ def __init__(self, wires, id=None): super().__init__(wires=wires, id=id) @staticmethod - def compute_decomposition(wires): + def compute_decomposition(*args, wires, **kwargs): r"""Representation of the operator as a product of other operators (static method). It is efficiently decomposed from one QFT over all qubits and one-qubit rotation gates. diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index ea18c7d08cb..bbc8b583b52 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -100,7 +100,7 @@ def test_CosineWindow_state_vector_bad_wire_order(self): qsv_op.state_vector(wire_order=[1, 2]) def test_CosineWindow_state_vector_wire_order(self): - """Tests that the state vector is correct for a single wire.""" + """Tests that the state vector works with a different order of wires.""" op = qml.CosineWindow(wires=[0, 1]) res = np.reshape(op.state_vector(wire_order=[1, 0]) ** 2, (-1,)) expected = np.array([0.0, 0.5, 0.25, 0.25]) From dc001bd7b8f91c07b1af2b85d0b889e0fe3f0aa6 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:39:30 -0400 Subject: [PATCH 15/43] codefactor --- pennylane/templates/state_preparations/cosine_window.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 0d613494639..7337411c083 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -71,7 +71,9 @@ def __init__(self, wires, id=None): super().__init__(wires=wires, id=id) @staticmethod - def compute_decomposition(*args, wires, **kwargs): + def compute_decomposition( + *args, wires, **kwargs + ): # pylint: disable=arguments-differ,unused-argument r"""Representation of the operator as a product of other operators (static method). It is efficiently decomposed from one QFT over all qubits and one-qubit rotation gates. From c0516cad5ff198b0de57781d4395f24ad4d42845 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 17:28:24 -0400 Subject: [PATCH 16/43] not batch as there are no parameters, no batches will recived --- .../templates/state_preparations/cosine_window.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 7337411c083..1698469fbf5 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -41,6 +41,7 @@ class CosineWindow(StatePrepBase): The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. + .. seealso:: :class:`~.QuantumPhaseEstimation`, :class:`~.QFT` **Details:** * Number of wires: Any (the operation can act on any number of wires) @@ -97,7 +98,7 @@ def compute_decomposition( def state_vector(self, wire_order=None): num_op_wires = len(self.wires) - op_vector_shape = (-1,) + (2,) * num_op_wires if self.batch_size else (2,) * num_op_wires + op_vector_shape = (2,) * num_op_wires vector = np.array( [ np.sqrt(2) @@ -120,9 +121,6 @@ def state_vector(self, wire_order=None): [Ellipsis] + [slice(None)] * num_op_wires + [0] * (num_total_wires - num_op_wires) ) ket_shape = [2] * num_total_wires - if self.batch_size: - # Add broadcasted dimension to the shape of the state vector - ket_shape = [self.batch_size] + ket_shape ket = np.zeros(ket_shape, dtype=np.complex128) ket[indices] = op_vector @@ -131,10 +129,7 @@ def state_vector(self, wire_order=None): if self.wires != wire_order[:num_op_wires]: current_order = self.wires + list(Wires.unique_wires([wire_order, self.wires])) desired_order = [current_order.index(w) for w in wire_order] - if self.batch_size: - # If the operation is broadcasted, the desired order must include the batch dimension - # as the first dimension. - desired_order = [0] + [d + 1 for d in desired_order] + ket = ket.transpose(desired_order) return math.convert_like(ket, op_vector) From 9d6c034281b3210a612417effb663906a1aa90e9 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 17:42:11 -0400 Subject: [PATCH 17/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 1698469fbf5..7ae611f7950 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -42,6 +42,7 @@ class CosineWindow(StatePrepBase): .. seealso:: :class:`~.QuantumPhaseEstimation`, :class:`~.QFT` + **Details:** * Number of wires: Any (the operation can act on any number of wires) From f563b963be99d2f63784b7982a8acbdbff9246ed Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Tue, 17 Oct 2023 17:47:24 -0400 Subject: [PATCH 18/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 7ae611f7950..9595a0e47e3 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -41,8 +41,6 @@ class CosineWindow(StatePrepBase): The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. - .. seealso:: :class:`~.QuantumPhaseEstimation`, :class:`~.QFT` - **Details:** * Number of wires: Any (the operation can act on any number of wires) From 26d63270f1c32b3fc53311b535baa697ef212774 Mon Sep 17 00:00:00 2001 From: Guillermo Alonso-Linaje <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 11:53:54 -0400 Subject: [PATCH 19/43] Update pennylane/templates/state_preparations/cosine_window.py Co-authored-by: soranjh <40344468+soranjh@users.noreply.github.com> --- pennylane/templates/state_preparations/cosine_window.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 9595a0e47e3..e0d9aaabb5f 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -23,7 +23,9 @@ class CosineWindow(StatePrepBase): r"""CosineWindow(wires) - Prepare the initial state following a cosine wave function. + Prepares an initial state with a cosine wave function. + + The wave function is defined as .. math:: From c4c496f0e459af1e8fb9ef0b1894f860c05a580f Mon Sep 17 00:00:00 2001 From: Guillermo Alonso-Linaje <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:03:54 -0400 Subject: [PATCH 20/43] Update tests/templates/test_state_preparations/test_cosine_window.py Co-authored-by: soranjh <40344468+soranjh@users.noreply.github.com> --- tests/templates/test_state_preparations/test_cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index bbc8b583b52..a586c35278e 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -38,7 +38,7 @@ def test_correct_gates_single_wire(self): assert np.isclose(queue[3].data[0], np.pi / 2) def test_correct_gates_many_wires(self): - """Test that the correct gates are applied on on two wires.""" + """Test that the correct gates are applied on two wires.""" op = qml.CosineWindow(wires=[0, 1, 2, 3, 4]) queue = op.expand().operations From 0bed71530bed2645f8b9f1c7ccf25045630fe936 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:37:20 -0400 Subject: [PATCH 21/43] not wire_order needed --- .../state_preparations/cosine_window.py | 46 ++++--------------- .../test_cosine_window.py | 12 +---- 2 files changed, 12 insertions(+), 46 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index e0d9aaabb5f..b43ed4d3e10 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -43,13 +43,6 @@ class CosineWindow(StatePrepBase): The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. - **Details:** - - * Number of wires: Any (the operation can act on any number of wires) - * Number of parameters: 0 - * Gradient recipe: None - - Args: wires (Sequence[int] or int): the wire(s) the operation acts on id (str): custom label given to an operator instance, @@ -67,7 +60,6 @@ class CosineWindow(StatePrepBase): """ num_wires = AnyWires num_params = 0 - """int: Number of trainable parameters that the operator depends on.""" def __init__(self, wires, id=None): super().__init__(wires=wires, id=id) @@ -97,40 +89,22 @@ def compute_decomposition( return decomp_ops - def state_vector(self, wire_order=None): + def state_vector(self): + r"""Calculation of the state vector generated by the cosine window. + + Returns: + TensorLike[complex]: output state + """ + num_op_wires = len(self.wires) op_vector_shape = (2,) * num_op_wires vector = np.array( [ - np.sqrt(2) - * np.cos(-np.pi / 2 + np.pi * x / 2 ** (num_op_wires)) - / np.sqrt(2**num_op_wires) + np.sqrt(2 ** (1 - num_op_wires)) + * np.cos(-np.pi / 2 + np.pi * x / 2**num_op_wires) for x in range(2**num_op_wires) ] ) op_vector = math.reshape(vector, op_vector_shape) - if wire_order is None or Wires(wire_order) == self.wires: - return op_vector - - wire_order = Wires(wire_order) - if not wire_order.contains_wires(self.wires): - raise WireError(f"Custom wire_order must contain all {self.name} wires") - - num_total_wires = len(wire_order) - indices = tuple( - [Ellipsis] + [slice(None)] * num_op_wires + [0] * (num_total_wires - num_op_wires) - ) - ket_shape = [2] * num_total_wires - - ket = np.zeros(ket_shape, dtype=np.complex128) - ket[indices] = op_vector - - # unless wire_order is [*self.wires, *rest_of_wire_order], need to rearrange - if self.wires != wire_order[:num_op_wires]: - current_order = self.wires + list(Wires.unique_wires([wire_order, self.wires])) - desired_order = [current_order.index(w) for w in wire_order] - - ket = ket.transpose(desired_order) - - return math.convert_like(ket, op_vector) + return op_vector diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index a586c35278e..e45a5a91a08 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -93,15 +93,7 @@ def test_CosineWindow_state_vector(self): expected = np.array([0.0, 1.0]) assert np.allclose(res, expected) - def test_CosineWindow_state_vector_bad_wire_order(self): - """Tests that the provided wire_order must contain the wires in the operation.""" - qsv_op = qml.CosineWindow(wires=[0, 1]) - with pytest.raises(WireError, match="wire_order must contain all CosineWindow wires"): - qsv_op.state_vector(wire_order=[1, 2]) - - def test_CosineWindow_state_vector_wire_order(self): - """Tests that the state vector works with a different order of wires.""" op = qml.CosineWindow(wires=[0, 1]) - res = np.reshape(op.state_vector(wire_order=[1, 0]) ** 2, (-1,)) - expected = np.array([0.0, 0.5, 0.25, 0.25]) + res = np.reshape(op.state_vector() ** 2, (-1,)) + expected = np.array([0.0, 0.25, 0.5, 0.25]) assert np.allclose(res, expected) From 697b2c63330bc87a9c3c4db8ed243b229d018577 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:39:04 -0400 Subject: [PATCH 22/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index b43ed4d3e10..70deda30da3 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -24,7 +24,7 @@ class CosineWindow(StatePrepBase): r"""CosineWindow(wires) Prepares an initial state with a cosine wave function. - + The wave function is defined as .. math:: @@ -65,9 +65,7 @@ def __init__(self, wires, id=None): super().__init__(wires=wires, id=id) @staticmethod - def compute_decomposition( - *args, wires, **kwargs - ): # pylint: disable=arguments-differ,unused-argument + def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-argument r"""Representation of the operator as a product of other operators (static method). It is efficiently decomposed from one QFT over all qubits and one-qubit rotation gates. From cb6d72f26c0cd61fc552a17486afcbe6a6fb479b Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:42:28 -0400 Subject: [PATCH 23/43] fixing codefactor --- pennylane/templates/state_preparations/cosine_window.py | 1 - tests/templates/test_state_preparations/test_cosine_window.py | 2 -- 2 files changed, 3 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 70deda30da3..5f54788205d 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -17,7 +17,6 @@ import numpy as np import pennylane as qml from pennylane.operation import AnyWires, StatePrepBase -from pennylane.wires import Wires, WireError from pennylane import math diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index e45a5a91a08..edcded44f2c 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -15,10 +15,8 @@ Unit tests for the CosineWindow template. """ # pylint: disable=too-few-public-methods -import pytest import numpy as np import pennylane as qml -from pennylane.wires import WireError class TestDecomposition: From e836d593da79e7250394beecf3cc27fda13c31a3 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:45:22 -0400 Subject: [PATCH 24/43] more codefactor complains --- pennylane/templates/state_preparations/cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 5f54788205d..44d0f350921 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -86,7 +86,7 @@ def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-arg return decomp_ops - def state_vector(self): + def state_vector(self): # pylint: disable=arguments-differ,unused-argument r"""Calculation of the state vector generated by the cosine window. Returns: From a8b4f92a101bfafb3e8e7ac7d870c47a89bfabd8 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:46:07 -0400 Subject: [PATCH 25/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 44d0f350921..bf369098043 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -86,7 +86,7 @@ def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-arg return decomp_ops - def state_vector(self): # pylint: disable=arguments-differ,unused-argument + def state_vector(self, wire_order): # pylint: disable=arguments-differ,unused-argument r"""Calculation of the state vector generated by the cosine window. Returns: From 29565aae986e125648d0ffc0990ee5a4f82b59bc Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:55:16 -0400 Subject: [PATCH 26/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index bf369098043..0ef68d421e9 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -86,7 +86,7 @@ def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-arg return decomp_ops - def state_vector(self, wire_order): # pylint: disable=arguments-differ,unused-argument + def state_vector(self, wire_order=None): # pylint: disable=arguments-differ,unused-argument r"""Calculation of the state vector generated by the cosine window. Returns: From 11d19e97cc658564a35b384363c6989e31878c24 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:16:32 -0400 Subject: [PATCH 27/43] test changing initilize_state.py --- pennylane/devices/qubit/initialize_state.py | 2 +- pennylane/templates/state_preparations/cosine_window.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/devices/qubit/initialize_state.py b/pennylane/devices/qubit/initialize_state.py index 9a71fd2e221..6de2e280575 100644 --- a/pennylane/devices/qubit/initialize_state.py +++ b/pennylane/devices/qubit/initialize_state.py @@ -42,4 +42,4 @@ def create_initial_state( state[(0,) * num_wires] = 1 return qml.math.asarray(state, like=like) - return qml.math.asarray(prep_operation.state_vector(wire_order=list(wires)), like=like) + return qml.math.asarray(prep_operation.state_vector(), like=like) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 0ef68d421e9..44d0f350921 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -86,7 +86,7 @@ def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-arg return decomp_ops - def state_vector(self, wire_order=None): # pylint: disable=arguments-differ,unused-argument + def state_vector(self): # pylint: disable=arguments-differ,unused-argument r"""Calculation of the state vector generated by the cosine window. Returns: From b6b7c7aff7438ad0b6e31335ba0930a30e01cffe Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:29:57 -0400 Subject: [PATCH 28/43] [ci skip] --- pennylane/devices/qubit/initialize_state.py | 2 +- pennylane/templates/state_preparations/cosine_window.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/devices/qubit/initialize_state.py b/pennylane/devices/qubit/initialize_state.py index 6de2e280575..9a71fd2e221 100644 --- a/pennylane/devices/qubit/initialize_state.py +++ b/pennylane/devices/qubit/initialize_state.py @@ -42,4 +42,4 @@ def create_initial_state( state[(0,) * num_wires] = 1 return qml.math.asarray(state, like=like) - return qml.math.asarray(prep_operation.state_vector(), like=like) + return qml.math.asarray(prep_operation.state_vector(wire_order=list(wires)), like=like) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 44d0f350921..def11e5684a 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -86,7 +86,7 @@ def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-arg return decomp_ops - def state_vector(self): # pylint: disable=arguments-differ,unused-argument + def state_vector(self, wire_order = None): # pylint: disable=arguments-differ,unused-argument r"""Calculation of the state vector generated by the cosine window. Returns: From 80adfd76fb7ab1f16f46b6eddea0d4d69e560c91 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:40:11 -0400 Subject: [PATCH 29/43] wires_order again --- .../state_preparations/cosine_window.py | 23 +++++++++++++++++-- .../test_cosine_window.py | 15 ++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index def11e5684a..34eb8bbec0c 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -18,6 +18,7 @@ import pennylane as qml from pennylane.operation import AnyWires, StatePrepBase from pennylane import math +from pennylane.wires import Wires, WireError class CosineWindow(StatePrepBase): @@ -86,7 +87,7 @@ def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-arg return decomp_ops - def state_vector(self, wire_order = None): # pylint: disable=arguments-differ,unused-argument + def state_vector(self, wire_order=None): # pylint: disable=arguments-differ,unused-argument r"""Calculation of the state vector generated by the cosine window. Returns: @@ -104,4 +105,22 @@ def state_vector(self, wire_order = None): # pylint: disable=arguments-differ,u ) op_vector = math.reshape(vector, op_vector_shape) - return op_vector + if wire_order is None or Wires(wire_order) == self.wires: + return op_vector + + wire_order = Wires(wire_order) + if not wire_order.contains_wires(self.wires): + raise WireError(f"Custom wire_order must contain all {self.name} wires") + + indices = tuple([Ellipsis] + [slice(None)] * num_op_wires) + + ket_shape = [2] * num_op_wires + ket = np.zeros(ket_shape, dtype=np.complex128) + ket[indices] = op_vector + + if self.wires != wire_order[:num_op_wires]: + current_order = self.wires + list(Wires.unique_wires([wire_order, self.wires])) + desired_order = [current_order.index(w) for w in wire_order] + ket = ket.transpose(desired_order) + + return math.convert_like(ket, op_vector) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index edcded44f2c..fc17b227cd0 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -15,8 +15,10 @@ Unit tests for the CosineWindow template. """ # pylint: disable=too-few-public-methods +import pytest import numpy as np import pennylane as qml +from pennylane.wires import WireError class TestDecomposition: @@ -95,3 +97,16 @@ def test_CosineWindow_state_vector(self): res = np.reshape(op.state_vector() ** 2, (-1,)) expected = np.array([0.0, 0.25, 0.5, 0.25]) assert np.allclose(res, expected) + + def test_CosineWindow_state_vector_bad_wire_order(self): + """Tests that the provided wire_order must contain the wires in the operation.""" + qsv_op = qml.CosineWindow(wires=[0, 1]) + with pytest.raises(WireError, match="wire_order must contain all CosineWindow wires"): + qsv_op.state_vector(wire_order=[1, 2]) + + def test_CosineWindow_state_vector_wire_order(self): + """Tests that the state vector works with a different order of wires.""" + op = qml.CosineWindow(wires=[0, 1]) + res = np.reshape(op.state_vector(wire_order=[1, 0]) ** 2, (-1,)) + expected = np.array([0.0, 0.5, 0.25, 0.25]) + assert np.allclose(res, expected) From f2e73f8ea04ddb599c540cb5b022481a6a53385d Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:42:48 -0400 Subject: [PATCH 30/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 34eb8bbec0c..7d0c97a6364 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -90,6 +90,9 @@ def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-arg def state_vector(self, wire_order=None): # pylint: disable=arguments-differ,unused-argument r"""Calculation of the state vector generated by the cosine window. + Args: + wire_order (Iterable, Wires): Custom order of wires for the returned state vector. + Returns: TensorLike[complex]: output state """ From cc0307da41558ddadf4d17caa8462dabbbd74803 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:29:00 -0400 Subject: [PATCH 31/43] Update cosine_window.py --- pennylane/templates/state_preparations/cosine_window.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 7d0c97a6364..b6a3022469a 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -24,6 +24,7 @@ class CosineWindow(StatePrepBase): r"""CosineWindow(wires) Prepares an initial state with a cosine wave function. + Inspired by https://arxiv.org/abs/2110.09590 The wave function is defined as @@ -42,6 +43,7 @@ class CosineWindow(StatePrepBase): The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. + See also: :class:`~.QuantumPhaseEstimation` and :class:`~.QFT`. Args: wires (Sequence[int] or int): the wire(s) the operation acts on @@ -58,11 +60,6 @@ class CosineWindow(StatePrepBase): >>> print(example_circuit()) [1.87469973e-33 2.50000000e-01 5.00000000e-01 2.50000000e-01] """ - num_wires = AnyWires - num_params = 0 - - def __init__(self, wires, id=None): - super().__init__(wires=wires, id=id) @staticmethod def compute_decomposition(wires): # pylint: disable=arguments-differ,unused-argument From 549451d9e9111cc9e9f7d097919a27b57d39ee91 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:51:48 -0400 Subject: [PATCH 32/43] visual example --- doc/releases/changelog-dev.md | 57 ++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md index 22364ff3ddb..f943272a3c5 100644 --- a/doc/releases/changelog-dev.md +++ b/doc/releases/changelog-dev.md @@ -82,25 +82,54 @@ [(#4620)](https://github.com/PennyLaneAI/pennylane/pull/4620) [(#4632)](https://github.com/PennyLaneAI/pennylane/pull/4632) -* `CosineWindow` has been added. Prepare the initial state following a cosine wave function. - [(#4683)](https://github.com/PennyLaneAI/pennylane/pull/4683) + * `CosineWindow` has been added. Prepare the initial state following a cosine wave function. + [(#4683)](https://github.com/PennyLaneAI/pennylane/pull/4683) - ```python - import pennylane as qml - import matplotlib.pyplot as plt + ```python + import pennylane as qml + import matplotlib.pyplot as plt - dev = qml.device('default.qubit', wires=4) + dev = qml.device('default.qubit', wires=4) - @qml.qnode(dev) - def example_circuit(): - qml.CosineWindow(wires=range(4)) + @qml.qnode(dev) + def example_circuit(): + qml.CosineWindow(wires=range(4)) + return qml.state() + output = example_circuit() + + # Graph showing state amplitudes + plt.bar(range(len(output)), output) + plt.show() + ``` + + We can show how this operator is built: + + ```python + import pennylane as qml + + dev = qml.device("default.qubit", wires=5) + + op = qml.CosineWindow(wires=range(5)) + + @qml.qnode(dev) + def circuit(): + op.decomposition() return qml.state() - output = example_circuit() - # Graph showing state amplitudes - plt.bar(range(len(output)), output) - plt.show() - ``` + print(qml.draw(circuit)()) + + ``` + + ```pycon + + 0: ──────────────╭QFT†──Rϕ(1.57)─┤ State + 1: ──────────────├QFT†──Rϕ(0.79)─┤ State + 2: ──────────────├QFT†──Rϕ(0.39)─┤ State + 3: ──────────────├QFT†──Rϕ(0.20)─┤ State + 4: ──H──RZ(3.14)─╰QFT†──Rϕ(0.10)─┤ State + + ``` +

Improvements 🛠

From 079af3b3f84cf3a1e029d40232572894b55ec656 Mon Sep 17 00:00:00 2001 From: Guillermo Alonso-Linaje <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:53:52 -0400 Subject: [PATCH 33/43] Update pennylane/templates/state_preparations/cosine_window.py Co-authored-by: Jay Soni --- pennylane/templates/state_preparations/cosine_window.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index b6a3022469a..ce97b8c90bb 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -90,6 +90,9 @@ def state_vector(self, wire_order=None): # pylint: disable=arguments-differ,unu Args: wire_order (Iterable, Wires): Custom order of wires for the returned state vector. + Raises: + WireError: Custom wire_order must contain all wires. + Returns: TensorLike[complex]: output state """ From 6a91c5b9d93114f1c94d8fe36cbb15010a727202 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 12:02:31 -0400 Subject: [PATCH 34/43] Update test_cosine_window.py --- .../templates/test_state_preparations/test_cosine_window.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index fc17b227cd0..618ca428a64 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -41,7 +41,7 @@ def test_correct_gates_many_wires(self): """Test that the correct gates are applied on two wires.""" op = qml.CosineWindow(wires=[0, 1, 2, 3, 4]) - queue = op.expand().operations + queue = op.decomposition() assert queue[0].name == "Hadamard" assert queue[1].name == "RZ" @@ -79,8 +79,10 @@ class TestInputs: def test_id(self): """Tests that the id attribute can be set.""" - template = qml.CosineWindow(wires=[0, 1, 2], id="a") + wires = [0, 1, 2] + template = qml.CosineWindow(wires=wires, id="a") assert template.id == "a" + assert template.wires == wires class TestStateVector: From a8cc1f90a3fe3fd75efad7a849c8fbea3d96deef Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 12:51:59 -0400 Subject: [PATCH 35/43] codefactor + test --- pennylane/templates/state_preparations/cosine_window.py | 2 +- tests/templates/test_state_preparations/test_cosine_window.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index ce97b8c90bb..a6b8308565d 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -16,7 +16,7 @@ """ import numpy as np import pennylane as qml -from pennylane.operation import AnyWires, StatePrepBase +from pennylane.operation import StatePrepBase from pennylane import math from pennylane.wires import Wires, WireError diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index 618ca428a64..b93b5c3620c 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -82,7 +82,7 @@ def test_id(self): wires = [0, 1, 2] template = qml.CosineWindow(wires=wires, id="a") assert template.id == "a" - assert template.wires == wires + assert template.wires == qml.Wires(wires) class TestStateVector: From d8491a37e21964f66457efc921dd2aeb862513b5 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 13:30:07 -0400 Subject: [PATCH 36/43] wires.Wires --- tests/templates/test_state_preparations/test_cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index b93b5c3620c..aa2e9dc3149 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -82,7 +82,7 @@ def test_id(self): wires = [0, 1, 2] template = qml.CosineWindow(wires=wires, id="a") assert template.id == "a" - assert template.wires == qml.Wires(wires) + assert template.wires == qml.wires.Wires(wires) class TestStateVector: From 56b1a5acfcfcd80d0b3c58273c8e45ceb7aff8a9 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 14:50:48 -0400 Subject: [PATCH 37/43] label + image --- .../thumbnail_cosine_window.png | Bin 72999 -> 19172 bytes .../state_preparations/cosine_window.py | 3 +++ .../test_cosine_window.py | 6 ++++++ 3 files changed, 9 insertions(+) diff --git a/doc/_static/templates/state_preparations/thumbnail_cosine_window.png b/doc/_static/templates/state_preparations/thumbnail_cosine_window.png index b7fad95a8e0aa22279e824a0546a327676b796a7..159bd18160ef59c6a83cc0f159285f69925c737c 100644 GIT binary patch literal 19172 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 literal 72999 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 fasPi;_LQ13 Date: Thu, 19 Oct 2023 22:18:52 -0400 Subject: [PATCH 38/43] Update doc/releases/changelog-dev.md Co-authored-by: soranjh <40344468+soranjh@users.noreply.github.com> --- doc/releases/changelog-dev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md index f943272a3c5..e71c8ec6da7 100644 --- a/doc/releases/changelog-dev.md +++ b/doc/releases/changelog-dev.md @@ -82,7 +82,7 @@ [(#4620)](https://github.com/PennyLaneAI/pennylane/pull/4620) [(#4632)](https://github.com/PennyLaneAI/pennylane/pull/4632) - * `CosineWindow` has been added. Prepare the initial state following a cosine wave function. + * The `CosineWindow` template has been added to prepare an initial state based on a cosine wave function. [(#4683)](https://github.com/PennyLaneAI/pennylane/pull/4683) ```python From f49bc58649388359a3986f6e1a46aaf201cf671c Mon Sep 17 00:00:00 2001 From: Guillermo Alonso-Linaje <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 22:19:07 -0400 Subject: [PATCH 39/43] Update pennylane/templates/state_preparations/cosine_window.py Co-authored-by: soranjh <40344468+soranjh@users.noreply.github.com> --- pennylane/templates/state_preparations/cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 70610ab9ac1..130b533ec98 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -32,7 +32,7 @@ class CosineWindow(StatePrepBase): |\psi\rangle = \sqrt{2^{1-m}} \sum_{k=0}^{2^m-1} \cos(\frac{\pi k}{2^m} - \frac{\pi}{2}) |k\rangle, - where :math:`m` is the number of wires. + where :math:`m` is the number of wires. For more details see `arXiv:2110.09590 `_. .. figure:: ../../_static/templates/state_preparations/cosine_window.png :align: center From 38e2a9754de9a14ff3a77b2ad72dad1692322aa7 Mon Sep 17 00:00:00 2001 From: Guillermo Alonso-Linaje <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 22:19:18 -0400 Subject: [PATCH 40/43] Update pennylane/templates/state_preparations/cosine_window.py Co-authored-by: soranjh <40344468+soranjh@users.noreply.github.com> --- pennylane/templates/state_preparations/cosine_window.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 130b533ec98..414477455f6 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -24,7 +24,6 @@ class CosineWindow(StatePrepBase): r"""CosineWindow(wires) Prepares an initial state with a cosine wave function. - Inspired by https://arxiv.org/abs/2110.09590 The wave function is defined as From 3860af27a140c3023e05b0e3247054ebb0f9c711 Mon Sep 17 00:00:00 2001 From: KetpuntoG <65235481+KetpuntoG@users.noreply.github.com> Date: Thu, 19 Oct 2023 22:25:29 -0400 Subject: [PATCH 41/43] last Soran suggestions --- .../templates/state_preparations/cosine_window.py | 2 -- .../test_state_preparations/test_cosine_window.py | 15 +++++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 414477455f6..33381dc3480 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -46,8 +46,6 @@ class CosineWindow(StatePrepBase): Args: wires (Sequence[int] or int): the wire(s) the operation acts on - id (str): custom label given to an operator instance, - can be useful for some applications where the instance has to be identified. **Example** diff --git a/tests/templates/test_state_preparations/test_cosine_window.py b/tests/templates/test_state_preparations/test_cosine_window.py index 927d3352ab1..40858853fa6 100644 --- a/tests/templates/test_state_preparations/test_cosine_window.py +++ b/tests/templates/test_state_preparations/test_cosine_window.py @@ -74,8 +74,8 @@ def circuit2(): assert np.allclose(state1, state2) -class TestInputs: - """Test inputs and pre-processing.""" +class TestRepresentation: + """Test id and label.""" def test_id(self): """Tests that the id attribute can be set.""" @@ -84,6 +84,11 @@ def test_id(self): assert template.id == "a" assert template.wires == qml.wires.Wires(wires) + def test_label(self): + """Test label method returns CosineWindow""" + op = qml.CosineWindow(wires=[0, 1]) + assert op.label() == "CosineWindow" + class TestStateVector: """Test the state_vector() method of various CosineWindow operations.""" @@ -112,9 +117,3 @@ def test_CosineWindow_state_vector_wire_order(self): res = np.reshape(op.state_vector(wire_order=[1, 0]) ** 2, (-1,)) expected = np.array([0.0, 0.5, 0.25, 0.25]) assert np.allclose(res, expected) - - -def test_label(): - """Test label method returns CosineWindow""" - op = qml.CosineWindow(wires=[0, 1]) - assert op.label() == "CosineWindow" From f99fc818f4c16cefb11758b6ca41027bd2751c91 Mon Sep 17 00:00:00 2001 From: Guillermo Alonso-Linaje <65235481+KetpuntoG@users.noreply.github.com> Date: Fri, 20 Oct 2023 11:59:44 -0400 Subject: [PATCH 42/43] Update pennylane/templates/state_preparations/cosine_window.py Co-authored-by: Jay Soni --- pennylane/templates/state_preparations/cosine_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 33381dc3480..359ef8d8186 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -42,7 +42,7 @@ class CosineWindow(StatePrepBase): The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. - See also: :class:`~.QuantumPhaseEstimation` and :class:`~.QFT`. + .. seealso:: :class:`~.QuantumPhaseEstimation` and :class:`~.QFT`. Args: wires (Sequence[int] or int): the wire(s) the operation acts on From d801f2021dea1d93ae47e69e9208d1cfc29a455b Mon Sep 17 00:00:00 2001 From: Guillermo Alonso-Linaje <65235481+KetpuntoG@users.noreply.github.com> Date: Fri, 20 Oct 2023 11:59:52 -0400 Subject: [PATCH 43/43] Update pennylane/templates/state_preparations/cosine_window.py Co-authored-by: Jay Soni --- pennylane/templates/state_preparations/cosine_window.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pennylane/templates/state_preparations/cosine_window.py b/pennylane/templates/state_preparations/cosine_window.py index 359ef8d8186..179b6ece2fa 100644 --- a/pennylane/templates/state_preparations/cosine_window.py +++ b/pennylane/templates/state_preparations/cosine_window.py @@ -25,14 +25,12 @@ class CosineWindow(StatePrepBase): r"""CosineWindow(wires) Prepares an initial state with a cosine wave function. - The wave function is defined as + The wave function is defined below where :math:`m` is the number of wires. .. math:: |\psi\rangle = \sqrt{2^{1-m}} \sum_{k=0}^{2^m-1} \cos(\frac{\pi k}{2^m} - \frac{\pi}{2}) |k\rangle, - where :math:`m` is the number of wires. For more details see `arXiv:2110.09590 `_. - .. figure:: ../../_static/templates/state_preparations/cosine_window.png :align: center :width: 65% @@ -42,6 +40,8 @@ class CosineWindow(StatePrepBase): The wave function is shifted by :math:`\frac{\pi}{2}` units so that the window is centered. + For more details see `Phys. Rev. D 106 (2022) `_. + .. seealso:: :class:`~.QuantumPhaseEstimation` and :class:`~.QFT`. Args: