# toqito.perms.permutation_operator¶

toqito.perms.permutation_operator(dim: list[int] | int, perm: list[int], inv_perm: bool = False, is_sparse: bool = False) → np.ndarray[source]

Produce a unitary operator that permutes subsystems.

Generates a unitary operator that permutes the order of subsystems according to the permutation vector perm, where the $$i^{th}$$ subsystem has dimension dim[i].

If inv_perm = True, it implements the inverse permutation of perm. The permutation operator return is full is is_sparse is False and sparse if is_sparse is True.

Examples

The permutation operator obtained with dimension $$d = 2$$ is equivalent to the standard swap operator on two qubits

$\begin{split}P_{2, [2, 1]} = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}\end{split}$

Using toqito, this can be achieved in the following manner.

>>> from toqito.perms import permutation_operator
>>> permutation_operator(2, [2, 1])
[[1., 0., 0., 0.],
[0., 0., 1., 0.],
[0., 1., 0., 0.],
[0., 0., 0., 1.]]

Parameters: dim – The dimensions of the subsystems to be permuted. perm – A permutation vector. inv_perm – Boolean dictating if perm is inverse or not. is_sparse – Boolean indicating if return is sparse or not. Permutation operator of dimension dim.