# Copyright (c) ONNX Project Contributors

# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations

import numpy as np

from onnx.reference.op_run import OpRun


class Transpose(OpRun):
    def _run(self, data, perm=None):  # type: ignore
        perm_ = None if (perm is None or len(perm) == 0) else perm
        if perm_ is None:
            return (np.transpose(data),)
        if len(perm_) != len(data.shape):
            raise RuntimeError(
                f"Inconsistent permutation {perm_!r} with shape {data.shape!r}."
            )
        return (np.transpose(data, axes=perm_),)
