Skip to content

Instantly share code, notes, and snippets.

@nelimee
Created January 10, 2019 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nelimee/d0a7fd7dacfdb311d3ac8dc67b36192b to your computer and use it in GitHub Desktop.
Save nelimee/d0a7fd7dacfdb311d3ac8dc67b36192b to your computer and use it in GitHub Desktop.
Implementation of a controlled Rzz gate in qiskit<0.7
# ======================================================================
# Copyright CERFACS (November 2018)
# Contributor: Adrien Suau (suau@cerfacs.fr)
#
# This software is governed by the CeCILL-B license under French law and
# abiding by the rules of distribution of free software. You can use,
# modify and/or redistribute the software under the terms of the
# CeCILL-B license as circulated by CEA, CNRS and INRIA at the following
# URL "http://www.cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided
# only with a limited warranty and the software's author, the holder of
# the economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards
# their requirements in conditions enabling the security of their
# systems and/or data to be ensured and, more generally, to use and
# operate it in the same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL-B license and that you accept its terms.
# ======================================================================
"""This module contains functions to apply a controlled-RZZ gate.
The Rzz gate is a phase shift gate:
$R_{zz} = \begin{pmatrix}e^{i\theta} & 0\\0 & e^{i\theta}\end{pmatrix}$
"""
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import CompositeGate
QubitType = Tuple[QuantumRegister, int]
class CRZZGate(CompositeGate):
def __init__(self, theta: float, ctrl: QubitType, target: QubitType,
circuit: QuantumCircuit = None):
"""Initialize the CRzzGate class.
:param theta: Phase added to the quantum state of qubit.
:param ctrl: The control qubit used to control the RZZ gate.
:param target: The qubit on which the RZZ gate is applied.
:param circuit: The associated quantum circuit.
"""
used_qubits = [ctrl, target]
super().__init__(self.__class__.__name__, # name
[theta], # parameters
used_qubits, # qubits
circuit) # circuit
self.cu1(theta, ctrl, target)
self.cx(ctrl, target)
self.cu1(theta, ctrl, target)
self.cx(ctrl, target)
def crzz(self, theta: float, ctrl: QubitType, target: QubitType) -> CRZZGate:
self._check_qubit(ctrl)
self._check_qubit(target)
self._check_dups([ctrl, target])
return self._attach(CRZZGate(theta, ctrl, target, self))
QuantumCircuit.crzz = crzz
CompositeGate.crzz = crzz
qreg = QuantumRegister(3)
qcirc = QuantumCircuit(qreg)
qcirc.crzz(0.1, qreg[0], qreg[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment