'Broadcasts the input array to a new shape.
Broadcasting is only allowed on axes with size 1. The new shape cannot change
the number of dimensions.
For example, you could broadcast from shape (2, 1) to (2, 3), but not from
shape (2, 3) to (2, 3, 3).
Parameters
shape : tuple of int
The shape of the desired array.
Returns
NDArray
A NDArray with the desired shape that is not sharing data with this
array, even if the new shape is the same as ``self.shape``.
Examples
>>> x = mx.nd.arange(0,3).reshape((1,3,1))
>>> x.asnumpy()
array([[[ 0.],
[ 1.],
[ 2.]]], dtype=float32)
>>> y = x.broadcast_to((2,3,3))
>>> y.asnumpy()
array([[[ 0.,  0.,  0.],
[ 1.,  1.,  1.],
[ 2.,  2.,  2.]],
<BLANKLINE>
[[ 0.,  0.,  0.],
[ 1.,  1.,  1.],
[ 2.,  2.,  2.]]], dtype=float32)'

def broadcast_to(self, shape):

    cur_shape = self.shape
    err_str = 'operands    could    not    be    broadcast    together    with    remapped    shapes[original->remapped]:    {}    and    requested    shape    {}'.format(cur_shape, shape)
    if (len(shape) < len(cur_shape)):
        raise ValueError(err_str)
    cur_shape = (((1,) * (len(shape) - len(cur_shape))) + cur_shape)
    cur_shape_arr = np.array(cur_shape)
    broadcasting_axes = np.nonzero((cur_shape_arr != np.array(shape)))
    if (cur_shape_arr[broadcasting_axes] != 1).any():
        raise ValueError(err_str)
    if (cur_shape != self.shape):
        return broadcast_to(self.reshape(cur_shape), shape=shape)
    else:
        return broadcast_to(self, shape=tuple(shape))
