/
__init__.py
482 lines (364 loc) · 16.2 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
from __future__ import division
import pkg_resources
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 CuPy and reinstall it with `pip install cupy '
'--no-cache-dir -vvvv`.\n\n'
'original error: {}'.format(exc_info[1]))
six.reraise(ImportError, ImportError(msg), exc_info[2])
__version__ = pkg_resources.get_distribution('cupy').version
from cupy import binary # NOQA
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
from cupy.sorting.sort import sort # 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
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__]
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