# cirq.ApplyChannelArgs¶

class cirq.ApplyChannelArgs(target_tensor: numpy.ndarray, out_buffer: numpy.ndarray, auxiliary_buffer0: numpy.ndarray, auxiliary_buffer1: numpy.ndarray, left_axes: Iterable[int], right_axes: Iterable[int])[source]

Arguments for efficiently performing a channel.

A channel performs the mapping

$$X \rightarrow \sum_i A_i X A_i^\dagger$$
for operators $A_i$ that satisfy the normalization condition
$$\sum_i A_i^\dagger A_i = I.$$
The receiving object is expected to mutate target_tensor so that it
contains the density matrix after multiplication, and then return
target_tensor. Alternatively, if workspace is required, the
receiving object can overwrite out_buffer with the results and
return out_buffer. Or, if the receiving object is attempting to be
simple instead of fast, it can create an entirely new array and return
that.
target\_tensor
The input tensor that needs to be left and right multiplied and summed,
representing the effect of the channel. The tensor will have the shape
(2, 2, 2, …, 2). It usually corresponds to a multi-qubit density
matrix, with the first n indices corresponding to the rows of the
density matrix and the last n indices corresponding to the columns of
the density matrix.
out\_buffer
Pre-allocated workspace with the same shape and dtype as the target
tensor. If buffers are used, the result should end up in this buffer. It
is the responsibility of calling code to notice if the result is this
buffer.
auxiliary\_buffer0
Pre-allocated workspace with the same shape and dtype as the target
tensor.
auxiliary\_buffer1
Pre-allocated workspace with the same shape and dtype as the target
tensor.
left\_axes

Which axes to multiply the left action of the channel upon.

right\_axes

Which axes to multiply the right action of the channel upon.

__init__(target_tensor: numpy.ndarray, out_buffer: numpy.ndarray, auxiliary_buffer0: numpy.ndarray, auxiliary_buffer1: numpy.ndarray, left_axes: Iterable[int], right_axes: Iterable[int])[source]

Args for apply channel.

Parameters
• target_tensor – The input tensor that needs to be left and right multiplied and summed representing the effect of the channel. The tensor will have the shape (2, 2, 2, …, 2). It usually corresponds to a multi-qubit density matrix, with the first n indices corresponding to the rows of the density matrix and the last n indices corresponding to the columns of the density matrix.

• out_buffer – Pre-allocated workspace with the same shape and dtype as the target tensor. If buffers are used, the result should end up in this buffer. It is the responsibility of calling code to notice if the result is this buffer.

• auxiliary_buffer0 – Pre-allocated workspace with the same shape and dtype as the target tensor.

• auxiliary_buffer1 – Pre-allocated workspace with the same shape and dtype as the target tensor.

• left_axes – Which axes to multiply the left action of the channel upon.

• right_axes – Which axes to multiply the right action of the channel upon.