numo-liblinear 0.2.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3bf71a14ccac359b6dffce32a5a5d3c784ef9efa
4
- data.tar.gz: 6af9f95c6b28c11b06fc0b10628a37e9397564c5
2
+ SHA256:
3
+ metadata.gz: 4e69ca89df0a86fdc4be7d1a3074a4722ead3997a6f7ba2fff84b48c6d1c36ea
4
+ data.tar.gz: 992d8f8606dbf272ac18c1f6502e923d69ce3242d6cb35a460b3856cace29671
5
5
  SHA512:
6
- metadata.gz: 18e64c5d487cab2636216425e45fd8eeaefa0f14026068d3678f0d8d643aea00acf867aa64ba510a62d4c343408a9e22bace2a0347a7b7aba7ddd872f2bbc579
7
- data.tar.gz: 43e16f69a931aab7a45163f1909e307f3334ef88f4e45ed79e5513b288804d5c0dfcbb92ef79642bb7c40e70bcdffe6f47548a2cad10351da3585dd48f0a84db
6
+ metadata.gz: 46f453f5b9ee23640a7131d92d3f666806e182265654cec321ebae22c97ae6af06a5b35726e4ab0cfde96407d0fb828391a2c5578c3e27644c487df66432cce8
7
+ data.tar.gz: d1e0fc15d4227491823fe4ed8f631c491e6cd4c8fb9c078ccf230785e2881fa12134dbfca9e84069bd8d995c140523bfc0572cbaa38761b114d162015dea5be1
@@ -0,0 +1,3 @@
1
+ [submodule "ext/numo/liblinear/liblinear"]
2
+ path = ext/numo/liblinear/liblinear
3
+ url = https://github.com/cjlin1/liblinear
@@ -8,7 +8,7 @@ rvm:
8
8
  - '2.4'
9
9
  - '2.5'
10
10
  - '2.6'
11
+ - '2.7'
11
12
 
12
13
  before_install:
13
- - sudo apt-get install -y liblinear-dev
14
14
  - gem install bundler -v 2.0.2
@@ -1,5 +1,25 @@
1
+ # 1.1.0
2
+ - Update bundled LIBLINEAR version to 2.4.1.
3
+ - Support one-class SVM implemented on LIBLINEAR ver. 2.4.0.
4
+
5
+ # 1.0.0
6
+ ## Breaking change
7
+ - For easy installation, Numo::LIBLINEAR bundles LIBLINEAR codes.
8
+ There is no need to install LIBLINEAR in advance to use Numo::LIBLINEAR.
9
+
10
+ # 0.5.0
11
+ - Fix to use LIBLINEAR sparce vector representation for internal processing.
12
+
13
+ # 0.4.0
14
+ - Add verbose parameter to output learning process messages.
15
+ - Several documentation improvements.
16
+
17
+ # 0.3.0
18
+ - Add random_seed parameter for specifying seed to give to srand function.
19
+ - Several documentation improvements.
20
+
1
21
  # 0.2.0
2
- - Add valation of method parameters.
22
+ - Add validation of method parameters.
3
23
  - Several documentation improvements.
4
24
 
5
25
  # 0.1.0
@@ -1,4 +1,4 @@
1
- Copyright (c) 2019 Atsushi Tatsuma
1
+ Copyright (c) 2019-2020 Atsushi Tatsuma
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Build Status](https://travis-ci.org/yoshoku/numo-liblinear.svg?branch=master)](https://travis-ci.org/yoshoku/numo-liblinear)
4
4
  [![Gem Version](https://badge.fury.io/rb/numo-liblinear.svg)](https://badge.fury.io/rb/numo-liblinear)
5
5
  [![BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-orange.svg)](https://github.com/yoshoku/numo-liblinear/blob/master/LICENSE.txt)
6
- [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](https://www.rubydoc.info/gems/numo-liblinear/0.2.0)
6
+ [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](https://yoshoku.github.io/numo-liblinear/doc/)
7
7
 
8
8
  Numo::Liblinear is a Ruby gem binding to the [LIBLINEAR](https://www.csie.ntu.edu.tw/~cjlin/liblinear/) library.
9
9
  LIBLINEAR is one of the famous libraries for large-scale regularized linear classification and regression.
@@ -15,15 +15,7 @@ Note: There are other useful Ruby gems binding to LIBLINEAR:
15
15
  [liblinear-ruby-swig](https://github.com/tomz/liblinear-ruby-swig) by Tom Zeng.
16
16
 
17
17
  ## Installation
18
- Numo::Liblinear does not bundle LIBLINEAR. You need to install LIBLINEAR in advance along your environment.
19
-
20
- macOS:
21
-
22
- $ brew install liblinear
23
-
24
- Ubuntu:
25
-
26
- $ sudo apt-get install liblinear-dev
18
+ Numo::Liblinear bundles LIBLINEAR. There is no need to install LIBLINEAR in advance.
27
19
 
28
20
  Add this line to your application's Gemfile:
29
21
 
@@ -153,6 +145,28 @@ Predict labels.
153
145
  Accuracy: 87.9 %
154
146
  ```
155
147
 
148
+ ## Note
149
+ The hyperparemter of LIBLINEAR is given with Ruby Hash on Numo::Liblinear.
150
+ The hash key of hyperparameter and its meaning match the struct parameter of LIBLINEAR.
151
+ The parameter is detailed in [LIBLINEAR README](https://github.com/cjlin1/liblinear/blob/master/README)
152
+
153
+ ```ruby
154
+ param = {
155
+ solver_type: # [Integer] Type of Solver
156
+ Numo::Liblinear::SolverType::L2R_L2LOSS_SVC_DUAL,
157
+ eps: 0.01, # [Float] Stopping criterion
158
+ C: 1, # [Float] Cost of constraints violation
159
+ nr_weight: 3, # [Integer] Number of weights
160
+ weight_label: # [Numo::Int32] Labels to add weight
161
+ Numo::Int32[0, 1, 2],
162
+ weight: # [Numo::DFloat] Weight values
163
+ Numo::DFloat[0.4, 0.4, 0.2],
164
+ p: 0.1, # [Float] Sensitiveness of loss of support vector regression
165
+ verbose: false, # [Boolean] Whether to output learning process message
166
+ random_seed: 1 # [Integer/Nil] Random seed
167
+ }
168
+ ```
169
+
156
170
  ## Development
157
171
 
158
172
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -100,3 +100,28 @@ double** nary_to_dbl_mat(VALUE mat_val)
100
100
 
101
101
  return mat;
102
102
  }
103
+
104
+ struct feature_node* dbl_vec_to_node(double* const arr, int const size)
105
+ {
106
+ int i, j;
107
+ int n_nonzero_elements;
108
+ struct feature_node* node;
109
+
110
+ n_nonzero_elements = 0;
111
+ for (i = 0; i < size; i++) {
112
+ if (arr[i] != 0.0) n_nonzero_elements++;
113
+ }
114
+
115
+ node = ALLOC_N(struct feature_node, n_nonzero_elements + 1);
116
+ for (i = 0, j = 0; i < size; i++) {
117
+ if (arr[i] != 0.0) {
118
+ node[j].index = i + 1;
119
+ node[j].value = arr[i];
120
+ j++;
121
+ }
122
+ }
123
+ node[n_nonzero_elements].index = -1;
124
+ node[n_nonzero_elements].value = 0.0;
125
+
126
+ return node;
127
+ }
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include <string.h>
5
5
  #include <ruby.h>
6
+ #include <linear.h>
6
7
  #include <numo/narray.h>
7
8
  #include <numo/template.h>
8
9
 
@@ -12,5 +13,6 @@ VALUE dbl_vec_to_nary(double* const arr, int const size);
12
13
  double* nary_to_dbl_vec(VALUE vec_val);
13
14
  VALUE dbl_mat_to_nary(double** const mat, int const n_rows, int const n_cols);
14
15
  double** nary_to_dbl_mat(VALUE mat_val);
16
+ struct feature_node* dbl_vec_to_node(double* const arr, int const size);
15
17
 
16
18
  #endif /* NUMO_LIBLINEAR_CONVERTER_H */
@@ -26,14 +26,13 @@ if RUBY_PLATFORM =~ /mswin|cygwin|mingw/
26
26
  end
27
27
  end
28
28
 
29
- unless have_header('linear.h')
30
- puts 'linear.h not found.'
31
- exit(1)
32
- end
29
+ $LDFLAGS << ' -lstdc++ '
33
30
 
34
- unless have_library('linear')
35
- puts 'liblinear not found.'
36
- exit(1)
37
- end
31
+ $srcs = Dir.glob("#{$srcdir}/*.c").map { |path| File.basename(path) }
32
+ $srcs.concat(%w[linear.cpp newton.cpp daxpy.c ddot.c dnrm2.c dscal.c])
33
+
34
+ $INCFLAGS << " -I$(srcdir)/liblinear"
35
+ $VPATH << "$(srcdir)/liblinear"
36
+ $VPATH << "$(srcdir)/liblinear/blas"
38
37
 
39
38
  create_makefile('numo/liblinear/liblinearext')
@@ -0,0 +1,25 @@
1
+ /* blas.h -- C header file for BLAS Ver 1.0 */
2
+ /* Jesse Bennett March 23, 2000 */
3
+
4
+ /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed."
5
+
6
+ - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */
7
+
8
+ #ifndef BLAS_INCLUDE
9
+ #define BLAS_INCLUDE
10
+
11
+ /* Data types specific to BLAS implementation */
12
+ typedef struct { float r, i; } fcomplex;
13
+ typedef struct { double r, i; } dcomplex;
14
+ typedef int blasbool;
15
+
16
+ #include "blasp.h" /* Prototypes for all BLAS functions */
17
+
18
+ #define FALSE 0
19
+ #define TRUE 1
20
+
21
+ /* Macro functions */
22
+ #define MIN(a,b) ((a) <= (b) ? (a) : (b))
23
+ #define MAX(a,b) ((a) >= (b) ? (a) : (b))
24
+
25
+ #endif
@@ -0,0 +1,438 @@
1
+ /* blasp.h -- C prototypes for BLAS Ver 1.0 */
2
+ /* Jesse Bennett March 23, 2000 */
3
+
4
+ /* Functions listed in alphabetical order */
5
+
6
+ #ifdef __cplusplus
7
+ extern "C" {
8
+ #endif
9
+
10
+ #ifdef F2C_COMPAT
11
+
12
+ void cdotc_(fcomplex *dotval, int *n, fcomplex *cx, int *incx,
13
+ fcomplex *cy, int *incy);
14
+
15
+ void cdotu_(fcomplex *dotval, int *n, fcomplex *cx, int *incx,
16
+ fcomplex *cy, int *incy);
17
+
18
+ double sasum_(int *n, float *sx, int *incx);
19
+
20
+ double scasum_(int *n, fcomplex *cx, int *incx);
21
+
22
+ double scnrm2_(int *n, fcomplex *x, int *incx);
23
+
24
+ double sdot_(int *n, float *sx, int *incx, float *sy, int *incy);
25
+
26
+ double snrm2_(int *n, float *x, int *incx);
27
+
28
+ void zdotc_(dcomplex *dotval, int *n, dcomplex *cx, int *incx,
29
+ dcomplex *cy, int *incy);
30
+
31
+ void zdotu_(dcomplex *dotval, int *n, dcomplex *cx, int *incx,
32
+ dcomplex *cy, int *incy);
33
+
34
+ #else
35
+
36
+ fcomplex cdotc_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);
37
+
38
+ fcomplex cdotu_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);
39
+
40
+ float sasum_(int *n, float *sx, int *incx);
41
+
42
+ float scasum_(int *n, fcomplex *cx, int *incx);
43
+
44
+ float scnrm2_(int *n, fcomplex *x, int *incx);
45
+
46
+ float sdot_(int *n, float *sx, int *incx, float *sy, int *incy);
47
+
48
+ float snrm2_(int *n, float *x, int *incx);
49
+
50
+ dcomplex zdotc_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);
51
+
52
+ dcomplex zdotu_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);
53
+
54
+ #endif
55
+
56
+ /* Remaining functions listed in alphabetical order */
57
+
58
+ int caxpy_(int *n, fcomplex *ca, fcomplex *cx, int *incx, fcomplex *cy,
59
+ int *incy);
60
+
61
+ int ccopy_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);
62
+
63
+ int cgbmv_(char *trans, int *m, int *n, int *kl, int *ku,
64
+ fcomplex *alpha, fcomplex *a, int *lda, fcomplex *x, int *incx,
65
+ fcomplex *beta, fcomplex *y, int *incy);
66
+
67
+ int cgemm_(char *transa, char *transb, int *m, int *n, int *k,
68
+ fcomplex *alpha, fcomplex *a, int *lda, fcomplex *b, int *ldb,
69
+ fcomplex *beta, fcomplex *c, int *ldc);
70
+
71
+ int cgemv_(char *trans, int *m, int *n, fcomplex *alpha, fcomplex *a,
72
+ int *lda, fcomplex *x, int *incx, fcomplex *beta, fcomplex *y,
73
+ int *incy);
74
+
75
+ int cgerc_(int *m, int *n, fcomplex *alpha, fcomplex *x, int *incx,
76
+ fcomplex *y, int *incy, fcomplex *a, int *lda);
77
+
78
+ int cgeru_(int *m, int *n, fcomplex *alpha, fcomplex *x, int *incx,
79
+ fcomplex *y, int *incy, fcomplex *a, int *lda);
80
+
81
+ int chbmv_(char *uplo, int *n, int *k, fcomplex *alpha, fcomplex *a,
82
+ int *lda, fcomplex *x, int *incx, fcomplex *beta, fcomplex *y,
83
+ int *incy);
84
+
85
+ int chemm_(char *side, char *uplo, int *m, int *n, fcomplex *alpha,
86
+ fcomplex *a, int *lda, fcomplex *b, int *ldb, fcomplex *beta,
87
+ fcomplex *c, int *ldc);
88
+
89
+ int chemv_(char *uplo, int *n, fcomplex *alpha, fcomplex *a, int *lda,
90
+ fcomplex *x, int *incx, fcomplex *beta, fcomplex *y, int *incy);
91
+
92
+ int cher_(char *uplo, int *n, float *alpha, fcomplex *x, int *incx,
93
+ fcomplex *a, int *lda);
94
+
95
+ int cher2_(char *uplo, int *n, fcomplex *alpha, fcomplex *x, int *incx,
96
+ fcomplex *y, int *incy, fcomplex *a, int *lda);
97
+
98
+ int cher2k_(char *uplo, char *trans, int *n, int *k, fcomplex *alpha,
99
+ fcomplex *a, int *lda, fcomplex *b, int *ldb, float *beta,
100
+ fcomplex *c, int *ldc);
101
+
102
+ int cherk_(char *uplo, char *trans, int *n, int *k, float *alpha,
103
+ fcomplex *a, int *lda, float *beta, fcomplex *c, int *ldc);
104
+
105
+ int chpmv_(char *uplo, int *n, fcomplex *alpha, fcomplex *ap, fcomplex *x,
106
+ int *incx, fcomplex *beta, fcomplex *y, int *incy);
107
+
108
+ int chpr_(char *uplo, int *n, float *alpha, fcomplex *x, int *incx,
109
+ fcomplex *ap);
110
+
111
+ int chpr2_(char *uplo, int *n, fcomplex *alpha, fcomplex *x, int *incx,
112
+ fcomplex *y, int *incy, fcomplex *ap);
113
+
114
+ int crotg_(fcomplex *ca, fcomplex *cb, float *c, fcomplex *s);
115
+
116
+ int cscal_(int *n, fcomplex *ca, fcomplex *cx, int *incx);
117
+
118
+ int csscal_(int *n, float *sa, fcomplex *cx, int *incx);
119
+
120
+ int cswap_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);
121
+
122
+ int csymm_(char *side, char *uplo, int *m, int *n, fcomplex *alpha,
123
+ fcomplex *a, int *lda, fcomplex *b, int *ldb, fcomplex *beta,
124
+ fcomplex *c, int *ldc);
125
+
126
+ int csyr2k_(char *uplo, char *trans, int *n, int *k, fcomplex *alpha,
127
+ fcomplex *a, int *lda, fcomplex *b, int *ldb, fcomplex *beta,
128
+ fcomplex *c, int *ldc);
129
+
130
+ int csyrk_(char *uplo, char *trans, int *n, int *k, fcomplex *alpha,
131
+ fcomplex *a, int *lda, fcomplex *beta, fcomplex *c, int *ldc);
132
+
133
+ int ctbmv_(char *uplo, char *trans, char *diag, int *n, int *k,
134
+ fcomplex *a, int *lda, fcomplex *x, int *incx);
135
+
136
+ int ctbsv_(char *uplo, char *trans, char *diag, int *n, int *k,
137
+ fcomplex *a, int *lda, fcomplex *x, int *incx);
138
+
139
+ int ctpmv_(char *uplo, char *trans, char *diag, int *n, fcomplex *ap,
140
+ fcomplex *x, int *incx);
141
+
142
+ int ctpsv_(char *uplo, char *trans, char *diag, int *n, fcomplex *ap,
143
+ fcomplex *x, int *incx);
144
+
145
+ int ctrmm_(char *side, char *uplo, char *transa, char *diag, int *m,
146
+ int *n, fcomplex *alpha, fcomplex *a, int *lda, fcomplex *b,
147
+ int *ldb);
148
+
149
+ int ctrmv_(char *uplo, char *trans, char *diag, int *n, fcomplex *a,
150
+ int *lda, fcomplex *x, int *incx);
151
+
152
+ int ctrsm_(char *side, char *uplo, char *transa, char *diag, int *m,
153
+ int *n, fcomplex *alpha, fcomplex *a, int *lda, fcomplex *b,
154
+ int *ldb);
155
+
156
+ int ctrsv_(char *uplo, char *trans, char *diag, int *n, fcomplex *a,
157
+ int *lda, fcomplex *x, int *incx);
158
+
159
+ int daxpy_(int *n, double *sa, double *sx, int *incx, double *sy,
160
+ int *incy);
161
+
162
+ int dcopy_(int *n, double *sx, int *incx, double *sy, int *incy);
163
+
164
+ int dgbmv_(char *trans, int *m, int *n, int *kl, int *ku,
165
+ double *alpha, double *a, int *lda, double *x, int *incx,
166
+ double *beta, double *y, int *incy);
167
+
168
+ int dgemm_(char *transa, char *transb, int *m, int *n, int *k,
169
+ double *alpha, double *a, int *lda, double *b, int *ldb,
170
+ double *beta, double *c, int *ldc);
171
+
172
+ int dgemv_(char *trans, int *m, int *n, double *alpha, double *a,
173
+ int *lda, double *x, int *incx, double *beta, double *y,
174
+ int *incy);
175
+
176
+ int dger_(int *m, int *n, double *alpha, double *x, int *incx,
177
+ double *y, int *incy, double *a, int *lda);
178
+
179
+ int drot_(int *n, double *sx, int *incx, double *sy, int *incy,
180
+ double *c, double *s);
181
+
182
+ int drotg_(double *sa, double *sb, double *c, double *s);
183
+
184
+ int dsbmv_(char *uplo, int *n, int *k, double *alpha, double *a,
185
+ int *lda, double *x, int *incx, double *beta, double *y,
186
+ int *incy);
187
+
188
+ int dscal_(int *n, double *sa, double *sx, int *incx);
189
+
190
+ int dspmv_(char *uplo, int *n, double *alpha, double *ap, double *x,
191
+ int *incx, double *beta, double *y, int *incy);
192
+
193
+ int dspr_(char *uplo, int *n, double *alpha, double *x, int *incx,
194
+ double *ap);
195
+
196
+ int dspr2_(char *uplo, int *n, double *alpha, double *x, int *incx,
197
+ double *y, int *incy, double *ap);
198
+
199
+ int dswap_(int *n, double *sx, int *incx, double *sy, int *incy);
200
+
201
+ int dsymm_(char *side, char *uplo, int *m, int *n, double *alpha,
202
+ double *a, int *lda, double *b, int *ldb, double *beta,
203
+ double *c, int *ldc);
204
+
205
+ int dsymv_(char *uplo, int *n, double *alpha, double *a, int *lda,
206
+ double *x, int *incx, double *beta, double *y, int *incy);
207
+
208
+ int dsyr_(char *uplo, int *n, double *alpha, double *x, int *incx,
209
+ double *a, int *lda);
210
+
211
+ int dsyr2_(char *uplo, int *n, double *alpha, double *x, int *incx,
212
+ double *y, int *incy, double *a, int *lda);
213
+
214
+ int dsyr2k_(char *uplo, char *trans, int *n, int *k, double *alpha,
215
+ double *a, int *lda, double *b, int *ldb, double *beta,
216
+ double *c, int *ldc);
217
+
218
+ int dsyrk_(char *uplo, char *trans, int *n, int *k, double *alpha,
219
+ double *a, int *lda, double *beta, double *c, int *ldc);
220
+
221
+ int dtbmv_(char *uplo, char *trans, char *diag, int *n, int *k,
222
+ double *a, int *lda, double *x, int *incx);
223
+
224
+ int dtbsv_(char *uplo, char *trans, char *diag, int *n, int *k,
225
+ double *a, int *lda, double *x, int *incx);
226
+
227
+ int dtpmv_(char *uplo, char *trans, char *diag, int *n, double *ap,
228
+ double *x, int *incx);
229
+
230
+ int dtpsv_(char *uplo, char *trans, char *diag, int *n, double *ap,
231
+ double *x, int *incx);
232
+
233
+ int dtrmm_(char *side, char *uplo, char *transa, char *diag, int *m,
234
+ int *n, double *alpha, double *a, int *lda, double *b,
235
+ int *ldb);
236
+
237
+ int dtrmv_(char *uplo, char *trans, char *diag, int *n, double *a,
238
+ int *lda, double *x, int *incx);
239
+
240
+ int dtrsm_(char *side, char *uplo, char *transa, char *diag, int *m,
241
+ int *n, double *alpha, double *a, int *lda, double *b,
242
+ int *ldb);
243
+
244
+ int dtrsv_(char *uplo, char *trans, char *diag, int *n, double *a,
245
+ int *lda, double *x, int *incx);
246
+
247
+
248
+ int saxpy_(int *n, float *sa, float *sx, int *incx, float *sy, int *incy);
249
+
250
+ int scopy_(int *n, float *sx, int *incx, float *sy, int *incy);
251
+
252
+ int sgbmv_(char *trans, int *m, int *n, int *kl, int *ku,
253
+ float *alpha, float *a, int *lda, float *x, int *incx,
254
+ float *beta, float *y, int *incy);
255
+
256
+ int sgemm_(char *transa, char *transb, int *m, int *n, int *k,
257
+ float *alpha, float *a, int *lda, float *b, int *ldb,
258
+ float *beta, float *c, int *ldc);
259
+
260
+ int sgemv_(char *trans, int *m, int *n, float *alpha, float *a,
261
+ int *lda, float *x, int *incx, float *beta, float *y,
262
+ int *incy);
263
+
264
+ int sger_(int *m, int *n, float *alpha, float *x, int *incx,
265
+ float *y, int *incy, float *a, int *lda);
266
+
267
+ int srot_(int *n, float *sx, int *incx, float *sy, int *incy,
268
+ float *c, float *s);
269
+
270
+ int srotg_(float *sa, float *sb, float *c, float *s);
271
+
272
+ int ssbmv_(char *uplo, int *n, int *k, float *alpha, float *a,
273
+ int *lda, float *x, int *incx, float *beta, float *y,
274
+ int *incy);
275
+
276
+ int sscal_(int *n, float *sa, float *sx, int *incx);
277
+
278
+ int sspmv_(char *uplo, int *n, float *alpha, float *ap, float *x,
279
+ int *incx, float *beta, float *y, int *incy);
280
+
281
+ int sspr_(char *uplo, int *n, float *alpha, float *x, int *incx,
282
+ float *ap);
283
+
284
+ int sspr2_(char *uplo, int *n, float *alpha, float *x, int *incx,
285
+ float *y, int *incy, float *ap);
286
+
287
+ int sswap_(int *n, float *sx, int *incx, float *sy, int *incy);
288
+
289
+ int ssymm_(char *side, char *uplo, int *m, int *n, float *alpha,
290
+ float *a, int *lda, float *b, int *ldb, float *beta,
291
+ float *c, int *ldc);
292
+
293
+ int ssymv_(char *uplo, int *n, float *alpha, float *a, int *lda,
294
+ float *x, int *incx, float *beta, float *y, int *incy);
295
+
296
+ int ssyr_(char *uplo, int *n, float *alpha, float *x, int *incx,
297
+ float *a, int *lda);
298
+
299
+ int ssyr2_(char *uplo, int *n, float *alpha, float *x, int *incx,
300
+ float *y, int *incy, float *a, int *lda);
301
+
302
+ int ssyr2k_(char *uplo, char *trans, int *n, int *k, float *alpha,
303
+ float *a, int *lda, float *b, int *ldb, float *beta,
304
+ float *c, int *ldc);
305
+
306
+ int ssyrk_(char *uplo, char *trans, int *n, int *k, float *alpha,
307
+ float *a, int *lda, float *beta, float *c, int *ldc);
308
+
309
+ int stbmv_(char *uplo, char *trans, char *diag, int *n, int *k,
310
+ float *a, int *lda, float *x, int *incx);
311
+
312
+ int stbsv_(char *uplo, char *trans, char *diag, int *n, int *k,
313
+ float *a, int *lda, float *x, int *incx);
314
+
315
+ int stpmv_(char *uplo, char *trans, char *diag, int *n, float *ap,
316
+ float *x, int *incx);
317
+
318
+ int stpsv_(char *uplo, char *trans, char *diag, int *n, float *ap,
319
+ float *x, int *incx);
320
+
321
+ int strmm_(char *side, char *uplo, char *transa, char *diag, int *m,
322
+ int *n, float *alpha, float *a, int *lda, float *b,
323
+ int *ldb);
324
+
325
+ int strmv_(char *uplo, char *trans, char *diag, int *n, float *a,
326
+ int *lda, float *x, int *incx);
327
+
328
+ int strsm_(char *side, char *uplo, char *transa, char *diag, int *m,
329
+ int *n, float *alpha, float *a, int *lda, float *b,
330
+ int *ldb);
331
+
332
+ int strsv_(char *uplo, char *trans, char *diag, int *n, float *a,
333
+ int *lda, float *x, int *incx);
334
+
335
+ int zaxpy_(int *n, dcomplex *ca, dcomplex *cx, int *incx, dcomplex *cy,
336
+ int *incy);
337
+
338
+ int zcopy_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);
339
+
340
+ int zdscal_(int *n, double *sa, dcomplex *cx, int *incx);
341
+
342
+ int zgbmv_(char *trans, int *m, int *n, int *kl, int *ku,
343
+ dcomplex *alpha, dcomplex *a, int *lda, dcomplex *x, int *incx,
344
+ dcomplex *beta, dcomplex *y, int *incy);
345
+
346
+ int zgemm_(char *transa, char *transb, int *m, int *n, int *k,
347
+ dcomplex *alpha, dcomplex *a, int *lda, dcomplex *b, int *ldb,
348
+ dcomplex *beta, dcomplex *c, int *ldc);
349
+
350
+ int zgemv_(char *trans, int *m, int *n, dcomplex *alpha, dcomplex *a,
351
+ int *lda, dcomplex *x, int *incx, dcomplex *beta, dcomplex *y,
352
+ int *incy);
353
+
354
+ int zgerc_(int *m, int *n, dcomplex *alpha, dcomplex *x, int *incx,
355
+ dcomplex *y, int *incy, dcomplex *a, int *lda);
356
+
357
+ int zgeru_(int *m, int *n, dcomplex *alpha, dcomplex *x, int *incx,
358
+ dcomplex *y, int *incy, dcomplex *a, int *lda);
359
+
360
+ int zhbmv_(char *uplo, int *n, int *k, dcomplex *alpha, dcomplex *a,
361
+ int *lda, dcomplex *x, int *incx, dcomplex *beta, dcomplex *y,
362
+ int *incy);
363
+
364
+ int zhemm_(char *side, char *uplo, int *m, int *n, dcomplex *alpha,
365
+ dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *beta,
366
+ dcomplex *c, int *ldc);
367
+
368
+ int zhemv_(char *uplo, int *n, dcomplex *alpha, dcomplex *a, int *lda,
369
+ dcomplex *x, int *incx, dcomplex *beta, dcomplex *y, int *incy);
370
+
371
+ int zher_(char *uplo, int *n, double *alpha, dcomplex *x, int *incx,
372
+ dcomplex *a, int *lda);
373
+
374
+ int zher2_(char *uplo, int *n, dcomplex *alpha, dcomplex *x, int *incx,
375
+ dcomplex *y, int *incy, dcomplex *a, int *lda);
376
+
377
+ int zher2k_(char *uplo, char *trans, int *n, int *k, dcomplex *alpha,
378
+ dcomplex *a, int *lda, dcomplex *b, int *ldb, double *beta,
379
+ dcomplex *c, int *ldc);
380
+
381
+ int zherk_(char *uplo, char *trans, int *n, int *k, double *alpha,
382
+ dcomplex *a, int *lda, double *beta, dcomplex *c, int *ldc);
383
+
384
+ int zhpmv_(char *uplo, int *n, dcomplex *alpha, dcomplex *ap, dcomplex *x,
385
+ int *incx, dcomplex *beta, dcomplex *y, int *incy);
386
+
387
+ int zhpr_(char *uplo, int *n, double *alpha, dcomplex *x, int *incx,
388
+ dcomplex *ap);
389
+
390
+ int zhpr2_(char *uplo, int *n, dcomplex *alpha, dcomplex *x, int *incx,
391
+ dcomplex *y, int *incy, dcomplex *ap);
392
+
393
+ int zrotg_(dcomplex *ca, dcomplex *cb, double *c, dcomplex *s);
394
+
395
+ int zscal_(int *n, dcomplex *ca, dcomplex *cx, int *incx);
396
+
397
+ int zswap_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);
398
+
399
+ int zsymm_(char *side, char *uplo, int *m, int *n, dcomplex *alpha,
400
+ dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *beta,
401
+ dcomplex *c, int *ldc);
402
+
403
+ int zsyr2k_(char *uplo, char *trans, int *n, int *k, dcomplex *alpha,
404
+ dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *beta,
405
+ dcomplex *c, int *ldc);
406
+
407
+ int zsyrk_(char *uplo, char *trans, int *n, int *k, dcomplex *alpha,
408
+ dcomplex *a, int *lda, dcomplex *beta, dcomplex *c, int *ldc);
409
+
410
+ int ztbmv_(char *uplo, char *trans, char *diag, int *n, int *k,
411
+ dcomplex *a, int *lda, dcomplex *x, int *incx);
412
+
413
+ int ztbsv_(char *uplo, char *trans, char *diag, int *n, int *k,
414
+ dcomplex *a, int *lda, dcomplex *x, int *incx);
415
+
416
+ int ztpmv_(char *uplo, char *trans, char *diag, int *n, dcomplex *ap,
417
+ dcomplex *x, int *incx);
418
+
419
+ int ztpsv_(char *uplo, char *trans, char *diag, int *n, dcomplex *ap,
420
+ dcomplex *x, int *incx);
421
+
422
+ int ztrmm_(char *side, char *uplo, char *transa, char *diag, int *m,
423
+ int *n, dcomplex *alpha, dcomplex *a, int *lda, dcomplex *b,
424
+ int *ldb);
425
+
426
+ int ztrmv_(char *uplo, char *trans, char *diag, int *n, dcomplex *a,
427
+ int *lda, dcomplex *x, int *incx);
428
+
429
+ int ztrsm_(char *side, char *uplo, char *transa, char *diag, int *m,
430
+ int *n, dcomplex *alpha, dcomplex *a, int *lda, dcomplex *b,
431
+ int *ldb);
432
+
433
+ int ztrsv_(char *uplo, char *trans, char *diag, int *n, dcomplex *a,
434
+ int *lda, dcomplex *x, int *incx);
435
+
436
+ #ifdef __cplusplus
437
+ }
438
+ #endif