numo-linalg-alt 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -1
- data/README.md +83 -5
- data/ext/numo/linalg/blas/blas_common.h +30 -0
- data/ext/numo/linalg/blas/blas_util.c +39 -0
- data/ext/numo/linalg/blas/blas_util.h +11 -0
- data/ext/numo/linalg/{converter.h → blas/converter.h} +0 -2
- data/ext/numo/linalg/blas/dot.c +1 -1
- data/ext/numo/linalg/blas/dot.h +1 -6
- data/ext/numo/linalg/blas/dot_sub.c +1 -1
- data/ext/numo/linalg/blas/dot_sub.h +1 -6
- data/ext/numo/linalg/blas/gemm.c +21 -21
- data/ext/numo/linalg/blas/gemm.h +3 -9
- data/ext/numo/linalg/blas/gemv.c +10 -10
- data/ext/numo/linalg/blas/gemv.h +3 -9
- data/ext/numo/linalg/blas/nrm2.c +1 -1
- data/ext/numo/linalg/blas/nrm2.h +1 -6
- data/ext/numo/linalg/extconf.rb +34 -6
- data/ext/numo/linalg/lapack/gebal.h +1 -1
- data/ext/numo/linalg/lapack/gees.c +4 -4
- data/ext/numo/linalg/lapack/gees.h +1 -1
- data/ext/numo/linalg/lapack/geev.c +8 -24
- data/ext/numo/linalg/lapack/geev.h +1 -1
- data/ext/numo/linalg/lapack/gehrd.c +77 -0
- data/ext/numo/linalg/lapack/gehrd.h +15 -0
- data/ext/numo/linalg/lapack/gelsd.h +1 -1
- data/ext/numo/linalg/lapack/geqrf.h +1 -1
- data/ext/numo/linalg/lapack/gerqf.h +1 -1
- data/ext/numo/linalg/lapack/gesdd.h +1 -1
- data/ext/numo/linalg/lapack/gesv.h +1 -1
- data/ext/numo/linalg/lapack/gesvd.h +1 -1
- data/ext/numo/linalg/lapack/getrf.h +1 -1
- data/ext/numo/linalg/lapack/getri.h +1 -1
- data/ext/numo/linalg/lapack/getrs.h +1 -1
- data/ext/numo/linalg/lapack/gges.c +4 -4
- data/ext/numo/linalg/lapack/gges.h +1 -1
- data/ext/numo/linalg/lapack/heev.c +1 -1
- data/ext/numo/linalg/lapack/heev.h +1 -1
- data/ext/numo/linalg/lapack/heevd.c +1 -1
- data/ext/numo/linalg/lapack/heevd.h +1 -1
- data/ext/numo/linalg/lapack/heevr.c +1 -1
- data/ext/numo/linalg/lapack/heevr.h +1 -1
- data/ext/numo/linalg/lapack/hegv.c +1 -1
- data/ext/numo/linalg/lapack/hegv.h +1 -1
- data/ext/numo/linalg/lapack/hegvd.c +1 -1
- data/ext/numo/linalg/lapack/hegvd.h +1 -1
- data/ext/numo/linalg/lapack/hegvx.c +1 -1
- data/ext/numo/linalg/lapack/hegvx.h +1 -1
- data/ext/numo/linalg/lapack/hetrf.h +1 -1
- data/ext/numo/linalg/lapack/lange.c +7 -8
- data/ext/numo/linalg/lapack/lange.h +1 -1
- data/ext/numo/linalg/lapack/lapack_util.c +57 -0
- data/ext/numo/linalg/lapack/lapack_util.h +27 -0
- data/ext/numo/linalg/lapack/orghr.c +82 -0
- data/ext/numo/linalg/lapack/orghr.h +15 -0
- data/ext/numo/linalg/lapack/orgqr.h +1 -1
- data/ext/numo/linalg/lapack/orgrq.h +1 -1
- data/ext/numo/linalg/lapack/potrf.h +1 -1
- data/ext/numo/linalg/lapack/potri.h +1 -1
- data/ext/numo/linalg/lapack/potrs.h +1 -1
- data/ext/numo/linalg/lapack/syev.c +1 -1
- data/ext/numo/linalg/lapack/syev.h +1 -1
- data/ext/numo/linalg/lapack/syevd.c +1 -1
- data/ext/numo/linalg/lapack/syevd.h +1 -1
- data/ext/numo/linalg/lapack/syevr.c +1 -1
- data/ext/numo/linalg/lapack/syevr.h +1 -1
- data/ext/numo/linalg/lapack/sygv.c +1 -1
- data/ext/numo/linalg/lapack/sygv.h +1 -1
- data/ext/numo/linalg/lapack/sygvd.c +1 -1
- data/ext/numo/linalg/lapack/sygvd.h +1 -1
- data/ext/numo/linalg/lapack/sygvx.c +1 -1
- data/ext/numo/linalg/lapack/sygvx.h +1 -1
- data/ext/numo/linalg/lapack/sytrf.h +1 -1
- data/ext/numo/linalg/lapack/trtrs.h +1 -1
- data/ext/numo/linalg/lapack/unghr.c +82 -0
- data/ext/numo/linalg/lapack/unghr.h +15 -0
- data/ext/numo/linalg/lapack/ungqr.h +1 -1
- data/ext/numo/linalg/lapack/ungrq.h +1 -1
- data/ext/numo/linalg/linalg.c +5 -0
- data/ext/numo/linalg/linalg.h +17 -6
- data/lib/numo/linalg/version.rb +1 -1
- data/lib/numo/linalg.rb +160 -20
- metadata +15 -6
- data/ext/numo/linalg/util.c +0 -103
- data/ext/numo/linalg/util.h +0 -18
- /data/ext/numo/linalg/{converter.c → blas/converter.c} +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#include "orghr.h"
|
|
2
|
+
|
|
3
|
+
struct _orghr_option {
|
|
4
|
+
int matrix_layout;
|
|
5
|
+
int ilo;
|
|
6
|
+
int ihi;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
#define DEF_LINALG_FUNC(tDType, tNAryClass, fLapackFunc) \
|
|
10
|
+
static void _iter_##fLapackFunc(na_loop_t* const lp) { \
|
|
11
|
+
tDType* a = (tDType*)NDL_PTR(lp, 0); \
|
|
12
|
+
tDType* tau = (tDType*)NDL_PTR(lp, 1); \
|
|
13
|
+
int* info = (int*)NDL_PTR(lp, 2); \
|
|
14
|
+
struct _orghr_option* opt = (struct _orghr_option*)(lp->opt_ptr); \
|
|
15
|
+
const lapack_int ilo = opt->ilo; \
|
|
16
|
+
const lapack_int ihi = opt->ihi; \
|
|
17
|
+
const lapack_int n = (lapack_int)NDL_SHAPE(lp, 0)[0]; \
|
|
18
|
+
const lapack_int lda = n; \
|
|
19
|
+
const lapack_int i = LAPACKE_##fLapackFunc(opt->matrix_layout, n, ilo, ihi, a, lda, tau); \
|
|
20
|
+
*info = (int)i; \
|
|
21
|
+
} \
|
|
22
|
+
\
|
|
23
|
+
static VALUE _linalg_lapack_##fLapackFunc(int argc, VALUE* argv, VALUE self) { \
|
|
24
|
+
VALUE a_vnary = Qnil; \
|
|
25
|
+
VALUE tau_vnary = Qnil; \
|
|
26
|
+
VALUE kw_args = Qnil; \
|
|
27
|
+
rb_scan_args(argc, argv, "2:", &a_vnary, &tau_vnary, &kw_args); \
|
|
28
|
+
ID kw_table[3] = { rb_intern("ilo"), rb_intern("ihi"), rb_intern("order") }; \
|
|
29
|
+
VALUE kw_values[3] = { Qundef, Qundef, Qundef }; \
|
|
30
|
+
rb_get_kwargs(kw_args, kw_table, 2, 1, kw_values); \
|
|
31
|
+
const int ilo = NUM2INT(kw_values[0]); \
|
|
32
|
+
const int ihi = NUM2INT(kw_values[1]); \
|
|
33
|
+
const int matrix_layout = \
|
|
34
|
+
kw_values[2] != Qundef ? get_matrix_layout(kw_values[2]) : LAPACK_ROW_MAJOR; \
|
|
35
|
+
\
|
|
36
|
+
if (CLASS_OF(a_vnary) != tNAryClass) { \
|
|
37
|
+
a_vnary = rb_funcall(tNAryClass, rb_intern("cast"), 1, a_vnary); \
|
|
38
|
+
} \
|
|
39
|
+
if (!RTEST(nary_check_contiguous(a_vnary))) { \
|
|
40
|
+
a_vnary = nary_dup(a_vnary); \
|
|
41
|
+
} \
|
|
42
|
+
if (CLASS_OF(tau_vnary) != tNAryClass) { \
|
|
43
|
+
tau_vnary = rb_funcall(tNAryClass, rb_intern("cast"), 1, tau_vnary); \
|
|
44
|
+
} \
|
|
45
|
+
if (!RTEST(nary_check_contiguous(tau_vnary))) { \
|
|
46
|
+
tau_vnary = nary_dup(tau_vnary); \
|
|
47
|
+
} \
|
|
48
|
+
\
|
|
49
|
+
narray_t* a_nary = NULL; \
|
|
50
|
+
GetNArray(a_vnary, a_nary); \
|
|
51
|
+
if (NA_NDIM(a_nary) != 2) { \
|
|
52
|
+
rb_raise(rb_eArgError, "input array a must be 2-dimensional"); \
|
|
53
|
+
return Qnil; \
|
|
54
|
+
} \
|
|
55
|
+
narray_t* tau_nary = NULL; \
|
|
56
|
+
GetNArray(tau_vnary, tau_nary); \
|
|
57
|
+
if (NA_NDIM(tau_nary) != 1) { \
|
|
58
|
+
rb_raise(rb_eArgError, "input array tau must be 1-dimensional"); \
|
|
59
|
+
return Qnil; \
|
|
60
|
+
} \
|
|
61
|
+
\
|
|
62
|
+
ndfunc_arg_in_t ain[2] = { { OVERWRITE, 2 }, { tNAryClass, 1 } }; \
|
|
63
|
+
ndfunc_arg_out_t aout[1] = { { numo_cInt32, 0 } }; \
|
|
64
|
+
ndfunc_t ndf = { _iter_##fLapackFunc, NO_LOOP | NDF_EXTRACT, 2, 1, ain, aout }; \
|
|
65
|
+
struct _orghr_option opt = { matrix_layout, ilo, ihi }; \
|
|
66
|
+
VALUE res = na_ndloop3(&ndf, &opt, 2, a_vnary, tau_vnary); \
|
|
67
|
+
VALUE ret = rb_ary_new3(2, a_vnary, res); \
|
|
68
|
+
\
|
|
69
|
+
RB_GC_GUARD(a_vnary); \
|
|
70
|
+
RB_GC_GUARD(tau_vnary); \
|
|
71
|
+
return ret; \
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
DEF_LINALG_FUNC(double, numo_cDFloat, dorghr)
|
|
75
|
+
DEF_LINALG_FUNC(float, numo_cSFloat, sorghr)
|
|
76
|
+
|
|
77
|
+
#undef DEF_LINALG_FUNC
|
|
78
|
+
|
|
79
|
+
void define_linalg_lapack_orghr(VALUE mLapack) {
|
|
80
|
+
rb_define_module_function(mLapack, "dorghr", _linalg_lapack_dorghr, -1);
|
|
81
|
+
rb_define_module_function(mLapack, "sorghr", _linalg_lapack_sorghr, -1);
|
|
82
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#ifndef NUMO_LINALG_ALT_LAPACK_ORGHR_H
|
|
2
|
+
#define NUMO_LINALG_ALT_LAPACK_ORGHR_H 1
|
|
3
|
+
|
|
4
|
+
#include <lapacke.h>
|
|
5
|
+
|
|
6
|
+
#include <ruby.h>
|
|
7
|
+
|
|
8
|
+
#include <numo/narray.h>
|
|
9
|
+
#include <numo/template.h>
|
|
10
|
+
|
|
11
|
+
#include "lapack_util.h"
|
|
12
|
+
|
|
13
|
+
void define_linalg_lapack_orghr(VALUE mLapack);
|
|
14
|
+
|
|
15
|
+
#endif /* NUMO_LINALG_ALT_LAPACK_ORGHR_H */
|
|
@@ -26,7 +26,7 @@ struct _syev_option {
|
|
|
26
26
|
ID kw_table[3] = { rb_intern("jobz"), rb_intern("uplo"), rb_intern("order") }; \
|
|
27
27
|
VALUE kw_values[3] = { Qundef, Qundef, Qundef }; \
|
|
28
28
|
rb_get_kwargs(kw_args, kw_table, 0, 3, kw_values); \
|
|
29
|
-
const char jobz = kw_values[0] != Qundef ?
|
|
29
|
+
const char jobz = kw_values[0] != Qundef ? get_job(kw_values[0], "jobz") : 'V'; \
|
|
30
30
|
const char uplo = kw_values[1] != Qundef ? get_uplo(kw_values[1]) : 'U'; \
|
|
31
31
|
const int matrix_layout = \
|
|
32
32
|
kw_values[2] != Qundef ? get_matrix_layout(kw_values[2]) : LAPACK_ROW_MAJOR; \
|
|
@@ -26,7 +26,7 @@ struct _syevd_option {
|
|
|
26
26
|
ID kw_table[3] = { rb_intern("jobz"), rb_intern("uplo"), rb_intern("order") }; \
|
|
27
27
|
VALUE kw_values[3] = { Qundef, Qundef, Qundef }; \
|
|
28
28
|
rb_get_kwargs(kw_args, kw_table, 0, 3, kw_values); \
|
|
29
|
-
const char jobz = kw_values[0] != Qundef ?
|
|
29
|
+
const char jobz = kw_values[0] != Qundef ? get_job(kw_values[0], "jobz") : 'V'; \
|
|
30
30
|
const char uplo = kw_values[1] != Qundef ? get_uplo(kw_values[1]) : 'U'; \
|
|
31
31
|
const int matrix_layout = \
|
|
32
32
|
kw_values[2] != Qundef ? get_matrix_layout(kw_values[2]) : LAPACK_ROW_MAJOR; \
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
rb_intern("iu"), rb_intern("order") }; \
|
|
41
41
|
VALUE kw_values[8] = { Qundef, Qundef, Qundef, Qundef, Qundef, Qundef, Qundef, Qundef }; \
|
|
42
42
|
rb_get_kwargs(kw_args, kw_table, 0, 8, kw_values); \
|
|
43
|
-
const char jobz = kw_values[0] != Qundef ?
|
|
43
|
+
const char jobz = kw_values[0] != Qundef ? get_job(kw_values[0], "jobz") : 'V'; \
|
|
44
44
|
const char range = kw_values[1] != Qundef ? get_range(kw_values[1]) : 'A'; \
|
|
45
45
|
const char uplo = kw_values[2] != Qundef ? get_uplo(kw_values[2]) : 'U'; \
|
|
46
46
|
const tDType vl = kw_values[3] != Qundef ? NUM2DBL(kw_values[3]) : 0.0; \
|
|
@@ -33,7 +33,7 @@ struct _sygv_option {
|
|
|
33
33
|
VALUE kw_values[4] = { Qundef, Qundef, Qundef, Qundef }; \
|
|
34
34
|
rb_get_kwargs(kw_args, kw_table, 0, 4, kw_values); \
|
|
35
35
|
const lapack_int itype = kw_values[0] != Qundef ? get_itype(kw_values[0]) : 1; \
|
|
36
|
-
const char jobz = kw_values[1] != Qundef ?
|
|
36
|
+
const char jobz = kw_values[1] != Qundef ? get_job(kw_values[1], "jobz") : 'V'; \
|
|
37
37
|
const char uplo = kw_values[2] != Qundef ? get_uplo(kw_values[2]) : 'U'; \
|
|
38
38
|
const int matrix_layout = \
|
|
39
39
|
kw_values[3] != Qundef ? get_matrix_layout(kw_values[3]) : LAPACK_ROW_MAJOR; \
|
|
@@ -33,7 +33,7 @@ struct _sygvd_option {
|
|
|
33
33
|
VALUE kw_values[4] = { Qundef, Qundef, Qundef, Qundef }; \
|
|
34
34
|
rb_get_kwargs(kw_args, kw_table, 0, 4, kw_values); \
|
|
35
35
|
const lapack_int itype = kw_values[0] != Qundef ? get_itype(kw_values[0]) : 1; \
|
|
36
|
-
const char jobz = kw_values[1] != Qundef ?
|
|
36
|
+
const char jobz = kw_values[1] != Qundef ? get_job(kw_values[1], "jobz") : 'V'; \
|
|
37
37
|
const char uplo = kw_values[2] != Qundef ? get_uplo(kw_values[2]) : 'U'; \
|
|
38
38
|
const int matrix_layout = \
|
|
39
39
|
kw_values[3] != Qundef ? get_matrix_layout(kw_values[3]) : LAPACK_ROW_MAJOR; \
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
Qundef, Qundef, Qundef, Qundef }; \
|
|
47
47
|
rb_get_kwargs(kw_args, kw_table, 0, 9, kw_values); \
|
|
48
48
|
const lapack_int itype = kw_values[0] != Qundef ? get_itype(kw_values[0]) : 1; \
|
|
49
|
-
const char jobz = kw_values[1] != Qundef ?
|
|
49
|
+
const char jobz = kw_values[1] != Qundef ? get_job(kw_values[1], "jobz") : 'V'; \
|
|
50
50
|
const char range = kw_values[2] != Qundef ? get_range(kw_values[2]) : 'A'; \
|
|
51
51
|
const char uplo = kw_values[3] != Qundef ? get_uplo(kw_values[3]) : 'U'; \
|
|
52
52
|
const tDType vl = kw_values[4] != Qundef ? NUM2DBL(kw_values[4]) : 0.0; \
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#include "unghr.h"
|
|
2
|
+
|
|
3
|
+
struct _unghr_option {
|
|
4
|
+
int matrix_layout;
|
|
5
|
+
int ilo;
|
|
6
|
+
int ihi;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
#define DEF_LINALG_FUNC(tDType, tNAryClass, fLapackFunc) \
|
|
10
|
+
static void _iter_##fLapackFunc(na_loop_t* const lp) { \
|
|
11
|
+
tDType* a = (tDType*)NDL_PTR(lp, 0); \
|
|
12
|
+
tDType* tau = (tDType*)NDL_PTR(lp, 1); \
|
|
13
|
+
int* info = (int*)NDL_PTR(lp, 2); \
|
|
14
|
+
struct _unghr_option* opt = (struct _unghr_option*)(lp->opt_ptr); \
|
|
15
|
+
const lapack_int ilo = opt->ilo; \
|
|
16
|
+
const lapack_int ihi = opt->ihi; \
|
|
17
|
+
const lapack_int n = (lapack_int)NDL_SHAPE(lp, 0)[0]; \
|
|
18
|
+
const lapack_int lda = n; \
|
|
19
|
+
const lapack_int i = LAPACKE_##fLapackFunc(opt->matrix_layout, n, ilo, ihi, a, lda, tau); \
|
|
20
|
+
*info = (int)i; \
|
|
21
|
+
} \
|
|
22
|
+
\
|
|
23
|
+
static VALUE _linalg_lapack_##fLapackFunc(int argc, VALUE* argv, VALUE self) { \
|
|
24
|
+
VALUE a_vnary = Qnil; \
|
|
25
|
+
VALUE tau_vnary = Qnil; \
|
|
26
|
+
VALUE kw_args = Qnil; \
|
|
27
|
+
rb_scan_args(argc, argv, "2:", &a_vnary, &tau_vnary, &kw_args); \
|
|
28
|
+
ID kw_table[3] = { rb_intern("ilo"), rb_intern("ihi"), rb_intern("order") }; \
|
|
29
|
+
VALUE kw_values[3] = { Qundef, Qundef, Qundef }; \
|
|
30
|
+
rb_get_kwargs(kw_args, kw_table, 2, 1, kw_values); \
|
|
31
|
+
const int ilo = NUM2INT(kw_values[0]); \
|
|
32
|
+
const int ihi = NUM2INT(kw_values[1]); \
|
|
33
|
+
const int matrix_layout = \
|
|
34
|
+
kw_values[2] != Qundef ? get_matrix_layout(kw_values[2]) : LAPACK_ROW_MAJOR; \
|
|
35
|
+
\
|
|
36
|
+
if (CLASS_OF(a_vnary) != tNAryClass) { \
|
|
37
|
+
a_vnary = rb_funcall(tNAryClass, rb_intern("cast"), 1, a_vnary); \
|
|
38
|
+
} \
|
|
39
|
+
if (!RTEST(nary_check_contiguous(a_vnary))) { \
|
|
40
|
+
a_vnary = nary_dup(a_vnary); \
|
|
41
|
+
} \
|
|
42
|
+
if (CLASS_OF(tau_vnary) != tNAryClass) { \
|
|
43
|
+
tau_vnary = rb_funcall(tNAryClass, rb_intern("cast"), 1, tau_vnary); \
|
|
44
|
+
} \
|
|
45
|
+
if (!RTEST(nary_check_contiguous(tau_vnary))) { \
|
|
46
|
+
tau_vnary = nary_dup(tau_vnary); \
|
|
47
|
+
} \
|
|
48
|
+
\
|
|
49
|
+
narray_t* a_nary = NULL; \
|
|
50
|
+
GetNArray(a_vnary, a_nary); \
|
|
51
|
+
if (NA_NDIM(a_nary) != 2) { \
|
|
52
|
+
rb_raise(rb_eArgError, "input array a must be 2-dimensional"); \
|
|
53
|
+
return Qnil; \
|
|
54
|
+
} \
|
|
55
|
+
narray_t* tau_nary = NULL; \
|
|
56
|
+
GetNArray(tau_vnary, tau_nary); \
|
|
57
|
+
if (NA_NDIM(tau_nary) != 1) { \
|
|
58
|
+
rb_raise(rb_eArgError, "input array tau must be 1-dimensional"); \
|
|
59
|
+
return Qnil; \
|
|
60
|
+
} \
|
|
61
|
+
\
|
|
62
|
+
ndfunc_arg_in_t ain[2] = { { OVERWRITE, 2 }, { tNAryClass, 1 } }; \
|
|
63
|
+
ndfunc_arg_out_t aout[1] = { { numo_cInt32, 0 } }; \
|
|
64
|
+
ndfunc_t ndf = { _iter_##fLapackFunc, NO_LOOP | NDF_EXTRACT, 2, 1, ain, aout }; \
|
|
65
|
+
struct _unghr_option opt = { matrix_layout, ilo, ihi }; \
|
|
66
|
+
VALUE res = na_ndloop3(&ndf, &opt, 2, a_vnary, tau_vnary); \
|
|
67
|
+
VALUE ret = rb_ary_new3(2, a_vnary, res); \
|
|
68
|
+
\
|
|
69
|
+
RB_GC_GUARD(a_vnary); \
|
|
70
|
+
RB_GC_GUARD(tau_vnary); \
|
|
71
|
+
return ret; \
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
DEF_LINALG_FUNC(lapack_complex_double, numo_cDComplex, zunghr)
|
|
75
|
+
DEF_LINALG_FUNC(lapack_complex_float, numo_cSComplex, cunghr)
|
|
76
|
+
|
|
77
|
+
#undef DEF_LINALG_FUNC
|
|
78
|
+
|
|
79
|
+
void define_linalg_lapack_unghr(VALUE mLapack) {
|
|
80
|
+
rb_define_module_function(mLapack, "zunghr", _linalg_lapack_zunghr, -1);
|
|
81
|
+
rb_define_module_function(mLapack, "cunghr", _linalg_lapack_cunghr, -1);
|
|
82
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#ifndef NUMO_LINALG_ALT_LAPACK_UNGHR_H
|
|
2
|
+
#define NUMO_LINALG_ALT_LAPACK_UNGHR_H 1
|
|
3
|
+
|
|
4
|
+
#include <lapacke.h>
|
|
5
|
+
|
|
6
|
+
#include <ruby.h>
|
|
7
|
+
|
|
8
|
+
#include <numo/narray.h>
|
|
9
|
+
#include <numo/template.h>
|
|
10
|
+
|
|
11
|
+
#include "lapack_util.h"
|
|
12
|
+
|
|
13
|
+
void define_linalg_lapack_unghr(VALUE mLapack);
|
|
14
|
+
|
|
15
|
+
#endif /* NUMO_LINALG_ALT_LAPACK_UNGHR_H */
|
data/ext/numo/linalg/linalg.c
CHANGED
|
@@ -224,8 +224,10 @@ void Init_linalg(void) {
|
|
|
224
224
|
*/
|
|
225
225
|
rb_mLinalgLapack = rb_define_module_under(rb_mLinalg, "Lapack");
|
|
226
226
|
|
|
227
|
+
#ifdef HAVE_OPENBLAS_CONFIG_H
|
|
227
228
|
/* The version of OpenBLAS used in background library. */
|
|
228
229
|
rb_define_const(rb_mLinalg, "OPENBLAS_VERSION", rb_str_new_cstr(OPENBLAS_VERSION));
|
|
230
|
+
#endif
|
|
229
231
|
|
|
230
232
|
/**
|
|
231
233
|
* Returns BLAS char ([sdcz]) defined by data-type of arguments.
|
|
@@ -296,6 +298,9 @@ void Init_linalg(void) {
|
|
|
296
298
|
define_linalg_lapack_sytrf(rb_mLinalgLapack);
|
|
297
299
|
define_linalg_lapack_hetrf(rb_mLinalgLapack);
|
|
298
300
|
define_linalg_lapack_gebal(rb_mLinalgLapack);
|
|
301
|
+
define_linalg_lapack_gehrd(rb_mLinalgLapack);
|
|
302
|
+
define_linalg_lapack_orghr(rb_mLinalgLapack);
|
|
303
|
+
define_linalg_lapack_unghr(rb_mLinalgLapack);
|
|
299
304
|
|
|
300
305
|
rb_define_alias(rb_singleton_class(rb_mLinalgBlas), "znrm2", "dznrm2");
|
|
301
306
|
rb_define_alias(rb_singleton_class(rb_mLinalgBlas), "cnrm2", "scnrm2");
|
data/ext/numo/linalg/linalg.h
CHANGED
|
@@ -35,15 +35,23 @@
|
|
|
35
35
|
|
|
36
36
|
#include <ruby.h>
|
|
37
37
|
|
|
38
|
-
#include <cblas.h>
|
|
39
|
-
#include <lapacke.h>
|
|
40
|
-
#include <openblas_config.h>
|
|
41
|
-
|
|
42
38
|
#include <numo/narray.h>
|
|
43
39
|
#include <numo/template.h>
|
|
44
40
|
|
|
45
|
-
#
|
|
46
|
-
#
|
|
41
|
+
#ifndef _DEFINED_SCOMPLEX
|
|
42
|
+
#define _DEFINED_SCOMPLEX 1
|
|
43
|
+
#endif
|
|
44
|
+
#ifndef _DEFINED_DCOMPLEX
|
|
45
|
+
#define _DEFINED_DCOMPLEX 1
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
#include <cblas.h>
|
|
49
|
+
#include <lapacke.h>
|
|
50
|
+
|
|
51
|
+
#include "extconf.h"
|
|
52
|
+
#ifdef HAVE_OPENBLAS_CONFIG_H
|
|
53
|
+
#include <openblas_config.h>
|
|
54
|
+
#endif
|
|
47
55
|
|
|
48
56
|
#include "blas/dot.h"
|
|
49
57
|
#include "blas/dot_sub.h"
|
|
@@ -54,6 +62,7 @@
|
|
|
54
62
|
#include "lapack/gebal.h"
|
|
55
63
|
#include "lapack/gees.h"
|
|
56
64
|
#include "lapack/geev.h"
|
|
65
|
+
#include "lapack/gehrd.h"
|
|
57
66
|
#include "lapack/gelsd.h"
|
|
58
67
|
#include "lapack/geqrf.h"
|
|
59
68
|
#include "lapack/gerqf.h"
|
|
@@ -72,6 +81,7 @@
|
|
|
72
81
|
#include "lapack/hegvx.h"
|
|
73
82
|
#include "lapack/hetrf.h"
|
|
74
83
|
#include "lapack/lange.h"
|
|
84
|
+
#include "lapack/orghr.h"
|
|
75
85
|
#include "lapack/orgqr.h"
|
|
76
86
|
#include "lapack/orgrq.h"
|
|
77
87
|
#include "lapack/potrf.h"
|
|
@@ -85,6 +95,7 @@
|
|
|
85
95
|
#include "lapack/sygvx.h"
|
|
86
96
|
#include "lapack/sytrf.h"
|
|
87
97
|
#include "lapack/trtrs.h"
|
|
98
|
+
#include "lapack/unghr.h"
|
|
88
99
|
#include "lapack/ungqr.h"
|
|
89
100
|
#include "lapack/ungrq.h"
|
|
90
101
|
|