Skip to content

Commit dab0ea1

Browse files
committed
implement dpnp.prod and dpnp.nanprod
1 parent d389bd4 commit dab0ea1

10 files changed

+264
-235
lines changed

dpnp/backend/include/dpnp_iface_fptr.hpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,7 @@ enum class DPNPFuncName : size_t
246246
DPNP_FN_PLACE, /**< Used in numpy.place() impl */
247247
DPNP_FN_POWER, /**< Used in numpy.power() impl */
248248
DPNP_FN_PROD, /**< Used in numpy.prod() impl */
249-
DPNP_FN_PROD_EXT, /**< Used in numpy.prod() impl, requires extra parameters
250-
*/
251-
DPNP_FN_PTP, /**< Used in numpy.ptp() impl */
249+
DPNP_FN_PTP, /**< Used in numpy.ptp() impl */
252250
DPNP_FN_PTP_EXT, /**< Used in numpy.ptp() impl, requires extra parameters */
253251
DPNP_FN_PUT, /**< Used in numpy.put() impl */
254252
DPNP_FN_PUT_ALONG_AXIS, /**< Used in numpy.put_along_axis() impl */

dpnp/backend/kernels/dpnp_krnl_reduction.cpp

-49
Original file line numberDiff line numberDiff line change
@@ -294,19 +294,6 @@ void (*dpnp_prod_default_c)(void *,
294294
const long *) =
295295
dpnp_prod_c<_DataType_output, _DataType_input>;
296296

297-
template <typename _DataType_output, typename _DataType_input>
298-
DPCTLSyclEventRef (*dpnp_prod_ext_c)(DPCTLSyclQueueRef,
299-
void *,
300-
const void *,
301-
const shape_elem_type *,
302-
const size_t,
303-
const shape_elem_type *,
304-
const size_t,
305-
const void *,
306-
const long *,
307-
const DPCTLEventVectorRef) =
308-
dpnp_prod_c<_DataType_output, _DataType_input>;
309-
310297
void func_map_init_reduction(func_map_t &fmap)
311298
{
312299
// WARNING. The meaning of the fmap is changed. Second argument represents
@@ -349,42 +336,6 @@ void func_map_init_reduction(func_map_t &fmap)
349336
fmap[DPNPFuncName::DPNP_FN_PROD][eft_DBL][eft_DBL] = {
350337
eft_DBL, (void *)dpnp_prod_default_c<double, double>};
351338

352-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_INT][eft_INT] = {
353-
eft_LNG, (void *)dpnp_prod_ext_c<int32_t, int32_t>};
354-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_INT][eft_LNG] = {
355-
eft_LNG, (void *)dpnp_prod_ext_c<int64_t, int32_t>};
356-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_INT][eft_FLT] = {
357-
eft_FLT, (void *)dpnp_prod_ext_c<float, int32_t>};
358-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_INT][eft_DBL] = {
359-
eft_DBL, (void *)dpnp_prod_ext_c<double, int32_t>};
360-
361-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_LNG][eft_INT] = {
362-
eft_INT, (void *)dpnp_prod_ext_c<int32_t, int64_t>};
363-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_LNG][eft_LNG] = {
364-
eft_LNG, (void *)dpnp_prod_ext_c<int64_t, int64_t>};
365-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_LNG][eft_FLT] = {
366-
eft_FLT, (void *)dpnp_prod_ext_c<float, int64_t>};
367-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_LNG][eft_DBL] = {
368-
eft_DBL, (void *)dpnp_prod_ext_c<double, int64_t>};
369-
370-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_FLT][eft_INT] = {
371-
eft_INT, (void *)dpnp_prod_ext_c<int32_t, float>};
372-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_FLT][eft_LNG] = {
373-
eft_LNG, (void *)dpnp_prod_ext_c<int64_t, float>};
374-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_FLT][eft_FLT] = {
375-
eft_FLT, (void *)dpnp_prod_ext_c<float, float>};
376-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_FLT][eft_DBL] = {
377-
eft_DBL, (void *)dpnp_prod_ext_c<double, float>};
378-
379-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_DBL][eft_INT] = {
380-
eft_INT, (void *)dpnp_prod_ext_c<int32_t, double>};
381-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_DBL][eft_LNG] = {
382-
eft_LNG, (void *)dpnp_prod_ext_c<int64_t, double>};
383-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_DBL][eft_FLT] = {
384-
eft_FLT, (void *)dpnp_prod_ext_c<float, double>};
385-
fmap[DPNPFuncName::DPNP_FN_PROD_EXT][eft_DBL][eft_DBL] = {
386-
eft_DBL, (void *)dpnp_prod_ext_c<double, double>};
387-
388339
fmap[DPNPFuncName::DPNP_FN_SUM][eft_INT][eft_INT] = {
389340
eft_LNG, (void *)dpnp_sum_default_c<int32_t, int32_t>};
390341
fmap[DPNPFuncName::DPNP_FN_SUM][eft_INT][eft_LNG] = {

dpnp/dpnp_algo/dpnp_algo.pxd

-2
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,6 @@ cdef extern from "dpnp_iface_fptr.hpp" namespace "DPNPFuncName": # need this na
128128
DPNP_FN_PARTITION
129129
DPNP_FN_PARTITION_EXT
130130
DPNP_FN_PLACE
131-
DPNP_FN_PROD
132-
DPNP_FN_PROD_EXT
133131
DPNP_FN_PTP
134132
DPNP_FN_PTP_EXT
135133
DPNP_FN_QR

dpnp/dpnp_algo/dpnp_algo_mathematical.pxi

-84
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,7 @@ __all__ += [
5050
"dpnp_modf",
5151
"dpnp_nancumprod",
5252
"dpnp_nancumsum",
53-
"dpnp_nanprod",
5453
"dpnp_nansum",
55-
"dpnp_prod",
5654
"dpnp_sum",
5755
"dpnp_trapz",
5856
]
@@ -319,26 +317,6 @@ cpdef utils.dpnp_descriptor dpnp_nancumsum(utils.dpnp_descriptor x1):
319317
return dpnp_cumsum(x1_desc)
320318

321319

322-
cpdef utils.dpnp_descriptor dpnp_nanprod(utils.dpnp_descriptor x1):
323-
x1_obj = x1.get_array()
324-
cdef utils.dpnp_descriptor result = utils_py.create_output_descriptor_py(x1.shape,
325-
x1.dtype,
326-
None,
327-
device=x1_obj.sycl_device,
328-
usm_type=x1_obj.usm_type,
329-
sycl_queue=x1_obj.sycl_queue)
330-
331-
for i in range(result.size):
332-
input_elem = x1.get_pyobj().flat[i]
333-
334-
if dpnp.isnan(input_elem):
335-
result.get_pyobj().flat[i] = 1
336-
else:
337-
result.get_pyobj().flat[i] = input_elem
338-
339-
return dpnp_prod(result)
340-
341-
342320
cpdef utils.dpnp_descriptor dpnp_nansum(utils.dpnp_descriptor x1):
343321
x1_obj = x1.get_array()
344322
cdef utils.dpnp_descriptor result = utils_py.create_output_descriptor_py(x1.shape,
@@ -359,68 +337,6 @@ cpdef utils.dpnp_descriptor dpnp_nansum(utils.dpnp_descriptor x1):
359337
return dpnp_sum(result)
360338

361339

362-
cpdef utils.dpnp_descriptor dpnp_prod(utils.dpnp_descriptor x1,
363-
object axis=None,
364-
object dtype=None,
365-
utils.dpnp_descriptor out=None,
366-
cpp_bool keepdims=False,
367-
object initial=None,
368-
object where=True):
369-
"""
370-
input:float64 : output:float64 : name:prod
371-
input:float32 : output:float32 : name:prod
372-
input:int64 : output:int64 : name:prod
373-
input:int32 : output:int64 : name:prod
374-
input:bool : output:int64 : name:prod
375-
input:complex64 : output:complex64 : name:prod
376-
input:complex128: output:complex128: name:prod
377-
"""
378-
379-
cdef shape_type_c x1_shape = x1.shape
380-
cdef DPNPFuncType x1_c_type = dpnp_dtype_to_DPNPFuncType(x1.dtype)
381-
382-
cdef shape_type_c axis_shape = utils._object_to_tuple(axis)
383-
384-
cdef shape_type_c result_shape = utils.get_reduction_output_shape(x1_shape, axis, keepdims)
385-
cdef DPNPFuncType result_c_type = utils.get_output_c_type(DPNP_FN_PROD_EXT, x1_c_type, out, dtype)
386-
387-
""" select kernel """
388-
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_PROD_EXT, x1_c_type, result_c_type)
389-
390-
x1_obj = x1.get_array()
391-
392-
""" Create result array """
393-
cdef utils.dpnp_descriptor result = utils.create_output_descriptor(result_shape,
394-
result_c_type,
395-
out,
396-
device=x1_obj.sycl_device,
397-
usm_type=x1_obj.usm_type,
398-
sycl_queue=x1_obj.sycl_queue)
399-
cdef dpnp_reduction_c_t func = <dpnp_reduction_c_t > kernel_data.ptr
400-
401-
result_sycl_queue = result.get_array().sycl_queue
402-
403-
cdef c_dpctl.SyclQueue q = <c_dpctl.SyclQueue> result_sycl_queue
404-
cdef c_dpctl.DPCTLSyclQueueRef q_ref = q.get_queue_ref()
405-
406-
""" Call FPTR interface function """
407-
cdef c_dpctl.DPCTLSyclEventRef event_ref = func(q_ref,
408-
result.get_data(),
409-
x1.get_data(),
410-
x1_shape.data(),
411-
x1_shape.size(),
412-
axis_shape.data(),
413-
axis_shape.size(),
414-
NULL,
415-
NULL,
416-
NULL) # dep_events_ref
417-
418-
with nogil: c_dpctl.DPCTLEvent_WaitAndThrow(event_ref)
419-
c_dpctl.DPCTLEvent_Delete(event_ref)
420-
421-
return result
422-
423-
424340
cpdef utils.dpnp_descriptor dpnp_sum(utils.dpnp_descriptor x1,
425341
object axis=None,
426342
object dtype=None,

0 commit comments

Comments
 (0)