cirq.sim.ActOnStateVectorArgs

State and context for an operation acting on a state vector.

Inherits From: ActOnArgs, OperationTarget

There are two common ways to act on this object:

  1. Directly edit the target_tensor property, which is storing the state vector of the quantum system as a numpy array with one axis per qudit.
  2. Overwrite the available_buffer property with the new state vector, and then pass available_buffer into swap_target_tensor_for.

target_tensor The state vector to act on, stored as a numpy array with one dimension for each qubit in the system. Operations are expected to perform inplace edits of this object.
available_buffer A workspace with the same shape and dtype as target_tensor. Used by operations that cannot be applied to target_tensor inline, in order to avoid unnecessary allocations. Passing available_buffer into swap_target_tensor_for will swap it for target_tensor.
qubits Determines the canonical ordering of the qubits. This is often used in specifying the initial state, i.e. the ordering of the computational basis states.
prng The pseudo random number generator to use for probabilistic effects.
log_of_measurement_results A mutable object that measurements are being recorded into.
axes The indices of axes corresponding to the qubits that the operation is supposed to act upon.

axes THIS FUNCTION IS DEPRECATED.

IT WILL BE REMOVED IN cirq v0.13.

Use protocols.act_on instead.

log_of_measurement_results Gets the log of measurement results.
qubits Gets the qubit order maintained by this target.

Methods

apply_operation

View source

Applies the operation to the state.

copy

View source

Creates a copy of the object.

create_merged_state

View source

Creates a final merged state.

factor

View source

Splits two state spaces after a measurement or reset.

get_axes

View source

kronecker_product

View source

Joins two state spaces together.

measure

View source

Adds a measurement result to the log.

Args
qubits The qubits to measure.
key The key the measurement result should be logged under. Note that operations should only store results under keys they have declared in a _measurement_keys_ method.
invert_mask The invert mask for the measurement.

rename

View source

Renames q1 to q2.

Args
q1 The qubit to rename.
q2 The new name.
inplace True to rename the qubit in the current object, False to create a copy with the qubit renamed.

Returns
The original object with the qubits renamed if inplace is requested, or a copy of the original object with the qubits renamed otherwise.

Raises
ValueError if the qubits are of different dimensionality.

sample

View source

Samples the state value.

subspace_index

View source

An index for the subspace where the target axes equal a value.

Args
little_endian_bits_int The desired value of the qubits at the targeted axes, packed into an integer. The least significant bit of the integer is the desired bit for the first axis, and so forth in increasing order. Can't be specified at the same time as big_endian_bits_int.

When operating on qudits instead of qubits, the same basic logic applies but in a different basis. For example, if the target axes have dimension [a:2, b:3, c:2] then the integer 10 decomposes into [a=0, b=2, c=1] via 7 = 1(32) + 2*(2) + 0.

big_endian_bits_int The desired value of the qubits at the targeted axes, packed into an integer. The most significant bit of the integer is the desired bit for the first axis, and so forth in decreasing order. Can't be specified at the same time as little_endian_bits_int.

When operating on qudits instead of qubits, the same basic logic applies but in a different basis. For example, if the target axes have dimension [a:2, b:3, c:2] then the integer 10 decomposes into [a=1, b=2, c=0] via 7 = 1(32) + 2*(2) + 0.

Returns
A value that can be used to index into target_tensor and available_buffer, and manipulate only the part of Hilbert space corresponding to a given bit assignment.

Example:

If target_tensor is a 4 qubit tensor and axes is [1, 3] and then this method will return the following when given little_endian_bits=0b01:

`(slice(None), 0, slice(None), 1, Ellipsis)`

Therefore the following two lines would be equivalent:

args.target_tensor[args.subspace_index(0b01)] += 1

args.target_tensor[:, 0, :, 1] += 1

swap

View source

Swaps two qubits.

This only affects the index, and does not modify the underlying state.

Args
q1 The first qubit to swap.
q2 The second qubit to swap.
inplace True to swap the qubits in the current object, False to create a copy with the qubits swapped.

Returns
The original object with the qubits swapped if inplace is requested, or a copy of the original object with the qubits swapped otherwise.

Raises
ValueError if the qubits are of different dimensionality.

swap_target_tensor_for

View source

Gives a new state vector for the system.

Typically, the new state vector should be args.available_buffer where args is this cirq.ActOnStateVectorArgs instance.

Args
new_target_tensor The new system state. Must have the same shape and dtype as the old system state.

transpose_to_qubit_order

View source

Physically reindexes the state by the new basis.

__getitem__

View source

Gets the item associated with the qubit.

__iter__

View source

Iterates the keys of the mapping.

__len__

View source

Gets the number of items in the mapping.