'Performs a synchronized copy from the `source_array` to the current array.
This is called through ``x[:] = source_array``, where the `source_array`
is a `numpy.ndarray` or array-like object.
This function blocks until all the pending read/write operations with respect
to the current `NDArray` are finished and carry out the copy operation to the
current NDArray.
Parameters
source_array : array_like
The data source we would like to copy from.
Example
>>> a = mx.nd.array([1, 2])
>>> a.asnumpy()
array([ 1.,  2.], dtype=float32)
>>> a[:] = np.array([3, 4])
>> a.asnumpy()
array([ 3.,  4.], dtype=float32)'

def _sync_copyfrom(self, source_array):

    if (not isinstance(source_array, np.ndarray)):
        try:
            source_array = np.array(source_array, dtype=self.dtype)
        except:
            raise TypeError(('array    must    consist    of    array-like    data,' + ('type    %s    is    not    supported' % str(type(array)))))
    source_array = np.ascontiguousarray(source_array, dtype=self.dtype)
    if (source_array.shape != self.shape):
        raise ValueError(('Shape    inconsistent:    expected    %s    vs    got    %s' % (str(self.shape), str(source_array.shape))))
    check_call(_LIB.MXNDArraySyncCopyFromCPU(self.handle, source_array.ctypes.data_as(ctypes.c_void_p), ctypes.c_size_t(source_array.size)))
