From 5d4eed4a563558d2ae0d1949afbf183612deb766 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Tue, 22 Mar 2022 14:54:30 -0400 Subject: [PATCH 01/48] Prototype of operation. --- pennylane/templates/subroutines/__init__.py | 1 + .../templates/subroutines/hilbert_schmidt.py | 102 ++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 pennylane/templates/subroutines/hilbert_schmidt.py diff --git a/pennylane/templates/subroutines/__init__.py b/pennylane/templates/subroutines/__init__.py index f0bc2701ee6..4cdaae0659d 100644 --- a/pennylane/templates/subroutines/__init__.py +++ b/pennylane/templates/subroutines/__init__.py @@ -30,3 +30,4 @@ from .grover import GroverOperator from .qft import QFT from .kupccgsd import kUpCCGSD +from .hilbert_schmidt import HilbertSchmidt diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py new file mode 100644 index 00000000000..fef151d9089 --- /dev/null +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -0,0 +1,102 @@ +# Copyright 2022 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. +""" +This submodule contains the template for QFT. +""" +# pylint:disable=abstract-method,arguments-differ,protected-access + +import functools +import numpy as np + +import pennylane as qml +from pennylane.operation import AnyWires, Operation + + +class HilbertSchmidt(Operation): + r"""HilbertSchmidt(wires) + """ + num_wires = AnyWires + grad_method = None + + def __init__(self, *params, u_circuit, v_circuit, v_wires, do_queue=True, id=None): + + U = u_circuit + u_wires = U.wires + self.hyperparameters["U"] = U + + if not callable(v_circuit): + raise qml.QuantumFunctionError('V must be a callable quantum function.') + + V = qml.transforms.make_tape(v_circuit)(params[0], v_wires) + self.hyperparameters["V"] = V + + if len(u_wires) != len(v_wires): + raise qml.QuantumFunctionError('U and V must have the same number of wires.') + + if not isinstance(U, qml.tape.QuantumTape): + raise qml.QuantumFunctionError('U must be a quantum tape.') + + if not qml.wires.Wires(v_wires).contains_wires(V.wires): + raise qml.QuantumFunctionError('All wires in V must be in v_wires.') + + # Intersection of wires + if len(qml.wires.Wires.shared_wires([U.wires, V.wires])) != 0: + raise qml.QuantumFunctionError('U and V must act on distinct wires.') + + wires = qml.wires.Wires(u_wires + v_wires) + + self.hyperparameters["n_wires"] = len(wires) + super().__init__(*params, wires=wires, do_queue=do_queue, id=id) + + @property + def num_params(self): + return 1 + + @staticmethod + def compute_decomposition(params, wires, n_wires, U, V): # pylint: disable=arguments-differ,unused-argument + r"""Representation of the operator as a product of other operators (static method). + """ + decomp_ops = [] + + first_range = range(0, int(n_wires / 2)) + second_range = range(int(n_wires / 2), n_wires) + + for i, wire in enumerate(wires): + if i in first_range: + decomp_ops.append(qml.Hadamard(wire)) + + # CNOT first part + for i, j in zip(first_range, second_range): + decomp_ops.append(qml.CNOT(wires=[i, j])) + + for op_u in U.operations: + qml.apply(op_u) + decomp_ops.append(op_u) + + for op_v in V.operations: + decomp_ops.append(op_v.adjoint()) + + # CNOT second part + for i, j in zip(reversed(first_range), reversed(second_range)): + decomp_ops.append(qml.CNOT(wires=[i, j])) + + for i, wire in enumerate(wires): + if i in first_range: + decomp_ops.append(qml.Hadamard(wire)) + return decomp_ops + + def adjoint(self): + adjoint_op = HilbertSchmidt(wires=self.wires) + adjoint_op.inverse = not self.inverse + return adjoint_op From 00fa3fd18d8cab444e9dd97e575232414dbcda81 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Tue, 22 Mar 2022 17:15:16 -0400 Subject: [PATCH 02/48] Local --- pennylane/templates/subroutines/__init__.py | 2 +- .../templates/subroutines/hilbert_schmidt.py | 95 +++++++++++++++---- 2 files changed, 77 insertions(+), 20 deletions(-) diff --git a/pennylane/templates/subroutines/__init__.py b/pennylane/templates/subroutines/__init__.py index 4cdaae0659d..bbba2a2b0ca 100644 --- a/pennylane/templates/subroutines/__init__.py +++ b/pennylane/templates/subroutines/__init__.py @@ -30,4 +30,4 @@ from .grover import GroverOperator from .qft import QFT from .kupccgsd import kUpCCGSD -from .hilbert_schmidt import HilbertSchmidt +from .hilbert_schmidt import HilbertSchmidt, HilbertSchmidtLocal diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index fef151d9089..dd6124b84b3 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -12,47 +12,44 @@ # See the License for the specific language governing permissions and # limitations under the License. """ -This submodule contains the template for QFT. +This submodule contains the templates for Hilbert Schmidt tests. """ -# pylint:disable=abstract-method,arguments-differ,protected-access - -import functools -import numpy as np import pennylane as qml from pennylane.operation import AnyWires, Operation class HilbertSchmidt(Operation): - r"""HilbertSchmidt(wires) - """ + r"""HilbertSchmidt(wires)""" num_wires = AnyWires grad_method = None - def __init__(self, *params, u_circuit, v_circuit, v_wires, do_queue=True, id=None): + def __init__(self, *params, v_circuit, v_wires, u_circuit, do_queue=True, id=None): U = u_circuit u_wires = U.wires self.hyperparameters["U"] = U if not callable(v_circuit): - raise qml.QuantumFunctionError('V must be a callable quantum function.') + raise qml.QuantumFunctionError("V must be a callable quantum function.") V = qml.transforms.make_tape(v_circuit)(params[0], v_wires) + self.hyperparameters["v_function"] = v_circuit self.hyperparameters["V"] = V + self.hyperparameters["v_wires"] = V.wires if len(u_wires) != len(v_wires): - raise qml.QuantumFunctionError('U and V must have the same number of wires.') + raise qml.QuantumFunctionError("U and V must have the same number of wires.") if not isinstance(U, qml.tape.QuantumTape): - raise qml.QuantumFunctionError('U must be a quantum tape.') + raise qml.QuantumFunctionError("U must be a quantum tape.") if not qml.wires.Wires(v_wires).contains_wires(V.wires): - raise qml.QuantumFunctionError('All wires in V must be in v_wires.') + raise qml.QuantumFunctionError("All wires in V must be in v_wires.") # Intersection of wires if len(qml.wires.Wires.shared_wires([U.wires, V.wires])) != 0: - raise qml.QuantumFunctionError('U and V must act on distinct wires.') + raise qml.QuantumFunctionError("U and V must act on distinct wires.") wires = qml.wires.Wires(u_wires + v_wires) @@ -64,39 +61,99 @@ def num_params(self): return 1 @staticmethod - def compute_decomposition(params, wires, n_wires, U, V): # pylint: disable=arguments-differ,unused-argument - r"""Representation of the operator as a product of other operators (static method). - """ + def compute_decomposition( + params, wires, n_wires, U, V, v_function=None, v_wires=None + ): # pylint: disable=arguments-differ,unused-argument + r"""Representation of the operator as a product of other operators (static method).""" decomp_ops = [] first_range = range(0, int(n_wires / 2)) second_range = range(int(n_wires / 2), n_wires) + # Hadamard first layer for i, wire in enumerate(wires): if i in first_range: decomp_ops.append(qml.Hadamard(wire)) - # CNOT first part + # CNOT first layer for i, j in zip(first_range, second_range): decomp_ops.append(qml.CNOT(wires=[i, j])) + # Unitary U for op_u in U.operations: qml.apply(op_u) decomp_ops.append(op_u) + # Unitary V conjugate for op_v in V.operations: decomp_ops.append(op_v.adjoint()) - # CNOT second part + # CNOT second layer for i, j in zip(reversed(first_range), reversed(second_range)): decomp_ops.append(qml.CNOT(wires=[i, j])) + # Hadamard second layer + for i, wire in enumerate(wires): + if i in first_range: + decomp_ops.append(qml.Hadamard(wire)) + return decomp_ops + + def adjoint(self): + adjoint_op = HilbertSchmidt( + *self.parameters, + u_circuit=self.hyperparameters["U"], + v_circuit=self.hyperparameters["v_function"], + v_wires=self.hyperparameters["v_wires"], + ) + adjoint_op.inverse = not self.inverse + return adjoint_op + +class HilbertSchmidtLocal(HilbertSchmidt): + r"""HilbertSchmidt(wires)""" + + @staticmethod + def compute_decomposition( + params, wires, n_wires, U, V, v_function=None, v_wires=None + ): # pylint: disable=arguments-differ,unused-argument + r"""Representation of the operator as a product of other operators (static method).""" + decomp_ops = [] + + first_range = range(0, int(n_wires / 2)) + second_range = range(int(n_wires / 2), n_wires) + + # Hadamard first layer for i, wire in enumerate(wires): if i in first_range: decomp_ops.append(qml.Hadamard(wire)) + + # CNOT first layer + for i, j in zip(first_range, second_range): + decomp_ops.append(qml.CNOT(wires=[wires[i], wires[j]])) + + # Unitary U + for op_u in U.operations: + qml.apply(op_u) + decomp_ops.append(op_u) + + # Unitary V conjugate + for op_v in V.operations: + decomp_ops.append(op_v.adjoint()) + + # Only one CNOT + decomp_ops.append(qml.CNOT(wires=[wires[0], wires[int(n_wires / 2)]])) + + # Only one Hadamard + decomp_ops.append(qml.Hadamard(wires[0])) + return decomp_ops def adjoint(self): - adjoint_op = HilbertSchmidt(wires=self.wires) + adjoint_op = HilbertSchmidtLocal( + *self.parameters, + u_circuit=self.hyperparameters["U"], + v_circuit=self.hyperparameters["v_function"], + v_wires=self.hyperparameters["v_wires"], + ) adjoint_op.inverse = not self.inverse return adjoint_op + From bfcdb81978a96dc9c7953eef8f0acb2dc4ef4bf9 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 24 Mar 2022 13:18:36 -0400 Subject: [PATCH 03/48] Update and test frame. --- .../templates/subroutines/hilbert_schmidt.py | 57 +++--- .../test_subroutines/test_hilbert_schmidt.py | 188 ++++++++++++++++++ 2 files changed, 217 insertions(+), 28 deletions(-) create mode 100644 tests/templates/test_subroutines/test_hilbert_schmidt.py diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index dd6124b84b3..d737b82205b 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -24,36 +24,35 @@ class HilbertSchmidt(Operation): num_wires = AnyWires grad_method = None - def __init__(self, *params, v_circuit, v_wires, u_circuit, do_queue=True, id=None): + def __init__(self, *params, v_function, v_wires, u_tape, do_queue=True, id=None): - U = u_circuit - u_wires = U.wires - self.hyperparameters["U"] = U + u_wires = u_tape.wires + self.hyperparameters["u_tape"] = u_tape - if not callable(v_circuit): - raise qml.QuantumFunctionError("V must be a callable quantum function.") + if not callable(v_function): + raise qml.QuantumFunctionError("The argument v_function must be a callable quantum function.") - V = qml.transforms.make_tape(v_circuit)(params[0], v_wires) - self.hyperparameters["v_function"] = v_circuit - self.hyperparameters["V"] = V - self.hyperparameters["v_wires"] = V.wires + self.hyperparameters["v_function"] = v_function + + v_tape = qml.transforms.make_tape(v_function)(params[0], v_wires) + self.hyperparameters["v_tape"] = v_tape + self.hyperparameters["v_wires"] = v_tape.wires if len(u_wires) != len(v_wires): raise qml.QuantumFunctionError("U and V must have the same number of wires.") - if not isinstance(U, qml.tape.QuantumTape): - raise qml.QuantumFunctionError("U must be a quantum tape.") + if not isinstance(u_tape, qml.tape.QuantumTape): + raise qml.QuantumFunctionError("The argument u_tape must be a QuantumTape.") - if not qml.wires.Wires(v_wires).contains_wires(V.wires): - raise qml.QuantumFunctionError("All wires in V must be in v_wires.") + if not qml.wires.Wires(v_wires).contains_wires(v_tape.wires): + raise qml.QuantumFunctionError("All wires in v_tape must be in v_wires.") # Intersection of wires - if len(qml.wires.Wires.shared_wires([U.wires, V.wires])) != 0: - raise qml.QuantumFunctionError("U and V must act on distinct wires.") + if len(qml.wires.Wires.shared_wires([u_tape.wires, v_tape.wires])) != 0: + raise qml.QuantumFunctionError("u_tape and v_tape must act on distinct wires.") wires = qml.wires.Wires(u_wires + v_wires) - self.hyperparameters["n_wires"] = len(wires) super().__init__(*params, wires=wires, do_queue=do_queue, id=id) @property @@ -62,9 +61,10 @@ def num_params(self): @staticmethod def compute_decomposition( - params, wires, n_wires, U, V, v_function=None, v_wires=None + params, wires, u_tape, v_tape, v_function=None, v_wires=None ): # pylint: disable=arguments-differ,unused-argument r"""Representation of the operator as a product of other operators (static method).""" + n_wires = len(u_tape.wires + v_tape.wires) decomp_ops = [] first_range = range(0, int(n_wires / 2)) @@ -80,12 +80,13 @@ def compute_decomposition( decomp_ops.append(qml.CNOT(wires=[i, j])) # Unitary U - for op_u in U.operations: + for op_u in u_tape.operations: + # Define outside this function, it needs to be applied. qml.apply(op_u) decomp_ops.append(op_u) # Unitary V conjugate - for op_v in V.operations: + for op_v in v_tape.operations: decomp_ops.append(op_v.adjoint()) # CNOT second layer @@ -101,23 +102,24 @@ def compute_decomposition( def adjoint(self): adjoint_op = HilbertSchmidt( *self.parameters, - u_circuit=self.hyperparameters["U"], - v_circuit=self.hyperparameters["v_function"], + u_tape=self.hyperparameters["u_tape"], + v_function=self.hyperparameters["v_function"], v_wires=self.hyperparameters["v_wires"], ) adjoint_op.inverse = not self.inverse return adjoint_op + class HilbertSchmidtLocal(HilbertSchmidt): r"""HilbertSchmidt(wires)""" @staticmethod def compute_decomposition( - params, wires, n_wires, U, V, v_function=None, v_wires=None + params, wires, u_tape, v_tape, v_function=None, v_wires=None ): # pylint: disable=arguments-differ,unused-argument r"""Representation of the operator as a product of other operators (static method).""" decomp_ops = [] - + n_wires = len(u_tape.wires + v_tape.wires) first_range = range(0, int(n_wires / 2)) second_range = range(int(n_wires / 2), n_wires) @@ -131,12 +133,12 @@ def compute_decomposition( decomp_ops.append(qml.CNOT(wires=[wires[i], wires[j]])) # Unitary U - for op_u in U.operations: + for op_u in u_tape.operations: qml.apply(op_u) decomp_ops.append(op_u) # Unitary V conjugate - for op_v in V.operations: + for op_v in v_tape.operations: decomp_ops.append(op_v.adjoint()) # Only one CNOT @@ -150,10 +152,9 @@ def compute_decomposition( def adjoint(self): adjoint_op = HilbertSchmidtLocal( *self.parameters, - u_circuit=self.hyperparameters["U"], + u_circuit=self.hyperparameters["u_tape"], v_circuit=self.hyperparameters["v_function"], v_wires=self.hyperparameters["v_wires"], ) adjoint_op.inverse = not self.inverse return adjoint_op - diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py new file mode 100644 index 00000000000..b7f3f98cd5f --- /dev/null +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -0,0 +1,188 @@ +# Copyright 2018-2020 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 qft template. +""" +import pytest + +import numpy as np +import pennylane as qml + + +class TestHilbertSchmidt: + """Tests for the Hilbert Schmidt template.""" + + @pytest.mark.parametrize("inverse", [True, False]) + def test_QFT(self, inverse): + """Test if the QFT matrix is equal to a manually-calculated version for 3 qubits""" + op = qml.QFT(wires=range(3)).inv() if inverse else qml.QFT(wires=range(3)) + res = op.get_matrix() + exp = QFT.conj().T if inverse else QFT + assert np.allclose(res, exp) + + @pytest.mark.parametrize("num_inversions", [1, 2, 3]) + def test_QFT_adjoint_method(self, num_inversions): + """Test the adjoint method of the QFT class""" + op = qml.QFT(wires=range(3)) + + for _ in range(num_inversions): + op = op.adjoint() + + res = op.get_matrix() + inverse = num_inversions % 2 == 1 + exp = QFT.conj().T if inverse else QFT + assert np.allclose(res, exp) + assert op.inverse is inverse + + @pytest.mark.parametrize("n_qubits", range(2, 6)) + def test_QFT_decomposition(self, n_qubits): + """Test if the QFT operation is correctly decomposed""" + op = qml.QFT(wires=range(n_qubits)) + decomp = op.decomposition() + + dev = qml.device("default.qubit", wires=n_qubits) + + out_states = [] + for state in np.eye(2**n_qubits): + dev.reset() + ops = [qml.QubitStateVector(state, wires=range(n_qubits))] + decomp + dev.apply(ops) + out_states.append(dev.state) + + reconstructed_unitary = np.array(out_states).T + expected_unitary = qml.QFT(wires=range(n_qubits)).get_matrix() + + assert np.allclose(reconstructed_unitary, expected_unitary) + + @pytest.mark.parametrize("n_qubits", range(2, 6)) + def test_QFT_adjoint_identity(self, n_qubits, tol): + """Test if using the qml.adjoint transform the resulting operation is + the inverse of QFT.""" + + dev = qml.device("default.qubit", wires=n_qubits) + + @qml.qnode(dev) + def circ(n_qubits): + qml.adjoint(qml.QFT)(wires=range(n_qubits)) + qml.QFT(wires=range(n_qubits)) + return qml.state() + + assert np.allclose(1, circ(n_qubits)[0], tol) + + for i in range(1, n_qubits): + assert np.allclose(0, circ(n_qubits)[i], tol) + + @pytest.mark.parametrize("n_qubits", range(2, 6)) + def test_QFT_adjoint_decomposition(self, n_qubits): # tol + """Test if using the qml.adjoint transform results in the right + decomposition.""" + + # QFT adjoint has right decompositions + qft = qml.QFT(wires=range(n_qubits)) + qft_dec = qft.expand().operations + + expected_op = [x.adjoint() for x in qft_dec] + expected_op.reverse() + + adj = qml.QFT(wires=range(n_qubits)).adjoint() + op = adj.expand().operations + + for j in range(0, len(op)): + assert op[j].name == expected_op[j].name + assert op[j].wires == expected_op[j].wires + assert op[j].parameters == expected_op[j].parameters + + +class TestHilbertSchmidtLocal: + """Tests for the Hilbert Schmidt local template.""" + + @pytest.mark.parametrize("inverse", [True, False]) + def test_QFT(self, inverse): + """Test if the QFT matrix is equal to a manually-calculated version for 3 qubits""" + op = qml.QFT(wires=range(3)).inv() if inverse else qml.QFT(wires=range(3)) + res = op.get_matrix() + exp = QFT.conj().T if inverse else QFT + assert np.allclose(res, exp) + + @pytest.mark.parametrize("num_inversions", [1, 2, 3]) + def test_QFT_adjoint_method(self, num_inversions): + """Test the adjoint method of the QFT class""" + op = qml.QFT(wires=range(3)) + + for _ in range(num_inversions): + op = op.adjoint() + + res = op.get_matrix() + inverse = num_inversions % 2 == 1 + exp = QFT.conj().T if inverse else QFT + assert np.allclose(res, exp) + assert op.inverse is inverse + + @pytest.mark.parametrize("n_qubits", range(2, 6)) + def test_QFT_decomposition(self, n_qubits): + """Test if the QFT operation is correctly decomposed""" + op = qml.QFT(wires=range(n_qubits)) + decomp = op.decomposition() + + dev = qml.device("default.qubit", wires=n_qubits) + + out_states = [] + for state in np.eye(2**n_qubits): + dev.reset() + ops = [qml.QubitStateVector(state, wires=range(n_qubits))] + decomp + dev.apply(ops) + out_states.append(dev.state) + + reconstructed_unitary = np.array(out_states).T + expected_unitary = qml.QFT(wires=range(n_qubits)).get_matrix() + + assert np.allclose(reconstructed_unitary, expected_unitary) + + @pytest.mark.parametrize("n_qubits", range(2, 6)) + def test_QFT_adjoint_identity(self, n_qubits, tol): + """Test if using the qml.adjoint transform the resulting operation is + the inverse of QFT.""" + + dev = qml.device("default.qubit", wires=n_qubits) + + @qml.qnode(dev) + def circ(n_qubits): + qml.adjoint(qml.QFT)(wires=range(n_qubits)) + qml.QFT(wires=range(n_qubits)) + return qml.state() + + assert np.allclose(1, circ(n_qubits)[0], tol) + + for i in range(1, n_qubits): + assert np.allclose(0, circ(n_qubits)[i], tol) + + @pytest.mark.parametrize("n_qubits", range(2, 6)) + def test_QFT_adjoint_decomposition(self, n_qubits): # tol + """Test if using the qml.adjoint transform results in the right + decomposition.""" + + # QFT adjoint has right decompositions + qft = qml.QFT(wires=range(n_qubits)) + qft_dec = qft.expand().operations + + expected_op = [x.adjoint() for x in qft_dec] + expected_op.reverse() + + adj = qml.QFT(wires=range(n_qubits)).adjoint() + op = adj.expand().operations + + for j in range(0, len(op)): + assert op[j].name == expected_op[j].name + assert op[j].wires == expected_op[j].wires + assert op[j].parameters == expected_op[j].parameters From aac612a5f55925a826d31f942b956b620453aab7 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Tue, 5 Apr 2022 15:08:06 -0400 Subject: [PATCH 04/48] Update image --- doc/_static/templates/subroutines/hst.pdf | Bin 0 -> 189641 bytes .../templates/subroutines/hilbert_schmidt.py | 90 ++++++++++++++++-- 2 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 doc/_static/templates/subroutines/hst.pdf diff --git a/doc/_static/templates/subroutines/hst.pdf b/doc/_static/templates/subroutines/hst.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cdf1e64bf198e1b9c527dacd75b21be3df70598c GIT binary patch literal 189641 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

d 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 lf(ns`_ + """ num_wires = AnyWires grad_method = None @@ -30,11 +88,13 @@ def __init__(self, *params, v_function, v_wires, u_tape, do_queue=True, id=None) self.hyperparameters["u_tape"] = u_tape if not callable(v_function): - raise qml.QuantumFunctionError("The argument v_function must be a callable quantum function.") + raise qml.QuantumFunctionError( + "The argument v_function must be a callable quantum function." + ) self.hyperparameters["v_function"] = v_function - v_tape = qml.transforms.make_tape(v_function)(params[0], v_wires) + v_tape = qml.transforms.make_tape(v_function)(*params) self.hyperparameters["v_tape"] = v_tape self.hyperparameters["v_wires"] = v_tape.wires @@ -61,7 +121,7 @@ def num_params(self): @staticmethod def compute_decomposition( - params, wires, u_tape, v_tape, v_function=None, v_wires=None + params, wires, u_tape, v_tape, v_function=None, v_wires=None ): # pylint: disable=arguments-differ,unused-argument r"""Representation of the operator as a product of other operators (static method).""" n_wires = len(u_tape.wires + v_tape.wires) @@ -111,11 +171,27 @@ def adjoint(self): class HilbertSchmidtLocal(HilbertSchmidt): - r"""HilbertSchmidt(wires)""" + r"""Create a Local Hilbert Schmidt template that can be used to compute the Local Hilbert Schmidt Test. Where the + cost is defined by: + + .. math:: L_{HST} = 1 - \frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2 + + Args: + v_params (array): Parameters for the quantum function V. + v_function (Callable): Quantum function that represents the approximate compiled unitary. + v_wires (int or Iterable[Number, str]]): the wire(s) the approximate compiled unitary act on. + u_tape (.QuantumTape): The unitary to be compiled as a ``qml.tape.QuantumTape``. + + **Reference** + + [1] Sumeet Khatri, Ryan LaRose, Alexander Poremba, Lukasz Cincio, Andrew T. Sornborger and Patrick J. Coles + Quantum-assisted Quantum Compiling. + `arxiv/1807.00800 `_ + """ @staticmethod def compute_decomposition( - params, wires, u_tape, v_tape, v_function=None, v_wires=None + params, wires, u_tape, v_tape, v_function=None, v_wires=None ): # pylint: disable=arguments-differ,unused-argument r"""Representation of the operator as a product of other operators (static method).""" decomp_ops = [] @@ -153,7 +229,7 @@ def adjoint(self): adjoint_op = HilbertSchmidtLocal( *self.parameters, u_circuit=self.hyperparameters["u_tape"], - v_circuit=self.hyperparameters["v_function"], + v_function=self.hyperparameters["v_function"], v_wires=self.hyperparameters["v_wires"], ) adjoint_op.inverse = not self.inverse From 5662499f4ccf006eb775aca202eaafe2fac48efd Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Tue, 5 Apr 2022 15:12:24 -0400 Subject: [PATCH 05/48] Change image --- pennylane/templates/subroutines/hilbert_schmidt.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 95c8b19ec1f..7df6790d3a8 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -32,9 +32,9 @@ class HilbertSchmidt(Operation): equivalent to take the probability of having the state :math:`|m\rangle`for the following circuit: .. figure:: ../../_static/templates/subroutines/hst.pdf - :align: center - :width: 60% - :target: javascript:void(0); + :align: center + :width: 60% + :target: javascript:void(0); It defines our decomposition for the Hilbert Schmidt Test template. From 5578905e62fc9969041591f50a8df5f584451091 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Tue, 5 Apr 2022 15:58:58 -0400 Subject: [PATCH 06/48] Update doc --- doc/_static/templates/subroutines/hst.png | Bin 0 -> 91845 bytes .../templates/subroutines/hilbert_schmidt.py | 20 ++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 doc/_static/templates/subroutines/hst.png diff --git a/doc/_static/templates/subroutines/hst.png b/doc/_static/templates/subroutines/hst.png new file mode 100644 index 0000000000000000000000000000000000000000..41c58a3973fd1492d7924ae3332b6cd4a49d44f6 GIT binary patch literal 91845 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 literal 0 HcmV?d00001 diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 7df6790d3a8..3fccac42b90 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -26,12 +26,12 @@ class HilbertSchmidt(Operation): Therefore we can define a cost by: .. math:: - C_{HST} = 1 - \frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2 + C_{HST} = 1 - \frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2, - where the quantity :math:`\frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2` is the Hilbert Schmidt Test. This is - equivalent to take the probability of having the state :math:`|m\rangle`for the following circuit: + where the quantity :math:`\frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2` is the Hilbert Schmidt Test. It is + equivalent to taking the outcome probability of the state :math:`|0 ... 0\rangle` for the following circuit: - .. figure:: ../../_static/templates/subroutines/hst.pdf + .. figure:: ../../_static/templates/subroutines/hst.png :align: center :width: 60% :target: javascript:void(0); @@ -45,11 +45,14 @@ class HilbertSchmidt(Operation): u_tape (.QuantumTape): U, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: - QuantumFunctionError: + QuantumFunctionError: ``v_function`` is not a valid Quantum function. + QuantumFunctionError: `U` and `V` do not have the same number of wires. + QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. .. UsageDetails:: - Consider the matrix corresponding to a rotation from an :class:`~.RX` gate: + Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary U and its approximate + unitary V. .. code-block:: python @@ -72,6 +75,11 @@ def hilbert_test(v_params, v_function, v_wires, u_tape): def cost_hst(parameters, v_function, v_wires, u_tape): return (1 - hilbert_test(v_params=parameters, v_function=v_function, v_wires=v_wires, u_tape=u_tape)[0]) + Now that you have defined your cost function you can call it for specific parameters. + + >>> cost_hst([0], v_function = v_circuit, v_wires = [1], u_tape = U) + 1 + **Reference** From 2094befbd96848441f05dbd0e8899a2995b436cb Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Tue, 5 Apr 2022 16:24:24 -0400 Subject: [PATCH 07/48] LHST documentation --- .../templates/subroutines/hilbert_schmidt.py | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 3fccac42b90..35821625834 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -14,15 +14,15 @@ """ This submodule contains the templates for Hilbert Schmidt tests. """ - +# pylint: disable-msg=too-many-arguments import pennylane as qml from pennylane.operation import AnyWires, Operation class HilbertSchmidt(Operation): r"""Create a Hilbert Schmidt template that can be used to compute the Hilbert Schmidt Test (HST). The HST is a - useful quantity used when we want to compile an unitary U with an approximate unitary V. The HST is used as a - distance between U and V, the value of the HST is 0 if and only if V is equal to U (up to global phase). + useful quantity used when we want to compile an unitary `U` with an approximate unitary `V`. The HST is used as a + distance between `U` and `V`, the value of the HST is 0 if and only if `V` is equal to `U` (up to global phase). Therefore we can define a cost by: .. math:: @@ -39,10 +39,10 @@ class HilbertSchmidt(Operation): It defines our decomposition for the Hilbert Schmidt Test template. Args: - v_params (array): Parameters for the quantum function V. - v_function (Callable): Quantum function that represents the approximate compiled unitary V. + v_params (array): Parameters for the quantum function `V`. + v_function (Callable): Quantum function that represents the approximate compiled unitary `V`. v_wires (int or Iterable[Number, str]]): the wire(s) the approximate compiled unitary act on. - u_tape (.QuantumTape): U, the unitary to be compiled as a ``qml.tape.QuantumTape``. + u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: QuantumFunctionError: ``v_function`` is not a valid Quantum function. @@ -51,8 +51,10 @@ class HilbertSchmidt(Operation): .. UsageDetails:: - Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary U and its approximate - unitary V. + Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary `U` and an approximate + unitary `V`. We need to define some functions where it is possible to use the ``.HilbertSchmidt`` template. + Here the considered unitary is ``Hadamard`` and we try to compute the cost for the approximate unitary ``RZ``. + For an angle which is equal to 0 (identity), we have the maximal cost which is 1. .. code-block:: python @@ -167,7 +169,7 @@ def compute_decomposition( decomp_ops.append(qml.Hadamard(wire)) return decomp_ops - def adjoint(self): + def adjoint(self): # pylint: disable=arguments-differ adjoint_op = HilbertSchmidt( *self.parameters, u_tape=self.hyperparameters["u_tape"], @@ -179,16 +181,22 @@ def adjoint(self): class HilbertSchmidtLocal(HilbertSchmidt): - r"""Create a Local Hilbert Schmidt template that can be used to compute the Local Hilbert Schmidt Test. Where the - cost is defined by: - - .. math:: L_{HST} = 1 - \frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2 + r"""Create a Local Hilbert Schmidt template that can be used to compute the Local Hilbert Schmidt Test (LHST). + The LHST is a useful quantity used when we want to compile an unitary `U` with an approximate unitary `V`. The + LHST is used as a distance between `U` and `V`, it is similar to the Hilbert schmidt test but the measurement is + made only on one qubit at the end of the circuit. The LHST cost is always smaller than the HST cost and is useful + for large unitaries. Args: - v_params (array): Parameters for the quantum function V. - v_function (Callable): Quantum function that represents the approximate compiled unitary. + v_params (array): Parameters for the quantum function `V`. + v_function (Callable): Quantum function that represents the approximate compiled unitary `V`. v_wires (int or Iterable[Number, str]]): the wire(s) the approximate compiled unitary act on. - u_tape (.QuantumTape): The unitary to be compiled as a ``qml.tape.QuantumTape``. + u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. + + Raises: + QuantumFunctionError: ``v_function`` is not a valid Quantum function. + QuantumFunctionError: `U` and `V` do not have the same number of wires. + QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. **Reference** @@ -233,7 +241,7 @@ def compute_decomposition( return decomp_ops - def adjoint(self): + def adjoint(self): # pylint: disable=arguments-differ adjoint_op = HilbertSchmidtLocal( *self.parameters, u_circuit=self.hyperparameters["u_tape"], From 70ef92172af260da71d18895ce706b702f007b01 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Tue, 5 Apr 2022 17:18:22 -0400 Subject: [PATCH 08/48] Add test --- .../test_subroutines/test_hilbert_schmidt.py | 283 ++++++++---------- 1 file changed, 120 insertions(+), 163 deletions(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index b7f3f98cd5f..6782ffcdc5f 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -23,166 +23,123 @@ class TestHilbertSchmidt: """Tests for the Hilbert Schmidt template.""" - @pytest.mark.parametrize("inverse", [True, False]) - def test_QFT(self, inverse): - """Test if the QFT matrix is equal to a manually-calculated version for 3 qubits""" - op = qml.QFT(wires=range(3)).inv() if inverse else qml.QFT(wires=range(3)) - res = op.get_matrix() - exp = QFT.conj().T if inverse else QFT - assert np.allclose(res, exp) - - @pytest.mark.parametrize("num_inversions", [1, 2, 3]) - def test_QFT_adjoint_method(self, num_inversions): - """Test the adjoint method of the QFT class""" - op = qml.QFT(wires=range(3)) - - for _ in range(num_inversions): - op = op.adjoint() - - res = op.get_matrix() - inverse = num_inversions % 2 == 1 - exp = QFT.conj().T if inverse else QFT - assert np.allclose(res, exp) - assert op.inverse is inverse - - @pytest.mark.parametrize("n_qubits", range(2, 6)) - def test_QFT_decomposition(self, n_qubits): - """Test if the QFT operation is correctly decomposed""" - op = qml.QFT(wires=range(n_qubits)) - decomp = op.decomposition() - - dev = qml.device("default.qubit", wires=n_qubits) - - out_states = [] - for state in np.eye(2**n_qubits): - dev.reset() - ops = [qml.QubitStateVector(state, wires=range(n_qubits))] + decomp - dev.apply(ops) - out_states.append(dev.state) - - reconstructed_unitary = np.array(out_states).T - expected_unitary = qml.QFT(wires=range(n_qubits)).get_matrix() - - assert np.allclose(reconstructed_unitary, expected_unitary) - - @pytest.mark.parametrize("n_qubits", range(2, 6)) - def test_QFT_adjoint_identity(self, n_qubits, tol): - """Test if using the qml.adjoint transform the resulting operation is - the inverse of QFT.""" - - dev = qml.device("default.qubit", wires=n_qubits) - - @qml.qnode(dev) - def circ(n_qubits): - qml.adjoint(qml.QFT)(wires=range(n_qubits)) - qml.QFT(wires=range(n_qubits)) - return qml.state() - - assert np.allclose(1, circ(n_qubits)[0], tol) - - for i in range(1, n_qubits): - assert np.allclose(0, circ(n_qubits)[i], tol) - - @pytest.mark.parametrize("n_qubits", range(2, 6)) - def test_QFT_adjoint_decomposition(self, n_qubits): # tol - """Test if using the qml.adjoint transform results in the right - decomposition.""" - - # QFT adjoint has right decompositions - qft = qml.QFT(wires=range(n_qubits)) - qft_dec = qft.expand().operations - - expected_op = [x.adjoint() for x in qft_dec] - expected_op.reverse() - - adj = qml.QFT(wires=range(n_qubits)).adjoint() - op = adj.expand().operations - - for j in range(0, len(op)): - assert op[j].name == expected_op[j].name - assert op[j].wires == expected_op[j].wires - assert op[j].parameters == expected_op[j].parameters - - -class TestHilbertSchmidtLocal: - """Tests for the Hilbert Schmidt local template.""" - - @pytest.mark.parametrize("inverse", [True, False]) - def test_QFT(self, inverse): - """Test if the QFT matrix is equal to a manually-calculated version for 3 qubits""" - op = qml.QFT(wires=range(3)).inv() if inverse else qml.QFT(wires=range(3)) - res = op.get_matrix() - exp = QFT.conj().T if inverse else QFT - assert np.allclose(res, exp) - - @pytest.mark.parametrize("num_inversions", [1, 2, 3]) - def test_QFT_adjoint_method(self, num_inversions): - """Test the adjoint method of the QFT class""" - op = qml.QFT(wires=range(3)) - - for _ in range(num_inversions): - op = op.adjoint() - - res = op.get_matrix() - inverse = num_inversions % 2 == 1 - exp = QFT.conj().T if inverse else QFT - assert np.allclose(res, exp) - assert op.inverse is inverse - - @pytest.mark.parametrize("n_qubits", range(2, 6)) - def test_QFT_decomposition(self, n_qubits): - """Test if the QFT operation is correctly decomposed""" - op = qml.QFT(wires=range(n_qubits)) - decomp = op.decomposition() - - dev = qml.device("default.qubit", wires=n_qubits) - - out_states = [] - for state in np.eye(2**n_qubits): - dev.reset() - ops = [qml.QubitStateVector(state, wires=range(n_qubits))] + decomp - dev.apply(ops) - out_states.append(dev.state) - - reconstructed_unitary = np.array(out_states).T - expected_unitary = qml.QFT(wires=range(n_qubits)).get_matrix() - - assert np.allclose(reconstructed_unitary, expected_unitary) - - @pytest.mark.parametrize("n_qubits", range(2, 6)) - def test_QFT_adjoint_identity(self, n_qubits, tol): - """Test if using the qml.adjoint transform the resulting operation is - the inverse of QFT.""" - - dev = qml.device("default.qubit", wires=n_qubits) - - @qml.qnode(dev) - def circ(n_qubits): - qml.adjoint(qml.QFT)(wires=range(n_qubits)) - qml.QFT(wires=range(n_qubits)) - return qml.state() - - assert np.allclose(1, circ(n_qubits)[0], tol) - - for i in range(1, n_qubits): - assert np.allclose(0, circ(n_qubits)[i], tol) - - @pytest.mark.parametrize("n_qubits", range(2, 6)) - def test_QFT_adjoint_decomposition(self, n_qubits): # tol - """Test if using the qml.adjoint transform results in the right - decomposition.""" - - # QFT adjoint has right decompositions - qft = qml.QFT(wires=range(n_qubits)) - qft_dec = qft.expand().operations - - expected_op = [x.adjoint() for x in qft_dec] - expected_op.reverse() - - adj = qml.QFT(wires=range(n_qubits)).adjoint() - op = adj.expand().operations - - for j in range(0, len(op)): - assert op[j].name == expected_op[j].name - assert op[j].wires == expected_op[j].wires - assert op[j].parameters == expected_op[j].parameters + def test_HS_decomposition_1_qubit(self): + """Test if the HS operation is correctly decomposed""" + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + op = qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U) + + with qml.tape.QuantumTape() as tape_dec: + op.decomposition() + + expected_operations = [ + qml.Hadamard(wires=[0]), + qml.CNOT(wires=[0, 1]), + qml.Hadamard(wires=[0]), + qml.RZ(-0.1, wires=[1]), + qml.CNOT(wires=[0, 1]), + qml.Hadamard(wires=[0]), + ] + for i, j in zip(tape_dec.operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + + def test_HS_decomposition_2_qubit(self): + """Test if the HS operation is correctly decomposed""" + with qml.tape.QuantumTape(do_queue=False) as U: + qml.SWAP(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=2) + qml.CNOT(wires=[2, 3]) + + op = qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[2, 3], u_tape=U) + + with qml.tape.QuantumTape() as tape_dec: + op.decomposition() + + expected_operations = [ + qml.Hadamard(wires=[0]), + qml.Hadamard(wires=[1]), + qml.CNOT(wires=[0, 2]), + qml.CNOT(wires=[1, 3]), + qml.SWAP(wires=[0, 1]), + qml.RZ(-0.1, wires=[2]), + qml.CNOT(wires=[2, 3]), + qml.CNOT(wires=[1, 3]), + qml.CNOT(wires=[0, 2]), + qml.Hadamard(wires=[0]), + qml.Hadamard(wires=[1]), + ] + + for i, j in zip(tape_dec.operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + + +class TestLocalHilbertSchmidt: + """Tests for the Local Hilbert Schmidt template.""" + + def test_lhs_decomposition_1_qubit(self): + """Test if the LHS operation is correctly decomposed""" + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + op = qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U) + + with qml.tape.QuantumTape() as tape_dec: + op.decomposition() + + expected_operations = [ + qml.Hadamard(wires=[0]), + qml.CNOT(wires=[0, 1]), + qml.Hadamard(wires=[0]), + qml.RZ(-0.1, wires=[1]), + qml.CNOT(wires=[0, 1]), + qml.Hadamard(wires=[0]), + ] + + for i, j in zip(tape_dec.operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + + def test_HS_decomposition_2_qubit(self): + """Test if the HS operation is correctly decomposed""" + with qml.tape.QuantumTape(do_queue=False) as U: + qml.SWAP(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=2) + qml.CNOT(wires=[2, 3]) + + op = qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=[2, 3], u_tape=U) + + with qml.tape.QuantumTape() as tape_dec: + op.decomposition() + + expected_operations = [ + qml.Hadamard(wires=[0]), + qml.Hadamard(wires=[1]), + qml.CNOT(wires=[0, 2]), + qml.CNOT(wires=[1, 3]), + qml.SWAP(wires=[0, 1]), + qml.RZ(-0.1, wires=[2]), + qml.CNOT(wires=[2, 3]), + qml.CNOT(wires=[0, 2]), + qml.Hadamard(wires=[0]), + ] + + for i, j in zip(tape_dec.operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires From 8fe65e5602550945679cdb6d70805679c58de942 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 7 Apr 2022 09:37:48 -0400 Subject: [PATCH 09/48] Update --- pennylane/templates/subroutines/__init__.py | 2 +- .../templates/subroutines/hilbert_schmidt.py | 6 +- .../test_subroutines/test_hilbert_schmidt.py | 128 +++++++++++++++++- 3 files changed, 126 insertions(+), 10 deletions(-) diff --git a/pennylane/templates/subroutines/__init__.py b/pennylane/templates/subroutines/__init__.py index bbba2a2b0ca..122a91278eb 100644 --- a/pennylane/templates/subroutines/__init__.py +++ b/pennylane/templates/subroutines/__init__.py @@ -30,4 +30,4 @@ from .grover import GroverOperator from .qft import QFT from .kupccgsd import kUpCCGSD -from .hilbert_schmidt import HilbertSchmidt, HilbertSchmidtLocal +from .hilbert_schmidt import HilbertSchmidt, LocalHilbertSchmidt diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 35821625834..46735354e95 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -180,7 +180,7 @@ def adjoint(self): # pylint: disable=arguments-differ return adjoint_op -class HilbertSchmidtLocal(HilbertSchmidt): +class LocalHilbertSchmidt(HilbertSchmidt): r"""Create a Local Hilbert Schmidt template that can be used to compute the Local Hilbert Schmidt Test (LHST). The LHST is a useful quantity used when we want to compile an unitary `U` with an approximate unitary `V`. The LHST is used as a distance between `U` and `V`, it is similar to the Hilbert schmidt test but the measurement is @@ -242,9 +242,9 @@ def compute_decomposition( return decomp_ops def adjoint(self): # pylint: disable=arguments-differ - adjoint_op = HilbertSchmidtLocal( + adjoint_op = LocalHilbertSchmidt( *self.parameters, - u_circuit=self.hyperparameters["u_tape"], + u_tape=self.hyperparameters["u_tape"], v_function=self.hyperparameters["v_function"], v_wires=self.hyperparameters["v_wires"], ) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index 6782ffcdc5f..fad09d33771 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -23,8 +23,8 @@ class TestHilbertSchmidt: """Tests for the Hilbert Schmidt template.""" - def test_HS_decomposition_1_qubit(self): - """Test if the HS operation is correctly decomposed""" + def test_hs_decomposition_1_qubit(self): + """Test if the HS operation is correctly decomposed for 1 qubit.""" with qml.tape.QuantumTape(do_queue=False) as U: qml.Hadamard(wires=0) @@ -49,8 +49,34 @@ def v_circuit(params): assert i.data == j.data assert i.wires == j.wires - def test_HS_decomposition_2_qubit(self): - """Test if the HS operation is correctly decomposed""" + def test_hs_adjoint_method(self): + """Test the adjoint method of the HS operation for 1 qubit.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.RX(0.3, wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + adj = qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U).adjoint() + operations = adj.expand().operations + + expected_operations = [ + qml.Hadamard(wires=[0]), + qml.CNOT(wires=[0, 1]), + qml.RZ(0.1, wires=[1]), + qml.RX(-0.3, wires=[0]), + qml.CNOT(wires=[0, 1]), + qml.Hadamard(wires=[0]), + ] + + for i, j in zip(operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + + def test_hs_decomposition_2_qubits(self): + """Test if the HS operation is correctly decomposed for 2 qubits.""" with qml.tape.QuantumTape(do_queue=False) as U: qml.SWAP(wires=[0, 1]) @@ -82,6 +108,38 @@ def v_circuit(params): assert i.data == j.data assert i.wires == j.wires + def test_hs_adjoint_method_2_qubits(self): + """Test the adjoint method of the HS operations for 2 qubits.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.SWAP(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=2) + qml.CNOT(wires=[2, 3]) + + adj = qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[2, 3], u_tape=U).adjoint() + operations = adj.expand().operations + + expected_operations = [ + qml.Hadamard(wires=[1]), + qml.Hadamard(wires=[0]), + qml.CNOT(wires=[0, 2]), + qml.CNOT(wires=[1, 3]), + qml.CNOT(wires=[2, 3]), + qml.RZ(0.1, wires=[2]), + qml.SWAP(wires=[0, 1]), + qml.CNOT(wires=[1, 3]), + qml.CNOT(wires=[0, 2]), + qml.Hadamard(wires=[1]), + qml.Hadamard(wires=[0]), + ] + + for i, j in zip(operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + class TestLocalHilbertSchmidt: """Tests for the Local Hilbert Schmidt template.""" @@ -113,8 +171,34 @@ def v_circuit(params): assert i.data == j.data assert i.wires == j.wires - def test_HS_decomposition_2_qubit(self): - """Test if the HS operation is correctly decomposed""" + def test_lhs_adjoint_method_1_qubit(self): + """Test the adjoint method of the LHS operation for 1 qubit.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.RX(0.3, wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + adj = qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U).adjoint() + operations = adj.expand().operations + + expected_operations = [ + qml.Hadamard(wires=[0]), + qml.CNOT(wires=[0, 1]), + qml.RZ(0.1, wires=[1]), + qml.RX(-0.3, wires=[0]), + qml.CNOT(wires=[0, 1]), + qml.Hadamard(wires=[0]), + ] + + for i, j in zip(operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + + def test_lhs_decomposition_2_qubits(self): + """Test if the LHS operation is correctly decomposed for 2 qubits.""" with qml.tape.QuantumTape(do_queue=False) as U: qml.SWAP(wires=[0, 1]) @@ -143,3 +227,35 @@ def v_circuit(params): assert i.name == j.name assert i.data == j.data assert i.wires == j.wires + + def test_lhs_adjoint_method_2_qubits(self): + """Test the adjoint method of the LHS operation for 2 qubits.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.SWAP(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=2) + qml.CNOT(wires=[2, 3]) + + adj = qml.LocalHilbertSchmidt( + [0.1], v_function=v_circuit, v_wires=[2, 3], u_tape=U + ).adjoint() + operations = adj.expand().operations + + expected_operations = [ + qml.Hadamard(wires=[0]), + qml.CNOT(wires=[0, 2]), + qml.CNOT(wires=[2, 3]), + qml.RZ(0.1, wires=[2]), + qml.SWAP(wires=[0, 1]), + qml.CNOT(wires=[1, 3]), + qml.CNOT(wires=[0, 2]), + qml.Hadamard(wires=[1]), + qml.Hadamard(wires=[0]), + ] + + for i, j in zip(operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires From 2635ce6ac8f4253d6cc6e514e522188bc1b1131c Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 7 Apr 2022 10:24:08 -0400 Subject: [PATCH 10/48] Add test for errors. --- .../test_subroutines/test_hilbert_schmidt.py | 143 +++++++++++++++++- 1 file changed, 142 insertions(+), 1 deletion(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index fad09d33771..019a9355bff 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -16,7 +16,6 @@ """ import pytest -import numpy as np import pennylane as qml @@ -140,6 +139,77 @@ def v_circuit(params): assert i.data == j.data assert i.wires == j.wires + def test_v_not_quantum_function(self): + """Test that we cannot pass a non quantum function to the HS operation""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + with qml.tape.QuantumTape(do_queue=False) as v_circuit: + qml.RZ(0.1, wires=1) + + with pytest.raises( + qml.QuantumFunctionError, + match="The argument v_function must be a callable quantum " "function.", + ): + qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U) + + def test_u_v_same_number_of_wires(self): + """Test that U and V must have the same number of wires.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.CNOT(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + with pytest.raises( + qml.QuantumFunctionError, match="U and V must have the same number of wires." + ): + qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[2], u_tape=U) + + def test_u_quantum_tape(self): + """Test that U must be a quantum tape.""" + + def u_circuit(): + qml.CNOT(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + with pytest.raises( + qml.QuantumFunctionError, match="The argument u_tape must be a QuantumTape." + ): + qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=u_circuit) + + def test_v_wires(self): + """Test that all wires in V are also in v_wires.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=2) + + with pytest.raises( + qml.QuantumFunctionError, match="All wires in v_tape must be in v_wires." + ): + qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U) + + def test_distinct_wires(self): + """Test that U and V have distinct wires.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=0) + + with pytest.raises( + qml.QuantumFunctionError, match="u_tape and v_tape must act on distinct wires." + ): + qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=[0], u_tape=U) + class TestLocalHilbertSchmidt: """Tests for the Local Hilbert Schmidt template.""" @@ -259,3 +329,74 @@ def v_circuit(params): assert i.name == j.name assert i.data == j.data assert i.wires == j.wires + + def test_v_not_quantum_function(self): + """Test that we cannot pass a non quantum function to the HS operation""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + with qml.tape.QuantumTape(do_queue=False) as v_circuit: + qml.RZ(0.1, wires=1) + + with pytest.raises( + qml.QuantumFunctionError, + match="The argument v_function must be a callable quantum " "function.", + ): + qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U) + + def test_u_v_same_number_of_wires(self): + """Test that U and V must have the same number of wires.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.CNOT(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + with pytest.raises( + qml.QuantumFunctionError, match="U and V must have the same number of wires." + ): + qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=[2], u_tape=U) + + def test_u_quantum_tape(self): + """Test that U must be a quantum tape.""" + + def u_circuit(): + qml.CNOT(wires=[0, 1]) + + def v_circuit(params): + qml.RZ(params[0], wires=1) + + with pytest.raises( + qml.QuantumFunctionError, match="The argument u_tape must be a QuantumTape." + ): + qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=u_circuit) + + def test_v_wires(self): + """Test that all wires in V are also in v_wires.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=2) + + with pytest.raises( + qml.QuantumFunctionError, match="All wires in v_tape must be in v_wires." + ): + qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=[1], u_tape=U) + + def test_distinct_wires(self): + """Test that U and V have distinct wires.""" + + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires=0) + + def v_circuit(params): + qml.RZ(params[0], wires=0) + + with pytest.raises( + qml.QuantumFunctionError, match="u_tape and v_tape must act on distinct wires." + ): + qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=[0], u_tape=U) From 2b6427d49413031894cbe916868917310cbc965a Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 7 Apr 2022 11:04:34 -0400 Subject: [PATCH 11/48] Forgot add --- pennylane/templates/subroutines/hilbert_schmidt.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 46735354e95..10f333c83c5 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -94,6 +94,9 @@ def cost_hst(parameters, v_function, v_wires, u_tape): def __init__(self, *params, v_function, v_wires, u_tape, do_queue=True, id=None): + if not isinstance(u_tape, qml.tape.QuantumTape): + raise qml.QuantumFunctionError("The argument u_tape must be a QuantumTape.") + u_wires = u_tape.wires self.hyperparameters["u_tape"] = u_tape @@ -111,9 +114,6 @@ def __init__(self, *params, v_function, v_wires, u_tape, do_queue=True, id=None) if len(u_wires) != len(v_wires): raise qml.QuantumFunctionError("U and V must have the same number of wires.") - if not isinstance(u_tape, qml.tape.QuantumTape): - raise qml.QuantumFunctionError("The argument u_tape must be a QuantumTape.") - if not qml.wires.Wires(v_wires).contains_wires(v_tape.wires): raise qml.QuantumFunctionError("All wires in v_tape must be in v_wires.") From 3a16c256a20336d15a2407902b3eb4906525dcb0 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 7 Apr 2022 11:37:44 -0400 Subject: [PATCH 12/48] Change doc --- pennylane/templates/subroutines/hilbert_schmidt.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 10f333c83c5..b5ef39a52af 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -39,15 +39,17 @@ class HilbertSchmidt(Operation): It defines our decomposition for the Hilbert Schmidt Test template. Args: - v_params (array): Parameters for the quantum function `V`. + params (array): Parameters for the quantum function `V`. v_function (Callable): Quantum function that represents the approximate compiled unitary `V`. v_wires (int or Iterable[Number, str]]): the wire(s) the approximate compiled unitary act on. u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: + QuantumFunctionError: The argument u_tape must be a QuantumTape. QuantumFunctionError: ``v_function`` is not a valid Quantum function. QuantumFunctionError: `U` and `V` do not have the same number of wires. QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. + QuantumFunctionError: u_tape and v_tape must act on distinct wires. .. UsageDetails:: @@ -188,15 +190,17 @@ class LocalHilbertSchmidt(HilbertSchmidt): for large unitaries. Args: - v_params (array): Parameters for the quantum function `V`. + params (array): Parameters for the quantum function `V`. v_function (Callable): Quantum function that represents the approximate compiled unitary `V`. v_wires (int or Iterable[Number, str]]): the wire(s) the approximate compiled unitary act on. u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: + QuantumFunctionError: The argument u_tape must be a QuantumTape. QuantumFunctionError: ``v_function`` is not a valid Quantum function. QuantumFunctionError: `U` and `V` do not have the same number of wires. QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. + QuantumFunctionError: u_tape and v_tape must act on distinct wires. **Reference** From c978edf3072e8361e2f6efee79f8df7929738e1f Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 18:59:30 +0200 Subject: [PATCH 13/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index b5ef39a52af..ebea2af8740 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. """ -This submodule contains the templates for Hilbert Schmidt tests. +This submodule contains the templates for the Hilbert-Schmidt tests. """ # pylint: disable-msg=too-many-arguments import pennylane as qml From cd1552720fcac9eafde091c7e42abc5ba1fdff1a Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:00:18 +0200 Subject: [PATCH 14/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index ebea2af8740..7406c9e7c6a 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -22,7 +22,7 @@ class HilbertSchmidt(Operation): r"""Create a Hilbert Schmidt template that can be used to compute the Hilbert Schmidt Test (HST). The HST is a useful quantity used when we want to compile an unitary `U` with an approximate unitary `V`. The HST is used as a - distance between `U` and `V`, the value of the HST is 0 if and only if `V` is equal to `U` (up to global phase). + distance between `U` and `V`, the result of executing the HST is 0 if and only if `V` is equal to `U` (up to a global phase). Therefore we can define a cost by: .. math:: From 51688f57d4d5caf3022238444dc2b631b890a5aa Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:00:29 +0200 Subject: [PATCH 15/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 7406c9e7c6a..2d28fecdd20 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -28,7 +28,7 @@ class HilbertSchmidt(Operation): .. math:: C_{HST} = 1 - \frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2, - where the quantity :math:`\frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2` is the Hilbert Schmidt Test. It is + where the quantity :math:`\frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2` is obtained by executing the Hilbert-Schmidt Test. It is equivalent to taking the outcome probability of the state :math:`|0 ... 0\rangle` for the following circuit: .. figure:: ../../_static/templates/subroutines/hst.png From 07e9c2d182121721b54127147e1811381171653c Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:00:40 +0200 Subject: [PATCH 16/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 2d28fecdd20..c99b5db90a4 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -33,7 +33,7 @@ class HilbertSchmidt(Operation): .. figure:: ../../_static/templates/subroutines/hst.png :align: center - :width: 60% + :width: 80% :target: javascript:void(0); It defines our decomposition for the Hilbert Schmidt Test template. From 0e75719837d64bd7d948ad4b4a46df9c5513db57 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:00:56 +0200 Subject: [PATCH 17/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index c99b5db90a4..5dc05b03029 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -40,7 +40,7 @@ class HilbertSchmidt(Operation): Args: params (array): Parameters for the quantum function `V`. - v_function (Callable): Quantum function that represents the approximate compiled unitary `V`. + v_function (callable): Quantum function that represents the approximate compiled unitary `V`. v_wires (int or Iterable[Number, str]]): the wire(s) the approximate compiled unitary act on. u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. From 41efe25f79d13af3632f772647560900b4d13f0d Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:01:01 +0200 Subject: [PATCH 18/48] Update tests/templates/test_subroutines/test_hilbert_schmidt.py Co-authored-by: antalszava --- tests/templates/test_subroutines/test_hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index 019a9355bff..c432edf32f0 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -212,7 +212,7 @@ def v_circuit(params): class TestLocalHilbertSchmidt: - """Tests for the Local Hilbert Schmidt template.""" + """Tests for the Local Hilbert-Schmidt template.""" def test_lhs_decomposition_1_qubit(self): """Test if the LHS operation is correctly decomposed""" From bca4f751720109686cba4afc032616a840a6c5ce Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:01:06 +0200 Subject: [PATCH 19/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 5dc05b03029..35922ac6ee7 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -36,7 +36,7 @@ class HilbertSchmidt(Operation): :width: 80% :target: javascript:void(0); - It defines our decomposition for the Hilbert Schmidt Test template. + It defines our decomposition for the Hilbert-Schmidt Test template. Args: params (array): Parameters for the quantum function `V`. From 873c06caf67d2bf78ff68788282dbbcd8c5534ea Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:01:16 +0200 Subject: [PATCH 20/48] Update tests/templates/test_subroutines/test_hilbert_schmidt.py Co-authored-by: antalszava --- tests/templates/test_subroutines/test_hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index c432edf32f0..22e9dd39e89 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -23,7 +23,7 @@ class TestHilbertSchmidt: """Tests for the Hilbert Schmidt template.""" def test_hs_decomposition_1_qubit(self): - """Test if the HS operation is correctly decomposed for 1 qubit.""" + """Test if the HS operation is correctly decomposed for a 1 qubit unitary.""" with qml.tape.QuantumTape(do_queue=False) as U: qml.Hadamard(wires=0) From baec50debf5a9ec5d8d89f97bf4a866422596249 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:01:20 +0200 Subject: [PATCH 21/48] Update tests/templates/test_subroutines/test_hilbert_schmidt.py Co-authored-by: antalszava --- tests/templates/test_subroutines/test_hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index 22e9dd39e89..d3c1d45e221 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -49,7 +49,7 @@ def v_circuit(params): assert i.wires == j.wires def test_hs_adjoint_method(self): - """Test the adjoint method of the HS operation for 1 qubit.""" + """Test the adjoint method of the HS operation for a 1 qubit unitary.""" with qml.tape.QuantumTape(do_queue=False) as U: qml.RX(0.3, wires=0) From ac596abc4508d088ddb3b5ed72263497e981f0b1 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:01:46 +0200 Subject: [PATCH 22/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 35922ac6ee7..042f45e2576 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -41,7 +41,7 @@ class HilbertSchmidt(Operation): Args: params (array): Parameters for the quantum function `V`. v_function (callable): Quantum function that represents the approximate compiled unitary `V`. - v_wires (int or Iterable[Number, str]]): the wire(s) the approximate compiled unitary act on. + v_wires (int or Iterable[Number, str]]): The wire(s) the approximate compiled unitary act on. u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: From 11184508e6b2c992a7f6bfc77762f9f3c50fbf64 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:01:57 +0200 Subject: [PATCH 23/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 042f45e2576..dd68abc8690 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -47,7 +47,7 @@ class HilbertSchmidt(Operation): Raises: QuantumFunctionError: The argument u_tape must be a QuantumTape. QuantumFunctionError: ``v_function`` is not a valid Quantum function. - QuantumFunctionError: `U` and `V` do not have the same number of wires. + QuantumFunctionError: ``U`` and ``V`` do not have the same number of wires. QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. QuantumFunctionError: u_tape and v_tape must act on distinct wires. From 17da94078f47c9b5931cac5599bb62e9995861aa Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:02:08 +0200 Subject: [PATCH 24/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index dd68abc8690..98d17444e2c 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -48,7 +48,7 @@ class HilbertSchmidt(Operation): QuantumFunctionError: The argument u_tape must be a QuantumTape. QuantumFunctionError: ``v_function`` is not a valid Quantum function. QuantumFunctionError: ``U`` and ``V`` do not have the same number of wires. - QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. + QuantumFunctionError: The wires ``v_wires`` are a subset of ``V`` wires. QuantumFunctionError: u_tape and v_tape must act on distinct wires. .. UsageDetails:: From f07ce5bf0826240cca745d095bcb42a6d9b9cb5d Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:02:32 +0200 Subject: [PATCH 25/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 98d17444e2c..85a6230f2c9 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -49,7 +49,7 @@ class HilbertSchmidt(Operation): QuantumFunctionError: ``v_function`` is not a valid Quantum function. QuantumFunctionError: ``U`` and ``V`` do not have the same number of wires. QuantumFunctionError: The wires ``v_wires`` are a subset of ``V`` wires. - QuantumFunctionError: u_tape and v_tape must act on distinct wires. + QuantumFunctionError: ``u_tape`` and ``v_tape`` must act on distinct wires. .. UsageDetails:: From 05f3a71b447ccda796dec43db5a89f4c34e73077 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:03:12 +0200 Subject: [PATCH 26/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 85a6230f2c9..b4317827dbf 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -153,7 +153,7 @@ def compute_decomposition( # Unitary U for op_u in u_tape.operations: - # Define outside this function, it needs to be applied. + # The operation has been defined outside of this function, to queue it we call qml.apply. qml.apply(op_u) decomp_ops.append(op_u) From 3255868ccf68a80cc168343ff0f2d9d84495a500 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:03:27 +0200 Subject: [PATCH 27/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index b4317827dbf..802b3ac6ad6 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -45,7 +45,7 @@ class HilbertSchmidt(Operation): u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: - QuantumFunctionError: The argument u_tape must be a QuantumTape. + QuantumFunctionError: The argument ``u_tape`` must be a ``QuantumTape``. QuantumFunctionError: ``v_function`` is not a valid Quantum function. QuantumFunctionError: ``U`` and ``V`` do not have the same number of wires. QuantumFunctionError: The wires ``v_wires`` are a subset of ``V`` wires. From 78fe825d95194149d73bd932319d9f0f6056fd93 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:03:40 +0200 Subject: [PATCH 28/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 802b3ac6ad6..ee412aa3a18 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -46,7 +46,7 @@ class HilbertSchmidt(Operation): Raises: QuantumFunctionError: The argument ``u_tape`` must be a ``QuantumTape``. - QuantumFunctionError: ``v_function`` is not a valid Quantum function. + QuantumFunctionError: ``v_function`` is not a valid quantum function. QuantumFunctionError: ``U`` and ``V`` do not have the same number of wires. QuantumFunctionError: The wires ``v_wires`` are a subset of ``V`` wires. QuantumFunctionError: ``u_tape`` and ``v_tape`` must act on distinct wires. From db10056e4d7cc4a7d096a4767e5d3e965504c55f Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:04:37 +0200 Subject: [PATCH 29/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index ee412aa3a18..b5ae07d9c0b 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -53,7 +53,7 @@ class HilbertSchmidt(Operation): .. UsageDetails:: - Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary `U` and an approximate + Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary ``U`` and an approximate unitary `V`. We need to define some functions where it is possible to use the ``.HilbertSchmidt`` template. Here the considered unitary is ``Hadamard`` and we try to compute the cost for the approximate unitary ``RZ``. For an angle which is equal to 0 (identity), we have the maximal cost which is 1. From 0d444fe55be746ade93d9725509c5bfbaf792748 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:04:55 +0200 Subject: [PATCH 30/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index b5ae07d9c0b..edbac54e21e 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -54,7 +54,7 @@ class HilbertSchmidt(Operation): .. UsageDetails:: Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary ``U`` and an approximate - unitary `V`. We need to define some functions where it is possible to use the ``.HilbertSchmidt`` template. + unitary ``V``. We need to define some functions where it is possible to use the :class:`~.HilbertSchmidt` template. Here the considered unitary is ``Hadamard`` and we try to compute the cost for the approximate unitary ``RZ``. For an angle which is equal to 0 (identity), we have the maximal cost which is 1. From 01b31f42cfc1b1a8cfba1b5b15d9972c899611a9 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:05:20 +0200 Subject: [PATCH 31/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index edbac54e21e..882dc5a2b4c 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -56,7 +56,7 @@ class HilbertSchmidt(Operation): Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary ``U`` and an approximate unitary ``V``. We need to define some functions where it is possible to use the :class:`~.HilbertSchmidt` template. Here the considered unitary is ``Hadamard`` and we try to compute the cost for the approximate unitary ``RZ``. - For an angle which is equal to 0 (identity), we have the maximal cost which is 1. + For an angle that is equal to ``0`` (``Identity``), we have the maximal cost which is ``1``. .. code-block:: python From 17e922b83bf2a40764cc6c932706654ab8e94140 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:05:46 +0200 Subject: [PATCH 32/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 882dc5a2b4c..4a5e881e6c9 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -79,7 +79,7 @@ def hilbert_test(v_params, v_function, v_wires, u_tape): def cost_hst(parameters, v_function, v_wires, u_tape): return (1 - hilbert_test(v_params=parameters, v_function=v_function, v_wires=v_wires, u_tape=u_tape)[0]) - Now that you have defined your cost function you can call it for specific parameters. + Now that the cost function has been defined it can be called for specific parameters: >>> cost_hst([0], v_function = v_circuit, v_wires = [1], u_tape = U) 1 From a2d7c053770284c7745369226d4cbfc3fd85b124 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:09:09 +0200 Subject: [PATCH 33/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 4a5e881e6c9..5f5037e6cef 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -135,7 +135,7 @@ def num_params(self): def compute_decomposition( params, wires, u_tape, v_tape, v_function=None, v_wires=None ): # pylint: disable=arguments-differ,unused-argument - r"""Representation of the operator as a product of other operators (static method).""" + r"""Representation of the operator as a product of other operators.""" n_wires = len(u_tape.wires + v_tape.wires) decomp_ops = [] From ccea088d76ae8f6a1ea2795b2d288dcbe990e1c3 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:12:24 +0200 Subject: [PATCH 34/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 5f5037e6cef..c2b7efa4614 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -184,7 +184,7 @@ def adjoint(self): # pylint: disable=arguments-differ class LocalHilbertSchmidt(HilbertSchmidt): r"""Create a Local Hilbert Schmidt template that can be used to compute the Local Hilbert Schmidt Test (LHST). - The LHST is a useful quantity used when we want to compile an unitary `U` with an approximate unitary `V`. The + The result of the LHST is a useful quantity for compiling a unitary ``U`` with an approximate unitary ``V``. The LHST is used as a distance between `U` and `V`, it is similar to the Hilbert schmidt test but the measurement is made only on one qubit at the end of the circuit. The LHST cost is always smaller than the HST cost and is useful for large unitaries. From 9152f17b3c73de6ab36bb2e94f8f1aa0af4efa3f Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:12:45 +0200 Subject: [PATCH 35/48] Update tests/templates/test_subroutines/test_hilbert_schmidt.py Co-authored-by: antalszava --- tests/templates/test_subroutines/test_hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index d3c1d45e221..74cb5d51d17 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Xanadu Quantum Technologies Inc. +# Copyright 2022 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. From 4a8dbdf95e93d06b8783764b884f4ad916600586 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:13:17 +0200 Subject: [PATCH 36/48] Update tests/templates/test_subroutines/test_hilbert_schmidt.py Co-authored-by: antalszava --- tests/templates/test_subroutines/test_hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index 74cb5d51d17..3893332854c 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. """ -Unit tests for the qft template. +Unit tests for the Hilbert-Schmidt templates. """ import pytest From c19afa8d29f0905765d93d96f967414ad4e75c37 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 19:13:43 +0200 Subject: [PATCH 37/48] Update tests/templates/test_subroutines/test_hilbert_schmidt.py Co-authored-by: antalszava --- tests/templates/test_subroutines/test_hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index 3893332854c..89f5c171b89 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -20,7 +20,7 @@ class TestHilbertSchmidt: - """Tests for the Hilbert Schmidt template.""" + """Tests for the Hilbert-Schmidt template.""" def test_hs_decomposition_1_qubit(self): """Test if the HS operation is correctly decomposed for a 1 qubit unitary.""" From 7101dd7ff920132bfef0adf52ee23a4653df94f3 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 14:02:11 -0400 Subject: [PATCH 38/48] Update from review --- doc/releases/changelog-dev.md | 18 ++++- .../templates/subroutines/hilbert_schmidt.py | 65 ++++++++++--------- .../test_subroutines/test_hilbert_schmidt.py | 60 +++++++++++++++++ 3 files changed, 109 insertions(+), 34 deletions(-) diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md index 28a2c45fe2e..0f99b7c7d3c 100644 --- a/doc/releases/changelog-dev.md +++ b/doc/releases/changelog-dev.md @@ -4,7 +4,7 @@

New features since last release

-* Adds an optimization transform that matches pieces of user-provided identity templates in a circuit and replaces them with an equivalent component. +* Added an optimization transform that matches pieces of user-provided identity templates in a circuit and replaces them with an equivalent component. [(#2032)](https://github.com/PennyLaneAI/pennylane/pull/2032) First let's consider the following circuit where we want to replace sequence of two ``pennylane.S`` gates with a @@ -54,6 +54,21 @@ For more details on using pattern matching optimization you can check the corresponding documentation and also the following [paper](https://dl.acm.org/doi/full/10.1145/3498325). + +* Added two new templates the `HilbertSchmidt` template and the `LocalHilbertSchmidt` template. + [(#2364)](https://github.com/PennyLaneAI/pennylane/pull/2364) + + ```python + from pennylane.templates import HilbertSchmidt + + with qml.tape.QuantumTape(do_queue=False) as u_tape: + qml.Hadamard(wires=0) + + def v_function(params): + qml.RZ(params[0], wires=1) + + hilbert_template = qml.HilbertSchmidt(v_params, v_function=v_function, v_wires=[1], u_tape=u_tape) + ``` * Added a swap based transpiler transform. [(#2118)](https://github.com/PennyLaneAI/pennylane/pull/2118) @@ -418,6 +433,5 @@ the `decimals` and `show_matrices` keywords are added. `qml.drawer.tape_text(tap This release contains contributions from (in alphabetical order): Karim Alaa El-Din, Guillermo Alonso-Linaje, Juan Miguel Arrazola, Thomas Bromley, Alain Delgado, - Olivia Di Matteo, Anthony Hayes, David Ittah, Josh Izaac, Soran Jahangiri, Christina Lee, Romain Moyard, Zeyue Niu, Jay Soni, Antal Száva, Maurice Weber, David Wierichs. diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index c2b7efa4614..bd079abb090 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -20,16 +20,18 @@ class HilbertSchmidt(Operation): - r"""Create a Hilbert Schmidt template that can be used to compute the Hilbert Schmidt Test (HST). The HST is a - useful quantity used when we want to compile an unitary `U` with an approximate unitary `V`. The HST is used as a - distance between `U` and `V`, the result of executing the HST is 0 if and only if `V` is equal to `U` (up to a global phase). - Therefore we can define a cost by: + r"""Create a Hilbert-Schmidt template that can be used to compute the Hilbert-Schmidt Test (HST). + + The HST is a useful quantity used when we want to compile an unitary `U` with an approximate unitary `V`. The HST + is used as a distance between `U` and `V`, the result of executing the HST is 0 if and only if `V` is equal to + `U` (up to a global phase). Therefore we can define a cost by: .. math:: C_{HST} = 1 - \frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2, - where the quantity :math:`\frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2` is obtained by executing the Hilbert-Schmidt Test. It is - equivalent to taking the outcome probability of the state :math:`|0 ... 0\rangle` for the following circuit: + where the quantity :math:`\frac{1}{d^2} \left|Tr(V^{\dagger}U)\right|^2` is obtained by executing the + Hilbert-Schmidt Test. It is equivalent to taking the outcome probability of the state :math:`|0 ... 0\rangle` + for the following circuit: .. figure:: ../../_static/templates/subroutines/hst.png :align: center @@ -51,25 +53,31 @@ class HilbertSchmidt(Operation): QuantumFunctionError: The wires ``v_wires`` are a subset of ``V`` wires. QuantumFunctionError: ``u_tape`` and ``v_tape`` must act on distinct wires. + .. Reference:: + + [1] Sumeet Khatri, Ryan LaRose, Alexander Poremba, Lukasz Cincio, Andrew T. Sornborger and Patrick J. Coles + Quantum-assisted Quantum Compiling. + `arxiv/1807.00800 `_ + .. UsageDetails:: Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary ``U`` and an approximate - unitary ``V``. We need to define some functions where it is possible to use the :class:`~.HilbertSchmidt` template. - Here the considered unitary is ``Hadamard`` and we try to compute the cost for the approximate unitary ``RZ``. - For an angle that is equal to ``0`` (``Identity``), we have the maximal cost which is ``1``. + unitary ``V``. We need to define some functions where it is possible to use the :class:`~.HilbertSchmidt` + template. Here the considered unitary is ``Hadamard`` and we try to compute the cost for the approximate + unitary ``RZ``. For an angle that is equal to ``0`` (``Identity``), we have the maximal cost which is ``1``. .. code-block:: python import pennylane as qml from pennylane.templates import HilbertSchmidt - with qml.tape.QuantumTape(do_queue=False) as U: + with qml.tape.QuantumTape(do_queue=False) as u_tape: qml.Hadamard(wires=0) - def v_circuit(params, v_wires): - qml.RZ(params[0], wires=v_wires[0]) + def v_function(params): + qml.RZ(params[0], wires=1) - dev = qml.device("default.qubit", wires=4) + dev = qml.device("default.qubit", wires=2) @qml.qnode(dev) def hilbert_test(v_params, v_function, v_wires, u_tape): @@ -81,21 +89,17 @@ def cost_hst(parameters, v_function, v_wires, u_tape): Now that the cost function has been defined it can be called for specific parameters: - >>> cost_hst([0], v_function = v_circuit, v_wires = [1], u_tape = U) + >>> cost_hst([0], v_function = v_function, v_wires = [1], u_tape = u_tape) 1 - - **Reference** - - [1] Sumeet Khatri, Ryan LaRose, Alexander Poremba, Lukasz Cincio, Andrew T. Sornborger and Patrick J. Coles - Quantum-assisted Quantum Compiling. - `arxiv/1807.00800 `_ """ num_wires = AnyWires grad_method = None def __init__(self, *params, v_function, v_wires, u_tape, do_queue=True, id=None): + self._num_params = len(params) + if not isinstance(u_tape, qml.tape.QuantumTape): raise qml.QuantumFunctionError("The argument u_tape must be a QuantumTape.") @@ -129,7 +133,7 @@ def __init__(self, *params, v_function, v_wires, u_tape, do_queue=True, id=None) @property def num_params(self): - return 1 + return self._num_params @staticmethod def compute_decomposition( @@ -143,13 +147,12 @@ def compute_decomposition( second_range = range(int(n_wires / 2), n_wires) # Hadamard first layer - for i, wire in enumerate(wires): - if i in first_range: - decomp_ops.append(qml.Hadamard(wire)) + for i in first_range: + decomp_ops.append(qml.Hadamard(wires[i])) # CNOT first layer for i, j in zip(first_range, second_range): - decomp_ops.append(qml.CNOT(wires=[i, j])) + decomp_ops.append(qml.CNOT(wires=[wires[i], wires[j]])) # Unitary U for op_u in u_tape.operations: @@ -163,12 +166,11 @@ def compute_decomposition( # CNOT second layer for i, j in zip(reversed(first_range), reversed(second_range)): - decomp_ops.append(qml.CNOT(wires=[i, j])) + decomp_ops.append(qml.CNOT(wires=[wires[i], wires[j]])) # Hadamard second layer - for i, wire in enumerate(wires): - if i in first_range: - decomp_ops.append(qml.Hadamard(wire)) + for i in first_range: + decomp_ops.append(qml.Hadamard(wires[i])) return decomp_ops def adjoint(self): # pylint: disable=arguments-differ @@ -220,9 +222,8 @@ def compute_decomposition( second_range = range(int(n_wires / 2), n_wires) # Hadamard first layer - for i, wire in enumerate(wires): - if i in first_range: - decomp_ops.append(qml.Hadamard(wire)) + for i in first_range: + decomp_ops.append(qml.Hadamard(wires[i])) # CNOT first layer for i, j in zip(first_range, second_range): diff --git a/tests/templates/test_subroutines/test_hilbert_schmidt.py b/tests/templates/test_subroutines/test_hilbert_schmidt.py index 89f5c171b89..44ddbc238df 100644 --- a/tests/templates/test_subroutines/test_hilbert_schmidt.py +++ b/tests/templates/test_subroutines/test_hilbert_schmidt.py @@ -107,6 +107,39 @@ def v_circuit(params): assert i.data == j.data assert i.wires == j.wires + def test_hs_decomposition_2_qubits_custom_wires(self): + """Test if the HS operation is correctly decomposed for 2 qubits with custom wires.""" + with qml.tape.QuantumTape(do_queue=False) as U: + qml.SWAP(wires=["a", "b"]) + + def v_circuit(params): + qml.RZ(params[0], wires="c") + qml.CNOT(wires=["c", "d"]) + + op = qml.HilbertSchmidt([0.1], v_function=v_circuit, v_wires=["c", "d"], u_tape=U) + + with qml.tape.QuantumTape() as tape_dec: + op.decomposition() + + expected_operations = [ + qml.Hadamard(wires=["a"]), + qml.Hadamard(wires=["b"]), + qml.CNOT(wires=["a", "c"]), + qml.CNOT(wires=["b", "d"]), + qml.SWAP(wires=["a", "b"]), + qml.RZ(-0.1, wires=["c"]), + qml.CNOT(wires=["c", "d"]), + qml.CNOT(wires=["b", "d"]), + qml.CNOT(wires=["a", "c"]), + qml.Hadamard(wires=["a"]), + qml.Hadamard(wires=["b"]), + ] + + for i, j in zip(tape_dec.operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + def test_hs_adjoint_method_2_qubits(self): """Test the adjoint method of the HS operations for 2 qubits.""" @@ -241,6 +274,33 @@ def v_circuit(params): assert i.data == j.data assert i.wires == j.wires + def test_lhs_decomposition_1_qubit_custom_wires(self): + """Test if the LHS operation is correctly decomposed with custom wires.""" + with qml.tape.QuantumTape(do_queue=False) as U: + qml.Hadamard(wires="a") + + def v_circuit(params): + qml.RZ(params[0], wires="b") + + op = qml.LocalHilbertSchmidt([0.1], v_function=v_circuit, v_wires=["b"], u_tape=U) + + with qml.tape.QuantumTape() as tape_dec: + op.decomposition() + + expected_operations = [ + qml.Hadamard(wires=["a"]), + qml.CNOT(wires=["a", "b"]), + qml.Hadamard(wires=["a"]), + qml.RZ(-0.1, wires=["b"]), + qml.CNOT(wires=["a", "b"]), + qml.Hadamard(wires=["a"]), + ] + + for i, j in zip(tape_dec.operations, expected_operations): + assert i.name == j.name + assert i.data == j.data + assert i.wires == j.wires + def test_lhs_adjoint_method_1_qubit(self): """Test the adjoint method of the LHS operation for 1 qubit.""" From de26a7798ce7fd118973d7ba262a7a3e819c537d Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 14:19:36 -0400 Subject: [PATCH 39/48] Docstring --- pennylane/templates/subroutines/hilbert_schmidt.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index bd079abb090..ce6fefe5e54 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -47,11 +47,13 @@ class HilbertSchmidt(Operation): u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: - QuantumFunctionError: The argument ``u_tape`` must be a ``QuantumTape``. - QuantumFunctionError: ``v_function`` is not a valid quantum function. - QuantumFunctionError: ``U`` and ``V`` do not have the same number of wires. - QuantumFunctionError: The wires ``v_wires`` are a subset of ``V`` wires. - QuantumFunctionError: ``u_tape`` and ``v_tape`` must act on distinct wires. + QuantumFunctionError: + + * The argument ``u_tape`` must be a ``QuantumTape``. + * ``v_function`` is not a valid quantum function. + * ``U`` and ``V`` do not have the same number of wires. + * The wires ``v_wires`` are a subset of ``V`` wires. + * ``u_tape`` and ``v_tape`` must act on distinct wires. .. Reference:: From 3c84d87a8744e7d574c4d5622ec913ddffecc8e4 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 14:22:01 -0400 Subject: [PATCH 40/48] Quantum function error local --- pennylane/templates/subroutines/hilbert_schmidt.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index ce6fefe5e54..b01b46e177c 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -200,11 +200,13 @@ class LocalHilbertSchmidt(HilbertSchmidt): u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: - QuantumFunctionError: The argument u_tape must be a QuantumTape. - QuantumFunctionError: ``v_function`` is not a valid Quantum function. - QuantumFunctionError: `U` and `V` do not have the same number of wires. - QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. - QuantumFunctionError: u_tape and v_tape must act on distinct wires. + QuantumFunctionError: + + * The argument u_tape must be a QuantumTape. + * ``v_function`` is not a valid Quantum function. + * `U` and `V` do not have the same number of wires. + * The wires ``v_wires`` are a subset of `V` wires. + * u_tape and v_tape must act on distinct wires. **Reference** From d79fc80274d43b2d1936ef6ab7328f6f171e5f27 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 20:31:40 +0200 Subject: [PATCH 41/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index b01b46e177c..dc91f5a539e 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -70,9 +70,6 @@ class HilbertSchmidt(Operation): .. code-block:: python - import pennylane as qml - from pennylane.templates import HilbertSchmidt - with qml.tape.QuantumTape(do_queue=False) as u_tape: qml.Hadamard(wires=0) From 897555673fffbd1cb41c6fe1e987a47110951647 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 20:33:05 +0200 Subject: [PATCH 42/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index dc91f5a539e..e779001db08 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -186,7 +186,7 @@ def adjoint(self): # pylint: disable=arguments-differ class LocalHilbertSchmidt(HilbertSchmidt): r"""Create a Local Hilbert Schmidt template that can be used to compute the Local Hilbert Schmidt Test (LHST). The result of the LHST is a useful quantity for compiling a unitary ``U`` with an approximate unitary ``V``. The - LHST is used as a distance between `U` and `V`, it is similar to the Hilbert schmidt test but the measurement is + LHST is used as a distance between `U` and `V`, it is similar to the Hilbert-Schmidt test, but the measurement is made only on one qubit at the end of the circuit. The LHST cost is always smaller than the HST cost and is useful for large unitaries. From c07cde31300dc78b19c5d99adb772941d7aee953 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 20:33:15 +0200 Subject: [PATCH 43/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index e779001db08..27a7b43a46f 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -184,7 +184,7 @@ def adjoint(self): # pylint: disable=arguments-differ class LocalHilbertSchmidt(HilbertSchmidt): - r"""Create a Local Hilbert Schmidt template that can be used to compute the Local Hilbert Schmidt Test (LHST). + r"""Create a Local Hilbert-Schmidt template that can be used to compute the Local Hilbert-Schmidt Test (LHST). The result of the LHST is a useful quantity for compiling a unitary ``U`` with an approximate unitary ``V``. The LHST is used as a distance between `U` and `V`, it is similar to the Hilbert-Schmidt test, but the measurement is made only on one qubit at the end of the circuit. The LHST cost is always smaller than the HST cost and is useful From 273bb192ecdc0002b13ad699257ef77196af95ab Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 20:33:22 +0200 Subject: [PATCH 44/48] Update pennylane/templates/subroutines/hilbert_schmidt.py Co-authored-by: antalszava --- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 27a7b43a46f..582aa4a0994 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -63,7 +63,7 @@ class HilbertSchmidt(Operation): .. UsageDetails:: - Consider that we want to evaluate the Hilbert Schmidt Test cost between the unitary ``U`` and an approximate + Consider that we want to evaluate the Hilbert-Schmidt Test cost between the unitary ``U`` and an approximate unitary ``V``. We need to define some functions where it is possible to use the :class:`~.HilbertSchmidt` template. Here the considered unitary is ``Hadamard`` and we try to compute the cost for the approximate unitary ``RZ``. For an angle that is equal to ``0`` (``Identity``), we have the maximal cost which is ``1``. From bb0c087874917c06d0517aa2d0f91cacc98d68e2 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 14:42:25 -0400 Subject: [PATCH 45/48] Update --- doc/releases/changelog-dev.md | 12 +++++++++--- pennylane/templates/subroutines/hilbert_schmidt.py | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md index c2e1d2aa4d8..2acaf265d35 100644 --- a/doc/releases/changelog-dev.md +++ b/doc/releases/changelog-dev.md @@ -59,15 +59,21 @@ [(#2364)](https://github.com/PennyLaneAI/pennylane/pull/2364) ```python - from pennylane.templates import HilbertSchmidt - with qml.tape.QuantumTape(do_queue=False) as u_tape: qml.Hadamard(wires=0) def v_function(params): qml.RZ(params[0], wires=1) - hilbert_template = qml.HilbertSchmidt(v_params, v_function=v_function, v_wires=[1], u_tape=u_tape) + @qml.qnode(dev) + def hilbert_test(v_params, v_function, v_wires, u_tape): + qml.HilbertSchmidt(v_params, v_function=v_function, v_wires=v_wires, u_tape=u_tape) + return qml.probs(u_tape.wires + v_wires) + + def cost_hst(parameters, v_function, v_wires, u_tape): + return (1 - hilbert_test(v_params=parameters, v_function=v_function, v_wires=v_wires, u_tape=u_tape)[0]) + + cost = cost_hst(v_params=[0.1], v_function=v_function, v_wires=[1], u_tape=u_tape) ``` * Added a swap based transpiler transform. diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 582aa4a0994..2c6a92b48b1 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -55,7 +55,7 @@ class HilbertSchmidt(Operation): * The wires ``v_wires`` are a subset of ``V`` wires. * ``u_tape`` and ``v_tape`` must act on distinct wires. - .. Reference:: + **Reference** [1] Sumeet Khatri, Ryan LaRose, Alexander Poremba, Lukasz Cincio, Andrew T. Sornborger and Patrick J. Coles Quantum-assisted Quantum Compiling. From 3e28ca16c4f51837365a4911a30a897b37540b71 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 15:02:29 -0400 Subject: [PATCH 46/48] update --- doc/_static/templates/subroutines/lhst.png | Bin 0 -> 142514 bytes doc/introduction/templates.rst | 10 ++++++++++ pennylane/optimize/nesterov_momentum.py | 3 +-- .../templates/subroutines/hilbert_schmidt.py | 5 +++++ 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 doc/_static/templates/subroutines/lhst.png diff --git a/doc/_static/templates/subroutines/lhst.png b/doc/_static/templates/subroutines/lhst.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1639ab0cb76d2890dd9b7fbab68c76e663b981 GIT binary patch literal 142514 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 ?jaE`{T^tmfML41Wq#YY7`a+ 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%0A7+T`n-z6abJRT0 zcU-mX7Zn-a!y;Nw<1=?ipQA>9`GVI>3qsHX-;?Br7$c)u|MuD}~a;-?E_EkGHF!^-R2bBly$U< z7Sd|P6Q9107;LXkV4b-r?K0migB0qiijlNPBKlAvP<@F5N@d;DLTvw4|ZYzw0e|d@=(4&ZS2k$*aFD2S|fs3P1sc9&I_^88fbG_PyxcgcY?89juQEOiLs)jjMyV?8_S1L7cH<^%WBj8K zRP-PFx+EGBn?MIu8_)Iyy+q@ZWDCPHN{6ymdqJpGkL~Eth8+;=0Q2vuJIu1}#CieU zSL3KwvZGI-LjFJy#oCRMZs$_CbA~#rt|pHx6m-wtPVq8c`X1o>BK_b?1T|uRwH3tz zWGo-S$_ERGgD?@x-kZ;iC7w!4Y?{}n;s{MGx+c#><-{!F_;Cox36UrnU>#jq4((P+ zA1LY@r#HU#Xf~5i_c0m@P-t9=u{I(Gljc4Y#VsFYj7AVtVE?7$^)pqmI4Jk&5*dNPDA71L)do@B6V=>zQN%plHTauEQK-g!wV@8Umh58?@l?j$XImBiv0Nn|{(3y| zTT+J9!4^$q>IYwCarW`s#Cud?ldXa2 z{nL&IUlK9@((@6M*qi1Sej+)kTQEQOQXxEZ!qHa~!^{$tIMG6iV_vVI**OK?`T8Db z@O5Hc!zg%3P}AlwuxR8bDx)lSp|fO-J09Zv1iy$!l(CNW{RYCo7JIGxU)OsF~va5Oj8G63$AI*7& zXq~8nl1UN>?=5va5Zue)F7)kX-1OlO?o#}GqRoajq?F{hBN4_h85A>b=yeaFHF{mBgls zx%*1TM}s>Tq8DTarm`odQIPhv#)zLe@VFQahFNC1x`vJ#&%LbvhA-0OPN4M%+{=O) zo_9W3F3GLDy>#VPh^LX+f7U0wZ3)8GP(9q5O?^QsQ34SQt2Cw6mE-V# z7{xgLVv+Y}+>HY|AI4q{7m3>hFgf#Q8VrPTi4XvLf92%IsnlBO)H*^YcfZAIJgkm& zh7$+9`Ydh!-L=a|>7zaRjb@oEOwuXWNB%DFFi{8i?fMocX19@8u7xDTPTNv1EkD#< zP7e1^OSgQ-_5r0M9@GwI!N|H&s<({Zb<+=(5_*kjy@EOWsq0{3D{6r~t>j|(wk{?G z%grWY21zu|`ho9m%VrtWgz$9an=&;KWlG4%8d?~%KPup^C#X>c`N7-5&36mVeIeOP zG}oWCxd?Ow@to7Qe5B+Z-nW<;y0L^#l*$$F}XE7cu9_*|N zF6hVp76Y>EygoXG9YN2cl=4@{?-LF3zJ3Oe|2Y*MHcEA&0AQI zJwbVy?HW@^dU`b?vPoBD8AcA#$ZR#+`8w2gvg=g4w3=@mDsF z+kir5Q&K}?K+$?+JR;T0+y=XrEAndJTQ}#q>SQLEUuZYEP0Rlds&#k%(2CvREnvP?>~Q^)AntE@2|k@YnKsp3BwSsXEi7A;upGBrAXujYP725{H!ZfV~OTsZWpYoBnX4xpIA}0 zKk-TBp4#)n(nETmY3}DzAnGQ2 $grwS2sH%>D>SnH2Ty*T?QbAkzkps?R(!AFQ) z37F7ab*_}>PYT*-UJxjyI*{RMf(YU7NFRYkXH-IZvwnNux30mdc`uHrlbVEh@7eUX z{sRQK4wvKF@r-?~aKsuSw;;)`3LmV#;?||D^6a|CMU6R*Qch4aCSdW+E?8dtzauw(PaOPOu&?}iFZQ(;ns~ITyS;fr zne!0r41eIJ8q_*b0?LRL<^au!2ir$yD4R(tlRVUr`&A1eJz0YAYc?3gQ=WIqR0C%T zlaBVAIfnscIKuo)_*kjcId-JIOHMMjH5h}89Q*FFwg+ZWu+C2 z;;3AN#^?^>%gJ<%zi3}+7jUOr&a(tvt85*n!3YeSCgAS^mp;JmY zN>;jgPo8^g|-b<(+vlZ7$P26U~Jr0Idr5fTdBwE?k`Ci$E|EIg&S(;l>!2(Syy_ zijhWRRiNpmj>-F$#d;0yW!mw$o>ZExWH^w$S0ctk(SV^}S7xivXZk=#c`~OvRrySB z^8|GcgW`moA6n3FX*VzbJ;z{3W#OyIu)tF?dSjwgoBZ*Zr^)EdVI+?$o+FvoC5D|0 z`BIHclkM%vX2ke}#g3*}JUHvh3H=-|jSD1@mzi;4?Bq|1gq?m}Ryp@z*!* z>qyPb5#hMrPr#?l`E`piXbTpor*8U?YTFuuaqCFqLc$)7xGV!XpMgnkq(d@K-?i8elCj%L zsVj-9X#drRqiar#5Ezr24P=kr2i^j`8>rY}H*X_-((Cc}lbMX-=ufmEj|~nRaSgTV zlQ}9!r$7^bUD!=)&^pQ}M^khCB_}}UV20&&IfgxnSF4w595t^iM_#oUygab*A>q(f z*i#h%@tAQ%W|Cpn;gMKqzqt@b0W9%0&YexDByG^(7DS|#-}0Dyo>)kb(MTK2J@;(a zpIjic9u!Aup{nDCQfMVkV{12TF>wQ1;{+Aww&Azoz!6%I~M{p&kU$$*+hXh=`I*(hmZ z=7Dq_ez3H&!5?i+gw$X{E$T)M_hp&+Xpu`$lv}!`h#x+6a6!;o5ADQCZeXiKI`K9t z!Estb{J&j*w=eDu*!c_bOt{j8nxMP{%p@r&rJ3@77vnWp0c1i?&dZL#1k$tJc0gUf zI7rnsa1^+v@^z3fW4*Qh8?Fe{BXw;h#trVj7fSq?k4gFd9nMIOA|?JJ zN*=fEI*HP|3;x2NySJH4%%o@k&_2Ip+sU`j6t9<$8_d7@Fm!yUHD-Zy{7+vCo|a&p z!k9iSzY7*rcJX2&*oRHG`n&lb?&F1YEs*5l)+riLR9SVpo4v8)L z(k9|-$_?eG#){8W-$1*Ilwwjy$r^gnFm= zjta!s=Q7)#lJcSimGpeV-Yy>O@66g)i4bl4Viat4`9lxyL_)t%fG{f;1TY(&U@J41 z_>5Y=O0`H$A0;x}>q#96GXGh^V4jJ$FW&FU z{6tEnygx?~^^FF52F8f6;XUV8p9@t_%gj#A)S>v?7(4dPka@B>1$*pf8gj@q3dxUR@Pqy z_5!8|Eqgp!(UWgu0@72T74^mPkN6L6D?4j63gv$A!#NQzRurx&Q_QKqnHlqvxRDUE zjM~bL?lrN1O2v#>f#%NCr5Lf#1FFZAGyc5YsbT23@7Tut<+%}CQBC}vk|U?&Hxa*K zr$$%wtx7%ascrS1zf>`c800;D@1p-VQ4L)R_y&P`4&Flc6=7=#?lPCyLS#2#M6O}; z^D)FFVdC5oV6Ip;ybRWyZDf_!F>N%u!fxVd5g|;YuBG?{Ljx4Ow78Mb|%fXmcX%vTyOQy4(4Omkm*Qm)II6Xw_6F<2hQ$7ZW`j9zdnw;&uGQ zhMKH{kg54Zf(7O4N`cA$`dr|jgi3KRMrynLN%j}%b>&q1 zk1c0f`+@fQ4GD$#R{CF*W4{R1!{(kgU#CNng`VX=Jp&FJZ7 zRJ`v)^An-OJg5D^OP=_r&xMbJ>qoxy diff --git a/pennylane/optimize/nesterov_momentum.py b/pennylane/optimize/nesterov_momentum.py index 1cbe3289a47..9b826ca5701 100644 --- a/pennylane/optimize/nesterov_momentum.py +++ b/pennylane/optimize/nesterov_momentum.py @@ -36,8 +36,7 @@ class NesterovMomentumOptimizer(MomentumOptimizer): momentum (float): user-defined hyperparameter :math:`m` """ - # pylint: disable=arguments-renamed - def compute_grad(self, objective_fn, args, kwargs, grad_fn=None): + def compute_grad(self, objective_fn, args, kwargs, grad_fn=None): # pylint: disable=arguments-renamed r"""Compute gradient of the objective function at at the shifted point :math:`(x - m\times\text{accumulation})` and return it along with the objective function forward pass (if available). diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 2c6a92b48b1..29fa3f7df79 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -190,6 +190,11 @@ class LocalHilbertSchmidt(HilbertSchmidt): made only on one qubit at the end of the circuit. The LHST cost is always smaller than the HST cost and is useful for large unitaries. + .. figure:: ../../_static/templates/subroutines/lhst.png + :align: center + :width: 80% + :target: javascript:void(0); + Args: params (array): Parameters for the quantum function `V`. v_function (Callable): Quantum function that represents the approximate compiled unitary `V`. From f39f8bfd1f354b655caab6f6a3f8af25d85cffe6 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 15:05:35 -0400 Subject: [PATCH 47/48] black --- pennylane/optimize/nesterov_momentum.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pennylane/optimize/nesterov_momentum.py b/pennylane/optimize/nesterov_momentum.py index 9b826ca5701..26a92a8bd27 100644 --- a/pennylane/optimize/nesterov_momentum.py +++ b/pennylane/optimize/nesterov_momentum.py @@ -36,7 +36,9 @@ class NesterovMomentumOptimizer(MomentumOptimizer): momentum (float): user-defined hyperparameter :math:`m` """ - def compute_grad(self, objective_fn, args, kwargs, grad_fn=None): # pylint: disable=arguments-renamed + def compute_grad( + self, objective_fn, args, kwargs, grad_fn=None + ): # pylint: disable=arguments-renamed r"""Compute gradient of the objective function at at the shifted point :math:`(x - m\times\text{accumulation})` and return it along with the objective function forward pass (if available). From 3c958ce190e379ca7ead295bc833f32238ac0dc4 Mon Sep 17 00:00:00 2001 From: Romain Moyard Date: Thu, 14 Apr 2022 15:26:59 -0400 Subject: [PATCH 48/48] Update --- doc/introduction/templates.rst | 2 +- .../templates/subroutines/hilbert_schmidt.py | 24 ++++++++----------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/doc/introduction/templates.rst b/doc/introduction/templates.rst index 31458e3a0de..3f054e5a1ee 100644 --- a/doc/introduction/templates.rst +++ b/doc/introduction/templates.rst @@ -262,7 +262,7 @@ Other useful templates which do not belong to the previous categories can be fou .. customgalleryitem:: :link: ../code/api/pennylane.LocalHilbertSchmidt.html - :description: HilbertSchmidt + :description: LocalHilbertSchmidt :figure: ../_static/templates/subroutines/lhst.png .. raw:: html diff --git a/pennylane/templates/subroutines/hilbert_schmidt.py b/pennylane/templates/subroutines/hilbert_schmidt.py index 29fa3f7df79..cad10f92e24 100644 --- a/pennylane/templates/subroutines/hilbert_schmidt.py +++ b/pennylane/templates/subroutines/hilbert_schmidt.py @@ -47,13 +47,11 @@ class HilbertSchmidt(Operation): u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: - QuantumFunctionError: - - * The argument ``u_tape`` must be a ``QuantumTape``. - * ``v_function`` is not a valid quantum function. - * ``U`` and ``V`` do not have the same number of wires. - * The wires ``v_wires`` are a subset of ``V`` wires. - * ``u_tape`` and ``v_tape`` must act on distinct wires. + QuantumFunctionError: The argument ``u_tape`` must be a ``QuantumTape``. + QuantumFunctionError: ``v_function`` is not a valid quantum function. + QuantumFunctionError: ``U`` and ``V`` do not have the same number of wires. + QuantumFunctionError: The wires ``v_wires`` are a subset of ``V`` wires. + QuantumFunctionError: ``u_tape`` and ``v_tape`` must act on distinct wires. **Reference** @@ -202,13 +200,11 @@ class LocalHilbertSchmidt(HilbertSchmidt): u_tape (.QuantumTape): `U`, the unitary to be compiled as a ``qml.tape.QuantumTape``. Raises: - QuantumFunctionError: - - * The argument u_tape must be a QuantumTape. - * ``v_function`` is not a valid Quantum function. - * `U` and `V` do not have the same number of wires. - * The wires ``v_wires`` are a subset of `V` wires. - * u_tape and v_tape must act on distinct wires. + QuantumFunctionError: The argument u_tape must be a QuantumTape + QuantumFunctionError: ``v_function`` is not a valid Quantum function. + QuantumFunctionError: `U` and `V` do not have the same number of wires. + QuantumFunctionError: The wires ``v_wires`` are a subset of `V` wires. + QuantumFunctionError: u_tape and v_tape must act on distinct wires. **Reference**