def METHOD_NAME(wires, permutation):  # pylint: disable=arguments-differ
    r"""Representation of the operator as a product of other operators.
    .. math:: O = O_1 O_2 \dots O_n.
    .. seealso:: :meth:`~.Permute.decomposition`.
    Args:
        wires (Any or Iterable[Any]): wires that the operator acts on
        permutation (list[Any]): A list of wire labels that represents the new ordering of wires
            after the permutation.
    Returns:
        list[.Operator]: decomposition of the operator
    """
    op_list = []
    # Temporary storage to keep track as we permute
    working_order = wires.tolist()
    # Go through the new order and shuffle things one by one
    for idx_here, here in enumerate(permutation):
        if working_order[idx_here] != here:
            # Where do we need to send the qubit at this location?
            idx_there = working_order.index(permutation[idx_here])
            # SWAP based on the labels of the wires
            op_list.append(SWAP(wires=wires.subset([idx_here, idx_there])))
            # Update the working order to account for the SWAP
            working_order[idx_here], working_order[idx_there] = (
                working_order[idx_there],
                working_order[idx_here],
            )
    return op_list