Project comparisons#

Here is a list of NumPy APIs and corresponding cuPyNumeric implementations.

A dot in the cupynumeric column denotes that cuPyNumeric implementation is not provided yet. We welcome contributions for these functions.

NumPy vs cuPyNumeric APIs#

Module-Level#

NumPy

cupynumeric

single-GPU/CPU

multi-GPU/CPU

numpy.DataSource

numpy.RankWarning

numpy.arange

cupynumeric.arange

✓

✓

numpy.array

cupynumeric.array

✓

✓

numpy.asanyarray

numpy.asarray

cupynumeric.asarray

✓

✓

numpy.asarray_chkfinite

numpy.ascontiguousarray

numpy.asfortranarray

numpy.asmatrix

numpy.bartlett

cupynumeric.bartlett

✓

✓

numpy.base_repr

numpy.binary_repr

numpy.blackman

cupynumeric.blackman

✓

✓

numpy.bmat

numpy.bool_

numpy.broadcast

numpy.broadcast_shapes

cupynumeric.broadcast_shapes

✓

✓

numpy.busdaycalendar

numpy.byte

numpy.byte_bounds

numpy.bytes_

numpy.cdouble

numpy.cfloat

numpy.character

numpy.chararray

numpy.clongdouble

numpy.clongfloat

numpy.complex128

numpy.complex256

numpy.complex64

numpy.complex_

numpy.complexfloating

numpy.csingle

numpy.datetime64

numpy.datetime_data

numpy.deprecate

numpy.deprecate_with_doc

numpy.diag_indices

cupynumeric.diag_indices

✓

✓

numpy.disp

numpy.double

numpy.dtype

numpy.empty

cupynumeric.empty

✓

✓

numpy.errstate

numpy.eye

cupynumeric.eye

✓

✓

numpy.find_common_type

cupynumeric.find_common_type

❌

❌

numpy.finfo

numpy.flatiter

numpy.flexible

numpy.float128

numpy.float16

numpy.float32

numpy.float64

numpy.float_

numpy.floating

numpy.format_float_positional

numpy.format_float_scientific

numpy.format_parser

numpy.from_dlpack

numpy.frombuffer

numpy.fromfile

numpy.fromfunction

numpy.fromiter

numpy.frompyfunc

numpy.fromregex

numpy.fromstring

numpy.full

cupynumeric.full

✓

✓

numpy.generic

numpy.genfromtxt

numpy.get_include

numpy.get_printoptions

numpy.getbufsize

numpy.geterr

numpy.geterrcall

numpy.geterrobj

numpy.half

numpy.hamming

cupynumeric.hamming

✓

✓

numpy.hanning

cupynumeric.hanning

✓

✓

numpy.identity

cupynumeric.identity

✓

✓

numpy.iinfo

numpy.indices

cupynumeric.indices

✓

✓

numpy.inexact

numpy.info

numpy.int16

numpy.int32

numpy.int64

numpy.int8

numpy.int_

numpy.intc

numpy.integer

numpy.intp

numpy.isfortran

numpy.isscalar

cupynumeric.isscalar

✓

✓

numpy.issctype

numpy.issubclass_

numpy.issubdtype

numpy.issubsctype

numpy.kaiser

cupynumeric.kaiser

✓

✓

numpy.load

cupynumeric.load

❌

❌

numpy.loadtxt

numpy.longcomplex

numpy.longdouble

numpy.longfloat

numpy.longlong

numpy.lookfor

numpy.mask_indices

cupynumeric.mask_indices

✓

✓

numpy.mat

numpy.matrix

numpy.maximum_sctype

numpy.memmap

numpy.mintypecode

numpy.ndarray()

numpy.ndenumerate

numpy.ndindex

numpy.nditer

numpy.nested_iters

numpy.number

numpy.obj2sctype

numpy.object_

numpy.ones

cupynumeric.ones

✓

✓

numpy.poly1d

numpy.printoptions

numpy.promote_types

numpy.recarray

numpy.record

numpy.require

numpy.sctype2char

numpy.set_printoptions

numpy.set_string_function

numpy.setbufsize

numpy.seterr

numpy.seterrcall

numpy.seterrobj

numpy.short

numpy.show_config

numpy.show_runtime

numpy.signedinteger

numpy.single

numpy.singlecomplex

numpy.source

numpy.str_

numpy.string_

numpy.timedelta64

numpy.tri

cupynumeric.tri

✓

✓

numpy.tril_indices

cupynumeric.tril_indices

✓

✓

numpy.triu_indices

cupynumeric.triu_indices

✓

✓

numpy.typename

numpy.ubyte

numpy.ufunc

numpy.uint

numpy.uint16

numpy.uint32

numpy.uint64

numpy.uint8

numpy.uintc

numpy.uintp

numpy.ulonglong

numpy.unicode_

numpy.unsignedinteger

numpy.ushort

numpy.vectorize

numpy.void

numpy.who

numpy.zeros

cupynumeric.zeros

✓

✓

Summary

Number of NumPy functions: 164

Number of functions covered by cupynumeric: 24

Ufuncs#

NumPy

cupynumeric

single-GPU/CPU

multi-GPU/CPU

numpy.absolute

cupynumeric.absolute

✓

✓

numpy.add

cupynumeric.add

✓

✓

numpy.arccos

cupynumeric.arccos

✓

✓

numpy.arccosh

cupynumeric.arccosh

✓

✓

numpy.arcsin

cupynumeric.arcsin

✓

✓

numpy.arcsinh

cupynumeric.arcsinh

✓

✓

numpy.arctan

cupynumeric.arctan

✓

✓

numpy.arctan2

cupynumeric.arctan2

✓

✓

numpy.arctanh

cupynumeric.arctanh

✓

✓

numpy.bitwise_and

cupynumeric.bitwise_and

✓

✓

numpy.bitwise_or

cupynumeric.bitwise_or

✓

✓

numpy.bitwise_xor

cupynumeric.bitwise_xor

✓

✓

numpy.cbrt

cupynumeric.cbrt

✓

✓

numpy.ceil

cupynumeric.ceil

✓

✓

numpy.conj

cupynumeric.conj

✓

✓

numpy.conjugate

cupynumeric.conjugate

✓

✓

numpy.copysign

cupynumeric.copysign

✓

✓

numpy.cos

cupynumeric.cos

✓

✓

numpy.cosh

cupynumeric.cosh

✓

✓

numpy.deg2rad

cupynumeric.deg2rad

✓

✓

numpy.degrees

cupynumeric.degrees

✓

✓

numpy.divide

cupynumeric.divide

✓

✓

numpy.divmod

numpy.equal

cupynumeric.equal

✓

✓

numpy.exp

cupynumeric.exp

✓

✓

numpy.exp2

cupynumeric.exp2

✓

✓

numpy.expm1

cupynumeric.expm1

✓

✓

numpy.fabs

cupynumeric.fabs

✓

✓

numpy.float_power

cupynumeric.float_power

✓

✓

numpy.floor

cupynumeric.floor

✓

✓

numpy.floor_divide

cupynumeric.floor_divide

✓

✓

numpy.fmax

cupynumeric.fmax

✓

✓

numpy.fmin

cupynumeric.fmin

✓

✓

numpy.fmod

cupynumeric.fmod

✓

✓

numpy.frexp

cupynumeric.frexp

✓

✓

numpy.gcd

cupynumeric.gcd

✓

✓

numpy.greater

cupynumeric.greater

✓

✓

numpy.greater_equal

cupynumeric.greater_equal

✓

✓

numpy.heaviside

numpy.hypot

cupynumeric.hypot

✓

✓

numpy.invert

cupynumeric.invert

✓

✓

numpy.isfinite

cupynumeric.isfinite

✓

✓

numpy.isinf

cupynumeric.isinf

✓

✓

numpy.isnan

cupynumeric.isnan

✓

✓

numpy.isnat

numpy.lcm

cupynumeric.lcm

✓

✓

numpy.ldexp

cupynumeric.ldexp

✓

✓

numpy.left_shift

cupynumeric.left_shift

✓

✓

numpy.less

cupynumeric.less

✓

✓

numpy.less_equal

cupynumeric.less_equal

✓

✓

numpy.log

cupynumeric.log

✓

✓

numpy.log10

cupynumeric.log10

✓

✓

numpy.log1p

cupynumeric.log1p

✓

✓

numpy.log2

cupynumeric.log2

✓

✓

numpy.logaddexp

cupynumeric.logaddexp

✓

✓

numpy.logaddexp2

cupynumeric.logaddexp2

✓

✓

numpy.logical_and

cupynumeric.logical_and

✓

✓

numpy.logical_not

cupynumeric.logical_not

✓

✓

numpy.logical_or

cupynumeric.logical_or

✓

✓

numpy.logical_xor

cupynumeric.logical_xor

✓

✓

numpy.matmul

cupynumeric.matmul

✓

✓

numpy.maximum

cupynumeric.maximum

✓

✓

numpy.minimum

cupynumeric.minimum

✓

✓

numpy.mod

cupynumeric.mod

✓

✓

numpy.modf

cupynumeric.modf

✓

✓

numpy.multiply

cupynumeric.multiply

✓

✓

numpy.negative

cupynumeric.negative

✓

✓

numpy.nextafter

cupynumeric.nextafter

✓

✓

numpy.not_equal

cupynumeric.not_equal

✓

✓

numpy.positive

cupynumeric.positive

✓

✓

numpy.power

cupynumeric.power

✓

✓

numpy.rad2deg

cupynumeric.rad2deg

✓

✓

numpy.radians

cupynumeric.radians

✓

✓

numpy.reciprocal

cupynumeric.reciprocal

✓

✓

numpy.remainder

cupynumeric.remainder

✓

✓

numpy.right_shift

cupynumeric.right_shift

✓

✓

numpy.rint

cupynumeric.rint

✓

✓

numpy.sign

cupynumeric.sign

✓

✓

numpy.signbit

cupynumeric.signbit

✓

✓

numpy.sin

cupynumeric.sin

✓

✓

numpy.sinh

cupynumeric.sinh

✓

✓

numpy.spacing

numpy.sqrt

cupynumeric.sqrt

✓

✓

numpy.square

cupynumeric.square

✓

✓

numpy.subtract

cupynumeric.subtract

✓

✓

numpy.tan

cupynumeric.tan

✓

✓

numpy.tanh

cupynumeric.tanh

✓

✓

numpy.true_divide

cupynumeric.true_divide

✓

✓

numpy.trunc

cupynumeric.trunc

✓

✓

Summary

Number of NumPy functions: 89

Number of functions covered by cupynumeric: 85

Multi-Dimensional Array#

NumPy

cupynumeric

single-GPU/CPU

multi-GPU/CPU

numpy.ndarray.all()

cupynumeric.ndarray.all()

✓

✓

numpy.ndarray.any()

cupynumeric.ndarray.any()

✓

✓

numpy.ndarray.argmax()

cupynumeric.ndarray.argmax()

✓

✓

numpy.ndarray.argmin()

cupynumeric.ndarray.argmin()

✓

✓

numpy.ndarray.argpartition()

cupynumeric.ndarray.argpartition()

✓

✓

numpy.ndarray.argsort()

cupynumeric.ndarray.argsort()

✓

✓

numpy.ndarray.astype()

cupynumeric.ndarray.astype()

✓

✓

numpy.ndarray.byteswap()

numpy.ndarray.choose()

cupynumeric.ndarray.choose()

✓

✓

numpy.ndarray.clip()

cupynumeric.ndarray.clip()

✓

✓

numpy.ndarray.compress()

cupynumeric.ndarray.compress()

✓

✓

numpy.ndarray.conj()

cupynumeric.ndarray.conj()

✓

✓

numpy.ndarray.conjugate()

cupynumeric.ndarray.conjugate()

✓

✓

numpy.ndarray.copy()

cupynumeric.ndarray.copy()

✓

✓

numpy.ndarray.cumprod()

cupynumeric.ndarray.cumprod()

❌

❌

numpy.ndarray.cumsum()

cupynumeric.ndarray.cumsum()

❌

❌

numpy.ndarray.diagonal()

cupynumeric.ndarray.diagonal()

✓

✓

numpy.ndarray.dot()

cupynumeric.ndarray.dot()

✓

✓

numpy.ndarray.dump()

cupynumeric.ndarray.dump()

❌

❌

numpy.ndarray.dumps()

cupynumeric.ndarray.dumps()

✓

✓

numpy.ndarray.fill()

cupynumeric.ndarray.fill()

✓

✓

numpy.ndarray.flatten()

cupynumeric.ndarray.flatten()

✓

✓

numpy.ndarray.getfield()

cupynumeric.ndarray.getfield()

❌

❌

numpy.ndarray.item()

cupynumeric.ndarray.item()

✓

✓

numpy.ndarray.itemset()

cupynumeric.ndarray.itemset()

✓

✓

numpy.ndarray.mean()

cupynumeric.ndarray.mean()

✓

✓

numpy.ndarray.newbyteorder()

numpy.ndarray.nonzero()

cupynumeric.ndarray.nonzero()

✓

✓

numpy.ndarray.partition()

cupynumeric.ndarray.partition()

✓

✓

numpy.ndarray.prod()

cupynumeric.ndarray.prod()

✓

✓

numpy.ndarray.ptp()

numpy.ndarray.put()

cupynumeric.ndarray.put()

✓

✓

numpy.ndarray.ravel()

cupynumeric.ndarray.ravel()

✓

✓

numpy.ndarray.repeat()

numpy.ndarray.reshape()

cupynumeric.ndarray.reshape()

✓

✓

numpy.ndarray.resize()

numpy.ndarray.searchsorted()

cupynumeric.ndarray.searchsorted()

✓

✓

numpy.ndarray.setfield()

cupynumeric.ndarray.setfield()

❌

❌

numpy.ndarray.setflags()

cupynumeric.ndarray.setflags()

✓

✓

numpy.ndarray.sort()

cupynumeric.ndarray.sort()

✓

✓

numpy.ndarray.squeeze()

cupynumeric.ndarray.squeeze()

✓

✓

numpy.ndarray.std()

numpy.ndarray.sum()

cupynumeric.ndarray.sum()

✓

✓

numpy.ndarray.swapaxes()

cupynumeric.ndarray.swapaxes()

✓

✓

numpy.ndarray.take()

cupynumeric.ndarray.take()

✓

✓

numpy.ndarray.tobytes()

cupynumeric.ndarray.tobytes()

✓

✓

numpy.ndarray.tofile()

cupynumeric.ndarray.tofile()

❌

❌

numpy.ndarray.tolist()

cupynumeric.ndarray.tolist()

✓

✓

numpy.ndarray.tostring()

cupynumeric.ndarray.tostring()

✓

✓

numpy.ndarray.trace()

cupynumeric.ndarray.trace()

✓

✓

numpy.ndarray.transpose()

cupynumeric.ndarray.transpose()

✓

✓

numpy.ndarray.var()

cupynumeric.ndarray.var()

✓

✓

numpy.ndarray.view()

cupynumeric.ndarray.view()

✓

✓

Summary

Number of NumPy functions: 53

Number of functions covered by cupynumeric: 47

Linear Algebra#

NumPy

cupynumeric

single-GPU/CPU

multi-GPU/CPU

numpy.linalg.LinAlgError

Summary

Number of NumPy functions: 1

Number of functions covered by cupynumeric: 0

Discrete Fourier Transform#

NumPy

cupynumeric

single-GPU/CPU

multi-GPU/CPU

numpy.fft.fftfreq

numpy.fft.rfftfreq

Summary

Number of NumPy functions: 2

Number of functions covered by cupynumeric: 0

Random Sampling#

NumPy

cupynumeric

single-GPU/CPU

multi-GPU/CPU

numpy.random.BitGenerator

numpy.random.Generator

numpy.random.MT19937

numpy.random.PCG64

numpy.random.PCG64DXSM

numpy.random.Philox

numpy.random.RandomState

numpy.random.SFC64

numpy.random.SeedSequence

numpy.random.beta

cupynumeric.random.beta

✓

✓

numpy.random.binomial

cupynumeric.random.binomial

✓

✓

numpy.random.bytes

cupynumeric.random.bytes

✓

✓

numpy.random.chisquare

cupynumeric.random.chisquare

✓

✓

numpy.random.choice

numpy.random.default_rng

cupynumeric.random.default_rng

✓

✓

numpy.random.dirichlet

numpy.random.exponential

cupynumeric.random.exponential

✓

✓

numpy.random.f

cupynumeric.random.f

✓

✓

numpy.random.gamma

cupynumeric.random.gamma

✓

✓

numpy.random.geometric

cupynumeric.random.geometric

✓

✓

numpy.random.get_bit_generator

numpy.random.get_state

numpy.random.gumbel

cupynumeric.random.gumbel

✓

✓

numpy.random.hypergeometric

cupynumeric.random.hypergeometric

✓

✓

numpy.random.laplace

cupynumeric.random.laplace

✓

✓

numpy.random.logistic

cupynumeric.random.logistic

✓

✓

numpy.random.lognormal

cupynumeric.random.lognormal

✓

✓

numpy.random.logseries

cupynumeric.random.logseries

✓

✓

numpy.random.multinomial

numpy.random.multivariate_normal

numpy.random.negative_binomial

cupynumeric.random.negative_binomial

✓

✓

numpy.random.noncentral_chisquare

cupynumeric.random.noncentral_chisquare

✓

✓

numpy.random.noncentral_f

cupynumeric.random.noncentral_f

✓

✓

numpy.random.normal

cupynumeric.random.normal

✓

✓

numpy.random.pareto

cupynumeric.random.pareto

✓

✓

numpy.random.permutation

numpy.random.poisson

cupynumeric.random.poisson

✓

✓

numpy.random.power

cupynumeric.random.power

✓

✓

numpy.random.rand

cupynumeric.random.rand

✓

✓

numpy.random.randint

cupynumeric.random.randint

✓

✓

numpy.random.randn

cupynumeric.random.randn

✓

✓

numpy.random.random

cupynumeric.random.random

✓

✓

numpy.random.random_integers

cupynumeric.random.random_integers

✓

✓

numpy.random.random_sample

cupynumeric.random.random_sample

✓

✓

numpy.random.ranf

cupynumeric.random.ranf

✓

✓

numpy.random.rayleigh

cupynumeric.random.rayleigh

✓

✓

numpy.random.sample

cupynumeric.random.sample

✓

✓

numpy.random.seed

cupynumeric.random.seed

✓

✓

numpy.random.set_bit_generator

numpy.random.set_state

numpy.random.shuffle

numpy.random.standard_cauchy

cupynumeric.random.standard_cauchy

✓

✓

numpy.random.standard_exponential

cupynumeric.random.standard_exponential

✓

✓

numpy.random.standard_gamma

cupynumeric.random.standard_gamma

✓

✓

numpy.random.standard_normal

numpy.random.standard_t

cupynumeric.random.standard_t

✓

✓

numpy.random.triangular

cupynumeric.random.triangular

✓

✓

numpy.random.uniform

cupynumeric.random.uniform

✓

✓

numpy.random.vonmises

cupynumeric.random.vonmises

✓

✓

numpy.random.wald

cupynumeric.random.wald

✓

✓

numpy.random.weibull

cupynumeric.random.weibull

✓

✓

numpy.random.zipf

cupynumeric.random.zipf

✓

✓

Summary

Number of NumPy functions: 62

Number of functions covered by cupynumeric: 42