Skip to content

Commit ec36373

Browse files
authored
Using descriptor in output results (#789)
1 parent 50ec34e commit ec36373

File tree

5 files changed

+26
-7
lines changed

5 files changed

+26
-7
lines changed

dpnp/dpnp_algo/dpnp_algo_mathematical.pyx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ cpdef dpnp_nansum(object x1):
331331
# return dpnp_sum(result)
332332

333333
result_desc = dpnp.get_dpnp_descriptor(result) # TODO remove it later
334-
sum_result = dpnp_sum(result_desc)
334+
sum_result = dpnp_sum(result_desc).get_pyobj()
335335
return x1.dtype.type(sum_result[0])
336336

337337

@@ -387,7 +387,7 @@ cpdef dparray dpnp_subtract(object x1_obj, object x2_obj, object dtype=None, dpa
387387
return call_fptr_2in_1out(DPNP_FN_SUBTRACT, x1_obj, x2_obj, dtype=dtype, out=out, where=where)
388388

389389

390-
cpdef dparray dpnp_sum(utils.dpnp_descriptor input, object axis=None, object dtype=None, dparray out=None, cpp_bool keepdims=False, object initial=None, object where=True):
390+
cpdef utils.dpnp_descriptor dpnp_sum(utils.dpnp_descriptor input, object axis=None, object dtype=None, dparray out=None, cpp_bool keepdims=False, object initial=None, object where=True):
391391

392392
cdef dparray_shape_type input_shape = input.shape
393393
cdef DPNPFuncType input_c_type = dpnp_dtype_to_DPNPFuncType(input.dtype)
@@ -401,10 +401,10 @@ cpdef dparray dpnp_sum(utils.dpnp_descriptor input, object axis=None, object dty
401401
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_SUM, input_c_type, result_c_type)
402402

403403
""" Create result array """
404-
cdef dparray result = utils.create_output_array(result_shape, result_c_type, out)
405-
cdef dpnp_reduction_c_t func = <dpnp_reduction_c_t > kernel_data.ptr
404+
cdef utils.dpnp_descriptor result = utils.create_output_descriptor(result_shape, result_c_type, out)
406405

407406
""" Call FPTR interface function """
407+
cdef dpnp_reduction_c_t func = <dpnp_reduction_c_t > kernel_data.ptr
408408
func(result.get_data(), input.get_data(), < size_t * >input_shape.data(), input_shape.size(), axis_shape.data(), axis_shape.size(), NULL, NULL)
409409

410410
return result

dpnp/dpnp_algo/dpnp_algo_statistics.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ cdef dparray call_fptr_custom_std_var_1in_1out(DPNPFuncName fptr_name, utils.dpn
8484

8585

8686
cpdef dpnp_average(utils.dpnp_descriptor x1):
87-
array_sum = dpnp_sum(x1)
87+
array_sum = dpnp_sum(x1).get_pyobj()
8888

8989
""" Numpy interface inconsistency """
9090
return_type = numpy.float32 if (x1.dtype == numpy.float32) else numpy.float64

dpnp/dpnp_iface_mathematical.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1538,7 +1538,7 @@ def sum(x1, axis=None, dtype=None, out=None, keepdims=False, initial=None, where
15381538
elif where is not True:
15391539
pass
15401540
else:
1541-
result_obj = dpnp_sum(x1_desc, axis, dtype, out, keepdims, initial, where)
1541+
result_obj = dpnp_sum(x1_desc, axis, dtype, out, keepdims, initial, where).get_pyobj()
15421542
result = dpnp.convert_single_elem_array_to_scalar(result_obj, keepdims)
15431543

15441544
return result

dpnp/dpnp_utils/dpnp_algo_utils.pxd

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ cdef class dpnp_descriptor:
130130
"""array DPNP descriptor"""
131131

132132
cdef public: # TODO remove "public" as python accessible attribute
133+
object origin_pyobj
133134
dict descriptor
134135
Py_ssize_t dpnp_descriptor_data_size
135136
cpp_bool dpnp_descriptor_is_scalar
@@ -159,3 +160,8 @@ cdef dparray create_output_array(dparray_shape_type output_shape, DPNPFuncType c
159160
"""
160161
Create output array based on shape, type and 'out' parameters
161162
"""
163+
164+
cdef dpnp_descriptor create_output_descriptor(dparray_shape_type output_shape, DPNPFuncType c_type, object requested_out)
165+
"""
166+
Same as "create_output_array" but output is "dpnp_descriptor"
167+
"""

dpnp/dpnp_utils/dpnp_algo_utils.pyx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,13 @@ cdef dparray create_output_array(dparray_shape_type output_shape, DPNPFuncType c
342342

343343
return result
344344

345+
cdef dpnp_descriptor create_output_descriptor(dparray_shape_type output_shape, DPNPFuncType c_type, object requested_out):
346+
result = create_output_array(output_shape, c_type, requested_out)
347+
348+
cdef dpnp_descriptor result_desc = dpnp_descriptor(result)
349+
350+
return result_desc
351+
345352

346353
cpdef nd2dp_array(arr):
347354
"""Convert ndarray to dparray"""
@@ -440,6 +447,7 @@ cpdef cpp_bool use_origin_backend(input1=None, size_t compute_size=0):
440447
cdef class dpnp_descriptor:
441448
def __init__(self, obj):
442449
""" Initialze variables """
450+
self.origin_pyobj = None
443451
self.descriptor = None
444452
self.dpnp_descriptor_data_size = 0
445453
self.dpnp_descriptor_is_scalar = True
@@ -452,6 +460,8 @@ cdef class dpnp_descriptor:
452460
if self.descriptor["version"] != 3:
453461
return
454462

463+
self.origin_pyobj = obj
464+
455465
""" array size calculation """
456466
cdef Py_ssize_t shape_it = 0
457467
self.dpnp_descriptor_data_size = 1
@@ -461,7 +471,7 @@ cdef class dpnp_descriptor:
461471
raise ValueError(f"{ERROR_PREFIX} dpnp_descriptor::__init__() invalid value {shape_it} in 'shape'")
462472
self.dpnp_descriptor_data_size *= shape_it
463473

464-
""" set scalar propery """
474+
""" set scalar property """
465475
self.dpnp_descriptor_is_scalar = False
466476

467477
@property
@@ -536,6 +546,9 @@ cdef class dpnp_descriptor:
536546

537547
return interface_dict
538548

549+
def get_pyobj(self):
550+
return self.origin_pyobj
551+
539552
cdef void * get_data(self):
540553
cdef long val = self.data
541554
return < void * > val

0 commit comments

Comments
 (0)