function broadcastTo_(x, shape) {
    let input = (0, _tensorUtilEnv.convertToTensor)(x, "broadcastTo", "x");
    const xShape = input.shape;
    (0, _utilBase.assertNonNegativeIntegerDimensions)(shape);
    if (shape.length < input.rank) throw new Error(`broadcastTo(): shape.length=${shape.length} < input.rank=${input.rank}.`);
    if (shape.length > input.rank) {
        const newShape = input.shape.slice();
        while(newShape.length < shape.length)newShape.unshift(1);
        input = (0, _reshape.reshape)(input, newShape);
    }
    const inputShape = input.shape;
    const reps = Array.from(shape);
    for(let i = shape.length - 1; i >= 0; i--){
        if (inputShape[i] === shape[i]) reps[i] = 1;
        else if (input.shape[i] !== 1) throw new Error(`broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`);
    }
    const axes = reps.map((n, i)=>n > 1 ? i : -1).filter((i)=>i >= 0);
    if (axes.length === 0) return (0, _clone.clone)(input);
    // TODO call broadcastTo kernel directly once backends implement broadcstTo
    const inputs = {
        x: input
    };
    const attrs = {
        reps
    };
    return (0, _engine.ENGINE).runKernel((0, _kernelNames.Tile), inputs, attrs);
}
Broadcast an array to a compatible shape NumPy-style.

The tensor's shape is compared to the broadcast shape from end to beginning.
Ones are prepended to the tensor's shape until it has the same length as
the broadcast shape. If input.shape[i]==shape[i], the (i+1)-th axis is
already broadcast-compatible. If input.shape[i]==1 and shape[i]==N, then
the input tensor is tiled N times along that axis (using tf.tile).

@param input The tensor that is to be broadcasted.
@param shape The input is to be broadcast to this shape.

@doc {heading: 'Tensors', subheading: 'Transformations'}