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

Function init_gelsd

numpy/linalg/umath_linalg.cpp:3731–3823  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3729
3730template<typename ftyp>
3731static inline int
3732init_gelsd(GELSD_PARAMS_t<ftyp> *params,
3733 fortran_int m,
3734 fortran_int n,
3735 fortran_int nrhs,
3736scalar_trait)
3737{
3738 npy_uint8 *mem_buff = NULL;
3739 npy_uint8 *mem_buff2 = NULL;
3740 npy_uint8 *a, *b, *s, *work, *iwork;
3741 fortran_int min_m_n = fortran_int_min(m, n);
3742 fortran_int max_m_n = fortran_int_max(m, n);
3743 size_t safe_min_m_n = min_m_n;
3744 size_t safe_max_m_n = max_m_n;
3745 size_t safe_m = m;
3746 size_t safe_n = n;
3747 size_t safe_nrhs = nrhs;
3748
3749 size_t a_size = safe_m * safe_n * sizeof(ftyp);
3750 size_t b_size = safe_max_m_n * safe_nrhs * sizeof(ftyp);
3751 size_t s_size = safe_min_m_n * sizeof(ftyp);
3752
3753 fortran_int work_count;
3754 size_t work_size;
3755 size_t iwork_size;
3756 fortran_int lda = fortran_int_max(1, m);
3757 fortran_int ldb = fortran_int_max(1, fortran_int_max(m,n));
3758
3759 size_t msize = a_size + b_size + s_size;
3760 mem_buff = (npy_uint8 *)malloc(msize != 0 ? msize : 1);
3761
3762 if (!mem_buff) {
3763 goto no_memory;
3764 }
3765 a = mem_buff;
3766 b = a + a_size;
3767 s = b + b_size;
3768
3769 params->M = m;
3770 params->N = n;
3771 params->NRHS = nrhs;
3772 params->A = (ftyp*)a;
3773 params->B = (ftyp*)b;
3774 params->S = (ftyp*)s;
3775 params->LDA = lda;
3776 params->LDB = ldb;
3777
3778 {
3779 /* compute optimal work size */
3780 ftyp work_size_query;
3781 fortran_int iwork_size_query;
3782
3783 params->WORK = &work_size_query;
3784 params->IWORK = &iwork_size_query;
3785 params->RWORK = NULL;
3786 params->LWORK = -1;
3787
3788 if (call_gelsd(params) != 0) {

Callers 1

lstsqFunction · 0.85

Calls 3

fortran_int_minFunction · 0.85
fortran_int_maxFunction · 0.85
call_gelsdFunction · 0.85

Tested by

no test coverage detected