• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IntelPython / dpnp / 9195497577

22 May 2024 05:05PM UTC coverage: 40.765% (-0.3%) from 41.113%
9195497577

push

github

web-flow
Update indexing functions (#1814)

* Update indexing functions

* Add CFD and tests

* Improve code coverage

* address comments

* address comments

* Added commit

---------

Co-authored-by: Anton <100830759+antonwolfy@users.noreply.github.com>

3649 of 20520 branches covered (17.78%)

Branch coverage included in aggregate %.

52 of 56 new or added lines in 2 files covered. (92.86%)

76 existing lines in 5 files now uncovered.

13784 of 22245 relevant lines covered (61.96%)

33276.14 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

11.45
/dpnp/backend/kernels/dpnp_krnl_arraycreation.cpp
1
//*****************************************************************************
2
// Copyright (c) 2016-2024, Intel Corporation
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are met:
7
// - Redistributions of source code must retain the above copyright notice,
8
//   this list of conditions and the following disclaimer.
9
// - Redistributions in binary form must reproduce the above copyright notice,
10
//   this list of conditions and the following disclaimer in the documentation
11
//   and/or other materials provided with the distribution.
12
//
13
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
17
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
// THE POSSIBILITY OF SUCH DAMAGE.
24
//*****************************************************************************
25

26
#include <iostream>
27

28
#include "dpnp_fptr.hpp"
29
#include "dpnp_iface.hpp"
30
#include "dpnp_utils.hpp"
31
#include "dpnpc_memory_adapter.hpp"
32
#include "queue_sycl.hpp"
33

34
template <typename _KernelNameSpecialization>
35
class dpnp_arange_c_kernel;
36

37
template <typename _DataType>
38
DPCTLSyclEventRef dpnp_arange_c(DPCTLSyclQueueRef q_ref,
39
                                size_t start,
40
                                size_t step,
41
                                void *result1,
42
                                size_t size,
43
                                const DPCTLEventVectorRef dep_event_vec_ref)
UNCOV
44
{
×
45
    // parameter `size` used instead `stop` to avoid dependency on array length
46
    // calculation algorithm
47
    // TODO: floating point (and negatives) types from `start` and `step`
48

49
    // avoid warning unused variable
UNCOV
50
    (void)dep_event_vec_ref;
×
51

UNCOV
52
    DPCTLSyclEventRef event_ref = nullptr;
×
53

UNCOV
54
    if (!size) {
×
UNCOV
55
        return event_ref;
×
UNCOV
56
    }
×
57

UNCOV
58
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
UNCOV
59
    sycl::event event;
×
60

UNCOV
61
    validate_type_for_device<_DataType>(q);
×
62

UNCOV
63
    _DataType *result = reinterpret_cast<_DataType *>(result1);
×
64

UNCOV
65
    sycl::range<1> gws(size);
×
UNCOV
66
    auto kernel_parallel_for_func = [=](sycl::id<1> global_id) {
×
67
        size_t i = global_id[0];
×
68

69
        result[i] = start + i * step;
×
70
    };
×
71

UNCOV
72
    auto kernel_func = [&](sycl::handler &cgh) {
×
UNCOV
73
        cgh.parallel_for<class dpnp_arange_c_kernel<_DataType>>(
×
UNCOV
74
            gws, kernel_parallel_for_func);
×
UNCOV
75
    };
×
76

UNCOV
77
    event = q.submit(kernel_func);
×
UNCOV
78
    event_ref = reinterpret_cast<DPCTLSyclEventRef>(&event);
×
79

UNCOV
80
    return DPCTLEvent_Copy(event_ref);
×
UNCOV
81
}
×
82

83
template <typename _DataType>
84
void dpnp_arange_c(size_t start, size_t step, void *result1, size_t size)
85
{
×
86
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
87
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
88
    DPCTLSyclEventRef event_ref = dpnp_arange_c<_DataType>(
×
89
        q_ref, start, step, result1, size, dep_event_vec_ref);
×
90
    DPCTLEvent_WaitAndThrow(event_ref);
×
91
    DPCTLEvent_Delete(event_ref);
×
92
}
×
93

94
template <typename _DataType>
95
void (*dpnp_arange_default_c)(size_t, size_t, void *, size_t) =
96
    dpnp_arange_c<_DataType>;
97

98
// Explicit instantiation of the function, since dpnp_arange_c() is used by
99
// other template functions, but implicit instantiation is not applied anymore.
100
template DPCTLSyclEventRef dpnp_arange_c<int32_t>(DPCTLSyclQueueRef,
101
                                                  size_t,
102
                                                  size_t,
103
                                                  void *,
104
                                                  size_t,
105
                                                  const DPCTLEventVectorRef);
106

107
template DPCTLSyclEventRef dpnp_arange_c<int64_t>(DPCTLSyclQueueRef,
108
                                                  size_t,
109
                                                  size_t,
110
                                                  void *,
111
                                                  size_t,
112
                                                  const DPCTLEventVectorRef);
113

114
template DPCTLSyclEventRef dpnp_arange_c<float>(DPCTLSyclQueueRef,
115
                                                size_t,
116
                                                size_t,
117
                                                void *,
118
                                                size_t,
119
                                                const DPCTLEventVectorRef);
120

121
template DPCTLSyclEventRef dpnp_arange_c<double>(DPCTLSyclQueueRef,
122
                                                 size_t,
123
                                                 size_t,
124
                                                 void *,
125
                                                 size_t,
126
                                                 const DPCTLEventVectorRef);
127

128
template <typename _DataType>
129
DPCTLSyclEventRef dpnp_diag_c(DPCTLSyclQueueRef q_ref,
130
                              void *v_in,
131
                              void *result1,
132
                              const int k,
133
                              shape_elem_type *shape,
134
                              shape_elem_type *res_shape,
135
                              const size_t ndim,
136
                              const size_t res_ndim,
137
                              const DPCTLEventVectorRef dep_event_vec_ref)
138
{
×
139
    // avoid warning unused variable
140
    (void)res_ndim;
×
141
    (void)dep_event_vec_ref;
×
142

143
    DPCTLSyclEventRef event_ref = nullptr;
×
144
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
145

146
    validate_type_for_device<_DataType>(q);
×
147

148
    const size_t input1_size = std::accumulate(
×
149
        shape, shape + ndim, 1, std::multiplies<shape_elem_type>());
×
150
    const size_t result_size = std::accumulate(
×
151
        res_shape, res_shape + res_ndim, 1, std::multiplies<shape_elem_type>());
×
152
    DPNPC_ptr_adapter<_DataType> input1_ptr(q_ref, v_in, input1_size, true);
×
153
    DPNPC_ptr_adapter<_DataType> result_ptr(q_ref, result1, result_size, true,
×
154
                                            true);
×
155
    _DataType *v = input1_ptr.get_ptr();
×
156
    _DataType *result = result_ptr.get_ptr();
×
157

158
    size_t init0 = std::max(0, -k);
×
159
    size_t init1 = std::max(0, k);
×
160

161
    if (ndim == 1) {
×
162
        for (size_t i = 0; i < static_cast<size_t>(shape[0]); ++i) {
×
163
            size_t ind = (init0 + i) * res_shape[1] + init1 + i;
×
164
            result[ind] = v[i];
×
165
        }
×
166
    }
×
167
    else {
×
168
        for (size_t i = 0; i < static_cast<size_t>(res_shape[0]); ++i) {
×
169
            size_t ind = (init0 + i) * shape[1] + init1 + i;
×
170
            result[i] = v[ind];
×
171
        }
×
172
    }
×
173
    return event_ref;
×
174
}
×
175

176
template <typename _DataType>
177
void dpnp_diag_c(void *v_in,
178
                 void *result1,
179
                 const int k,
180
                 shape_elem_type *shape,
181
                 shape_elem_type *res_shape,
182
                 const size_t ndim,
183
                 const size_t res_ndim)
184
{
×
185
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
186
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
187
    DPCTLSyclEventRef event_ref =
×
188
        dpnp_diag_c<_DataType>(q_ref, v_in, result1, k, shape, res_shape, ndim,
×
189
                               res_ndim, dep_event_vec_ref);
×
190
    DPCTLEvent_WaitAndThrow(event_ref);
×
191
    DPCTLEvent_Delete(event_ref);
×
192
}
×
193

194
template <typename _DataType>
195
void (*dpnp_diag_default_c)(void *,
196
                            void *,
197
                            const int,
198
                            shape_elem_type *,
199
                            shape_elem_type *,
200
                            const size_t,
201
                            const size_t) = dpnp_diag_c<_DataType>;
202

203
template <typename _DataType>
204
DPCTLSyclEventRef dpnp_eye_c(DPCTLSyclQueueRef q_ref,
205
                             void *result1,
206
                             int k,
207
                             const shape_elem_type *res_shape,
208
                             const DPCTLEventVectorRef dep_event_vec_ref)
209
{
×
210
    // avoid warning unused variable
211
    (void)dep_event_vec_ref;
×
212

213
    DPCTLSyclEventRef event_ref = nullptr;
×
214

215
    if (result1 == nullptr) {
×
216
        return event_ref;
×
217
    }
×
218

219
    if (res_shape == nullptr) {
×
220
        return event_ref;
×
221
    }
×
222

223
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
224

225
    validate_type_for_device<_DataType>(q);
×
226

227
    size_t result_size = res_shape[0] * res_shape[1];
×
228

229
    DPNPC_ptr_adapter<_DataType> result_ptr(q_ref, result1, result_size, true,
×
230
                                            true);
×
231
    _DataType *result = result_ptr.get_ptr();
×
232

233
    int diag_val_;
×
234
    diag_val_ = std::min((int)res_shape[0], (int)res_shape[1]);
×
235
    diag_val_ = std::min(diag_val_, ((int)res_shape[0] + k));
×
236
    diag_val_ = std::min(diag_val_, ((int)res_shape[1] - k));
×
237

238
    size_t diag_val = (diag_val_ < 0) ? 0 : (size_t)diag_val_;
×
239

240
    for (size_t i = 0; i < result_size; ++i) {
×
241
        result[i] = 0;
×
242
        for (size_t j = 0; j < diag_val; ++j) {
×
243
            size_t ind = (k >= 0) ? (j * res_shape[1] + j + k)
×
244
                                  : (j - k) * res_shape[1] + j;
×
245
            if (i == ind) {
×
246
                result[i] = 1;
×
247
                break;
×
248
            }
×
249
        }
×
250
    }
×
251

252
    return event_ref;
×
253
}
×
254

255
template <typename _DataType>
256
void dpnp_eye_c(void *result1, int k, const shape_elem_type *res_shape)
257
{
×
258
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
259
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
260
    DPCTLSyclEventRef event_ref =
×
261
        dpnp_eye_c<_DataType>(q_ref, result1, k, res_shape, dep_event_vec_ref);
×
262
    DPCTLEvent_WaitAndThrow(event_ref);
×
263
    DPCTLEvent_Delete(event_ref);
×
264
}
×
265

266
template <typename _DataType>
267
void (*dpnp_eye_default_c)(void *,
268
                           int,
269
                           const shape_elem_type *) = dpnp_eye_c<_DataType>;
270

271
template <typename _DataType>
272
DPCTLSyclEventRef dpnp_full_c(DPCTLSyclQueueRef q_ref,
273
                              void *array_in,
274
                              void *result,
275
                              const size_t size,
276
                              const DPCTLEventVectorRef dep_event_vec_ref)
277
{
×
278
    return dpnp_initval_c<_DataType>(q_ref, result, array_in, size,
×
279
                                     dep_event_vec_ref);
×
280
}
×
281

282
template <typename _DataType>
283
void dpnp_full_c(void *array_in, void *result, const size_t size)
284
{
×
285
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
286
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
287
    DPCTLSyclEventRef event_ref = dpnp_full_c<_DataType>(
×
288
        q_ref, array_in, result, size, dep_event_vec_ref);
×
289
    DPCTLEvent_WaitAndThrow(event_ref);
×
290
    DPCTLEvent_Delete(event_ref);
×
291
}
×
292

293
template <typename _DataType>
294
void (*dpnp_full_default_c)(void *,
295
                            void *,
296
                            const size_t) = dpnp_full_c<_DataType>;
297

298
template <typename _DataType>
299
DPCTLSyclEventRef dpnp_full_like_c(DPCTLSyclQueueRef q_ref,
300
                                   void *array_in,
301
                                   void *result,
302
                                   const size_t size,
303
                                   const DPCTLEventVectorRef dep_event_vec_ref)
304
{
×
305
    return dpnp_full_c<_DataType>(q_ref, array_in, result, size,
×
306
                                  dep_event_vec_ref);
×
307
}
×
308

309
template <typename _DataType>
310
void dpnp_full_like_c(void *array_in, void *result, const size_t size)
311
{
×
312
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
313
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
314
    DPCTLSyclEventRef event_ref = dpnp_full_like_c<_DataType>(
×
315
        q_ref, array_in, result, size, dep_event_vec_ref);
×
316
    DPCTLEvent_WaitAndThrow(event_ref);
×
317
    DPCTLEvent_Delete(event_ref);
×
318
}
×
319

320
template <typename _DataType>
321
void (*dpnp_full_like_default_c)(void *,
322
                                 void *,
323
                                 const size_t) = dpnp_full_like_c<_DataType>;
324

325
template <typename _KernelNameSpecialization>
326
class dpnp_identity_c_kernel;
327

328
template <typename _DataType>
329
DPCTLSyclEventRef dpnp_identity_c(DPCTLSyclQueueRef q_ref,
330
                                  void *result1,
331
                                  const size_t n,
332
                                  const DPCTLEventVectorRef dep_event_vec_ref)
333
{
×
334
    // avoid warning unused variable
335
    (void)dep_event_vec_ref;
×
336

337
    DPCTLSyclEventRef event_ref = nullptr;
×
338

339
    if (n == 0) {
×
340
        return event_ref;
×
341
    }
×
342

343
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
344
    sycl::event event;
×
345

346
    validate_type_for_device<_DataType>(q);
×
347

348
    _DataType *result = static_cast<_DataType *>(result1);
×
349

350
    sycl::range<2> gws(n, n);
×
351
    auto kernel_parallel_for_func = [=](sycl::id<2> global_id) {
×
352
        size_t i = global_id[0];
×
353
        size_t j = global_id[1];
×
354
        result[i * n + j] = i == j;
×
355
    };
×
356

357
    auto kernel_func = [&](sycl::handler &cgh) {
×
358
        cgh.parallel_for<class dpnp_identity_c_kernel<_DataType>>(
×
359
            gws, kernel_parallel_for_func);
×
360
    };
×
361

362
    event = q.submit(kernel_func);
×
363
    event_ref = reinterpret_cast<DPCTLSyclEventRef>(&event);
×
364

365
    return DPCTLEvent_Copy(event_ref);
×
366
}
×
367

368
template <typename _DataType>
369
void dpnp_identity_c(void *result1, const size_t n)
370
{
×
371
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
372
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
373
    DPCTLSyclEventRef event_ref =
×
374
        dpnp_identity_c<_DataType>(q_ref, result1, n, dep_event_vec_ref);
×
375
    DPCTLEvent_WaitAndThrow(event_ref);
×
376
    DPCTLEvent_Delete(event_ref);
×
377
}
×
378

379
template <typename _DataType>
380
void (*dpnp_identity_default_c)(void *,
381
                                const size_t) = dpnp_identity_c<_DataType>;
382

383
template <typename _DataType>
384
class dpnp_ones_c_kernel;
385

386
template <typename _DataType>
387
DPCTLSyclEventRef dpnp_ones_c(DPCTLSyclQueueRef q_ref,
388
                              void *result,
389
                              size_t size,
390
                              const DPCTLEventVectorRef dep_event_vec_ref)
391
{
×
392
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
393

394
    _DataType *fill_value = reinterpret_cast<_DataType *>(
×
395
        sycl::malloc_shared(sizeof(_DataType), q));
×
396
    fill_value[0] = 1;
×
397

398
    DPCTLSyclEventRef event_ref = dpnp_initval_c<_DataType>(
×
399
        q_ref, result, fill_value, size, dep_event_vec_ref);
×
400
    DPCTLEvent_WaitAndThrow(event_ref);
×
401
    DPCTLEvent_Delete(event_ref);
×
402

403
    sycl::free(fill_value, q);
×
404

405
    return nullptr;
×
406
}
×
407

408
template <typename _DataType>
409
void dpnp_ones_c(void *result, size_t size)
410
{
×
411
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
412
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
413
    DPCTLSyclEventRef event_ref =
×
414
        dpnp_ones_c<_DataType>(q_ref, result, size, dep_event_vec_ref);
×
415
    DPCTLEvent_WaitAndThrow(event_ref);
×
416
    DPCTLEvent_Delete(event_ref);
×
417
}
×
418

419
template <typename _DataType>
420
void (*dpnp_ones_default_c)(void *, size_t) = dpnp_ones_c<_DataType>;
421

422
template <typename _DataType>
423
DPCTLSyclEventRef dpnp_ones_like_c(DPCTLSyclQueueRef q_ref,
424
                                   void *result,
425
                                   size_t size,
426
                                   const DPCTLEventVectorRef dep_event_vec_ref)
427
{
×
428
    return dpnp_ones_c<_DataType>(q_ref, result, size, dep_event_vec_ref);
×
429
}
×
430

431
template <typename _DataType>
432
void dpnp_ones_like_c(void *result, size_t size)
433
{
×
434
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
435
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
436
    DPCTLSyclEventRef event_ref =
×
437
        dpnp_ones_like_c<_DataType>(q_ref, result, size, dep_event_vec_ref);
×
438
    DPCTLEvent_WaitAndThrow(event_ref);
×
439
    DPCTLEvent_Delete(event_ref);
×
440
}
×
441

442
template <typename _DataType>
443
void (*dpnp_ones_like_default_c)(void *, size_t) = dpnp_ones_like_c<_DataType>;
444

445
template <typename _DataType>
446
DPCTLSyclEventRef dpnp_ptp_c(DPCTLSyclQueueRef q_ref,
447
                             void *result1_out,
448
                             const size_t result_size,
449
                             const size_t result_ndim,
450
                             const shape_elem_type *result_shape,
451
                             const shape_elem_type *result_strides,
452
                             const void *input1_in,
453
                             const size_t input_size,
454
                             const size_t input_ndim,
455
                             const shape_elem_type *input_shape,
456
                             const shape_elem_type *input_strides,
457
                             const shape_elem_type *axis,
458
                             const size_t naxis,
459
                             const DPCTLEventVectorRef dep_event_vec_ref)
460
{
×
461
    // avoid warning unused variable
462
    (void)result_strides;
×
463
    (void)input_strides;
×
464
    (void)dep_event_vec_ref;
×
465

466
    DPCTLSyclEventRef event_ref = nullptr;
×
467
    DPCTLSyclEventRef e1_ref = nullptr;
×
468
    DPCTLSyclEventRef e2_ref = nullptr;
×
469
    DPCTLSyclEventRef e3_ref = nullptr;
×
470

471
    if ((input1_in == nullptr) || (result1_out == nullptr)) {
×
472
        return event_ref;
×
473
    }
×
474

475
    if (input_ndim < 1) {
×
476
        return event_ref;
×
477
    }
×
478

479
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
480

481
    validate_type_for_device<_DataType>(q);
×
482

483
    DPNPC_ptr_adapter<_DataType> input1_ptr(q_ref, input1_in, input_size, true);
×
484
    DPNPC_ptr_adapter<_DataType> result_ptr(q_ref, result1_out, result_size,
×
485
                                            false, true);
×
486
    _DataType *arr = input1_ptr.get_ptr();
×
487
    _DataType *result = result_ptr.get_ptr();
×
488

489
    _DataType *min_arr = reinterpret_cast<_DataType *>(
×
490
        sycl::malloc_shared(result_size * sizeof(_DataType), q));
×
491
    _DataType *max_arr = reinterpret_cast<_DataType *>(
×
492
        sycl::malloc_shared(result_size * sizeof(_DataType), q));
×
493

494
    e1_ref = dpnp_min_c<_DataType>(q_ref, arr, min_arr, result_size,
×
495
                                   input_shape, input_ndim, axis, naxis, NULL);
×
496
    e2_ref = dpnp_max_c<_DataType>(q_ref, arr, max_arr, result_size,
×
497
                                   input_shape, input_ndim, axis, naxis, NULL);
×
498

499
    shape_elem_type *_strides = reinterpret_cast<shape_elem_type *>(
×
500
        sycl::malloc_shared(result_ndim * sizeof(shape_elem_type), q));
×
501
    get_shape_offsets_inkernel(result_shape, result_ndim, _strides);
×
502

503
    e3_ref = dpnp_subtract_c<_DataType, _DataType, _DataType>(
×
504
        q_ref, result, result_size, result_ndim, result_shape, result_strides,
×
505
        max_arr, result_size, result_ndim, result_shape, _strides, min_arr,
×
506
        result_size, result_ndim, result_shape, _strides, NULL, NULL);
×
507

508
    DPCTLEvent_Wait(e1_ref);
×
509
    DPCTLEvent_Wait(e2_ref);
×
510
    DPCTLEvent_Wait(e3_ref);
×
511
    DPCTLEvent_Delete(e1_ref);
×
512
    DPCTLEvent_Delete(e2_ref);
×
513
    DPCTLEvent_Delete(e3_ref);
×
514

515
    sycl::free(min_arr, q);
×
516
    sycl::free(max_arr, q);
×
517
    sycl::free(_strides, q);
×
518

519
    return DPCTLEvent_Copy(event_ref);
×
520
}
×
521

522
template <typename _DataType>
523
void dpnp_ptp_c(void *result1_out,
524
                const size_t result_size,
525
                const size_t result_ndim,
526
                const shape_elem_type *result_shape,
527
                const shape_elem_type *result_strides,
528
                const void *input1_in,
529
                const size_t input_size,
530
                const size_t input_ndim,
531
                const shape_elem_type *input_shape,
532
                const shape_elem_type *input_strides,
533
                const shape_elem_type *axis,
534
                const size_t naxis)
535
{
×
536
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
537
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
538
    DPCTLSyclEventRef event_ref = dpnp_ptp_c<_DataType>(
×
539
        q_ref, result1_out, result_size, result_ndim, result_shape,
×
540
        result_strides, input1_in, input_size, input_ndim, input_shape,
×
541
        input_strides, axis, naxis, dep_event_vec_ref);
×
542
    DPCTLEvent_WaitAndThrow(event_ref);
×
543
    DPCTLEvent_Delete(event_ref);
×
544
}
×
545

546
template <typename _DataType>
547
void (*dpnp_ptp_default_c)(void *,
548
                           const size_t,
549
                           const size_t,
550
                           const shape_elem_type *,
551
                           const shape_elem_type *,
552
                           const void *,
553
                           const size_t,
554
                           const size_t,
555
                           const shape_elem_type *,
556
                           const shape_elem_type *,
557
                           const shape_elem_type *,
558
                           const size_t) = dpnp_ptp_c<_DataType>;
559

560
template <typename _DataType_input, typename _DataType_output>
561
DPCTLSyclEventRef dpnp_vander_c(DPCTLSyclQueueRef q_ref,
562
                                const void *array1_in,
563
                                void *result1,
564
                                const size_t size_in,
565
                                const size_t N,
566
                                const int increasing,
567
                                const DPCTLEventVectorRef dep_event_vec_ref)
568
{
×
569
    DPCTLSyclEventRef event_ref = nullptr;
×
570

571
    if ((array1_in == nullptr) || (result1 == nullptr))
×
572
        return event_ref;
×
573

574
    if (!size_in || !N)
×
575
        return event_ref;
×
576

577
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
578

579
    validate_type_for_device<_DataType_input>(q);
×
580
    validate_type_for_device<_DataType_output>(q);
×
581

582
    DPNPC_ptr_adapter<_DataType_input> input1_ptr(q_ref, array1_in, size_in,
×
583
                                                  true);
×
584
    DPNPC_ptr_adapter<_DataType_output> result_ptr(q_ref, result1, size_in * N,
×
585
                                                   true, true);
×
586
    const _DataType_input *array_in = input1_ptr.get_ptr();
×
587
    _DataType_output *result = result_ptr.get_ptr();
×
588

589
    if (N == 1) {
×
590
        return dpnp_ones_c<_DataType_output>(q_ref, result, size_in,
×
591
                                             dep_event_vec_ref);
×
592
    }
×
593

594
    if (increasing) {
×
595
        for (size_t i = 0; i < size_in; ++i) {
×
596
            result[i * N] = 1;
×
597
        }
×
598
        for (size_t i = 1; i < N; ++i) {
×
599
            for (size_t j = 0; j < size_in; ++j) {
×
600
                result[j * N + i] = result[j * N + i - 1] * array_in[j];
×
601
            }
×
602
        }
×
603
    }
×
604
    else {
×
605
        for (size_t i = 0; i < size_in; ++i) {
×
606
            result[i * N + N - 1] = 1;
×
607
        }
×
608
        for (size_t i = N - 2; i > 0; --i) {
×
609
            for (size_t j = 0; j < size_in; ++j) {
×
610
                result[j * N + i] = result[j * N + i + 1] * array_in[j];
×
611
            }
×
612
        }
×
613

614
        for (size_t i = 0; i < size_in; ++i) {
×
615
            result[i * N] = result[i * N + 1] * array_in[i];
×
616
        }
×
617
    }
×
618

619
    return DPCTLEvent_Copy(event_ref);
×
620
}
×
621

622
template <typename _DataType_input, typename _DataType_output>
623
void dpnp_vander_c(const void *array1_in,
624
                   void *result1,
625
                   const size_t size_in,
626
                   const size_t N,
627
                   const int increasing)
628
{
×
629
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
630
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
631
    DPCTLSyclEventRef event_ref =
×
632
        dpnp_vander_c<_DataType_input, _DataType_output>(
×
633
            q_ref, array1_in, result1, size_in, N, increasing,
×
634
            dep_event_vec_ref);
×
635
    DPCTLEvent_WaitAndThrow(event_ref);
×
636
    DPCTLEvent_Delete(event_ref);
×
637
}
×
638

639
template <typename _DataType_input, typename _DataType_output>
640
void (*dpnp_vander_default_c)(const void *,
641
                              void *,
642
                              const size_t,
643
                              const size_t,
644
                              const int) =
645
    dpnp_vander_c<_DataType_input, _DataType_output>;
646

647
template <typename _DataType, typename _ResultType>
648
class dpnp_trace_c_kernel;
649

650
template <typename _DataType, typename _ResultType>
651
DPCTLSyclEventRef dpnp_trace_c(DPCTLSyclQueueRef q_ref,
652
                               const void *array1_in,
653
                               void *result_in,
654
                               const shape_elem_type *shape_,
655
                               const size_t ndim,
656
                               const DPCTLEventVectorRef dep_event_vec_ref)
657
{
×
658
    // avoid warning unused variable
659
    (void)dep_event_vec_ref;
×
660

661
    DPCTLSyclEventRef event_ref = nullptr;
×
662

663
    if (!array1_in || !result_in || !shape_ || !ndim) {
×
664
        return event_ref;
×
665
    }
×
666

667
    const size_t last_dim = shape_[ndim - 1];
×
668
    const size_t size = std::accumulate(shape_, shape_ + (ndim - 1), 1,
×
669
                                        std::multiplies<shape_elem_type>());
×
670
    if (!size) {
×
671
        return event_ref;
×
672
    }
×
673

674
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
675

676
    validate_type_for_device<_DataType>(q);
×
677
    validate_type_for_device<_ResultType>(q);
×
678

679
    const _DataType *input = static_cast<const _DataType *>(array1_in);
×
680
    _ResultType *result = static_cast<_ResultType *>(result_in);
×
681

682
    sycl::range<1> gws(size);
×
683
    auto kernel_parallel_for_func = [=](auto index) {
×
684
        size_t i = index[0];
×
685
        _ResultType acc = _ResultType(0);
×
686

687
        for (size_t j = 0; j < last_dim; ++j) {
×
688
            acc += input[i * last_dim + j];
×
689
        }
×
690

691
        result[i] = acc;
×
692
    };
×
693

694
    auto kernel_func = [&](sycl::handler &cgh) {
×
695
        cgh.parallel_for<class dpnp_trace_c_kernel<_DataType, _ResultType>>(
×
696
            gws, kernel_parallel_for_func);
×
697
    };
×
698

699
    auto event = q.submit(kernel_func);
×
700
    event_ref = reinterpret_cast<DPCTLSyclEventRef>(&event);
×
701

702
    return DPCTLEvent_Copy(event_ref);
×
703
}
×
704

705
template <typename _DataType, typename _ResultType>
706
void dpnp_trace_c(const void *array1_in,
707
                  void *result_in,
708
                  const shape_elem_type *shape_,
709
                  const size_t ndim)
710
{
×
711
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
712
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
713
    DPCTLSyclEventRef event_ref = dpnp_trace_c<_DataType, _ResultType>(
×
714
        q_ref, array1_in, result_in, shape_, ndim, dep_event_vec_ref);
×
715
    DPCTLEvent_WaitAndThrow(event_ref);
×
716
    DPCTLEvent_Delete(event_ref);
×
717
}
×
718

719
template <typename _DataType, typename _ResultType>
720
void (*dpnp_trace_default_c)(const void *,
721
                             void *,
722
                             const shape_elem_type *,
723
                             const size_t) =
724
    dpnp_trace_c<_DataType, _ResultType>;
725

726
template <typename _DataType>
727
class dpnp_tri_c_kernel;
728

729
template <typename _DataType>
730
DPCTLSyclEventRef dpnp_tri_c(DPCTLSyclQueueRef q_ref,
731
                             void *result1,
732
                             const size_t N,
733
                             const size_t M,
734
                             const int k,
735
                             const DPCTLEventVectorRef dep_event_vec_ref)
736
{
×
737
    // avoid warning unused variable
738
    (void)dep_event_vec_ref;
×
739

740
    DPCTLSyclEventRef event_ref = nullptr;
×
741

742
    sycl::event event;
×
743

744
    if (!result1 || !N || !M) {
×
745
        return event_ref;
×
746
    }
×
747

748
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
749

750
    validate_type_for_device<_DataType>(q);
×
751

752
    _DataType *result = static_cast<_DataType *>(result1);
×
753

754
    size_t idx = N * M;
×
755
    sycl::range<1> gws(idx);
×
756
    auto kernel_parallel_for_func = [=](sycl::id<1> global_id) {
×
757
        size_t ind = global_id[0];
×
758
        size_t i = ind / M;
×
759
        size_t j = ind % M;
×
760

761
        int val = i + k + 1;
×
762
        size_t diag_idx_ = (val > 0) ? (size_t)val : 0;
×
763
        size_t diag_idx = (M < diag_idx_) ? M : diag_idx_;
×
764

765
        if (j < diag_idx) {
×
766
            result[ind] = 1;
×
767
        }
×
768
        else {
×
769
            result[ind] = 0;
×
770
        }
×
771
    };
×
772

773
    auto kernel_func = [&](sycl::handler &cgh) {
×
774
        cgh.parallel_for<class dpnp_tri_c_kernel<_DataType>>(
×
775
            gws, kernel_parallel_for_func);
×
776
    };
×
777

778
    event = q.submit(kernel_func);
×
779
    event_ref = reinterpret_cast<DPCTLSyclEventRef>(&event);
×
780

781
    return DPCTLEvent_Copy(event_ref);
×
782
}
×
783

784
template <typename _DataType>
785
void dpnp_tri_c(void *result1, const size_t N, const size_t M, const int k)
786
{
×
787
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
788
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
789
    DPCTLSyclEventRef event_ref =
×
790
        dpnp_tri_c<_DataType>(q_ref, result1, N, M, k, dep_event_vec_ref);
×
791
    DPCTLEvent_WaitAndThrow(event_ref);
×
792
    DPCTLEvent_Delete(event_ref);
×
793
}
×
794

795
template <typename _DataType>
796
void (*dpnp_tri_default_c)(void *, const size_t, const size_t, const int) =
797
    dpnp_tri_c<_DataType>;
798

799
template <typename _DataType>
800
DPCTLSyclEventRef dpnp_tril_c(DPCTLSyclQueueRef q_ref,
801
                              void *array_in,
802
                              void *result1,
803
                              const int k,
804
                              shape_elem_type *shape,
805
                              shape_elem_type *res_shape,
806
                              const size_t ndim,
807
                              const size_t res_ndim,
808
                              const DPCTLEventVectorRef dep_event_vec_ref)
809
{
×
810
    // avoid warning unused variable
811
    (void)dep_event_vec_ref;
×
812

813
    DPCTLSyclEventRef event_ref = nullptr;
×
814

815
    if ((array_in == nullptr) || (result1 == nullptr)) {
×
816
        return event_ref;
×
817
    }
×
818

819
    if ((shape == nullptr) || (res_shape == nullptr)) {
×
820
        return event_ref;
×
821
    }
×
822

823
    if ((ndim == 0) || (res_ndim == 0)) {
×
824
        return event_ref;
×
825
    }
×
826

827
    const size_t res_size = std::accumulate(res_shape, res_shape + res_ndim, 1,
×
828
                                            std::multiplies<shape_elem_type>());
×
829
    if (res_size == 0) {
×
830
        return event_ref;
×
831
    }
×
832

833
    const size_t input_size = std::accumulate(
×
834
        shape, shape + ndim, 1, std::multiplies<shape_elem_type>());
×
835
    if (input_size == 0) {
×
836
        return event_ref;
×
837
    }
×
838

839
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
840

841
    validate_type_for_device<_DataType>(q);
×
842

843
    DPNPC_ptr_adapter<_DataType> input1_ptr(q_ref, array_in, input_size, true);
×
844
    DPNPC_ptr_adapter<_DataType> result_ptr(q_ref, result1, res_size, true,
×
845
                                            true);
×
846
    _DataType *array_m = input1_ptr.get_ptr();
×
847
    _DataType *result = result_ptr.get_ptr();
×
848

849
    int *ids = new int[res_ndim];
×
850

851
    if (ndim == 1) {
×
852
        for (size_t i = 0; i < res_size; ++i) {
×
853
            size_t n = res_size;
×
854
            size_t val = i;
×
855
            for (size_t j = 0; j < res_ndim; ++j) {
×
856
                n /= res_shape[j];
×
857
                size_t p = val / n;
×
858
                ids[j] = p;
×
859
                if (p != 0) {
×
860
                    val = val - p * n;
×
861
                }
×
862
            }
×
863

864
            int diag_idx_ =
×
865
                (ids[res_ndim - 2] + k > -1) ? (ids[res_ndim - 2] + k) : -1;
×
866
            int values = res_shape[res_ndim - 1];
×
867
            int diag_idx = (values < diag_idx_) ? values : diag_idx_;
×
868

869
            if (ids[res_ndim - 1] <= diag_idx) {
×
870
                result[i] = array_m[ids[res_ndim - 1]];
×
871
            }
×
872
            else {
×
873
                result[i] = 0;
×
874
            }
×
875
        }
×
876
    }
×
877
    else {
×
878
        for (size_t i = 0; i < res_size; ++i) {
×
879
            size_t n = res_size;
×
880
            size_t val = i;
×
881
            for (size_t j = 0; j < res_ndim; ++j) {
×
882
                n /= res_shape[j];
×
883
                size_t p = val / n;
×
884
                ids[j] = p;
×
885
                if (p != 0) {
×
886
                    val = val - p * n;
×
887
                }
×
888
            }
×
889

890
            int diag_idx_ =
×
891
                (ids[res_ndim - 2] + k > -1) ? (ids[res_ndim - 2] + k) : -1;
×
892
            int values = res_shape[res_ndim - 1];
×
893
            int diag_idx = (values < diag_idx_) ? values : diag_idx_;
×
894

895
            if (ids[res_ndim - 1] <= diag_idx) {
×
896
                result[i] = array_m[i];
×
897
            }
×
898
            else {
×
899
                result[i] = 0;
×
900
            }
×
901
        }
×
902
    }
×
903

904
    delete[] ids;
×
905
    return DPCTLEvent_Copy(event_ref);
×
906
}
×
907

908
template <typename _DataType>
909
void dpnp_tril_c(void *array_in,
910
                 void *result1,
911
                 const int k,
912
                 shape_elem_type *shape,
913
                 shape_elem_type *res_shape,
914
                 const size_t ndim,
915
                 const size_t res_ndim)
916
{
×
917
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
918
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
919
    DPCTLSyclEventRef event_ref =
×
920
        dpnp_tril_c<_DataType>(q_ref, array_in, result1, k, shape, res_shape,
×
921
                               ndim, res_ndim, dep_event_vec_ref);
×
922
    DPCTLEvent_WaitAndThrow(event_ref);
×
923
    DPCTLEvent_Delete(event_ref);
×
924
}
×
925

926
template <typename _DataType>
927
void (*dpnp_tril_default_c)(void *,
928
                            void *,
929
                            const int,
930
                            shape_elem_type *,
931
                            shape_elem_type *,
932
                            const size_t,
933
                            const size_t) = dpnp_tril_c<_DataType>;
934

935
template <typename _DataType>
936
DPCTLSyclEventRef dpnp_triu_c(DPCTLSyclQueueRef q_ref,
937
                              void *array_in,
938
                              void *result1,
939
                              const int k,
940
                              shape_elem_type *shape,
941
                              shape_elem_type *res_shape,
942
                              const size_t ndim,
943
                              const size_t res_ndim,
944
                              const DPCTLEventVectorRef dep_event_vec_ref)
945
{
×
946
    // avoid warning unused variable
947
    (void)dep_event_vec_ref;
×
948

949
    DPCTLSyclEventRef event_ref = nullptr;
×
950

951
    if ((array_in == nullptr) || (result1 == nullptr)) {
×
952
        return event_ref;
×
953
    }
×
954

955
    if ((shape == nullptr) || (res_shape == nullptr)) {
×
956
        return event_ref;
×
957
    }
×
958

959
    if ((ndim == 0) || (res_ndim == 0)) {
×
960
        return event_ref;
×
961
    }
×
962

963
    const size_t res_size = std::accumulate(res_shape, res_shape + res_ndim, 1,
×
964
                                            std::multiplies<shape_elem_type>());
×
965
    if (res_size == 0) {
×
966
        return event_ref;
×
967
    }
×
968

969
    const size_t input_size = std::accumulate(
×
970
        shape, shape + ndim, 1, std::multiplies<shape_elem_type>());
×
971
    if (input_size == 0) {
×
972
        return event_ref;
×
973
    }
×
974

975
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
976

977
    validate_type_for_device<_DataType>(q);
×
978

979
    DPNPC_ptr_adapter<_DataType> input1_ptr(q_ref, array_in, input_size, true);
×
980
    DPNPC_ptr_adapter<_DataType> result_ptr(q_ref, result1, res_size, true,
×
981
                                            true);
×
982
    _DataType *array_m = input1_ptr.get_ptr();
×
983
    _DataType *result = result_ptr.get_ptr();
×
984

985
    int *ids = new int[res_ndim];
×
986

987
    if (ndim == 1) {
×
988
        for (size_t i = 0; i < res_size; ++i) {
×
989
            size_t n = res_size;
×
990
            size_t val = i;
×
991
            for (size_t j = 0; j < res_ndim; ++j) {
×
992
                n /= res_shape[j];
×
993
                size_t p = val / n;
×
994
                ids[j] = p;
×
995
                if (p != 0) {
×
996
                    val = val - p * n;
×
997
                }
×
998
            }
×
999

1000
            int diag_idx_ =
×
1001
                (ids[res_ndim - 2] + k > -1) ? (ids[res_ndim - 2] + k) : -1;
×
1002
            int values = res_shape[res_ndim - 1];
×
1003
            int diag_idx = (values < diag_idx_) ? values : diag_idx_;
×
1004

1005
            if (ids[res_ndim - 1] >= diag_idx) {
×
1006
                result[i] = array_m[ids[res_ndim - 1]];
×
1007
            }
×
1008
            else {
×
1009
                result[i] = 0;
×
1010
            }
×
1011
        }
×
1012
    }
×
1013
    else {
×
1014
        for (size_t i = 0; i < res_size; ++i) {
×
1015
            size_t n = res_size;
×
1016
            size_t val = i;
×
1017
            for (size_t j = 0; j < res_ndim; ++j) {
×
1018
                n /= res_shape[j];
×
1019
                size_t p = val / n;
×
1020
                ids[j] = p;
×
1021
                if (p != 0) {
×
1022
                    val = val - p * n;
×
1023
                }
×
1024
            }
×
1025

1026
            int diag_idx_ =
×
1027
                (ids[res_ndim - 2] + k > -1) ? (ids[res_ndim - 2] + k) : -1;
×
1028
            int values = res_shape[res_ndim - 1];
×
1029
            int diag_idx = (values < diag_idx_) ? values : diag_idx_;
×
1030

1031
            if (ids[res_ndim - 1] >= diag_idx) {
×
1032
                result[i] = array_m[i];
×
1033
            }
×
1034
            else {
×
1035
                result[i] = 0;
×
1036
            }
×
1037
        }
×
1038
    }
×
1039

1040
    delete[] ids;
×
1041
    return DPCTLEvent_Copy(event_ref);
×
1042
}
×
1043

1044
template <typename _DataType>
1045
void dpnp_triu_c(void *array_in,
1046
                 void *result1,
1047
                 const int k,
1048
                 shape_elem_type *shape,
1049
                 shape_elem_type *res_shape,
1050
                 const size_t ndim,
1051
                 const size_t res_ndim)
1052
{
×
1053
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
1054
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
1055
    DPCTLSyclEventRef event_ref =
×
1056
        dpnp_triu_c<_DataType>(q_ref, array_in, result1, k, shape, res_shape,
×
1057
                               ndim, res_ndim, dep_event_vec_ref);
×
1058
    DPCTLEvent_WaitAndThrow(event_ref);
×
1059
    DPCTLEvent_Delete(event_ref);
×
1060
}
×
1061

1062
template <typename _DataType>
1063
void (*dpnp_triu_default_c)(void *,
1064
                            void *,
1065
                            const int,
1066
                            shape_elem_type *,
1067
                            shape_elem_type *,
1068
                            const size_t,
1069
                            const size_t) = dpnp_triu_c<_DataType>;
1070

1071
template <typename _DataType>
1072
DPCTLSyclEventRef dpnp_zeros_c(DPCTLSyclQueueRef q_ref,
1073
                               void *result,
1074
                               size_t size,
1075
                               const DPCTLEventVectorRef dep_event_vec_ref)
1076
{
×
1077
    sycl::queue q = *(reinterpret_cast<sycl::queue *>(q_ref));
×
1078

1079
    _DataType *fill_value = reinterpret_cast<_DataType *>(
×
1080
        sycl::malloc_shared(sizeof(_DataType), q));
×
1081
    fill_value[0] = 0;
×
1082

1083
    DPCTLSyclEventRef event_ref = dpnp_initval_c<_DataType>(
×
1084
        q_ref, result, fill_value, size, dep_event_vec_ref);
×
1085
    DPCTLEvent_WaitAndThrow(event_ref);
×
1086
    DPCTLEvent_Delete(event_ref);
×
1087

1088
    sycl::free(fill_value, q);
×
1089

1090
    return nullptr;
×
1091
}
×
1092

1093
template <typename _DataType>
1094
void dpnp_zeros_c(void *result, size_t size)
1095
{
×
1096
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
1097
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
1098
    DPCTLSyclEventRef event_ref =
×
1099
        dpnp_zeros_c<_DataType>(q_ref, result, size, dep_event_vec_ref);
×
1100
    DPCTLEvent_WaitAndThrow(event_ref);
×
1101
    DPCTLEvent_Delete(event_ref);
×
1102
}
×
1103

1104
template <typename _DataType>
1105
void (*dpnp_zeros_default_c)(void *, size_t) = dpnp_zeros_c<_DataType>;
1106

1107
template <typename _DataType>
1108
DPCTLSyclEventRef dpnp_zeros_like_c(DPCTLSyclQueueRef q_ref,
1109
                                    void *result,
1110
                                    size_t size,
1111
                                    const DPCTLEventVectorRef dep_event_vec_ref)
1112
{
×
1113
    return dpnp_zeros_c<_DataType>(q_ref, result, size, dep_event_vec_ref);
×
1114
}
×
1115

1116
template <typename _DataType>
1117
void dpnp_zeros_like_c(void *result, size_t size)
1118
{
×
1119
    DPCTLSyclQueueRef q_ref = reinterpret_cast<DPCTLSyclQueueRef>(&DPNP_QUEUE);
×
1120
    DPCTLEventVectorRef dep_event_vec_ref = nullptr;
×
1121
    DPCTLSyclEventRef event_ref =
×
1122
        dpnp_zeros_like_c<_DataType>(q_ref, result, size, dep_event_vec_ref);
×
1123
    DPCTLEvent_WaitAndThrow(event_ref);
×
1124
    DPCTLEvent_Delete(event_ref);
×
1125
}
×
1126

1127
template <typename _DataType>
1128
void (*dpnp_zeros_like_default_c)(void *,
1129
                                  size_t) = dpnp_zeros_like_c<_DataType>;
1130

1131
void func_map_init_arraycreation(func_map_t &fmap)
1132
{
1✔
1133
    fmap[DPNPFuncName::DPNP_FN_ARANGE][eft_INT][eft_INT] = {
1✔
1134
        eft_INT, (void *)dpnp_arange_default_c<int32_t>};
1✔
1135
    fmap[DPNPFuncName::DPNP_FN_ARANGE][eft_LNG][eft_LNG] = {
1✔
1136
        eft_LNG, (void *)dpnp_arange_default_c<int64_t>};
1✔
1137
    fmap[DPNPFuncName::DPNP_FN_ARANGE][eft_FLT][eft_FLT] = {
1✔
1138
        eft_FLT, (void *)dpnp_arange_default_c<float>};
1✔
1139
    fmap[DPNPFuncName::DPNP_FN_ARANGE][eft_DBL][eft_DBL] = {
1✔
1140
        eft_DBL, (void *)dpnp_arange_default_c<double>};
1✔
1141

1142
    fmap[DPNPFuncName::DPNP_FN_DIAG][eft_INT][eft_INT] = {
1✔
1143
        eft_INT, (void *)dpnp_diag_default_c<int32_t>};
1✔
1144
    fmap[DPNPFuncName::DPNP_FN_DIAG][eft_LNG][eft_LNG] = {
1✔
1145
        eft_LNG, (void *)dpnp_diag_default_c<int64_t>};
1✔
1146
    fmap[DPNPFuncName::DPNP_FN_DIAG][eft_FLT][eft_FLT] = {
1✔
1147
        eft_FLT, (void *)dpnp_diag_default_c<float>};
1✔
1148
    fmap[DPNPFuncName::DPNP_FN_DIAG][eft_DBL][eft_DBL] = {
1✔
1149
        eft_DBL, (void *)dpnp_diag_default_c<double>};
1✔
1150

1151
    fmap[DPNPFuncName::DPNP_FN_EYE][eft_INT][eft_INT] = {
1✔
1152
        eft_INT, (void *)dpnp_eye_default_c<int32_t>};
1✔
1153
    fmap[DPNPFuncName::DPNP_FN_EYE][eft_LNG][eft_LNG] = {
1✔
1154
        eft_LNG, (void *)dpnp_eye_default_c<int64_t>};
1✔
1155
    fmap[DPNPFuncName::DPNP_FN_EYE][eft_FLT][eft_FLT] = {
1✔
1156
        eft_FLT, (void *)dpnp_eye_default_c<float>};
1✔
1157
    fmap[DPNPFuncName::DPNP_FN_EYE][eft_DBL][eft_DBL] = {
1✔
1158
        eft_DBL, (void *)dpnp_eye_default_c<double>};
1✔
1159

1160
    fmap[DPNPFuncName::DPNP_FN_FULL][eft_INT][eft_INT] = {
1✔
1161
        eft_INT, (void *)dpnp_full_default_c<int32_t>};
1✔
1162
    fmap[DPNPFuncName::DPNP_FN_FULL][eft_LNG][eft_LNG] = {
1✔
1163
        eft_LNG, (void *)dpnp_full_default_c<int64_t>};
1✔
1164
    fmap[DPNPFuncName::DPNP_FN_FULL][eft_FLT][eft_FLT] = {
1✔
1165
        eft_FLT, (void *)dpnp_full_default_c<float>};
1✔
1166
    fmap[DPNPFuncName::DPNP_FN_FULL][eft_DBL][eft_DBL] = {
1✔
1167
        eft_DBL, (void *)dpnp_full_default_c<double>};
1✔
1168
    fmap[DPNPFuncName::DPNP_FN_FULL][eft_BLN][eft_BLN] = {
1✔
1169
        eft_BLN, (void *)dpnp_full_default_c<bool>};
1✔
1170
    fmap[DPNPFuncName::DPNP_FN_FULL][eft_C128][eft_C128] = {
1✔
1171
        eft_C128, (void *)dpnp_full_default_c<std::complex<double>>};
1✔
1172

1173
    fmap[DPNPFuncName::DPNP_FN_FULL_LIKE][eft_INT][eft_INT] = {
1✔
1174
        eft_INT, (void *)dpnp_full_like_default_c<int32_t>};
1✔
1175
    fmap[DPNPFuncName::DPNP_FN_FULL_LIKE][eft_LNG][eft_LNG] = {
1✔
1176
        eft_LNG, (void *)dpnp_full_like_default_c<int64_t>};
1✔
1177
    fmap[DPNPFuncName::DPNP_FN_FULL_LIKE][eft_FLT][eft_FLT] = {
1✔
1178
        eft_FLT, (void *)dpnp_full_like_default_c<float>};
1✔
1179
    fmap[DPNPFuncName::DPNP_FN_FULL_LIKE][eft_DBL][eft_DBL] = {
1✔
1180
        eft_DBL, (void *)dpnp_full_like_default_c<double>};
1✔
1181
    fmap[DPNPFuncName::DPNP_FN_FULL_LIKE][eft_BLN][eft_BLN] = {
1✔
1182
        eft_BLN, (void *)dpnp_full_like_default_c<bool>};
1✔
1183
    fmap[DPNPFuncName::DPNP_FN_FULL_LIKE][eft_C128][eft_C128] = {
1✔
1184
        eft_C128, (void *)dpnp_full_like_default_c<std::complex<double>>};
1✔
1185

1186
    fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_INT][eft_INT] = {
1✔
1187
        eft_INT, (void *)dpnp_identity_default_c<int32_t>};
1✔
1188
    fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_LNG][eft_LNG] = {
1✔
1189
        eft_LNG, (void *)dpnp_identity_default_c<int64_t>};
1✔
1190
    fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_FLT][eft_FLT] = {
1✔
1191
        eft_FLT, (void *)dpnp_identity_default_c<float>};
1✔
1192
    fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_DBL][eft_DBL] = {
1✔
1193
        eft_DBL, (void *)dpnp_identity_default_c<double>};
1✔
1194
    fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_BLN][eft_BLN] = {
1✔
1195
        eft_BLN, (void *)dpnp_identity_default_c<bool>};
1✔
1196
    fmap[DPNPFuncName::DPNP_FN_IDENTITY][eft_C128][eft_C128] = {
1✔
1197
        eft_C128, (void *)dpnp_identity_default_c<std::complex<double>>};
1✔
1198

1199
    fmap[DPNPFuncName::DPNP_FN_ONES][eft_INT][eft_INT] = {
1✔
1200
        eft_INT, (void *)dpnp_ones_default_c<int32_t>};
1✔
1201
    fmap[DPNPFuncName::DPNP_FN_ONES][eft_LNG][eft_LNG] = {
1✔
1202
        eft_LNG, (void *)dpnp_ones_default_c<int64_t>};
1✔
1203
    fmap[DPNPFuncName::DPNP_FN_ONES][eft_FLT][eft_FLT] = {
1✔
1204
        eft_FLT, (void *)dpnp_ones_default_c<float>};
1✔
1205
    fmap[DPNPFuncName::DPNP_FN_ONES][eft_DBL][eft_DBL] = {
1✔
1206
        eft_DBL, (void *)dpnp_ones_default_c<double>};
1✔
1207
    fmap[DPNPFuncName::DPNP_FN_ONES][eft_BLN][eft_BLN] = {
1✔
1208
        eft_BLN, (void *)dpnp_ones_default_c<bool>};
1✔
1209
    fmap[DPNPFuncName::DPNP_FN_ONES][eft_C128][eft_C128] = {
1✔
1210
        eft_C128, (void *)dpnp_ones_default_c<std::complex<double>>};
1✔
1211

1212
    fmap[DPNPFuncName::DPNP_FN_ONES_LIKE][eft_INT][eft_INT] = {
1✔
1213
        eft_INT, (void *)dpnp_ones_like_default_c<int32_t>};
1✔
1214
    fmap[DPNPFuncName::DPNP_FN_ONES_LIKE][eft_LNG][eft_LNG] = {
1✔
1215
        eft_LNG, (void *)dpnp_ones_like_default_c<int64_t>};
1✔
1216
    fmap[DPNPFuncName::DPNP_FN_ONES_LIKE][eft_FLT][eft_FLT] = {
1✔
1217
        eft_FLT, (void *)dpnp_ones_like_default_c<float>};
1✔
1218
    fmap[DPNPFuncName::DPNP_FN_ONES_LIKE][eft_DBL][eft_DBL] = {
1✔
1219
        eft_DBL, (void *)dpnp_ones_like_default_c<double>};
1✔
1220
    fmap[DPNPFuncName::DPNP_FN_ONES_LIKE][eft_BLN][eft_BLN] = {
1✔
1221
        eft_BLN, (void *)dpnp_ones_like_default_c<bool>};
1✔
1222
    fmap[DPNPFuncName::DPNP_FN_ONES_LIKE][eft_C128][eft_C128] = {
1✔
1223
        eft_C128, (void *)dpnp_ones_like_default_c<std::complex<double>>};
1✔
1224

1225
    fmap[DPNPFuncName::DPNP_FN_PTP][eft_INT][eft_INT] = {
1✔
1226
        eft_INT, (void *)dpnp_ptp_default_c<int32_t>};
1✔
1227
    fmap[DPNPFuncName::DPNP_FN_PTP][eft_LNG][eft_LNG] = {
1✔
1228
        eft_LNG, (void *)dpnp_ptp_default_c<int64_t>};
1✔
1229
    fmap[DPNPFuncName::DPNP_FN_PTP][eft_FLT][eft_FLT] = {
1✔
1230
        eft_FLT, (void *)dpnp_ptp_default_c<float>};
1✔
1231
    fmap[DPNPFuncName::DPNP_FN_PTP][eft_DBL][eft_DBL] = {
1✔
1232
        eft_DBL, (void *)dpnp_ptp_default_c<double>};
1✔
1233

1234
    fmap[DPNPFuncName::DPNP_FN_VANDER][eft_INT][eft_INT] = {
1✔
1235
        eft_LNG, (void *)dpnp_vander_default_c<int32_t, int64_t>};
1✔
1236
    fmap[DPNPFuncName::DPNP_FN_VANDER][eft_LNG][eft_LNG] = {
1✔
1237
        eft_LNG, (void *)dpnp_vander_default_c<int64_t, int64_t>};
1✔
1238
    fmap[DPNPFuncName::DPNP_FN_VANDER][eft_FLT][eft_FLT] = {
1✔
1239
        eft_DBL, (void *)dpnp_vander_default_c<float, double>};
1✔
1240
    fmap[DPNPFuncName::DPNP_FN_VANDER][eft_DBL][eft_DBL] = {
1✔
1241
        eft_DBL, (void *)dpnp_vander_default_c<double, double>};
1✔
1242
    fmap[DPNPFuncName::DPNP_FN_VANDER][eft_BLN][eft_BLN] = {
1✔
1243
        eft_LNG, (void *)dpnp_vander_default_c<bool, int64_t>};
1✔
1244
    fmap[DPNPFuncName::DPNP_FN_VANDER][eft_C128][eft_C128] = {
1✔
1245
        eft_C128,
1✔
1246
        (void *)
1✔
1247
            dpnp_vander_default_c<std::complex<double>, std::complex<double>>};
1✔
1248

1249
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_INT][eft_INT] = {
1✔
1250
        eft_INT, (void *)dpnp_trace_default_c<int32_t, int32_t>};
1✔
1251
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_LNG][eft_INT] = {
1✔
1252
        eft_INT, (void *)dpnp_trace_default_c<int64_t, int32_t>};
1✔
1253
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_FLT][eft_INT] = {
1✔
1254
        eft_INT, (void *)dpnp_trace_default_c<float, int32_t>};
1✔
1255
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_DBL][eft_INT] = {
1✔
1256
        eft_INT, (void *)dpnp_trace_default_c<double, int32_t>};
1✔
1257
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_INT][eft_LNG] = {
1✔
1258
        eft_LNG, (void *)dpnp_trace_default_c<int32_t, int64_t>};
1✔
1259
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_LNG][eft_LNG] = {
1✔
1260
        eft_LNG, (void *)dpnp_trace_default_c<int64_t, int64_t>};
1✔
1261
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_FLT][eft_LNG] = {
1✔
1262
        eft_LNG, (void *)dpnp_trace_default_c<float, int64_t>};
1✔
1263
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_DBL][eft_LNG] = {
1✔
1264
        eft_LNG, (void *)dpnp_trace_default_c<double, int64_t>};
1✔
1265
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_INT][eft_FLT] = {
1✔
1266
        eft_FLT, (void *)dpnp_trace_default_c<int32_t, float>};
1✔
1267
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_LNG][eft_FLT] = {
1✔
1268
        eft_FLT, (void *)dpnp_trace_default_c<int64_t, float>};
1✔
1269
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_FLT][eft_FLT] = {
1✔
1270
        eft_FLT, (void *)dpnp_trace_default_c<float, float>};
1✔
1271
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_DBL][eft_FLT] = {
1✔
1272
        eft_FLT, (void *)dpnp_trace_default_c<double, float>};
1✔
1273
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_INT][eft_DBL] = {
1✔
1274
        eft_DBL, (void *)dpnp_trace_default_c<int32_t, double>};
1✔
1275
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_LNG][eft_DBL] = {
1✔
1276
        eft_DBL, (void *)dpnp_trace_default_c<int64_t, double>};
1✔
1277
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_FLT][eft_DBL] = {
1✔
1278
        eft_DBL, (void *)dpnp_trace_default_c<float, double>};
1✔
1279
    fmap[DPNPFuncName::DPNP_FN_TRACE][eft_DBL][eft_DBL] = {
1✔
1280
        eft_DBL, (void *)dpnp_trace_default_c<double, double>};
1✔
1281

1282
    fmap[DPNPFuncName::DPNP_FN_TRI][eft_INT][eft_INT] = {
1✔
1283
        eft_INT, (void *)dpnp_tri_default_c<int32_t>};
1✔
1284
    fmap[DPNPFuncName::DPNP_FN_TRI][eft_LNG][eft_LNG] = {
1✔
1285
        eft_LNG, (void *)dpnp_tri_default_c<int64_t>};
1✔
1286
    fmap[DPNPFuncName::DPNP_FN_TRI][eft_FLT][eft_FLT] = {
1✔
1287
        eft_FLT, (void *)dpnp_tri_default_c<float>};
1✔
1288
    fmap[DPNPFuncName::DPNP_FN_TRI][eft_DBL][eft_DBL] = {
1✔
1289
        eft_DBL, (void *)dpnp_tri_default_c<double>};
1✔
1290

1291
    fmap[DPNPFuncName::DPNP_FN_TRIL][eft_INT][eft_INT] = {
1✔
1292
        eft_INT, (void *)dpnp_tril_default_c<int32_t>};
1✔
1293
    fmap[DPNPFuncName::DPNP_FN_TRIL][eft_LNG][eft_LNG] = {
1✔
1294
        eft_LNG, (void *)dpnp_tril_default_c<int64_t>};
1✔
1295
    fmap[DPNPFuncName::DPNP_FN_TRIL][eft_FLT][eft_FLT] = {
1✔
1296
        eft_FLT, (void *)dpnp_tril_default_c<float>};
1✔
1297
    fmap[DPNPFuncName::DPNP_FN_TRIL][eft_DBL][eft_DBL] = {
1✔
1298
        eft_DBL, (void *)dpnp_tril_default_c<double>};
1✔
1299

1300
    fmap[DPNPFuncName::DPNP_FN_TRIU][eft_INT][eft_INT] = {
1✔
1301
        eft_INT, (void *)dpnp_triu_default_c<int32_t>};
1✔
1302
    fmap[DPNPFuncName::DPNP_FN_TRIU][eft_LNG][eft_LNG] = {
1✔
1303
        eft_LNG, (void *)dpnp_triu_default_c<int64_t>};
1✔
1304
    fmap[DPNPFuncName::DPNP_FN_TRIU][eft_FLT][eft_FLT] = {
1✔
1305
        eft_FLT, (void *)dpnp_triu_default_c<float>};
1✔
1306
    fmap[DPNPFuncName::DPNP_FN_TRIU][eft_DBL][eft_DBL] = {
1✔
1307
        eft_DBL, (void *)dpnp_triu_default_c<double>};
1✔
1308

1309
    fmap[DPNPFuncName::DPNP_FN_ZEROS][eft_INT][eft_INT] = {
1✔
1310
        eft_INT, (void *)dpnp_zeros_default_c<int32_t>};
1✔
1311
    fmap[DPNPFuncName::DPNP_FN_ZEROS][eft_LNG][eft_LNG] = {
1✔
1312
        eft_LNG, (void *)dpnp_zeros_default_c<int64_t>};
1✔
1313
    fmap[DPNPFuncName::DPNP_FN_ZEROS][eft_FLT][eft_FLT] = {
1✔
1314
        eft_FLT, (void *)dpnp_zeros_default_c<float>};
1✔
1315
    fmap[DPNPFuncName::DPNP_FN_ZEROS][eft_DBL][eft_DBL] = {
1✔
1316
        eft_DBL, (void *)dpnp_zeros_default_c<double>};
1✔
1317
    fmap[DPNPFuncName::DPNP_FN_ZEROS][eft_BLN][eft_BLN] = {
1✔
1318
        eft_BLN, (void *)dpnp_zeros_default_c<bool>};
1✔
1319
    fmap[DPNPFuncName::DPNP_FN_ZEROS][eft_C128][eft_C128] = {
1✔
1320
        eft_C128, (void *)dpnp_zeros_default_c<std::complex<double>>};
1✔
1321

1322
    fmap[DPNPFuncName::DPNP_FN_ZEROS_LIKE][eft_INT][eft_INT] = {
1✔
1323
        eft_INT, (void *)dpnp_zeros_like_default_c<int32_t>};
1✔
1324
    fmap[DPNPFuncName::DPNP_FN_ZEROS_LIKE][eft_LNG][eft_LNG] = {
1✔
1325
        eft_LNG, (void *)dpnp_zeros_like_default_c<int64_t>};
1✔
1326
    fmap[DPNPFuncName::DPNP_FN_ZEROS_LIKE][eft_FLT][eft_FLT] = {
1✔
1327
        eft_FLT, (void *)dpnp_zeros_like_default_c<float>};
1✔
1328
    fmap[DPNPFuncName::DPNP_FN_ZEROS_LIKE][eft_DBL][eft_DBL] = {
1✔
1329
        eft_DBL, (void *)dpnp_zeros_like_default_c<double>};
1✔
1330
    fmap[DPNPFuncName::DPNP_FN_ZEROS_LIKE][eft_BLN][eft_BLN] = {
1✔
1331
        eft_BLN, (void *)dpnp_zeros_like_default_c<bool>};
1✔
1332
    fmap[DPNPFuncName::DPNP_FN_ZEROS_LIKE][eft_C128][eft_C128] = {
1✔
1333
        eft_C128, (void *)dpnp_zeros_like_default_c<std::complex<double>>};
1✔
1334

1335
    return;
1✔
1336
}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc