Source: ogrid.mjs

import { tester, arange, array, asarray, ones, zeros, slice, NDArray, Slice } from './core.mjs';

/**
 * @param  {...Slice} slices
 * @returns {NDArray}
 */
export function ogrid(...slices) {
	let out = [];
	for (let i = 0; i < slices.length; i++) {
		let { start, stop, step, slicelength } = slices[i].indices();
		let data = Array(slicelength);
		for (let i = 0; i < slicelength; i++) {
			data[i] = start + i * step;
		}
		let shape = Array(slices.length).fill(1);
		shape[i] = slicelength;
		out.push(array(data).reshape(shape));
	}
	return out;
}

process.env.PRODUCTION ||
	tester
		.add(
			ogrid,
			() => ogrid(slice('0:5'), slice('0:5')),
			() => [array([[0], [1], [2], [3], [4]]), array([[0, 1, 2, 3, 4]])]
		)
		.add(
			ogrid,
			() => ogrid(slice('3:5'), slice('0:-5'), slice('0:1')),
			() => [array([[[3]], [[4]]]), array([]).reshape([1, 0, 1]), array([[[0]]])]
		);