Source code for geqo.core.basic
from geqo.core.quantum_operation import QuantumOperation
[docs]
class BasicGate(QuantumOperation):
"""This class allows to define a unitary operation with a specified name and a specified number of qubits.
For instance, a unitary gate with the name "CNOT" on two qubits is defined with ```BasicGate("CNOT", 2)```.
The inverse can be obtained with ```getInverse()``` and it returns an object of type ```InverseBasicGate```.
Note that the definition of the corresponding unitary matrix depends on the chosen backend and must be
defined with the function ```setValue``` of the backend.
"""
def __init__(self, name, numberQubits):
"""
The constructor of this class takes a name for the gate and the number of qubits.
Parameters
----------
name : String
The name of this BasicGate.
numberQubits : int
The number of qubits, which this gate acts on.
Returns
-------
InverseBasicGate : geqo.core.basic.BasicGate
An object of this class that corresponds to the gate with the given name and qubits.
"""
self.name = name
self.numberQubits = numberQubits
def __repr__(self):
"""
Returns
-------
string_representation : String
Representation of the object as character string.
"""
return 'BasicGate("' + self.name + '", ' + str(self.numberQubits) + ")"
def __eq__(self, other):
"""
Comparator with other objects.
Parameters
----------
other : An object, which should be compared to this object.
Returns
-------
True : If the provided object is of the same type and if has the same name and the same number of qubits.
False : else
"""
if not isinstance(other, BasicGate):
return False
return self.name == other.name and self.numberQubits == other.numberQubits
[docs]
def getInverse(self):
"""
Return an object of the class ```InverseBasicGate```, which corresponds to the inverse of the gate. The name and the number of qubits are the same.
Returns
-------
InverseBasicGate : geqo.core.basic.InverseBasicGate
A new object of the class, which corresponds to the inverse gate.
"""
return InverseBasicGate(self.name, self.numberQubits)
[docs]
def getEquivalentSequence(self):
"""
Return a sequence, which is equivalent to this gate. Here, no ```Sequence``` object is returned because a basic gate cannot be decomposed.
Returns
-------
None : None
No ```Sequence``` object is returned because this gate cannot be decomposed.
"""
return None
[docs]
def getNumberQubits(self):
"""
Return the number of qubits that are used by this BasicGate.
Returns
-------
numberQubits : int
The number of qubits, which are used by this BasicGate.
"""
return self.numberQubits
[docs]
def getNumberClassicalBits(self):
"""
Returns
-------
0 : int
The number of classical bits, which are used by PermuteQubits, is zero.
"""
return 0
[docs]
def hasDecomposition(self):
"""
Returns
-------
False : Bool
A BasicGate is considered to be as a non-decomposable operation.
"""
return False
[docs]
def isUnitary(self):
"""
Returns
-------
True : Bool
This is a unitary operation.
"""
return True
[docs]
class InverseBasicGate(QuantumOperation):
"""This class allows to define the inverse of a unitary operation with a specified name and a specified number of qubits.
For instance, a unitary gate with the name "CNOT" on two qubits is defined with ```BasicGate("CNOT", 2)```.
The inverse can be obtained with ```getInverse()``` and it returns an object of type ```BasicGate```.
Note that the definition of the corresponding unitary matrix depends on the chosen backend and must be
defined with the function ```setValue``` of the backend.
"""
def __init__(self, name, numberQubits):
"""
The constructor of this class takes a name for the gate and the number of qubits.
Parameters
----------
name : String
The name of this InverseBasicGate.
numberQubits : int
The number of qubits, which this gate acts on.
Returns
-------
InverseBasicGate : geqo.core.basic.InverseBasicGate
An object of this class that corresponds to the gate with the given name and qubits.
"""
self.name = name
self.numberQubits = numberQubits
def __repr__(self):
"""
Returns
-------
string_representation : String
Representation of the object as character string.
"""
return 'InverseBasicGate("' + self.name + '", ' + str(self.numberQubits) + ")"
def __eq__(self, other):
"""
Comparator with other objects.
Parameters
----------
other : An object, which should be compared to this object.
Returns
-------
True : If the provided object is of the same type and if has the same name and the same number of qubits.
False : else
"""
if not isinstance(other, InverseBasicGate):
return False
return self.name == other.name and self.numberQubits == other.numberQubits
[docs]
def getInverse(self):
"""
Return an object of the class ```BasicGate```, which corresponds to the inverse of the gate. The name and the number of qubits are the same.
Returns
-------
BasicGate : geqo.core.basic.BasicGate
A new object of the class, which corresponds to the inverse gate.
"""
return BasicGate(self.name, self.numberQubits)
[docs]
def getEquivalentSequence(self):
"""
Return a sequence, which is equivalent to this gate. Here, no ```Sequence``` object is returned because a basic gate cannot be decomposed.
Returns
-------
None : None
No ```Sequence``` object is returned because this gate cannot be decomposed.
"""
return None
[docs]
def getNumberQubits(self):
"""
Return the number of qubits that are used by this InverseBasicGate.
Returns
-------
numberQubits : int
The number of qubits, which are used by this InverseBasicGate.
"""
return self.numberQubits
[docs]
def getNumberClassicalBits(self):
"""
Returns
-------
0 : int
The number of classical bits, which are used by PermuteQubits, is zero.
"""
return 0
[docs]
def hasDecomposition(self):
"""
Returns
-------
False : Bool
A BasicGate is considered to be as a non-decomposable operation.
"""
return False
[docs]
def isUnitary(self):
"""
Returns
-------
True : Bool
This is a unitary operation.
"""
return True