summaryrefslogtreecommitdiff
path: root/numpy/linalg
diff options
context:
space:
mode:
authorczgdp1807 <gdp.1807@gmail.com>2021-06-22 10:05:47 +0530
committerczgdp1807 <gdp.1807@gmail.com>2021-06-22 10:05:47 +0530
commitb5d469efbfa4a400fd9213cb0a5c11c826be9da3 (patch)
tree78a0cec79a0de77c3acd28137c5a53fdc90353a5 /numpy/linalg
parente9df9fdc0a2d26b53b881d64b492454cbdeed3b4 (diff)
downloadnumpy-b5d469efbfa4a400fd9213cb0a5c11c826be9da3.tar.gz
refactoring complete
Diffstat (limited to 'numpy/linalg')
-rw-r--r--numpy/linalg/umath_linalg.c.src205
1 files changed, 60 insertions, 145 deletions
diff --git a/numpy/linalg/umath_linalg.c.src b/numpy/linalg/umath_linalg.c.src
index 86946274f..964c4d481 100644
--- a/numpy/linalg/umath_linalg.c.src
+++ b/numpy/linalg/umath_linalg.c.src
@@ -3159,6 +3159,9 @@ static void
/**end repeat**/
+/* -------------------------------------------------------------------------- */
+ /* qr common code (modes - reduced and complete) */
+
typedef struct gqr_params_struct
{
fortran_int M;
@@ -3191,7 +3194,6 @@ call_@lapack_func@(GQR_PARAMS_t *params)
/**end repeat**/
/**begin repeat
- #TYPE=FLOAT,DOUBLE#
#lapack_func=sorgqr,dorgqr#
#ftyp=fortran_real,fortran_doublereal#
*/
@@ -3275,73 +3277,27 @@ init_@lapack_func@_common(GQR_PARAMS_t *params,
/**end repeat**/
-/* -------------------------------------------------------------------------- */
- /* qr (modes - reduced) */
-
-
-static inline void
-dump_gqr_params(const char *name,
- GQR_PARAMS_t *params)
-{
- TRACE_TXT("\n%s:\n"\
-
- "%14s: %18p\n"\
- "%14s: %18p\n"\
- "%14s: %18p\n"\
- "%14s: %18d\n"\
- "%14s: %18d\n"\
- "%14s: %18d\n"\
- "%14s: %18d\n"\
- "%14s: %18d\n",
-
- name,
-
- "Q", params->Q,
- "TAU", params->TAU,
- "WORK", params->WORK,
-
- "M", (int)params->M,
- "MC", (int)params->MC,
- "MN", (int)params->MN,
- "LDA", (int)params->LDA,
- "LWORK", (int)params->LWORK);
-}
-
-/**begin repeat
- #TYPE=FLOAT,DOUBLE#
- #lapack_func=sorgqr,dorgqr#
- #ftyp=fortran_real,fortran_doublereal#
- */
-static inline int
-init_@lapack_func@(GQR_PARAMS_t *params,
- fortran_int m,
- fortran_int n)
-{
- return init_@lapack_func@_common(params, m, n, fortran_int_min(m, n));
-}
-
-/**end repeat**/
-
/**begin repeat
- #TYPE=CFLOAT,CDOUBLE#
#lapack_func=cungqr,zungqr#
#ftyp=fortran_complex,fortran_doublecomplex#
*/
static inline int
-init_@lapack_func@(GQR_PARAMS_t *params,
- fortran_int m,
- fortran_int n)
+init_@lapack_func@_common(GQR_PARAMS_t *params,
+ fortran_int m,
+ fortran_int n,
+ fortran_int mc)
{
npy_uint8 *mem_buff = NULL;
npy_uint8 *mem_buff2 = NULL;
npy_uint8 *a, *q, *tau, *work;
fortran_int min_m_n = fortran_int_min(m, n);
+ size_t safe_mc = mc;
size_t safe_min_m_n = min_m_n;
size_t safe_m = m;
size_t safe_n = n;
size_t a_size = safe_m * safe_n * sizeof(@ftyp@);
- size_t q_size = safe_m * safe_min_m_n * sizeof(@ftyp@);
+ size_t q_size = safe_m * safe_mc * sizeof(@ftyp@);
size_t tau_size = safe_min_m_n * sizeof(@ftyp@);
fortran_int work_count_r, work_count_i, work_count;
@@ -3359,7 +3315,7 @@ init_@lapack_func@(GQR_PARAMS_t *params,
params->M = m;
- params->MC = min_m_n;
+ params->MC = mc;
params->MN = min_m_n;
params->A = a;
params->Q = q;
@@ -3411,6 +3367,54 @@ init_@lapack_func@(GQR_PARAMS_t *params,
/**end repeat**/
+/* -------------------------------------------------------------------------- */
+ /* qr (modes - reduced) */
+
+
+static inline void
+dump_gqr_params(const char *name,
+ GQR_PARAMS_t *params)
+{
+ TRACE_TXT("\n%s:\n"\
+
+ "%14s: %18p\n"\
+ "%14s: %18p\n"\
+ "%14s: %18p\n"\
+ "%14s: %18d\n"\
+ "%14s: %18d\n"\
+ "%14s: %18d\n"\
+ "%14s: %18d\n"\
+ "%14s: %18d\n",
+
+ name,
+
+ "Q", params->Q,
+ "TAU", params->TAU,
+ "WORK", params->WORK,
+
+ "M", (int)params->M,
+ "MC", (int)params->MC,
+ "MN", (int)params->MN,
+ "LDA", (int)params->LDA,
+ "LWORK", (int)params->LWORK);
+}
+
+/**begin repeat
+ #lapack_func=sorgqr,dorgqr,cungqr,zungqr#
+ #ftyp=fortran_real,fortran_doublereal,fortran_complex,fortran_doublecomplex#
+ */
+static inline int
+init_@lapack_func@(GQR_PARAMS_t *params,
+ fortran_int m,
+ fortran_int n)
+{
+ return init_@lapack_func@_common(
+ params, m, n,
+ fortran_int_min(m, n));
+}
+
+/**end repeat**/
+
/**begin repeat
#lapack_func=sorgqr,dorgqr,cungqr,zungqr#
*/
@@ -3486,9 +3490,8 @@ static void
/* qr (modes - complete) */
/**begin repeat
- #TYPE=FLOAT,DOUBLE#
- #lapack_func=sorgqr,dorgqr#
- #ftyp=fortran_real,fortran_doublereal#
+ #lapack_func=sorgqr,dorgqr,cungqr,zungqr#
+ #ftyp=fortran_real,fortran_doublereal,fortran_complex,fortran_doublecomplex#
*/
static inline int
init_@lapack_func@_complete(GQR_PARAMS_t *params,
@@ -3501,94 +3504,6 @@ init_@lapack_func@_complete(GQR_PARAMS_t *params,
/**end repeat**/
/**begin repeat
- #TYPE=CFLOAT,CDOUBLE#
- #lapack_func=cungqr,zungqr#
- #ftyp=fortran_complex,fortran_doublecomplex#
- */
-static inline int
-init_@lapack_func@_complete(GQR_PARAMS_t *params,
- fortran_int m,
- fortran_int n)
-{
- npy_uint8 *mem_buff = NULL;
- npy_uint8 *mem_buff2 = NULL;
- npy_uint8 *a, *q, *tau, *work;
- fortran_int min_m_n = fortran_int_min(m, n);
- size_t safe_min_m_n = min_m_n;
- size_t safe_m = m;
- size_t safe_n = n;
-
- size_t a_size = safe_m * safe_n * sizeof(@ftyp@);
- size_t q_size = safe_m * safe_m * sizeof(@ftyp@);
- size_t tau_size = safe_min_m_n * sizeof(@ftyp@);
-
- fortran_int work_count_r, work_count_i, work_count;
- size_t work_size;
- fortran_int lda = fortran_int_max(1, m);
-
- mem_buff = malloc(q_size + tau_size + a_size);
-
- if (!mem_buff)
- goto error;
-
- q = mem_buff;
- tau = q + q_size;
- a = tau + tau_size;
-
-
- params->M = m;
- params->MC = m;
- params->MN = min_m_n;
- params->A = a;
- params->Q = q;
- params->TAU = tau;
- params->LDA = lda;
-
- {
- /* compute optimal work size */
- @ftyp@ work_size_query;
-
- params->WORK = &work_size_query;
- params->LWORK = -1;
-
- if (call_@lapack_func@(params) != 0)
- goto error;
-
- work_count_r = (fortran_int) ((@ftyp@*)params->WORK)->r;
- work_count_i = (fortran_int) ((@ftyp@*)params->WORK)->i;
-
- work_count = (fortran_int) sqrt((fortran_doublereal) work_count_r*work_count_r +
- (fortran_doublereal) work_count_i*work_count_i);
-
- }
-
- params->LWORK = fortran_int_max(fortran_int_max(1, n),
- work_count);
-
- work_size = (size_t) params->LWORK * sizeof(@ftyp@);
- mem_buff2 = malloc(work_size);
- if (!mem_buff2)
- goto error;
-
- work = mem_buff2;
- memset(work, 0, work_size);
-
- params->WORK = work;
- params->LWORK = work_count;
-
- return 1;
- error:
- TRACE_TXT("%s failed init\n", __FUNCTION__);
- free(mem_buff);
- free(mem_buff2);
- memset(params, 0, sizeof(*params));
-
- return 0;
-}
-
-/**end repeat**/
-
-/**begin repeat
#TYPE=FLOAT,DOUBLE,CFLOAT,CDOUBLE#
#REALTYPE=FLOAT,DOUBLE,FLOAT,DOUBLE#
#lapack_func=sorgqr,dorgqr,cungqr,zungqr#