A mixin that provide methods for objects that have a state vector.
cirq.StateVectorMixin(
qubit_map: Optional[Mapping['cirq.Qid', int]] = None, *args, **kwargs
)
Args |
qubit_map
|
A map from the Qubits in the Circuit to the index
of this qubit for a canonical ordering. This canonical ordering
is used to define the state (see the state_vector() method).
|
*args
|
Passed on to the class that this is mixed in with.
|
**kwargs
|
Passed on to the class that this is mixed in with.
|
Methods
bloch_vector_of
View source
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
View source
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
\[
\rho = \begin{bmatrix}
0.5 & 0.5 \\
0.5 & 0.5
\end{bmatrix}
\]
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
View source
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
View source
@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.
|