Source: swapaxes.mjs

import { array, tester, NDArray, asarray, transpose } from './core.mjs';

/**
 * @param {NDArray} a
 * @param {number} axis1
 * @param {number} axis2
 * @returns {NDArray}
 */
export function swapaxes(a, axis1, axis2) {
	a = asarray(a);

	let axes = [...Array(a.ndim).keys()];
	[axes[axis1], axes[axis2]] = [axes[axis2], axes[axis1]];

	return transpose(a, axes);
}

process.env.PRODUCTION ||
	tester
		.add(
			swapaxes,
			() => {
				let x = array([[1, 2, 3]]);
				return swapaxes(x, 0, 1);
			},
			() => array([[1], [2], [3]])
		)
		.add(
			swapaxes,
			() => {
				let x = array([
					[
						[0, 1],
						[2, 3],
					],
					[
						[4, 5],
						[6, 7],
					],
				]);
				return swapaxes(x, 0, 2);
			},
			() =>
				array([
					[
						[0, 4],
						[2, 6],
					],
					[
						[1, 5],
						[3, 7],
					],
				])
		);