function transpose_(x, perm, conjugate) {
    const $x = (0, _tensorUtilEnv.convertToTensor)(x, "x", "transpose");
    if (perm == null) perm = $x.shape.map((s, i)=>i).reverse();
    _util.assert($x.rank === perm.length, ()=>`Error in transpose: rank of input ${$x.rank} ` + `must match length of perm ${perm}.`);
    perm.forEach((axis)=>{
        _util.assert(axis >= 0 && axis < $x.rank, ()=>`All entries in 'perm' must be between 0 and ${$x.rank - 1}` + ` but got ${perm}`);
    });
    if ($x.rank <= 1) return $x.clone();
    const inputs = {
        x: $x
    };
    const attrs = {
        perm
    };
    if ($x.dtype === "complex64") return (0, _globals.tidy)(()=>{
        let $real = (0, _real.real)($x);
        let $imag = (0, _imag.imag)($x);
        $real = (0, _engine.ENGINE).runKernel((0, _kernelNames.Transpose), {
            x: $real
        }, attrs);
        $imag = (0, _engine.ENGINE).runKernel((0, _kernelNames.Transpose), {
            x: $imag
        }, attrs);
        if (conjugate) $imag = (0, _neg.neg)($imag);
        return (0, _complex.complex)($real, $imag);
    });
    return (0, _engine.ENGINE).runKernel((0, _kernelNames.Transpose), inputs, attrs);
}
Transposes the `tf.Tensor`. Permutes the dimensions according to `perm`.

The returned `tf.Tensor`'s dimension `i` will correspond to the input
dimension `perm[i]`. If `perm` is not given, it is set to `[n-1...0]`,
where `n` is the rank of the input `tf.Tensor`. Hence by default, this
operation performs a regular matrix transpose on 2-D input `tf.Tensor`s.

```js
const a = tf.tensor2d([1, 2, 3, 4, 5, 6], [2, 3]);

a.transpose().print();  // or tf.transpose(a)
```

@param x The tensor to transpose.
@param perm The permutation of the dimensions of a.
@param conjugate Will conjugate complex input if true.

@doc {heading: 'Operations', subheading: 'Matrices'}