Python cupy.ndarray() Examples
The following are 30
code examples of cupy.ndarray().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
cupy
, or try the search function
.
Example #1
Source File: fft.py From cupy with MIT License | 7 votes |
def ihfft(x, n=None, axis=-1, norm=None, overwrite_x=False, *, plan=None): """Compute the FFT of a signal that has Hermitian symmetry. Args: a (cupy.ndarray): Array to be transform. n (None or int): Number of points along transformation axis in the input to use. If ``n`` is not given, the length of the input along the axis specified by ``axis`` is used. axis (int): Axis over which to compute the FFT. norm (None or ``"ortho"``): Keyword to specify the normalization mode. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (None): This argument is currently not supported. Returns: cupy.ndarray: The transformed array which shape is specified by ``n`` and type will convert to complex if the input is other. The length of the transformed axis is ``n//2+1``. .. seealso:: :func:`scipy.fft.ihfft` """ # TODO(leofang): support R2C & C2R plans if plan is not None: raise NotImplementedError('ihfft plan is currently not yet supported') return _ihfft(x, n, axis, norm)
Example #2
Source File: cuda.py From chainer with MIT License | 6 votes |
def _get_device_or_current( device: tp.Optional[types.CudaDeviceSpec] ) -> Device: # Returns cuda.Device. # - If cuda.Device instance, it's returned intact. # - If None, the current device is returned. # - If non-negative integer, cuda.Device is returned. # - Otherwise: error. if device is None: return cuda.Device() if isinstance(device, Device): return device if not (isinstance(device, _integer_types) and device >= 0): raise ValueError('Invalid CUDA device specifier: {}'.format(device)) return cuda.Device(int(device)) # ------------------------------------------------------------------------------ # cupy.ndarray allocation and copy # ------------------------------------------------------------------------------
Example #3
Source File: fft.py From cupy with MIT License | 6 votes |
def __ua_convert__(dispatchables, coerce): if coerce: try: replaced = [ cupy.asarray(d.value) if d.coercible and d.type is np.ndarray else d.value for d in dispatchables] except TypeError: return NotImplemented else: replaced = [d.value for d in dispatchables] if not all(d.type is not np.ndarray or isinstance(r, cupy.ndarray) for r, d in zip(replaced, dispatchables)): return NotImplemented return replaced
Example #4
Source File: fallback.py From cupy with MIT License | 6 votes |
def __init__(self, numpy_object, cupy_object, array=None): """ _RecursiveAttr initializer. Args: numpy_object (method): NumPy method. cupy_method (method): Corresponding CuPy method. array (ndarray): Acts as flag to know if _RecursiveAttr object is called from ``ndarray`` class. Also, acts as container for modifying args in case it is called from ``ndarray``. None otherwise. """ self._numpy_object = numpy_object self._cupy_object = cupy_object self._fallback_array = array
Example #5
Source File: dia.py From cupy with MIT License | 6 votes |
def diagonal(self, k=0): """Returns the k-th diagonal of the matrix. Args: k (int, optional): Which diagonal to get, corresponding to elements a[i, i+k]. Default: 0 (the main diagonal). Returns: cupy.ndarray : The k-th diagonal. """ rows, cols = self.shape if k <= -rows or k >= cols: return cupy.empty(0, dtype=self.data.dtype) idx, = cupy.nonzero(self.offsets == k) first_col, last_col = max(0, k), min(rows + k, cols) if idx.size == 0: return cupy.zeros(last_col - first_col, dtype=self.data.dtype) return self.data[idx[0], first_col:last_col]
Example #6
Source File: fallback.py From cupy with MIT License | 6 votes |
def _is_cupy_compatible(arg): """ Returns False if CuPy's functions never accept the arguments as parameters due to the following reasons. - The inputs include an object of a NumPy's specific class other than `np.ndarray`. - The inputs include a dtype which is not supported in CuPy. """ if isinstance(arg, ndarray): if not arg._supports_cupy: return False if isinstance(arg, (tuple, list)): return all([_RecursiveAttr._is_cupy_compatible(i) for i in arg]) if isinstance(arg, dict): bools = [_RecursiveAttr._is_cupy_compatible(arg[i]) for i in arg] return all(bools) return True
Example #7
Source File: test_cupy_interop.py From chainer with MIT License | 6 votes |
def test_chainerx_to_cupy_delete_chainerx_first(): dtype = 'float32' a_chx = chainerx.arange(6, dtype=dtype, device='cuda:0').reshape((2, 3)) a_cupy = cupy.ndarray( a_chx.shape, cupy.dtype(a_chx.dtype.name), cupy.cuda.MemoryPointer(cupy.cuda.UnownedMemory( a_chx.data_ptr + a_chx.offset, a_chx.data_size, a_chx, 0), 0), strides=a_chx.strides, ) del a_chx a_cupy += 1 chainerx.testing.assert_array_equal_ex( a_cupy.get(), numpy.array([[1, 2, 3], [4, 5, 6]], dtype))
Example #8
Source File: test_cupy_interop.py From chainer with MIT License | 6 votes |
def test_chainerx_to_cupy_delete_cupy_first(): dtype = 'float32' a_chx = chainerx.arange(6, dtype=dtype, device='cuda:0').reshape((2, 3)) a_cupy = cupy.ndarray( a_chx.shape, cupy.dtype(a_chx.dtype.name), cupy.cuda.MemoryPointer(cupy.cuda.UnownedMemory( a_chx.data_ptr + a_chx.offset, a_chx.data_size, a_chx, 0), 0), strides=a_chx.strides, ) del a_cupy a_chx += 1 chainerx.testing.assert_array_equal_ex( a_chx, numpy.array([[1, 2, 3], [4, 5, 6]], dtype))
Example #9
Source File: construct.py From cupy with MIT License | 6 votes |
def spdiags(data, diags, m, n, format=None): """Creates a sparse matrix from diagonals. Args: data (cupy.ndarray): Matrix diagonals stored row-wise. diags (cupy.ndarray): Diagonals to set. m (int): Number of rows. n (int): Number of cols. format (str or None): Sparse format, e.g. ``format="csr"``. Returns: cupyx.scipy.sparse.spmatrix: Created sparse matrix. .. seealso:: :func:`scipy.sparse.spdiags` """ return dia.dia_matrix((data, diags), shape=(m, n)).asformat(format)
Example #10
Source File: cuda.py From chainer with MIT License | 6 votes |
def to_cpu(array, stream=None): """Copies the given GPU array to host CPU. Args: array (*array*, None, list or tuple): Array or arrays to be sent to CPU. stream (cupy.cuda.Stream): CUDA stream. Returns: numpy.ndarray, list or tuple: Array on CPU. If some of the arrays are already on CPU, then this function just returns those arrays without performing any copy. If input arrays include `None`, it is returned as `None` as is. """ return _backend._convert_arrays( array, lambda arr: _array_to_cpu(arr, stream))
Example #11
Source File: filters.py From cupy with MIT License | 5 votes |
def convolve(input, weights, output=None, mode='reflect', cval=0.0, origin=0): """Multi-dimensional convolution. The array is convolved with the given kernel. Args: input (cupy.ndarray): The input array. weights (cupy.ndarray): Array of weights, same number of dimensions as input output (cupy.ndarray, dtype or None): The array in which to place the output. mode (str): The array borders are handled according to the given mode (``'reflect'``, ``'constant'``, ``'nearest'``, ``'mirror'``, ``'wrap'``). Default is ``'reflect'``. cval (scalar): Value to fill past edges of input if mode is ``constant``. Default is ``0.0``. origin (scalar or tuple of scalar): The origin parameter controls the placement of the filter, relative to the center of the current element of the input. Default of 0 is equivalent to ``(0,)*input.ndim``. Returns: cupy.ndarray: The result of convolution. .. seealso:: :func:`scipy.ndimage.convolve` """ return _correlate_or_convolve(input, weights, output, mode, cval, origin, True)
Example #12
Source File: csr.py From cupy with MIT License | 5 votes |
def toarray(self, order=None, out=None): """Returns a dense matrix representing the same value. Args: order ({'C', 'F', None}): Whether to store data in C (row-major) order or F (column-major) order. Default is C-order. out: Not supported. Returns: cupy.ndarray: Dense array representing the same matrix. .. seealso:: :meth:`scipy.sparse.csr_matrix.toarray` """ order = 'C' if order is None else order.upper() if self.nnz == 0: return cupy.zeros(shape=self.shape, dtype=self.dtype, order=order) self.sum_duplicates() # csr2dense returns F-contiguous array. if order == 'C': # To return C-contiguous array, it uses transpose. return cusparse.csc2dense(self.T).T elif order == 'F': return cusparse.csr2dense(self) else: raise ValueError('order not understood')
Example #13
Source File: data.py From cupy with MIT License | 5 votes |
def max(self, axis=None, out=None, sum_duplicates=False, nonzero=False): """Returns the maximum of the matrix or maximum along an axis. Args: axis (int): {-2, -1, 0, 1, ``None``} (optional) Axis along which the sum is computed. The default is to compute the maximum over all the matrix elements, returning a scalar (i.e. ``axis`` = ``None``). out (None): (optional) This argument is in the signature *solely* for NumPy compatibility reasons. Do not pass in anything except for the default value, as this argument is not used. sum_duplicates (bool): Flag to indicate that duplicate elements should be combined prior to the operation nonzero (bool): Return the maximum nonzero value and ignore all zero entries. If the dimension has no nonzero values, a zero is then returned to indicate that it is the only available value. Returns: (cupy.ndarray or float): Maximum of ``a``. If ``axis`` is ``None``, the result is a scalar value. If ``axis`` is given, the result is an array of dimension ``a.ndim - 1``. This differs from numpy for computational efficiency. .. seealso:: min : The minimum value of a sparse matrix along a given axis. .. seealso:: numpy.matrix.max : NumPy's implementation of ``max`` for matrices """ return self._min_or_max(axis, out, cupy.max, sum_duplicates, nonzero)
Example #14
Source File: fft.py From cupy with MIT License | 5 votes |
def hfft(x, n=None, axis=-1, norm=None, overwrite_x=False, *, plan=None): """Compute the FFT of a signal that has Hermitian symmetry. Args: a (cupy.ndarray): Array to be transform. n (None or int): Length of the transformed axis of the output. For ``n`` output points, ``n//2+1`` input points are necessary. If ``n`` is not given, it is determined from the length of the input along the axis specified by ``axis``. axis (int): Axis over which to compute the FFT. norm (None or ``"ortho"``): Keyword to specify the normalization mode. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (None): This argument is currently not supported. Returns: cupy.ndarray: The transformed array which shape is specified by ``n`` and type will convert to complex if the input is other. If ``n`` is not given, the length of the transformed axis is ``2*(m-1)`` where `m` is the length of the transformed axis of the input. .. seealso:: :func:`scipy.fft.hfft` """ # TODO(leofang): support R2C & C2R plans if plan is not None: raise NotImplementedError('hfft plan is currently not yet supported') return _hfft(x, n, axis, norm)
Example #15
Source File: fft.py From cupy with MIT License | 5 votes |
def irfft(x, n=None, axis=-1, norm=None, overwrite_x=False, *, plan=None): """Compute the one-dimensional inverse FFT for real input. Args: x (cupy.ndarray): Array to be transformed. n (None or int): Length of the transformed axis of the output. If ``n`` is not given, the length of the input along the axis specified by ``axis`` is used. axis (int): Axis over which to compute the FFT. norm (None or ``'ortho'``): Normalization mode. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.Plan1d` or ``None``): a cuFFT plan for transforming ``x`` over ``axis``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, n, axis, value_type='C2R') Note that ``plan`` is defaulted to ``None``, meaning CuPy will use an auto-generated plan behind the scene. Returns: cupy.ndarray: The transformed array. .. seealso:: :func:`scipy.fft.irfft` """ return _fft(x, (n,), (axis,), norm, cufft.CUFFT_INVERSE, 'C2R', overwrite_x=overwrite_x, plan=plan)
Example #16
Source File: fft.py From cupy with MIT License | 5 votes |
def irfft2(x, s=None, axes=(-2, -1), norm=None, overwrite_x=False, *, plan=None): """Compute the two-dimensional inverse FFT for real input. Args: a (cupy.ndarray): Array to be transform. s (None or tuple of ints): Shape of the output. If ``s`` is not given, they are determined from the lengths of the input along the axes specified by ``axes``. axes (tuple of ints): Axes over which to compute the FFT. norm (None or ``"ortho"``): Keyword to specify the normalization mode. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for transforming ``x`` over ``axes``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes, value_type='C2R') Note that ``plan`` is defaulted to ``None``, meaning CuPy will use an auto-generated plan behind the scene. Returns: cupy.ndarray: The transformed array which shape is specified by ``s`` and type will convert to complex if the input is other. If ``s`` is not given, the length of final transformed axis of output will be `2*(m-1)` where `m` is the length of the final transformed axis of the input. .. seealso:: :func:`scipy.fft.irfft2` """ return irfftn(x, s, axes, norm, overwrite_x, plan=plan)
Example #17
Source File: fft.py From cupy with MIT License | 5 votes |
def rfftn(x, s=None, axes=None, norm=None, overwrite_x=False, *, plan=None): """Compute the N-dimensional FFT for real input. Args: a (cupy.ndarray): Array to be transform. s (None or tuple of ints): Shape to use from the input. If ``s`` is not given, the lengths of the input along the axes specified by ``axes`` are used. axes (tuple of ints): Axes over which to compute the FFT. norm (None or ``"ortho"``): Keyword to specify the normalization mode. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for transforming ``x`` over ``axes``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes, value_type='R2C') Note that ``plan`` is defaulted to ``None``, meaning CuPy will use an auto-generated plan behind the scene. Returns: cupy.ndarray: The transformed array which shape is specified by ``s`` and type will convert to complex if the input is other. The length of the last axis transformed will be ``s[-1]//2+1``. .. seealso:: :func:`scipy.fft.rfftn` """ s = _assequence(s) axes = _assequence(axes) func = _default_fft_func(x, s, axes, value_type='R2C') return func(x, s, axes, norm, cufft.CUFFT_FORWARD, 'R2C', overwrite_x=overwrite_x, plan=plan)
Example #18
Source File: fft.py From cupy with MIT License | 5 votes |
def irfftn(x, s=None, axes=None, norm=None, overwrite_x=False, *, plan=None): """Compute the N-dimensional inverse FFT for real input. Args: a (cupy.ndarray): Array to be transform. s (None or tuple of ints): Shape of the output. If ``s`` is not given, they are determined from the lengths of the input along the axes specified by ``axes``. axes (tuple of ints): Axes over which to compute the FFT. norm (None or ``"ortho"``): Keyword to specify the normalization mode. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for transforming ``x`` over ``axes``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes, value_type='C2R') Note that ``plan`` is defaulted to ``None``, meaning CuPy will use an auto-generated plan behind the scene. Returns: cupy.ndarray: The transformed array which shape is specified by ``s`` and type will convert to complex if the input is other. If ``s`` is not given, the length of final transformed axis of output will be ``2*(m-1)`` where `m` is the length of the final transformed axis of the input. .. seealso:: :func:`scipy.fft.irfftn` """ s = _assequence(s) axes = _assequence(axes) if (10020 >= cupy.cuda.runtime.runtimeGetVersion() >= 10010 and int(cupy.cuda.device.get_compute_capability()) < 70 and _size_last_transform_axis(x.shape, s, axes) == 2): warnings.warn('Output of irfftn might not be correct due to issue ' 'of cuFFT in CUDA 10.1/10.2 on Pascal or older GPUs.') func = _default_fft_func(x, s, axes, value_type='C2R') return func(x, s, axes, norm, cufft.CUFFT_INVERSE, 'C2R', overwrite_x=overwrite_x, plan=plan)
Example #19
Source File: csc.py From cupy with MIT License | 5 votes |
def toarray(self, order=None, out=None): """Returns a dense matrix representing the same value. Args: order ({'C', 'F', None}): Whether to store data in C (row-major) order or F (column-major) order. Default is C-order. out: Not supported. Returns: cupy.ndarray: Dense array representing the same matrix. .. seealso:: :meth:`scipy.sparse.csc_matrix.toarray` """ if order is None: order = 'C' order = order.upper() if self.nnz == 0: return cupy.zeros(shape=self.shape, dtype=self.dtype, order=order) self.sum_duplicates() # csc2dense and csr2dense returns F-contiguous array. if order == 'C': # To return C-contiguous array, it uses transpose. return cusparse.csr2dense(self.T).T elif order == 'F': return cusparse.csc2dense(self) else: raise ValueError('order not understood')
Example #20
Source File: base.py From cupy with MIT License | 5 votes |
def toarray(self, order=None, out=None): """Return a dense ndarray representation of this matrix.""" return self.tocsr().toarray(order=order, out=out)
Example #21
Source File: base.py From cupy with MIT License | 5 votes |
def diagonal(self, k=0): """Returns the k-th diagonal of the matrix. Args: k (int, optional): Which diagonal to get, corresponding to elements a[i, i+k]. Default: 0 (the main diagonal). Returns: cupy.ndarray : The k-th diagonal. """ return self.tocsr().diagonal(k=k)
Example #22
Source File: fft.py From cupy with MIT License | 5 votes |
def ifftn(x, shape=None, axes=None, overwrite_x=False, plan=None): """Compute the N-dimensional inverse FFT. Args: x (cupy.ndarray): Array to be transformed. shape (None or tuple of ints): Shape of the transformed axes of the output. If ``shape`` is not given, the lengths of the input along the axes specified by ``axes`` are used. axes (tuple of ints): Axes over which to compute the FFT. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for transforming ``x`` over ``axes``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, axes) Note that `plan` is defaulted to None, meaning CuPy will either use an auto-generated plan behind the scene if cupy.fft.config. enable_nd_planning = True, or use no cuFFT plan if it is set to False. Returns: cupy.ndarray: The transformed array which shape is specified by ``shape`` and type will convert to complex if that of the input is another. .. seealso:: :func:`scipy.fftpack.ifftn` .. note:: The argument `plan` is currently experimental and the interface may be changed in the future version. """ func = _default_fft_func(x, shape, axes, plan) return func(x, shape, axes, None, cufft.CUFFT_INVERSE, overwrite_x=overwrite_x, plan=plan)
Example #23
Source File: fft.py From cupy with MIT License | 5 votes |
def fftn(x, shape=None, axes=None, overwrite_x=False, plan=None): """Compute the N-dimensional FFT. Args: x (cupy.ndarray): Array to be transformed. shape (None or tuple of ints): Shape of the transformed axes of the output. If ``shape`` is not given, the lengths of the input along the axes specified by ``axes`` are used. axes (tuple of ints): Axes over which to compute the FFT. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for transforming ``x`` over ``axes``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, axes) Note that `plan` is defaulted to None, meaning CuPy will either use an auto-generated plan behind the scene if cupy.fft.config. enable_nd_planning = True, or use no cuFFT plan if it is set to False. Returns: cupy.ndarray: The transformed array which shape is specified by ``shape`` and type will convert to complex if that of the input is another. .. seealso:: :func:`scipy.fftpack.fftn` .. note:: The argument `plan` is currently experimental and the interface may be changed in the future version. """ func = _default_fft_func(x, shape, axes, plan) return func(x, shape, axes, None, cufft.CUFFT_FORWARD, overwrite_x=overwrite_x, plan=plan)
Example #24
Source File: fft.py From cupy with MIT License | 5 votes |
def ifft2(x, shape=None, axes=(-2, -1), overwrite_x=False, plan=None): """Compute the two-dimensional inverse FFT. Args: x (cupy.ndarray): Array to be transformed. shape (None or tuple of ints): Shape of the transformed axes of the output. If ``shape`` is not given, the lengths of the input along the axes specified by ``axes`` are used. axes (tuple of ints): Axes over which to compute the FFT. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for transforming ``x`` over ``axes``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, axes) Note that `plan` is defaulted to None, meaning CuPy will either use an auto-generated plan behind the scene if cupy.fft.config. enable_nd_planning = True, or use no cuFFT plan if it is set to False. Returns: cupy.ndarray: The transformed array which shape is specified by ``shape`` and type will convert to complex if that of the input is another. .. seealso:: :func:`scipy.fftpack.ifft2` .. note:: The argument `plan` is currently experimental and the interface may be changed in the future version. """ func = _default_fft_func(x, shape, axes, plan) return func(x, shape, axes, None, cufft.CUFFT_INVERSE, overwrite_x=overwrite_x, plan=plan)
Example #25
Source File: fft.py From cupy with MIT License | 5 votes |
def ifft(x, n=None, axis=-1, overwrite_x=False, plan=None): """Compute the one-dimensional inverse FFT. Args: x (cupy.ndarray): Array to be transformed. n (None or int): Length of the transformed axis of the output. If ``n`` is not given, the length of the input along the axis specified by ``axis`` is used. axis (int): Axis over which to compute the FFT. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.Plan1d` or ``None``): a cuFFT plan for transforming ``x`` over ``axis``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, axis) Note that `plan` is defaulted to None, meaning CuPy will use an auto-generated plan behind the scene. Returns: cupy.ndarray: The transformed array which shape is specified by ``n`` and type will convert to complex if that of the input is another. .. note:: The argument `plan` is currently experimental and the interface may be changed in the future version. .. seealso:: :func:`scipy.fftpack.ifft` """ return _fft(x, (n,), (axis,), None, cufft.CUFFT_INVERSE, overwrite_x=overwrite_x, plan=plan)
Example #26
Source File: fft.py From cupy with MIT License | 5 votes |
def fft(x, n=None, axis=-1, overwrite_x=False, plan=None): """Compute the one-dimensional FFT. Args: x (cupy.ndarray): Array to be transformed. n (None or int): Length of the transformed axis of the output. If ``n`` is not given, the length of the input along the axis specified by ``axis`` is used. axis (int): Axis over which to compute the FFT. overwrite_x (bool): If True, the contents of ``x`` can be destroyed. plan (:class:`cupy.cuda.cufft.Plan1d` or ``None``): a cuFFT plan for transforming ``x`` over ``axis``, which can be obtained using:: plan = cupyx.scipy.fftpack.get_fft_plan(x, axis) Note that `plan` is defaulted to None, meaning CuPy will use an auto-generated plan behind the scene. Returns: cupy.ndarray: The transformed array which shape is specified by ``n`` and type will convert to complex if that of the input is another. .. note:: The argument `plan` is currently experimental and the interface may be changed in the future version. .. seealso:: :func:`scipy.fftpack.fft` """ return _fft(x, (n,), (axis,), None, cufft.CUFFT_FORWARD, overwrite_x=overwrite_x, plan=plan)
Example #27
Source File: fallback.py From cupy with MIT License | 5 votes |
def _call_numpy(func, args, kwargs): """ Calls numpy function with *args and **kwargs and does necessary data transfers. Args: func: A numpy function that needs to be called. args (tuple): Arguments. kwargs (dict): Keyword arguments. Returns: Result after calling func and performing data transfers. """ _update_numpy_args(args, kwargs) numpy_args, numpy_kwargs = _convert_fallback_to_numpy(args, kwargs) numpy_res = func(*numpy_args, **numpy_kwargs) # If existing argument is being returned ext_res = _get_same_reference( numpy_res, numpy_args, numpy_kwargs, args, kwargs) if ext_res is not None: return ext_res if isinstance(numpy_res, np.ndarray): if numpy_res.base is None: # Don't share memory fallback_res = _convert_numpy_to_fallback(numpy_res) else: # Share memory with one of the arguments base_arg = _get_same_reference( numpy_res.base, numpy_args, numpy_kwargs, args, kwargs) fallback_res = _convert_numpy_to_fallback(numpy_res) fallback_res.base = base_arg return fallback_res return numpy_res
Example #28
Source File: fallback.py From cupy with MIT License | 5 votes |
def _call_cupy(func, args, kwargs): """ Calls cupy function with *args and **kwargs and does necessary data transfers. Args: func: A cupy function that needs to be called. args (tuple): Arguments. kwargs (dict): Keyword arguments. Returns: Result after calling func and performing data transfers. """ _update_cupy_args(args, kwargs) cupy_args, cupy_kwargs = _convert_fallback_to_cupy(args, kwargs) cupy_res = func(*cupy_args, **cupy_kwargs) # If existing argument is being returned ext_res = _get_same_reference( cupy_res, cupy_args, cupy_kwargs, args, kwargs) if ext_res is not None: return ext_res if isinstance(cupy_res, cp.ndarray): if cupy_res.base is None: # Don't share memory fallback_res = _convert_cupy_to_fallback(cupy_res) else: # Share memory with one of the arguments base_arg = _get_same_reference( cupy_res.base, cupy_args, cupy_kwargs, args, kwargs) fallback_res = _convert_cupy_to_fallback(cupy_res) fallback_res.base = base_arg return fallback_res return cupy_res
Example #29
Source File: fallback.py From cupy with MIT License | 5 votes |
def _update_cupy_args(args, kwargs): return _get_xp_args(ndarray, ndarray._update_cupy_array, (args, kwargs)) # ----------------------------------------------------------------------------- # utils # -----------------------------------------------------------------------------
Example #30
Source File: fallback.py From cupy with MIT License | 5 votes |
def _convert_cupy_to_fallback(cupy_res): return _get_xp_args(cp.ndarray, ndarray._store_array_from_cupy, cupy_res)