numo-liblinear 0.3.0 → 1.1.1

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: 0ae7bd5566c47d6b045d596945bf7b4b84955b22
4
- data.tar.gz: 13dc445acfcf11c6097dedbbf25544f19810cb60
2
+ SHA256:
3
+ metadata.gz: 582af5c3cacbe43a05329bd6d355a89c4bff8ac52aceacedb50a20ae61703dd0
4
+ data.tar.gz: c522cd810baa4f5b57065a52675479ea9ad563b32d2608e03f42639b929a6753
5
5
  SHA512:
6
- metadata.gz: 4dac8c681d092896a0d1947ed3374d4400ea224c3bc18c4fd2ebfa65aa504181e7c01f3ffb68452d92bb22bbe54fc61e831b9bc7197da26cf3908df8b59d9fc3
7
- data.tar.gz: 9b2a82a5a087a1f86113c10be3a11880b03357bb9e3b91191291f2824e26c672c542a7401a69638aefc3ef36a7bcee51bbdfcebad010f0f50c66460aa5e99fac
6
+ metadata.gz: 4b1d93cbcadf64aa4eddb44f47b1d0725d6002201393b8dc926f8288214609b140381beaa1ed09a47180a640c0d9b93612b5d2d1fb70c1c81c74caebcc1fc7de
7
+ data.tar.gz: 3d254a3ca1ab5075c1b5a5cc84a64e40473d7e8575368f5eface0585eaa52eaa6c515fd7f43be4460c82b7aad7e95e02982a8c1e45c06cbe550266da8dee6db2
@@ -0,0 +1,27 @@
1
+ name: build
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ ruby: [ '2.5', '2.6', '2.7' ]
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - name: Checkout submodule
14
+ shell: bash
15
+ run: |
16
+ auth_header="$(git config --local --get http.https://github.com/.extraheader)"
17
+ git submodule sync --recursive
18
+ git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
19
+ - name: Set up Ruby ${{ matrix.ruby }}
20
+ uses: actions/setup-ruby@v1
21
+ with:
22
+ ruby-version: ${{ matrix.ruby }}
23
+ - name: Build and test with Rake
24
+ run: |
25
+ gem install bundler
26
+ bundle install --jobs 4 --retry 3
27
+ bundle exec rake
@@ -0,0 +1,3 @@
1
+ [submodule "ext/numo/liblinear/liblinear"]
2
+ path = ext/numo/liblinear/liblinear
3
+ url = https://github.com/cjlin1/liblinear
@@ -1,3 +1,23 @@
1
+ # 1.1.1
2
+ - Add GC guard codes.
3
+ - Fix some configuration files.
4
+
5
+ # 1.1.0
6
+ - Update bundled LIBLINEAR version to 2.4.1.
7
+ - Support one-class SVM implemented on LIBLINEAR ver. 2.4.0.
8
+
9
+ # 1.0.0
10
+ ## Breaking change
11
+ - For easy installation, Numo::LIBLINEAR bundles LIBLINEAR codes.
12
+ There is no need to install LIBLINEAR in advance to use Numo::LIBLINEAR.
13
+
14
+ # 0.5.0
15
+ - Fix to use LIBLINEAR sparce vector representation for internal processing.
16
+
17
+ # 0.4.0
18
+ - Add verbose parameter to output learning process messages.
19
+ - Several documentation improvements.
20
+
1
21
  # 0.3.0
2
22
  - Add random_seed parameter for specifying seed to give to srand function.
3
23
  - Several documentation improvements.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2019 Atsushi Tatsuma
1
+ Copyright (c) 2019-2021 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
@@ -1,9 +1,9 @@
1
1
  # Numo::Liblinear
2
2
 
3
- [![Build Status](https://travis-ci.org/yoshoku/numo-liblinear.svg?branch=master)](https://travis-ci.org/yoshoku/numo-liblinear)
3
+ [![Build Status](https://github.com/yoshoku/numo-liblinear/workflows/build/badge.svg)](https://github.com/yoshoku/numo-liblinear/actions?query=workflow%3Abuild)
4
4
  [![Gem Version](https://badge.fury.io/rb/numo-liblinear.svg)](https://badge.fury.io/rb/numo-liblinear)
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.3.0)
5
+ [![BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-orange.svg)](https://github.com/yoshoku/numo-liblinear/blob/main/LICENSE.txt)
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
 
@@ -156,30 +148,26 @@ Accuracy: 87.9 %
156
148
  ## Note
157
149
  The hyperparemter of LIBLINEAR is given with Ruby Hash on Numo::Liblinear.
158
150
  The hash key of hyperparameter and its meaning match the struct parameter of LIBLINEAR.
159
- The parameter is detailed in [LIBLINEAR README](https://github.com/cjlin1/liblinear/blob/master/README)
151
+ The parameter is detailed in [LIBLINEAR README](https://github.com/cjlin1/liblinear/blob/main/README)
160
152
 
161
153
  ```ruby
162
154
  param = {
163
155
  solver_type: # [Integer] Type of Solver
164
156
  Numo::Liblinear::SolverType::L2R_L2LOSS_SVC_DUAL,
165
157
  eps: 0.01, # [Float] Stopping criterion
166
- C: 1, # [Float] Cost of constraints violation.
167
- nr_weight: 3, # [Integer] Number of weights.
168
- weight_label: # [Numo::Int32] Labels to add weight.
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
169
161
  Numo::Int32[0, 1, 2],
170
- weight: # [Numo::DFloat] Weight values.
162
+ weight: # [Numo::DFloat] Weight values
171
163
  Numo::DFloat[0.4, 0.4, 0.2],
172
- p: 0.1, # [Float] Sensitiveness of loss of support vector regression.
164
+ p: 0.1, # [Float] Sensitiveness of loss of support vector regression
165
+ nu: 0.5, # [Float] one-class SVM approximates the fraction of data as outliers
166
+ verbose: false, # [Boolean] Whether to output learning process message
173
167
  random_seed: 1 # [Integer/Nil] Random seed
174
168
  }
175
169
  ```
176
170
 
177
- ## Development
178
-
179
- 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.
180
-
181
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
182
-
183
171
  ## Contributing
184
172
 
185
173
  Bug reports and pull requests are welcome on GitHub at https://github.com/yoshoku/numo-liblinear.
@@ -188,4 +176,4 @@ This project is intended to be a safe, welcoming space for collaboration, and co
188
176
  ## Code of Conduct
189
177
 
190
178
  Everyone interacting in the Numo::Liblinear project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow
191
- the [code of conduct](https://github.com/yoshoku/numo-liblinear/blob/master/CODE_OF_CONDUCT.md).
179
+ the [code of conduct](https://github.com/yoshoku/numo-liblinear/blob/main/CODE_OF_CONDUCT.md).
@@ -27,6 +27,8 @@ int* nary_to_int_vec(VALUE vec_val)
27
27
  vec_pt = (int32_t*)na_get_pointer_for_read(vec_val);
28
28
  for (i = 0; i < n_elements; i++) { vec[i] = (int)vec_pt[i]; }
29
29
 
30
+ RB_GC_GUARD(vec_val);
31
+
30
32
  return vec;
31
33
  }
32
34
 
@@ -56,6 +58,8 @@ double* nary_to_dbl_vec(VALUE vec_val)
56
58
  vec_pt = (double*)na_get_pointer_for_read(vec_val);
57
59
  memcpy(vec, vec_pt, n_elements * sizeof(double));
58
60
 
61
+ RB_GC_GUARD(vec_val);
62
+
59
63
  return vec;
60
64
  }
61
65
 
@@ -98,5 +102,32 @@ double** nary_to_dbl_mat(VALUE mat_val)
98
102
  }
99
103
  }
100
104
 
105
+ RB_GC_GUARD(mat_val);
106
+
101
107
  return mat;
102
108
  }
109
+
110
+ struct feature_node* dbl_vec_to_node(double* const arr, int const size)
111
+ {
112
+ int i, j;
113
+ int n_nonzero_elements;
114
+ struct feature_node* node;
115
+
116
+ n_nonzero_elements = 0;
117
+ for (i = 0; i < size; i++) {
118
+ if (arr[i] != 0.0) n_nonzero_elements++;
119
+ }
120
+
121
+ node = ALLOC_N(struct feature_node, n_nonzero_elements + 1);
122
+ for (i = 0, j = 0; i < size; i++) {
123
+ if (arr[i] != 0.0) {
124
+ node[j].index = i + 1;
125
+ node[j].value = arr[i];
126
+ j++;
127
+ }
128
+ }
129
+ node[n_nonzero_elements].index = -1;
130
+ node[n_nonzero_elements].value = 0.0;
131
+
132
+ return node;
133
+ }
@@ -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