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.

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).

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.