# cirq.partial_trace¶

cirq.partial_trace(tensor: numpy.ndarray, keep_indices: List[int]) → numpy.ndarray[source]

Takes the partial trace of a given tensor.

The input tensor must have shape (d_0, ..., d_{k-1}, d_0, ..., d_{k-1}).
The trace is done over all indices that are not in keep_indices. The
resulting tensor has shape (d_{i_0}, ..., d_{i_r}, d_{i_0}, ..., d_{i_r})
where i_j is the jth element of keep_indices.
Parameters
• tensor – The tensor to sum over. This tensor must have a shape (d_0, …, d_{k-1}, d_0, …, d_{k-1}).

• keep_indices – Which indices to not sum over. These are only the indices of the first half of the tensors indices (i.e. all elements must be between 0 and tensor.ndims / 2 - 1 inclusive).

Raises

ValueError – if the tensor is not of the correct shape or the indices are not from the first half of valid indices for the tensor.