Source code for cupy

import sys

import numpy
import six

try:
    from cupy import core  # NOQA
except ImportError:
    # core is a c-extension module.
    # When a user cannot import core, it represents that CuPy is not correctly
    # built.
    exc_info = sys.exc_info()
    msg = ('CuPy is not correctly installed. Please check your environment, '
           'uninstall Chainer and reinstall it with `pip install chainer '
           '--no-cache-dir -vvvv`.\n\n'
           'original error: {}'.format(exc_info[1]))

    six.reraise(ImportError, ImportError(msg), exc_info[2])


from cupy.core import fusion  # NOQA
from cupy import creation  # NOQA
from cupy import indexing  # NOQA
from cupy import io  # NOQA
from cupy import linalg  # NOQA
from cupy import manipulation  # NOQA
from cupy import padding  # NOQA
from cupy import random  # NOQA
from cupy import sorting  # NOQA
from cupy import statistics  # NOQA
from cupy import testing  # NOQA  # NOQA
from cupy import util  # NOQA


# import class and function
from cupy.core import ndarray  # NOQA

# dtype short cuts
from numpy import floating  # NOQA
from numpy import inexact  # NOQA
from numpy import integer  # NOQA
from numpy import number  # NOQA
from numpy import signedinteger  # NOQA
from numpy import unsignedinteger  # NOQA


from numpy import bool_  # NOQA

from numpy import byte  # NOQA

from numpy import short  # NOQA

from numpy import intc  # NOQA

from numpy import int_  # NOQA

from numpy import longlong  # NOQA

from numpy import ubyte  # NOQA

from numpy import ushort  # NOQA

from numpy import uintc  # NOQA

from numpy import uint  # NOQA

from numpy import ulonglong  # NOQA


from numpy import half  # NOQA

from numpy import single  # NOQA

from numpy import float_  # NOQA

from numpy import longfloat  # NOQA


from numpy import int8  # NOQA

from numpy import int16  # NOQA

from numpy import int32  # NOQA

from numpy import int64  # NOQA

from numpy import uint8  # NOQA

from numpy import uint16  # NOQA

from numpy import uint32  # NOQA

from numpy import uint64  # NOQA


from numpy import float16  # NOQA

from numpy import float32  # NOQA

from numpy import float64  # NOQA


from cupy.core import ufunc  # NOQA

from numpy import newaxis  # == None  # NOQA

# =============================================================================
# Routines
#
# The order of these declarations are borrowed from the NumPy document:
# http://docs.scipy.org/doc/numpy/reference/routines.html
# =============================================================================

# -----------------------------------------------------------------------------
# Array creation routines
# -----------------------------------------------------------------------------
from cupy.creation.basic import empty  # NOQA
from cupy.creation.basic import empty_like  # NOQA
from cupy.creation.basic import eye  # NOQA
from cupy.creation.basic import full  # NOQA
from cupy.creation.basic import full_like  # NOQA
from cupy.creation.basic import identity  # NOQA
from cupy.creation.basic import ones  # NOQA
from cupy.creation.basic import ones_like  # NOQA
from cupy.creation.basic import zeros  # NOQA
from cupy.creation.basic import zeros_like  # NOQA

from cupy.core.fusion import copy  # NOQA
from cupy.creation.from_data import array  # NOQA
from cupy.creation.from_data import asanyarray  # NOQA
from cupy.creation.from_data import asarray  # NOQA
from cupy.creation.from_data import ascontiguousarray  # NOQA

from cupy.creation.ranges import arange  # NOQA
from cupy.creation.ranges import linspace  # NOQA
from cupy.creation.ranges import logspace  # NOQA
from cupy.creation.ranges import meshgrid  # NOQA

from cupy.creation.matrix import diag  # NOQA
from cupy.creation.matrix import diagflat  # NOQA

# -----------------------------------------------------------------------------
# Array manipulation routines
# -----------------------------------------------------------------------------
from cupy.manipulation.basic import copyto  # NOQA

from cupy.manipulation.shape import ravel  # NOQA
from cupy.manipulation.shape import reshape  # NOQA

from cupy.manipulation.transpose import rollaxis  # NOQA
from cupy.manipulation.transpose import swapaxes  # NOQA
from cupy.manipulation.transpose import transpose  # NOQA

from cupy.manipulation.dims import atleast_1d  # NOQA
from cupy.manipulation.dims import atleast_2d  # NOQA
from cupy.manipulation.dims import atleast_3d  # NOQA
from cupy.manipulation.dims import broadcast  # NOQA
from cupy.manipulation.dims import broadcast_arrays  # NOQA
from cupy.manipulation.dims import broadcast_to  # NOQA
from cupy.manipulation.dims import expand_dims  # NOQA
from cupy.manipulation.dims import squeeze  # NOQA

from cupy.manipulation.join import column_stack  # NOQA
from cupy.manipulation.join import concatenate  # NOQA
from cupy.manipulation.join import dstack  # NOQA
from cupy.manipulation.join import hstack  # NOQA
from cupy.manipulation.join import stack  # NOQA
from cupy.manipulation.join import vstack  # NOQA

from cupy.manipulation.kind import asfortranarray  # NOQA

from cupy.manipulation.split import array_split  # NOQA
from cupy.manipulation.split import dsplit  # NOQA
from cupy.manipulation.split import hsplit  # NOQA
from cupy.manipulation.split import split  # NOQA
from cupy.manipulation.split import vsplit  # NOQA

from cupy.manipulation.tiling import repeat  # NOQA
from cupy.manipulation.tiling import tile  # NOQA

from cupy.manipulation.rearrange import flip  # NOQA
from cupy.manipulation.rearrange import fliplr  # NOQA
from cupy.manipulation.rearrange import flipud  # NOQA
from cupy.manipulation.rearrange import roll  # NOQA
from cupy.manipulation.rearrange import rot90  # NOQA

# -----------------------------------------------------------------------------
# Binary operations
# -----------------------------------------------------------------------------
from cupy.core.fusion import bitwise_and  # NOQA
from cupy.core.fusion import bitwise_or  # NOQA
from cupy.core.fusion import bitwise_xor  # NOQA
from cupy.core.fusion import invert  # NOQA
from cupy.core.fusion import left_shift  # NOQA
from cupy.core.fusion import right_shift  # NOQA

from cupy.binary.packing import packbits  # NOQA
from cupy.binary.packing import unpackbits  # NOQA

from numpy import binary_repr  # NOQA

# -----------------------------------------------------------------------------
# Data type routines (borrowed from NumPy)
# -----------------------------------------------------------------------------
from numpy import can_cast  # NOQA
from numpy import common_type  # NOQA
from numpy import min_scalar_type  # NOQA
from numpy import obj2sctype  # NOQA
from numpy import promote_types  # NOQA
from numpy import result_type  # NOQA

from numpy import dtype  # NOQA
from numpy import format_parser  # NOQA

from numpy import finfo  # NOQA
from numpy import iinfo  # NOQA
from numpy import MachAr  # NOQA

from numpy import find_common_type  # NOQA
from numpy import issctype  # NOQA
from numpy import issubclass_  # NOQA
from numpy import issubdtype  # NOQA
from numpy import issubsctype  # NOQA

from numpy import mintypecode  # NOQA
from numpy import sctype2char  # NOQA
from numpy import typename  # NOQA

# -----------------------------------------------------------------------------
# Optionally Scipy-accelerated routines
# -----------------------------------------------------------------------------
# TODO(beam2d): Implement it

# -----------------------------------------------------------------------------
# Discrete Fourier Transform
# -----------------------------------------------------------------------------
# TODO(beam2d): Implement it

# -----------------------------------------------------------------------------
# Indexing routines
# -----------------------------------------------------------------------------
from cupy.indexing.generate import c_  # NOQA
from cupy.indexing.generate import ix_  # NOQA
from cupy.indexing.generate import r_  # NOQA

from cupy.indexing.indexing import choose  # NOQA
from cupy.indexing.indexing import diagonal  # NOQA
from cupy.indexing.indexing import take  # NOQA

from cupy.indexing.insert import fill_diagonal  # NOQA
# -----------------------------------------------------------------------------
# Input and output
# -----------------------------------------------------------------------------
from cupy.io.npz import load  # NOQA
from cupy.io.npz import save  # NOQA
from cupy.io.npz import savez  # NOQA
from cupy.io.npz import savez_compressed  # NOQA

from cupy.io.formatting import array_repr  # NOQA
from cupy.io.formatting import array_str  # NOQA

from numpy import base_repr  # NOQA

# -----------------------------------------------------------------------------
# Linear algebra
# -----------------------------------------------------------------------------
from cupy.linalg.product import dot  # NOQA
from cupy.linalg.product import inner  # NOQA
from cupy.linalg.product import matmul  # NOQA
from cupy.linalg.product import outer  # NOQA
from cupy.linalg.product import tensordot  # NOQA
from cupy.linalg.product import vdot  # NOQA

from cupy.linalg.norms import trace  # NOQA

# -----------------------------------------------------------------------------
# Logic functions
# -----------------------------------------------------------------------------
from cupy.core.fusion import isfinite  # NOQA
from cupy.core.fusion import isinf  # NOQA
from cupy.core.fusion import isnan  # NOQA

from numpy import isscalar  # NOQA

from cupy.core.fusion import logical_and  # NOQA
from cupy.core.fusion import logical_not  # NOQA
from cupy.core.fusion import logical_or  # NOQA
from cupy.core.fusion import logical_xor  # NOQA

from cupy.core.fusion import equal  # NOQA
from cupy.core.fusion import greater  # NOQA
from cupy.core.fusion import greater_equal  # NOQA
from cupy.core.fusion import less  # NOQA
from cupy.core.fusion import less_equal  # NOQA
from cupy.core.fusion import not_equal  # NOQA

from cupy.core.fusion import all  # NOQA
from cupy.core.fusion import any  # NOQA

# -----------------------------------------------------------------------------
# Mathematical functions
# -----------------------------------------------------------------------------
from cupy.core.fusion import arccos  # NOQA
from cupy.core.fusion import arcsin  # NOQA
from cupy.core.fusion import arctan  # NOQA
from cupy.core.fusion import arctan2  # NOQA
from cupy.core.fusion import cos  # NOQA
from cupy.core.fusion import deg2rad  # NOQA
from cupy.core.fusion import degrees  # NOQA
from cupy.core.fusion import hypot  # NOQA
from cupy.core.fusion import rad2deg  # NOQA
from cupy.core.fusion import radians  # NOQA
from cupy.core.fusion import sin  # NOQA
from cupy.core.fusion import tan  # NOQA

from cupy.core.fusion import arccosh  # NOQA
from cupy.core.fusion import arcsinh  # NOQA
from cupy.core.fusion import arctanh  # NOQA
from cupy.core.fusion import cosh  # NOQA
from cupy.core.fusion import sinh  # NOQA
from cupy.core.fusion import tanh  # NOQA

from cupy.core.fusion import ceil  # NOQA
from cupy.core.fusion import fix  # NOQA
from cupy.core.fusion import floor  # NOQA
from cupy.core.fusion import rint  # NOQA
from cupy.core.fusion import trunc  # NOQA

from cupy.core.fusion import prod  # NOQA
from cupy.core.fusion import sum  # NOQA
from cupy.math.sumprod import cumsum  # NOQA

from cupy.core.fusion import exp  # NOQA
from cupy.core.fusion import exp2  # NOQA
from cupy.core.fusion import expm1  # NOQA
from cupy.core.fusion import log  # NOQA
from cupy.core.fusion import log10  # NOQA
from cupy.core.fusion import log1p  # NOQA
from cupy.core.fusion import log2  # NOQA
from cupy.core.fusion import logaddexp  # NOQA
from cupy.core.fusion import logaddexp2  # NOQA

from cupy.core.fusion import copysign  # NOQA
from cupy.core.fusion import frexp  # NOQA
from cupy.core.fusion import ldexp  # NOQA
from cupy.core.fusion import nextafter  # NOQA
from cupy.core.fusion import signbit  # NOQA

from cupy.core.fusion import add  # NOQA
from cupy.core.fusion import divide  # NOQA
from cupy.core.fusion import floor_divide  # NOQA
from cupy.core.fusion import fmod  # NOQA
from cupy.core.fusion import modf  # NOQA
from cupy.core.fusion import multiply  # NOQA
from cupy.core.fusion import negative  # NOQA
from cupy.core.fusion import power  # NOQA
from cupy.core.fusion import reciprocal  # NOQA
from cupy.core.fusion import remainder  # NOQA
from cupy.core.fusion import remainder as mod  # NOQA
from cupy.core.fusion import subtract  # NOQA
from cupy.core.fusion import true_divide  # NOQA

from cupy.core.fusion import abs  # NOQA
from cupy.core.fusion import absolute  # NOQA
from cupy.core.fusion import clip  # NOQA
from cupy.core.fusion import fmax  # NOQA
from cupy.core.fusion import fmin  # NOQA
from cupy.core.fusion import maximum  # NOQA
from cupy.core.fusion import minimum  # NOQA
from cupy.core.fusion import sign  # NOQA
from cupy.core.fusion import sqrt  # NOQA
from cupy.core.fusion import square  # NOQA

# -----------------------------------------------------------------------------
# Padding
# -----------------------------------------------------------------------------
pad = padding.pad.pad


# -----------------------------------------------------------------------------
# Sorting, searching, and counting
# -----------------------------------------------------------------------------
from cupy.sorting.count import count_nonzero  # NOQA
from cupy.sorting.search import flatnonzero  # NOQA
from cupy.sorting.search import nonzero  # NOQA

from cupy.core.fusion import where  # NOQA
from cupy.sorting.search import argmax  # NOQA
from cupy.sorting.search import argmin  # NOQA

# -----------------------------------------------------------------------------
# Statistics
# -----------------------------------------------------------------------------
from cupy.core.fusion import amax  # NOQA
from cupy.core.fusion import amax as max  # NOQA
from cupy.core.fusion import amin  # NOQA
from cupy.core.fusion import amin as min  # NOQA
from cupy.statistics.order import nanmax  # NOQA
from cupy.statistics.order import nanmin  # NOQA

from cupy.statistics.meanvar import mean  # NOQA
from cupy.statistics.meanvar import std  # NOQA
from cupy.statistics.meanvar import var  # NOQA

from cupy.statistics.histogram import bincount  # NOQA

# -----------------------------------------------------------------------------
# CuPy specific functions
# -----------------------------------------------------------------------------

from cupy.util import clear_memo  # NOQA
from cupy.util import memoize  # NOQA

from cupy.core import ElementwiseKernel  # NOQA
from cupy.core import ReductionKernel  # NOQA

from cupy.ext.scatter import scatter_add  # NOQA


[docs]def asnumpy(a, stream=None): """Returns an array on the host memory from an arbitrary source array. Args: a: Arbitrary object that can be converted to :class:`numpy.ndarray`. stream (cupy.cuda.Stream): CUDA stream object. If it is specified, then the device-to-host copy runs asynchronously. Otherwise, the copy is synchronous. Note that if ``a`` is not a :class:`cupy.ndarray` object, then this argument has no effect. Returns: numpy.ndarray: Converted array on the host memory. """ if isinstance(a, ndarray): return a.get(stream=stream) else: return numpy.asarray(a)
_cupy = sys.modules[__name__]
[docs]def get_array_module(*args): """Returns the array module for arguments. This function is used to implement CPU/GPU generic code. If at least one of the arguments is a :class:`cupy.ndarray` object, the :mod:`cupy` module is returned. Args: args: Values to determine whether NumPy or CuPy should be used. Returns: module: :mod:`cupy` or :mod:`numpy` is returned based on the types of the arguments. .. admonition:: Example A NumPy/CuPy generic function can be written as follows >>> def softplus(x): ... xp = cupy.get_array_module(x) ... return xp.maximum(0, x) + xp.log1p(xp.exp(-abs(x))) """ for arg in args: if isinstance(arg, ndarray): return _cupy return numpy
fuse = fusion.fuse disable_experimental_feature_warning = False