Source code for geqo.initialization.state
from geqo.__logger__ import get_logger
from geqo.core.quantum_circuit import Sequence
from geqo.core.quantum_operation import QuantumOperation
logger = get_logger(__name__)
[docs]
class SetBits(QuantumOperation):
"""This operations allows to set the values of classical bits.
For instance, the operation ```setBits("values", 3)``` sets
three classical bits to the values with the name ```values```.
Note that the definition of ```values``` depends on the chosen
backend and must be defined with the function ```setValue``` of the backend.
"""
def __init__(self, name, numberBits):
"""
The constructor of this class takes a name for the bit settings and the number of bits.
Parameters
----------
name : String
The name of the bit vector to be used for setting the bits.
numberBits : int
The number of classical bits, on which the operator acts.
Returns
-------
SetBits : geqo.initialization.state.SetBits
An object that corresponds to setting classical bits to specific values.
"""
self.name = name
self.numberBits = numberBits
def __repr__(self):
"""
Returns
-------
string_representation : String
Representation of the object as character string.
"""
return 'SetBits("' + self.name + '", ' + str(self.numberBits) + ")"
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 bits.
False : else
"""
if not isinstance(other, SetBits):
return False
else:
return self.name == other.name and self.numberBits == other.numberBits
[docs]
def getInverse(self):
"""
Calling this method raises an exception because this operation has no inverse.
"""
logger.error("SetBits has no inverse")
raise Exception("SetBits has no inverse")
[docs]
def getEquivalentSequence(self):
"""
Return a sequence, which is equivalent to this gate. A ```Sequence``` object is returned with this operation as only component in the list of operations.
Returns
-------
Sequence : geqo.core.quantum_circuits.Sequence
An object of the class```Sequence``` is returned with this operation and the appropriate classical targets in it.
"""
allBits = list(range(self.numberBits))
return Sequence(allBits, [], [(self, allBits)])
[docs]
def getNumberQubits(self):
"""
Return the number of qubits that are used by this operation.
Returns
-------
0 : int
This operation only acts on classical bits.
"""
return 0
[docs]
def getNumberClassicalBits(self):
"""
Return the number of classical bits that are used by this operation.
Returns
-------
numberBits : int
This operation acts on the specified number of classical bits.
"""
return self.numberBits
[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
-------
False : Bool
This is not a unitary operation.
"""
return False
[docs]
class SetQubits(QuantumOperation):
"""This operations allows to set the values of qubits.
For instance, the operation ```setQubits("values", 3)``` sets
three qubits to either |0> or |1> with the name ```values```.
Note that the definition of ```values``` 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 qubit settings and the number of qubits.
Parameters
----------
name : String
The name of the bits to be used for setting the qubits in the standard basis.
numberQubits : int
The number of qubits, on which the operator acts.
Returns
-------
SetQubits : geqo.initialization.state.SetQubits
An object that corresponds to setting qubits to a specific state in the standard basis.
"""
self.name = name
self.numberQubits = numberQubits
def __repr__(self):
"""
Returns
-------
string_representation : String
Representation of the object as character string.
"""
return 'SetQubits("' + 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, SetQubits):
return False
else:
return self.name == other.name and self.numberQubits == other.numberQubits
[docs]
def getInverse(self):
"""
Calling this method raises an exception because this operation has no inverse.
"""
logger.error("SetQubits has no inverse")
raise Exception("SetQubits has no inverse")
[docs]
def getEquivalentSequence(self):
"""
Return a sequence, which is equivalent to this gate. A ```Sequence``` object is returned with this operation as only component in the list of operations.
Returns
-------
Sequence : geqo.core.quantum_circuits.Sequence
An object of the class```Sequence``` is returned with this operation and the appropriate quantum targets in it.
"""
allQubits = list(range(self.numberQubits))
return Sequence([], allQubits, [(self, allQubits)])
[docs]
def getNumberQubits(self):
"""
Return the number of qubits that are used by this operation.
Returns
-------
numberQubits : int
This operation only acts on the specified number of qubits.
"""
return self.numberQubits
[docs]
def getNumberClassicalBits(self):
"""
Return the number of classical bits that are used by this operation.
Returns
-------
0 : int
This operation only acts on quantum bits.
"""
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
-------
False : Bool
This is not a unitary operation.
"""
return False
[docs]
class SetDensityMatrix(QuantumOperation):
"""This class allows to set the density matrix of one or more qubits. Before the
state is set, the affected qubits are traced out, leading to a mixed state in
general.
For instance, the operation ```SetDensityMatrix("ρ", 2)``` sets two qubits to
the density matrix with the name ```ρ```.
Note that the definition of the corresponding density 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 bit settings and the number of qubits.
Parameters
----------
name : String
The name of the density matrix to be used for setting the qubits.
numberQubits : int
The number of qubits, on which the operator acts.
Returns
-------
SetDensityMatrix : geqo.initialization.state.SetDensityMatrix
An object that corresponds to setting the state of qubits to a specific density matrix with the given name.
"""
self.name = name
self.numberQubits = numberQubits
def __repr__(self):
"""
Returns
-------
string_representation : String
Representation of the object as character string.
"""
return 'SetDensityMatrix("' + 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, SetDensityMatrix):
return False
else:
return self.name == other.name and self.numberQubits == other.numberQubits
[docs]
def getInverse(self):
"""
Calling this method raises an exception because this operation has no inverse.
"""
logger.error("SetDensityMatrix has no inverse")
raise Exception("SetDensityMatrix has no inverse")
[docs]
def getEquivalentSequence(self):
"""
Return a sequence, which is equivalent to this gate. A ```Sequence``` object is returned with this operation as only component in the list of operations.
Returns
-------
Sequence : geqo.core.quantum_circuits.Sequence
An object of the class```Sequence``` is returned with this operation and the appropriate quantum targets in it.
"""
allQubits = list(range(self.numberQubits))
return Sequence([], allQubits, [(self, allQubits)])
[docs]
def getNumberQubits(self):
"""
Return the number of qubits that are used by this operation.
Returns
-------
numberQubits : int
This operation only acts on the specified number of qubits.
"""
return self.numberQubits
[docs]
def getNumberClassicalBits(self):
"""
Return the number of classical bits that are used by this operation.
Returns
-------
0 : int
This operation only acts on quantum bits.
"""
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
-------
False : Bool
This is not a unitary operation.
"""
return False