View source on GitHub |
A StepResult
that includes StateVectorMixin
methods.
Inherits From: StateVectorMixin
, StateVectorStepResult
, StepResultBase
, StepResult
cirq.SparseSimulatorStep(
sim_state: 'cirq.SimulationStateBase[cirq.StateVectorSimulationState]',
dtype: Type[np.complexfloating] = np.complex64
)
Args | |
---|---|
sim_state
|
The qubit:SimulationState lookup for this step. |
dtype
|
The numpy.dtype used by the simulation. One of
numpy.complex64 or numpy.complex128 .
|
Attributes | |
---|---|
measurements
|
|
qubit_map
|
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
\[ \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
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. |
sample
sample(
qubits: List['cirq.Qid'],
repetitions: int = 1,
seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None
) -> np.ndarray
Samples from the system at this point in the computation.
Note that this does not collapse the state vector.
Args | |
---|---|
qubits
|
The qubits to be sampled in an order that influence the returned measurement results. |
repetitions
|
The number of samples to take. |
seed
|
A seed for the pseudorandom number generator. |
Returns | |
---|---|
Measurement results with True corresponding to the |1⟩ state.
The outer list is for repetitions, and the inner corresponds to
measurements ordered by the supplied qubits. These lists
are wrapped as a numpy ndarray.
|
sample_measurement_ops
sample_measurement_ops(
measurement_ops: List['cirq.GateOperation'],
repetitions: int = 1,
seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None,
*,
_allow_repeated=False
) -> Dict[str, np.ndarray]
Samples from the system at this point in the computation.
Note that this does not collapse the state vector.
In contrast to sample
which samples qubits, this takes a list of
cirq.GateOperation
instances whose gates are cirq.MeasurementGate
instances and then returns a mapping from the key in the measurement
gate to the resulting bit strings. Different measurement operations must
not act on the same qubits.
Args | |
---|---|
measurement_ops
|
GateOperation instances whose gates are
MeasurementGate instances to be sampled form.
|
repetitions
|
The number of samples to take. |
seed
|
A seed for the pseudorandom number generator. |
_allow_repeated
|
If True, adds extra dimension to the result, corresponding to the number of times a key is repeated. |
Returns: A dictionary from measurement gate key to measurement results. Measurement results are stored in a 2-dimensional numpy array, the first dimension corresponding to the repetition and the second to the actual boolean measurement results (ordered by the qubits being measured.)
Raises | |
---|---|
ValueError
|
If the operation's gates are not MeasurementGate
instances or a qubit is acted upon multiple times by different
operations from measurement_ops .
|
state_vector
state_vector(
copy: bool = False
)
Return the state vector at this point in the computation.
The state 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, then the returned state is a copy of the state vector. If False, then the state vector is not copied, potentially saving memory. If one only needs to read derived parameters from the state vector and store then using False can speed up simulation by eliminating a memory copy. |