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

Function init_geev

numpy/linalg/umath_linalg.cpp:2082–2163  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2080
2081template<typename typ>
2082static inline int
2083init_geev(GEEV_PARAMS_t<typ> *params, char jobvl, char jobvr, fortran_int n,
2084scalar_trait)
2085{
2086 npy_uint8 *mem_buff = NULL;
2087 npy_uint8 *mem_buff2 = NULL;
2088 npy_uint8 *a, *wr, *wi, *vlr, *vrr, *work, *w, *vl, *vr;
2089 size_t safe_n = n;
2090 size_t a_size = safe_n * safe_n * sizeof(typ);
2091 size_t wr_size = safe_n * sizeof(typ);
2092 size_t wi_size = safe_n * sizeof(typ);
2093 size_t vlr_size = jobvl=='V' ? safe_n * safe_n * sizeof(typ) : 0;
2094 size_t vrr_size = jobvr=='V' ? safe_n * safe_n * sizeof(typ) : 0;
2095 size_t w_size = wr_size*2;
2096 size_t vl_size = vlr_size*2;
2097 size_t vr_size = vrr_size*2;
2098 size_t work_count = 0;
2099 fortran_int ld = fortran_int_max(n, 1);
2100
2101 /* allocate data for known sizes (all but work) */
2102 mem_buff = (npy_uint8 *)malloc(a_size + wr_size + wi_size +
2103 vlr_size + vrr_size +
2104 w_size + vl_size + vr_size);
2105 if (!mem_buff) {
2106 goto error;
2107 }
2108
2109 a = mem_buff;
2110 wr = a + a_size;
2111 wi = wr + wr_size;
2112 vlr = wi + wi_size;
2113 vrr = vlr + vlr_size;
2114 w = vrr + vrr_size;
2115 vl = w + w_size;
2116 vr = vl + vl_size;
2117
2118 params->A = (typ*)a;
2119 params->WR = (typ*)wr;
2120 params->WI = (typ*)wi;
2121 params->VLR = (typ*)vlr;
2122 params->VRR = (typ*)vrr;
2123 params->W = (typ*)w;
2124 params->VL = (typ*)vl;
2125 params->VR = (typ*)vr;
2126 params->N = n;
2127 params->LDA = ld;
2128 params->LDVL = ld;
2129 params->LDVR = ld;
2130 params->JOBVL = jobvl;
2131 params->JOBVR = jobvr;
2132
2133 /* Work size query */
2134 {
2135 typ work_size_query;
2136
2137 params->LWORK = -1;
2138 params->WORK = &work_size_query;
2139

Callers 1

eig_wrapperFunction · 0.85

Calls 2

fortran_int_maxFunction · 0.85
call_geevFunction · 0.85

Tested by

no test coverage detected