def copyto(dst, src, casting="same_kind", where=None): """Copies values from one array to another with broadcasting. This function can be called for arrays on different devices. In this case, casting, ``where``, and broadcasting is not supported, and an exception is raised if these are used. Args: dst (cupy.ndarray): Target array. src (cupy.ndarray): Source array. casting (str): Casting rule. See :func:`numpy.can_cast` for detail. where (cupy.ndarray of bool): If specified, this array acts as a mask, and an element is copied only if the corresponding element of ``where`` is True. .. seealso:: :func:`numpy.copyto` """ if not numpy.can_cast(src.dtype, dst.dtype, casting): raise TypeError("Cannot cast %s to %s in %s casting mode" % (src.dtype, dst.dtype, casting)) if dst.size == 0: return if where is None: if _can_memcpy(dst, src): dst.data.copy_from(src.data, src.nbytes) else: core.elementwise_copy(src, dst) else: core.elementwise_copy_where(src, where, dst)
def copyto(dst, src, casting='same_kind', where=None): """Copies values from one array to another with broadcasting. This function can be called for arrays on different devices. In this case, casting, ``where``, and broadcasting is not supported, and an exception is raised if these are used. Args: dst (cupy.ndarray): Target array. src (cupy.ndarray): Source array. casting (str): Casting rule. See :func:`numpy.can_cast` for detail. where (cupy.ndarray of bool): If specified, this array acts as a mask, and an element is copied only if the corresponding element of ``where`` is True. .. seealso:: :func:`numpy.copyto` """ if not numpy.can_cast(src.dtype, dst.dtype, casting): raise TypeError('Cannot cast %s to %s in %s casting mode' % (src.dtype, dst.dtype, casting)) if dst.size == 0: return if where is None: if _can_memcpy(dst, src): dst.data.copy_from(src.data, src.nbytes) else: core.elementwise_copy(src, dst) else: core.elementwise_copy_where(src, where, dst)
def copyto(dst, src, casting='same_kind', where=None): """Copies values from one array to another with broadcasting. This function can be called for arrays on different devices. In this case, casting, ``where``, and broadcasting is not supported, and an exception is raised if these are used. Args: dst (cupy.ndarray): Target array. src (cupy.ndarray): Source array. casting (str): Casting rule. See :func:`numpy.can_cast` for detail. where (cupy.ndarray of bool): If specified, this array acts as a mask, and an element is copied only if the corresponding element of ``where`` is True. .. seealso:: :func:`numpy.copyto` """ src_type = type(src) src_is_python_scalar = (src_type in six.integer_types or src_type in (bool, float, complex) or src_type is fusion._FusionVarScalar) if src_is_python_scalar: src_dtype = numpy.dtype(type(src)) can_cast = numpy.can_cast(src, dst.dtype, casting) else: src_dtype = src.dtype can_cast = numpy.can_cast(src_dtype, dst.dtype, casting) if not can_cast: raise TypeError('Cannot cast %s to %s in %s casting mode' % (src_dtype, dst.dtype, casting)) if fusion._is_fusing(): if where is None: core.elementwise_copy(src, dst) else: fusion._call_ufunc(search._where_ufunc, where, src, dst, dst) return if dst.size == 0: return if src_is_python_scalar and where is None: dst.fill(src) return if where is None: if _can_memcpy(dst, src): dst.data.copy_from(src.data, src.nbytes) else: device = dst.device with device: if src.device != device: src = src.copy() core.elementwise_copy(src, dst) else: core.elementwise_copy_where(src, where, dst)