targeted_einsum¶
-
pyquil.numpy_simulator.
targeted_einsum
(gate, wf, wf_target_inds)[source]¶ Left-multiplies the given axes of the wf tensor by the given gate matrix.
Note that the matrix must have a compatible tensor structure. For example, if you have an 6-qubit state vector
wf
with shape (2, 2, 2, 2, 2, 2), and a 2-qubit unitary operationop
with shape (2, 2, 2, 2), and you want to applyop
to the 5th and 3rd qubits withininput_state
, then the output state vector is computed as follows:output_state = targeted_einsum(op, input_state, [5, 3])
This method also works when the right hand side is a matrix instead of a vector. If a unitary circuit’s matrix is
old_effect
, and you append a CNOT(q1, q4) operation onto the circuit, where the control q1 is the qubit at offset 1 and the target q4 is the qubit at offset 4, then the appended circuit’s unitary matrix is computed as follows:new_effect = targeted_left_multiply(CNOT.reshape((2, 2, 2, 2)), old_effect, [1, 4])