in rfcs/20210731-tfjs-named-tensors/gtensor.ts [128:141]
export function liftFnOverDim<D extends DName, G extends DName, G2 extends DName>(
liftDim: DimensionFnToLift<D,G,G2>,
toLiftFn: (input: Dims<G>) => Dims<G2>): (input: Dims<G|D>) => Dims<G2|D> {
function liftedFn(input: Dims<G|D>): Dims<G2|D> {
if (!((liftDim as DName) in input)) {
throw new ValueError(`The lift dimension ${liftDim
} must occur in input's dimensions: ${Object.keys(input)}`);
}
const unstacked_dims = input[liftDim as D].unstack() as never as Dims<G>[];
return stack(liftDim as D, unstacked_dims.map(toLiftFn));
}
return liftedFn;
}