MCPcopy Create free account
hub / github.com/numpy/numpy / init_gqr_common

Function init_gqr_common

numpy/linalg/umath_linalg.cpp:3321–3396  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3319}
3320
3321static inline int
3322init_gqr_common(GQR_PARAMS_t<fortran_doublereal> *params,
3323 fortran_int m,
3324 fortran_int n,
3325 fortran_int mc)
3326{
3327using ftyp = fortran_doublereal;
3328 npy_uint8 *mem_buff = NULL;
3329 npy_uint8 *mem_buff2 = NULL;
3330 npy_uint8 *a, *q, *tau, *work;
3331 fortran_int min_m_n = fortran_int_min(m, n);
3332 size_t safe_mc = mc;
3333 size_t safe_min_m_n = min_m_n;
3334 size_t safe_m = m;
3335 size_t safe_n = n;
3336 size_t a_size = safe_m * safe_n * sizeof(ftyp);
3337 size_t q_size = safe_m * safe_mc * sizeof(ftyp);
3338 size_t tau_size = safe_min_m_n * sizeof(ftyp);
3339
3340 fortran_int work_count;
3341 size_t work_size;
3342 fortran_int lda = fortran_int_max(1, m);
3343
3344 mem_buff = (npy_uint8 *)malloc(q_size + tau_size + a_size);
3345
3346 if (!mem_buff)
3347 goto error;
3348
3349 q = mem_buff;
3350 tau = q + q_size;
3351 a = tau + tau_size;
3352
3353
3354 params->M = m;
3355 params->MC = mc;
3356 params->MN = min_m_n;
3357 params->A = a;
3358 params->Q = (ftyp*)q;
3359 params->TAU = (ftyp*)tau;
3360 params->LDA = lda;
3361
3362 {
3363 /* compute optimal work size */
3364 ftyp work_size_query;
3365
3366 params->WORK = &work_size_query;
3367 params->LWORK = -1;
3368
3369 if (call_gqr(params) != 0)
3370 goto error;
3371
3372 work_count = (fortran_int) *(ftyp*) params->WORK;
3373
3374 }
3375
3376 params->LWORK = fortran_int_max(fortran_int_max(1, n), work_count);
3377
3378 work_size = (size_t) params->LWORK * sizeof(ftyp);

Callers 2

init_gqrFunction · 0.85
init_gqr_completeFunction · 0.85

Calls 3

fortran_int_minFunction · 0.85
fortran_int_maxFunction · 0.85
call_gqrFunction · 0.85

Tested by

no test coverage detected