MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / af_diag_extract

Function af_diag_extract

src/api/c/data.cpp:310–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

308}
309
310af_err af_diag_extract(af_array *out, const af_array in, const int num) {
311 try {
312 const ArrayInfo &in_info = getInfo(in);
313 af_dtype type = in_info.getType();
314
315 if (in_info.ndims() == 0) {
316 return af_create_handle(out, 0, nullptr, type);
317 }
318
319 DIM_ASSERT(1, in_info.ndims() >= 2);
320
321 af_array result = nullptr;
322 switch (type) {
323 case f32: result = diagExtract<float>(in, num); break;
324 case c32: result = diagExtract<cfloat>(in, num); break;
325 case f64: result = diagExtract<double>(in, num); break;
326 case c64: result = diagExtract<cdouble>(in, num); break;
327 case s32: result = diagExtract<int>(in, num); break;
328 case u32: result = diagExtract<uint>(in, num); break;
329 case s64: result = diagExtract<intl>(in, num); break;
330 case u64: result = diagExtract<uintl>(in, num); break;
331 case s16: result = diagExtract<short>(in, num); break;
332 case u16: result = diagExtract<ushort>(in, num); break;
333 case s8: result = diagExtract<schar>(in, num); break;
334 case u8:
335 result = diagExtract<uchar>(in, num);
336 break;
337 // Removed because of bool type. Functions implementations
338 // exist.
339 case b8: result = diagExtract<char>(in, num); break;
340 case f16: result = diagExtract<half>(in, num); break;
341 default: TYPE_ERROR(1, type);
342 }
343
344 std::swap(*out, result);
345 }
346 CATCHALL;
347
348 return AF_SUCCESS;
349}
350
351template<typename T>
352inline af_array triangle(const af_array in, const bool is_upper,

Callers 1

diagFunction · 0.50

Calls 4

swapFunction · 0.85
af_create_handleFunction · 0.70
getTypeMethod · 0.45
ndimsMethod · 0.45

Tested by

no test coverage detected