export function liftFnOverDim()

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;
}