def dpnp_full_like_impl(a, b): name = "full_like" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.5.1/dpnp/backend/kernels/dpnp_krnl_common.cpp#L224 Function declaration: void dpnp_initval_c(void* result1, void* value, size_t size) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [b.dtype.name, "NONE"], sig) res_dtype = b.dtype PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a, b): out = np.ones(a.shape, dtype=res_dtype) common_impl(a, b, out, dpnp_func, PRINT_DEBUG) return out return dpnp_impl
def dpnp_cumprod_impl(a): name = "cumprod" dpnp_lowering.ensure_dpnp(name) res_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.5.1/dpnp/backend/kernels/dpnp_krnl_mathematical.cpp#L110 Function declaration: void dpnp_cumprod_c(void* array1_in, void* result1, size_t size) """ sig = signature(res_type, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG if a.dtype == types.Integer: ret_dtype = np.int64 else: ret_dtype = a.dtype def dpnp_impl(a): out = np.arange(0, a.size, 1, ret_dtype) common_impl(a, out, dpnp_func, PRINT_DEBUG) return out return dpnp_impl
def dpnp_trace_impl(a): name = "trace" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.6.2/dpnp/backend/kernels/dpnp_krnl_arraycreation.cpp#L218 Function declaration: void dpnp_trace_c(const void* array1_in, void* result1, const size_t* shape_, const size_t ndim) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): diag_arr = numba_dppy.dpnp.diagonal(a, 0) out = np.zeros(diag_arr.shape[:-1], dtype=a.dtype) common_shape_impl(diag_arr, out, dpnp_func, PRINT_DEBUG) return out return dpnp_impl
def dpnp_det_impl(a): name = "det" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_linalg.cpp#L83 Function declaration: void custom_det_c(void* array1_in, void* result1, size_t* shape, size_t ndim) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): n = a.shape[-1] if a.shape[-2] != n: raise ValueError("Input array must be square.") dpnp_ext._check_finite_matrix(a) if a.ndim == 2: out = np.empty((1, ), dtype=a.dtype) out[0] = -4 else: out = np.empty(a.shape[:-2], dtype=a.dtype) sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(a_usm, out_usm, a.shapeptr, a.ndim) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([out.size, a.size]) if PRINT_DEBUG: print("dpnp implementation") if a.ndim == 2: return out[0] else: return out return dpnp_impl
def dpnp_zeros_like_impl(a, dtype=None): name = "zeros_like" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.5.1/dpnp/backend/kernels/dpnp_krnl_common.cpp#L224 Function declaration: void dpnp_initval_c(void* result1, void* value, size_t size) """ res_dtype = dtype if dtype == types.none or dtype is None: res_dtype = a.dtype name_dtype = res_dtype.name else: name_dtype = res_dtype.dtype.name sig = signature(ret_type, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [name_dtype, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a, dtype=None): b = np.zeros(1, dtype=res_dtype) out = np.zeros(a.shape, dtype=res_dtype) common_impl(a, b, out, dpnp_func, PRINT_DEBUG) return out return dpnp_impl
def dpnp_matrix_power_impl(a, n): dpnp_lowering.ensure_dpnp("matrix_power") """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels.cpp#L42 Function declaration: void dpnp_matmul_c(void* array1_in, void* array2_in, void* result1, size_t size_m, size_t size_n, size_t size_k) """ PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a, n): if n < 0: raise ValueError( "n < 0 is not supported for np.linalg.matrix_power(a, n)") if n == 0: if PRINT_DEBUG: print("dpnp implementation") return np.identity(a.shape[0], a.dtype) result = a for idx in range(0, n - 1): result = numba_dppy.dpnp.matmul(result, a) return result return dpnp_impl
def dpnp_random_impl(size=None): name = "normal" dpnp_lowering.ensure_dpnp("standard_normal") ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L282 Function declaration: void custom_rng_normal_c(void* result, _DataType mean, _DataType stddev, size_t size) """ sig = signature(ret_type, types.voidptr, types.float64, types.float64, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["float64", "NONE"], sig) res_dtype = np.float64 PRINT_DEBUG = dpnp_lowering.DEBUG if size in (None, types.none): def dpnp_impl(size=None): res = np.empty(1, dtype=res_dtype) common_impl(0.0, 1.0, res, dpnp_func, PRINT_DEBUG) return res[0] else: def dpnp_impl(size=None): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl(0.0, 1.0, res, dpnp_func, PRINT_DEBUG) return res return dpnp_impl
def dpnp_random_impl(*size): name = "random_sample" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L391 Function declaration: void custom_rng_uniform_c(void* result, long low, long high, size_t size) """ sig = signature(ret_type, types.voidptr, types.int64, types.int64, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["float64", "NONE"], sig) res_dtype = np.float64 PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(*size): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl(0, 1, res, dpnp_func, PRINT_DEBUG) return res return dpnp_impl
def dpnp_matrix_rank_impl(M, tol=None, hermitian=False): name = "matrix_rank" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_linalg.cpp#L186 Function declaration: void custom_matrix_rank_c(void* array1_in, void* result1, size_t* shape, size_t ndim) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [M.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(M, tol=None, hermitian=False): if tol is not None: raise ValueError( "tol is not supported for np.linalg.matrix_rank(M)") if hermitian: raise ValueError( "hermitian is not supported for np.linalg.matrix_rank(M)") if M.ndim > 2: raise ValueError( "np.linalg.matrix_rank(M) is only supported on 1 or 2-d arrays" ) out = np.empty(1, dtype=M.dtype) sycl_queue = dpctl_functions.get_current_queue() M_usm = dpctl_functions.malloc_shared(M.size * M.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, M_usm, M.ctypes, M.size * M.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(M_usm, out_usm, M.shapeptr, M.ndim) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(M_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([out.size, M.size]) if PRINT_DEBUG: print("dpnp implementation") return out[0] return dpnp_impl
def dpnp_eigvals_impl(a): dpnp_lowering.ensure_dpnp("eigvals") def dpnp_impl(a): eigval, eigvec = numba_dppy.dpnp.eig(a) return eigval return dpnp_impl
def dpnp_random_impl(low, high=None, size=None): name = "random_sample" dpnp_lowering.ensure_dpnp("random_integers") ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L391 Function declaration: void custom_rng_uniform_c(void* result, long low, long high, size_t size) """ sig = signature(ret_type, types.voidptr, types.int64, types.int64, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["int32", "NONE"], sig) res_dtype = np.int32 PRINT_DEBUG = dpnp_lowering.DEBUG if size in (None, types.none): if high not in (None, types.none): def dpnp_impl(low, high=None, size=None): res = np.empty(1, dtype=res_dtype) common_impl(low, high + 1, res, dpnp_func, PRINT_DEBUG) return res else: def dpnp_impl(low, high=None, size=None): res = np.empty(1, dtype=res_dtype) common_impl(1, low + 1, res, dpnp_func, PRINT_DEBUG) return res else: if high not in (None, types.none): def dpnp_impl(low, high=None, size=None): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl(low, high + 1, res, dpnp_func, PRINT_DEBUG) return res else: def dpnp_impl(low, high=None, size=None): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl(1, low + 1, res, dpnp_func, PRINT_DEBUG) return res return dpnp_impl
def dpnp_random_impl(ngood, nbad, nsample, size=None): name = "hypergeometric" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L169 Function declaration: void custom_rng_hypergeometric_c(void* result, int l, int s, int m, size_t size) """ sig = signature( ret_type, types.voidptr, types.int32, types.int32, types.int32, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["int32", "NONE"], sig) res_dtype = np.int32 PRINT_DEBUG = dpnp_lowering.DEBUG if not (isinstance(ngood, types.Integer)): raise ValueError("We only support scalar for input: ngood") if not (isinstance(nbad, types.Integer)): raise ValueError("We only support scalar for input: nbad") if not (isinstance(nsample, types.Integer)): raise ValueError("We only support scalar for input: nsample") if size in (None, types.none): def dpnp_impl(ngood, nbad, nsample, size=None): res = np.empty(1, dtype=res_dtype) common_impl_hypergeometric(ngood, nbad, nsample, res, dpnp_func, PRINT_DEBUG) return res[0] else: def dpnp_impl(ngood, nbad, nsample, size=None): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl_hypergeometric(ngood, nbad, nsample, res, dpnp_func, PRINT_DEBUG) return res return dpnp_impl
def dpnp_all_impl(a): name = "all" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.6.2/dpnp/backend/kernels/dpnp_krnl_logic.cpp#L36 Function declaration: void dpnp_all_c(const void* array1_in, void* result1, const size_t size) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): if a.size == 0: return True out = np.empty(1, dtype=np.bool_) sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(a_usm, out_usm, a.size) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") # TODO: sometimes all() returns ndarray return out[0] return dpnp_impl
def dpnp_full_impl(a, b): name = "full" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.5.1/dpnp/backend/kernels/dpnp_krnl_arraycreation.cpp#L70 Function declaration: void dpnp_full_c(void* array_in, void* result, const size_t size) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [b.dtype.name, "NONE"], sig) res_dtype = b.dtype PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a, b): if a.size == 0: raise ValueError("Passed Empty array") sycl_queue = dpctl_functions.get_current_queue() b_usm = dpctl_functions.malloc_shared(b.size * b.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, b_usm, b.ctypes, b.size * b.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out = np.arange(0, a.size, 1, res_dtype) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(b_usm, out_usm, a.size) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(b_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") return out return dpnp_impl
def dpnp_argmin_impl(a): name = "argmin" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_searching.cpp#L56 Function declaration: void custom_argmin_c(void* array1_in, void* result1, size_t size) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.intp) dpnp_func = dpnp_ext.dpnp_func( "dpnp_" + name, [a.dtype.name, np.dtype(np.int64).name], sig) res_dtype = np.int64 PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): if a.size == 0: raise ValueError("Passed Empty array") sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out = np.empty(1, dtype=res_dtype) out_usm = dpctl_functions.malloc_shared(out.itemsize, sycl_queue) dpnp_func(a_usm, out_usm, a.size) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") return out[0] return dpnp_impl
def dpnp_vdot_impl(a, b): dpnp_lowering.ensure_dpnp("vdot") """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels.cpp#L118 Function declaration: void dpnp_dot_c(void* array1_in, void* array2_in, void* result1, size_t size) """ def dpnp_impl(a, b): return numba_dppy.dpnp.dot(np.ravel(a), np.ravel(b)) return dpnp_impl
def dpnp_sum_impl(a): name = "sum" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.6.1dev/dpnp/backend/kernels/dpnp_krnl_reduction.cpp#L59 Function declaration: void dpnp_sum_c(void* result_out, const void* input_in, const size_t* input_shape, const size_t input_shape_ndim, const long* axes, const size_t axes_ndim, const void* initial, const long* where) """ sig = signature( ret_type, types.voidptr, # void* result_out, types.voidptr, # const void* input_in, types.voidptr, # const size_t* input_shape, types.intp, # const size_t input_shape_ndim, types.voidptr, # const long* axes, types.intp, # const size_t axes_ndim, types.voidptr, # const void* initial, types.voidptr, # const long* where) ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): out = np.empty(1, dtype=a.dtype) common_impl(a, out, dpnp_func, PRINT_DEBUG) return out[0] return dpnp_impl
def dpnp_random_impl(mean=0.0, sigma=1.0, size=None): name = "lognormal" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L199 Function declaration: void custom_rng_lognormal_c(void* result, _DataType mean, _DataType stddev, size_t size) """ sig = signature(ret_type, types.voidptr, types.float64, types.float64, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["float64", "NONE"], sig) res_dtype = np.float64 PRINT_DEBUG = dpnp_lowering.DEBUG if not isinstance(mean, float): if not (isinstance(mean, types.Float)): raise ValueError("We only support scalar for input: loc") if not isinstance(sigma, float): if not (isinstance(sigma, types.Float)): raise ValueError("We only support scalar for input: scale") if size in (None, types.none): def dpnp_impl(mean=0.0, sigma=1.0, size=None): res = np.empty(1, dtype=res_dtype) common_impl_2_arg(mean, sigma, res, dpnp_func, PRINT_DEBUG) return res[0] else: def dpnp_impl(mean=0.0, sigma=1.0, size=None): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl_2_arg(mean, sigma, res, dpnp_func, PRINT_DEBUG) return res return dpnp_impl
def dpnp_random_impl(n, p, size=None): name = "binomial" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L56 Function declaration: void custom_rng_binomial_c(void* result, int ntrial, double p, size_t size) """ sig = signature(ret_type, types.voidptr, types.int32, types.float64, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["int32", "NONE"], sig) res_dtype = np.int32 PRINT_DEBUG = dpnp_lowering.DEBUG if not (isinstance(n, types.Integer)): raise ValueError("We only support scalar for input: n") if not (isinstance(p, types.Float)): raise ValueError("We only support scalar for input: p") if size in (None, types.none): def dpnp_impl(n, p, size=None): res = np.empty(1, dtype=res_dtype) common_impl_2_arg(n, p, res, dpnp_func, PRINT_DEBUG) return res[0] else: def dpnp_impl(n, p, size=None): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl_2_arg(n, p, res, dpnp_func, PRINT_DEBUG) return res return dpnp_impl
def dpnp_nanprod_impl(a): name = "nanprod" dpnp_lowering.ensure_dpnp(name) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): a_ravel = a.ravel() a_ravel_copy = np.copy(a_ravel) for i in range(len(a_ravel_copy)): if np.isnan(a_ravel_copy[i]): a_ravel_copy[i] = 1 result = numba_dppy.dpnp.prod(a_ravel_copy) dpnp_ext._dummy_liveness_func([a.size, a_ravel_copy.size]) if PRINT_DEBUG: print("dpnp implementation") return result return dpnp_impl
def dpnp_multi_dot_impl(arrays): dpnp_lowering.ensure_dpnp("multi_dot") print_debug = dpnp_lowering.DEBUG """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels.cpp#L118 Function declaration: void dpnp_dot_c(void* array1_in, void* array2_in, void* result1, size_t size) """ def dpnp_impl(arrays): n = len(arrays) result = arrays[0] for idx in range(1, n): result = numba_dppy.dpnp.dot(result, arrays[idx]) if print_debug: print("dpnp implementation") return result return dpnp_impl
def dpnp_random_impl(df, size=None): name = "chisquare" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L71 Function declaration: void custom_rng_chi_square_c(void* result, int df, size_t size) """ sig = signature(ret_type, types.voidptr, types.int32, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["float64", "NONE"], sig) res_dtype = np.float64 PRINT_DEBUG = dpnp_lowering.DEBUG if not (isinstance(df, types.Integer)): raise ValueError("We only support scalar for input: df") if size in (None, types.none): def dpnp_impl(df, size=None): res = np.empty(1, dtype=res_dtype) common_impl_1_arg(df, res, dpnp_func, PRINT_DEBUG) return res[0] else: def dpnp_impl(df, size=None): res = np.empty(size, dtype=res_dtype) if res.size != 0: common_impl_1_arg(df, res, dpnp_func, PRINT_DEBUG) return res return dpnp_impl
def dpnp_partition_impl(a, kth): name = "partition" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.6.2/dpnp/backend/kernels/dpnp_krnl_sorting.cpp#L90 Function declaration: void dpnp_partition_c( void* array1_in, void* array2_in, void* result1, const size_t kth, const size_t* shape_, const size_t ndim) """ sig = signature( ret_type, types.voidptr, types.voidptr, types.voidptr, types.intp, types.voidptr, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a, kth): if a.size == 0: raise ValueError("Passed Empty array") kth_ = kth if kth >= 0 else (a.ndim + kth) arr2 = numba_dppy.dpnp.copy(a) out = np.empty(a.shape, dtype=a.dtype) sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) arr2_usm = dpctl_functions.malloc_shared(arr2.size * arr2.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, arr2_usm, arr2.ctypes, arr2.size * arr2.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(a_usm, arr2_usm, out_usm, kth_, a.shapeptr, a.ndim) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(arr2_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, arr2.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") return out return dpnp_impl
def dpnp_cov_impl(a): name = "cov" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_statistics.cpp#L51 Function declaration: void custom_cov_c(void* array1_in, void* result1, size_t nrows, size_t ncols) """ sig = signature(ret_type, types.voidptr, types.voidptr, types.intp, types.intp) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) res_dtype = np.float64 copy_input_to_double = True if a.dtype == types.float64: copy_input_to_double = False PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): if a.size == 0: raise ValueError("Passed Empty array") sycl_queue = dpctl_functions.get_current_queue() """ We have to pass a array in double precision to DpNp """ if copy_input_to_double: a_copy_in_double = a.astype(np.float64) else: a_copy_in_double = a a_usm = dpctl_functions.malloc_shared( a_copy_in_double.size * a_copy_in_double.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy( sycl_queue, a_usm, a_copy_in_double.ctypes, a_copy_in_double.size * a_copy_in_double.itemsize, ) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) if a.ndim == 2: rows = a.shape[0] cols = a.shape[1] out = np.empty((rows, rows), dtype=res_dtype) elif a.ndim == 1: rows = 1 cols = a.shape[0] out = np.empty(rows, dtype=res_dtype) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(a_usm, out_usm, rows, cols) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func( [a_copy_in_double.size, a.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") if a.ndim == 2: return out elif a.ndim == 1: return out[0] return dpnp_impl
def dpnp_amin_impl(a): name = "min" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/57caae8beb607992f40cdbe00f2666ee84358a97/dpnp/backend/kernels/dpnp_krnl_statistics.cpp#L412 Function declaration: void dpnp_min_c(void* array1_in, void* result1, const size_t result_size, const size_t* shape, size_t ndim, const size_t* axis, size_t naxis) We are using void * in case of size_t * as Numba currently does not have any type to represent size_t *. Since, both the types are pointers, if the compiler allows there should not be any mismatch in the size of the container to hold different types of pointer. """ sig = signature( ret_type, types.voidptr, types.voidptr, types.intp, types.voidptr, types.intp, types.voidptr, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a): if a.size == 0: raise ValueError("Passed Empty array") sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out_usm = dpctl_functions.malloc_shared(a.itemsize, sycl_queue) dpnp_func( a_usm, out_usm, a.size * a.itemsize, a.shapeptr, a.ndim, a.shapeptr, 0, ) out = np.empty(1, dtype=a.dtype) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") return out[0] return dpnp_impl
def dpnp_diagonal_impl(a, offset=0): name = "diagonal" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/e389248c709531b181be8bf33b1a270fca812a92/dpnp/backend/kernels/dpnp_krnl_indexing.cpp#L39 Function declaration: void dpnp_diagonal_c( void* array1_in, const size_t input1_size, void* result1, const size_t offset, size_t* shape, size_t* res_shape, const size_t res_ndim) """ sig = signature( ret_type, types.voidptr, types.intp, types.voidptr, types.intp, types.voidptr, types.voidptr, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG function_text = f"""\ def tuplizer(a): return ({", ".join(f"a[{i}]" for i in range(a.ndim - 1))}) """ locals = {} exec(function_text, globals(), locals) tuplizer = register_jitable(locals["tuplizer"]) def dpnp_impl(a, offset=0): if a.size == 0: raise ValueError("Passed Empty array") n = min(a.shape[0], a.shape[1]) res_shape = np.zeros(a.ndim - 1, dtype=np.int64) if a.ndim > 2: for i in range(a.ndim - 2): res_shape[i] = a.shape[i + 2] if (n + offset) > a.shape[1]: res_shape[-1] = a.shape[1] - offset elif (n + offset) > a.shape[0]: res_shape[-1] = a.shape[0] else: res_shape[-1] = n + offset shape = tuplizer(res_shape) out = np.empty(shape, dtype=a.dtype) sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy( sycl_queue, a_usm, a.ctypes, a.size * a.itemsize ) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out_usm = dpctl_functions.malloc_shared( out.size * out.itemsize, sycl_queue ) dpnp_func( a_usm, a.size * a.itemsize, out_usm, offset, a.shapeptr, out.shapeptr, out.ndim, ) event = dpctl_functions.queue_memcpy( sycl_queue, out.ctypes, out_usm, out.size * out.itemsize ) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") return out return dpnp_impl
def dpnp_random_impl(mean, cov, size=None, check_valid="warn", tol=1e-8): name = "multivariate_normal" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L239 Function declaration: void custom_rng_multivariate_normal_c(void* result, const int dimen, const double* mean_vector, const size_t mean_vector_size, const double* cov_vector, const size_t cov_vector_size, size_t size) """ sig = signature( ret_type, types.voidptr, types.int32, types.voidptr, types.intp, types.voidptr, types.intp, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["float64", "NONE"], sig) res_dtype = np.float64 PRINT_DEBUG = dpnp_lowering.DEBUG if size in (None, types.none): def dpnp_impl(mean, cov, size=None, check_valid="warn", tol=1e-8): out = np.empty(mean.shape, dtype=res_dtype) common_impl_multivariate_normal(mean, cov, size, check_valid, tol, out, dpnp_func, PRINT_DEBUG) return out elif isinstance(size, types.Integer): def dpnp_impl(mean, cov, size=None, check_valid="warn", tol=1e-8): new_size = (size, ) new_size = new_size + (mean.size, ) out = np.empty(new_size, dtype=res_dtype) common_impl_multivariate_normal(mean, cov, size, check_valid, tol, out, dpnp_func, PRINT_DEBUG) return out elif isinstance(size, types.BaseTuple): def dpnp_impl(mean, cov, size=None, check_valid="warn", tol=1e-8): new_size = size + (mean.size, ) out = np.empty(new_size, dtype=res_dtype) common_impl_multivariate_normal(mean, cov, size, check_valid, tol, out, dpnp_func, PRINT_DEBUG) return out else: raise TypeError( "np.random.multivariate_normal(): size should be int or " "tuple or None, got %s" % (size, )) return dpnp_impl
def dpnp_random_impl(n, pvals, size=None): name = "multinomial" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.4.0/dpnp/backend/custom_kernels_random.cpp#L218 Function declaration: void custom_rng_multinomial_c(void* result, int ntrial, const double* p_vector, const size_t p_vector_size, size_t size) """ sig = signature( ret_type, types.voidptr, types.int32, types.voidptr, types.intp, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, ["int32", "NONE"], sig) res_dtype = np.int32 PRINT_DEBUG = dpnp_lowering.DEBUG if not isinstance(n, types.Integer): raise TypeError("np.random.multinomial(): n should be an " "integer, got %s" % (n, )) if not isinstance(pvals, (types.Sequence, types.Array)): raise TypeError("np.random.multinomial(): pvals should be an " "array or sequence, got %s" % (pvals, )) if size in (None, types.none): def dpnp_impl(n, pvals, size=None): out = np.zeros(len(pvals), res_dtype) common_impl_multinomial(n, pvals, out, dpnp_func, PRINT_DEBUG) return out elif isinstance(size, types.Integer): def dpnp_impl(n, pvals, size=None): out = np.zeros((size, len(pvals)), res_dtype) common_impl_multinomial(n, pvals, out, dpnp_func, PRINT_DEBUG) return out elif isinstance(size, types.BaseTuple): def dpnp_impl(n, pvals, size=None): out = np.zeros(size + (len(pvals), ), res_dtype) common_impl_multinomial(n, pvals, out, dpnp_func, PRINT_DEBUG) return out else: raise TypeError("np.random.multinomial(): size should be int or " "tuple or None, got %s" % (size, )) return dpnp_impl
def dpnp_take_impl(a, ind): name = "take" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/ca6eb1b8fc561957402b6f258529f862c4a8f945/dpnp/backend/kernels/dpnp_krnl_indexing.cpp#L479 Function declaration: void dpnp_take_c(void* array1_in, const size_t array1_size, void* indices1, void* result1, size_t size) """ sig = signature( ret_type, types.voidptr, types.intp, types.voidptr, types.voidptr, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) res_dtype = a.dtype PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a, ind): if a.size == 0: raise ValueError("Passed Empty array") sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) ind_usm = dpctl_functions.malloc_shared(ind.size * ind.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, ind_usm, ind.ctypes, ind.size * ind.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out = np.arange(0, ind.size, 1, res_dtype).reshape(ind.shape) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(a_usm, a.size * a.itemsize, ind_usm, out_usm, ind.size) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(ind_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, ind.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") return out return dpnp_impl
def dpnp_repeat_impl(a, repeats): name = "repeat" dpnp_lowering.ensure_dpnp(name) ret_type = types.void """ dpnp source: https://github.com/IntelPython/dpnp/blob/0.6.2/dpnp/backend/kernels/dpnp_krnl_manipulation.cpp#L46 Function declaration: void dpnp_repeat_c(const void* array1_in, void* result1, const size_t repeats, const size_t size) """ sig = signature( ret_type, types.voidptr, types.voidptr, types.intp, types.intp, ) dpnp_func = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig) PRINT_DEBUG = dpnp_lowering.DEBUG def dpnp_impl(a, repeats): if a.size == 0: raise ValueError("Passed Empty array") if a.ndim >= 2: raise ValueError("Not supported in dpnp") new_size = a.size * repeats out = np.zeros(new_size, dtype=a.dtype) sycl_queue = dpctl_functions.get_current_queue() a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue) event = dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue) dpnp_func(a_usm, out_usm, repeats, a.size) event = dpctl_functions.queue_memcpy(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize) dpctl_functions.event_wait(event) dpctl_functions.event_delete(event) dpctl_functions.free_with_queue(a_usm, sycl_queue) dpctl_functions.free_with_queue(out_usm, sycl_queue) dpnp_ext._dummy_liveness_func([a.size, out.size]) if PRINT_DEBUG: print("dpnp implementation") return out return dpnp_impl