A mixin that provide methods for objects that have a state vector.
cirq.StateVectorMixin(
qubit_map: Optional[Mapping['cirq.Qid', int]] = None, *args, **kwargs
)
Methods
bloch_vector_of
bloch_vector_of(
qubit: 'cirq.Qid'
) -> np.ndarray
Returns the bloch vector of a qubit in the state.
Calculates the bloch vector of the given qubit in the state given by self.state_vector(), given that self.state_vector() follows the standard Kronecker convention of numpy.kron.
Args | |
---|---|
qubit
|
qubit who's bloch vector we want to find. |
Returns | |
---|---|
A length 3 numpy array representing the qubit's bloch vector. |
Raises | |
---|---|
ValueError
|
if the size of the state represents more than 25 qubits. |
IndexError
|
if index is out of range for the number of qubits corresponding to the state. |
density_matrix_of
density_matrix_of(
qubits: Optional[List['cirq.Qid']] = None
) -> np.ndarray
Returns the density matrix of the state.
Calculate the density matrix for the system on the qubits provided. Any qubits not in the list that are present in self.state_vector() will be traced out. If qubits is None, the full density matrix for self.state_vector() is returned, given self.state_vector() follows standard Kronecker convention of numpy.kron.
For example, if self.state_vector()
returns
np.array([1/np.sqrt(2), 1/np.sqrt(2)], dtype=np.complex64)
,
then density_matrix_of(qubits = None)
gives us
ρ=[0.50.50.50.5]
Args | |
---|---|
qubits
|
list containing qubit IDs that you would like to include in the density matrix (i.e.) qubits that WON'T be traced out. |
Returns | |
---|---|
A numpy array representing the density matrix. |
Raises | |
---|---|
ValueError
|
if the size of the state represents more than 25 qubits. |
IndexError
|
if the indices are out of range for the number of qubits corresponding to the state. |
dirac_notation
dirac_notation(
decimals: int = 2
) -> str
Returns the state vector as a string in Dirac notation.
Args | |
---|---|
decimals
|
How many decimals to include in the pretty print. |
Returns | |
---|---|
A pretty string consisting of a sum of computational basis kets and non-zero floats of the specified accuracy. |
state_vector
@abc.abstractmethod
state_vector( copy: bool = False ) -> np.ndarray
Return the state vector (wave function).
The vector is returned in the computational basis with these basis
states defined by the qubit_map
. In particular the value in the
qubit_map
is the index of the qubit, and these are translated into
binary vectors where the last qubit is the 1s bit of the index, the
second-to-last is the 2s bit of the index, and so forth (i.e. big
endian ordering).
Example | |
---|---|
qubit_map
|
{QubitA: 0, QubitB: 1, QubitC: 2}
Then the returned vector will have indices mapped to qubit basis
states like the following table
| | QubitA | QubitB | QubitC | | :-: | :----: | :----: | :----: | | 0 | 0 | 0 | 0 | | 1 | 0 | 0 | 1 | | 2 | 0 | 1 | 0 | | 3 | 0 | 1 | 1 | | 4 | 1 | 0 | 0 | | 5 | 1 | 0 | 1 | | 6 | 1 | 1 | 0 | | 7 | 1 | 1 | 1 | |
Args | |
---|---|
copy
|
If True, the returned state vector will be a copy of that stored by the object. This is potentially expensive for large state vectors, but prevents mutation of the object state, e.g. for operating on intermediate states of a circuit. Defaults to False. |