@@ -33,7 +33,7 @@ and the rest of the library
3333"""
3434
3535import dpnp
36- from dpnp.dpnp_utils cimport *
36+ cimport dpnp.dpnp_utils as utils
3737from dpnp.dpnp_algo cimport *
3838from dpnp.dparray cimport dparray, dparray_shape_type
3939import numpy
@@ -63,24 +63,19 @@ ctypedef void(*custom_linalg_1in_3out_shape_t)(void * , void * , void * , void *
6363ctypedef void (* custom_linalg_2in_1out_func_ptr_t)(void * , void * , void * , size_t )
6464
6565
66- cpdef dparray dpnp_cholesky(dparray input ):
67- if input .dtype == dpnp.int32 or input .dtype == dpnp.int64:
68- input_ = input .astype(dpnp.float64)
69- else :
70- input_ = input
71-
66+ cpdef utils.dpnp_descriptor dpnp_cholesky(utils.dpnp_descriptor input_):
7267 size_ = input_.shape[- 1 ]
7368
7469 cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(input_.dtype)
7570
7671 cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_CHOLESKY, param1_type, param1_type)
7772
78- result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
79- cdef dparray result = dparray (input_.shape, dtype = result_type )
73+ # ceate result array with type given by FPTR data
74+ cdef utils.dpnp_descriptor result = utils.create_output_descriptor (input_.shape, kernel_data.return_type, None )
8075
8176 cdef custom_linalg_1in_1out_with_2size_func_ptr_t_ func = < custom_linalg_1in_1out_with_2size_func_ptr_t_ > kernel_data.ptr
8277
83- func(input_.get_data(), result.get_data(), input .size, size_)
78+ func(input_.get_data(), result.get_data(), input_ .size, size_)
8479
8580 return result
8681
@@ -108,30 +103,31 @@ cpdef dparray dpnp_cond(dparray input, p):
108103 return ret
109104
110105
111- cpdef dparray dpnp_det(dparray input ):
106+ cpdef utils.dpnp_descriptor dpnp_det(utils.dpnp_descriptor input ):
107+ cdef dparray_shape_type input_shape = input .shape
112108 cdef size_t n = input .shape[- 1 ]
113109 cdef size_t size_out = 1
114110 if input .ndim != 2 :
115111 output_shape = tuple ((list (input .shape))[:- 2 ])
116112 for i in range (len (output_shape)):
117113 size_out *= output_shape[i]
118114
115+ cdef dparray_shape_type result_shape = (size_out,)
116+ if size_out > 1 :
117+ result_shape = output_shape
118+
119119 cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(input .dtype)
120120
121121 cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_DET, param1_type, param1_type)
122122
123- result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
124- cdef dparray result = dparray(size_out, dtype = result_type )
123+ # ceate result array with type given by FPTR data
124+ cdef utils.dpnp_descriptor result = utils.create_output_descriptor(result_shape, kernel_data.return_type, None )
125125
126126 cdef custom_linalg_1in_1out_func_ptr_t func = < custom_linalg_1in_1out_func_ptr_t > kernel_data.ptr
127127
128- func(input .get_data(), result.get_data(), < size_t * > input ._dparray_shape .data(), input .ndim)
128+ func(input .get_data(), result.get_data(), < size_t * > input_shape .data(), input .ndim)
129129
130- if size_out > 1 :
131- dpnp_result = result.reshape(output_shape)
132- return dpnp_result
133- else :
134- return result
130+ return result
135131
136132
137133cpdef tuple dpnp_eig(dparray x1):
@@ -154,17 +150,16 @@ cpdef tuple dpnp_eig(dparray x1):
154150 return (res_val, res_vec)
155151
156152
157- cpdef dparray dpnp_eigvals(dparray input ):
153+ cpdef utils.dpnp_descriptor dpnp_eigvals(utils.dpnp_descriptor input ):
158154 cdef dparray_shape_type input_shape = input .shape
159155
160156 cdef size_t size = 0 if input_shape.empty() else input_shape.front()
161157
162158 cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(input .dtype)
163159 cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_EIGVALS, param1_type, param1_type)
164160
165- result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
166-
167- cdef dparray res_val = dparray((size,), dtype = result_type)
161+ # ceate result array with type given by FPTR data
162+ cdef utils.dpnp_descriptor res_val = utils.create_output_descriptor((size,), kernel_data.return_type, None )
168163
169164 cdef custom_linalg_1in_1out_with_size_func_ptr_t_ func = < custom_linalg_1in_1out_with_size_func_ptr_t_ > kernel_data.ptr
170165 # call FPTR function
@@ -175,6 +170,8 @@ cpdef dparray dpnp_eigvals(dparray input):
175170
176171cpdef dparray dpnp_inv(dparray input_):
177172 cdef dparray input = input_.astype(dpnp.float64)
173+ cdef dparray_shape_type input_shape = input .shape
174+
178175 cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(input .dtype)
179176
180177 cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_INV, param1_type, param1_type)
@@ -183,23 +180,24 @@ cpdef dparray dpnp_inv(dparray input_):
183180
184181 cdef custom_linalg_1in_1out_func_ptr_t func = < custom_linalg_1in_1out_func_ptr_t > kernel_data.ptr
185182
186- func(input .get_data(), result.get_data(), < size_t * > input ._dparray_shape .data(), input .ndim)
183+ func(input .get_data(), result.get_data(), < size_t * > input_shape .data(), input .ndim)
187184
188185 dpnp_result = result.reshape(input .shape)
189186 return dpnp_result
190187
191188
192- cpdef dparray dpnp_matrix_rank(dparray input ):
189+ cpdef utils.dpnp_descriptor dpnp_matrix_rank(utils.dpnp_descriptor input ):
190+ cdef dparray_shape_type input_shape = input .shape
193191 cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(input .dtype)
194192
195193 cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_MATRIX_RANK, param1_type, param1_type)
196194
197- result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
198- cdef dparray result = dparray ((1 ,), dtype = result_type )
195+ # ceate result array with type given by FPTR data
196+ cdef utils.dpnp_descriptor result = utils.create_output_descriptor ((1 ,), kernel_data.return_type, None )
199197
200198 cdef custom_linalg_1in_1out_func_ptr_t func = < custom_linalg_1in_1out_func_ptr_t > kernel_data.ptr
201199
202- func(input .get_data(), result.get_data(), < size_t * > input ._dparray_shape .data(), input .ndim)
200+ func(input .get_data(), result.get_data(), < size_t * > input_shape .data(), input .ndim)
203201
204202 return result
205203
0 commit comments