linalg 1.0.2

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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +24 -0
  3. data/ext/g2c_typedefs.h +5 -0
  4. data/ext/lapack/extconf.rb +309 -0
  5. data/ext/lapack/include/BLAS.h +154 -0
  6. data/ext/lapack/include/LAPACK.h +1314 -0
  7. data/ext/lapack/main.c +49 -0
  8. data/ext/lapack/rb_lapack.h +36 -0
  9. data/ext/lapack/rb_lapack_c.c +11614 -0
  10. data/ext/lapack/rb_lapack_d.c +12663 -0
  11. data/ext/lapack/rb_lapack_s.c +12649 -0
  12. data/ext/lapack/rb_lapack_x.c +208 -0
  13. data/ext/lapack/rb_lapack_z.c +11614 -0
  14. data/ext/linalg/dcomplex.c +359 -0
  15. data/ext/linalg/dcomplex.h +40 -0
  16. data/ext/linalg/ddata.c +194 -0
  17. data/ext/linalg/extconf.rb +324 -0
  18. data/ext/linalg/linalg.c +55 -0
  19. data/ext/linalg/linalg.h +21 -0
  20. data/ext/linalg/xdata.c +21 -0
  21. data/ext/linalg/xdata.h +33 -0
  22. data/ext/linalg/xmatrix.c.tmpl +1630 -0
  23. data/ext/linalg/xmatrix.h.tmpl +77 -0
  24. data/ext/linalg/xmatrixc.c.tmpl +138 -0
  25. data/ext/linalg/xmatrixr.c.tmpl +130 -0
  26. data/lib/lapack.rb +87 -0
  27. data/lib/linalg.rb +9 -0
  28. data/lib/linalg/dcomplex.rb +17 -0
  29. data/lib/linalg/dmatrix.rb +29 -0
  30. data/lib/linalg/dmatrix/alias.rb +32 -0
  31. data/lib/linalg/dmatrix/cholesky.rb +52 -0
  32. data/lib/linalg/dmatrix/cond.rb +80 -0
  33. data/lib/linalg/dmatrix/det.rb +36 -0
  34. data/lib/linalg/dmatrix/eigen.rb +153 -0
  35. data/lib/linalg/dmatrix/fit.rb +281 -0
  36. data/lib/linalg/dmatrix/inverse.rb +78 -0
  37. data/lib/linalg/dmatrix/lu.rb +120 -0
  38. data/lib/linalg/dmatrix/main.rb +244 -0
  39. data/lib/linalg/dmatrix/norms.rb +88 -0
  40. data/lib/linalg/dmatrix/nullspace.rb +114 -0
  41. data/lib/linalg/dmatrix/qr.rb +129 -0
  42. data/lib/linalg/dmatrix/schur.rb +88 -0
  43. data/lib/linalg/dmatrix/solve.rb +78 -0
  44. data/lib/linalg/dmatrix/svd.rb +125 -0
  45. data/lib/linalg/exception.rb +32 -0
  46. data/lib/linalg/iterators.rb +221 -0
  47. data/lib/linalg/math.rb +23 -0
  48. data/lib/linalg/scomplex.rb +15 -0
  49. data/lib/linalg/version.rb +3 -0
  50. data/lib/linalg/xdata.rb +123 -0
  51. metadata +94 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 90308570ba2bd52acca9489497ecf195ac1dccda
4
+ data.tar.gz: 98273ca4701588085a03034fc04fd286289770c0
5
+ SHA512:
6
+ metadata.gz: 86139429d64a55b96f1d3c509797bc1b189e3e75e4c30629dce989b7284d5f706bbea878fcbe99bd90c96df88f9a7e2db825c52167ae145b9db699b78f544298
7
+ data.tar.gz: 78239441788657d0ea82dcc46ac891ac5fbbb5e78c59c1ab9f8c311fb8d4cdce182dbd9213b966003ac5282f5f7c927c6d62cfd017d0c6de9b1dd45e76e8e7c6
data/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+
2
+ "linalg -- Ruby Linear Algebra Package" is copyrighted free software
3
+ by James M. Lawrence. Distributed under the MIT license.
4
+
5
+ Copyright (c) 2004-2008 James M. Lawrence
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining
8
+ a copy of this software and associated documentation files (the
9
+ "Software"), to deal in the Software without restriction, including
10
+ without limitation the rights to use, copy, modify, merge, publish,
11
+ distribute, sublicense, and/or sell copies of the Software, and to
12
+ permit persons to whom the Software is furnished to do so, subject to
13
+ the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be
16
+ included in all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,5 @@
1
+ typedef int __g77_integer;
2
+ typedef unsigned int __g77_uinteger;
3
+ typedef long int __g77_longint;
4
+ typedef unsigned long int __g77_ulongint;
5
+
@@ -0,0 +1,309 @@
1
+ #
2
+ # Copyright (c) 2004-2008 by James M. Lawrence
3
+ #
4
+ # See LICENSE
5
+ #
6
+
7
+ require 'mkmf'
8
+ require 'enumerator'
9
+
10
+ module Enumerable
11
+ def map_with_index
12
+ arr = []
13
+ each_with_index { |e, i|
14
+ arr << yield(e, i)
15
+ }
16
+ arr
17
+ end
18
+ end
19
+
20
+ class Integer
21
+ def enum
22
+ enum_for(:times)
23
+ end
24
+ end
25
+
26
+ module GenerateHeader
27
+ def self.write(dir, outname, version = nil)
28
+ outname = File.expand_path(outname)
29
+ Dir.chdir(dir) {
30
+ Dir.glob('*.P') { |f| File.unlink(f) }
31
+ if system("f2c -R -P -\!c *.f")
32
+ File.open(outname, "w") { |outfile|
33
+ macro = File.basename(outname.upcase.gsub(".","_"))
34
+ outfile.puts "#ifndef #{macro}"
35
+ outfile.puts "#define #{macro}"
36
+ outfile.puts "/* version #{version} */ " if version
37
+ outfile.puts "/* generated #{Time.now} */"
38
+ outfile.puts
39
+ Dir.glob('*.P') { |pname|
40
+ File.open(pname) { |pfile|
41
+ pfile.each { |line|
42
+ next unless line =~ %r!^extern!
43
+
44
+ # I don't understand why f2c inserts these ftnlen params
45
+ while line.gsub!(%r!, ftnlen [a-z]+_len\)!, ")") ; end
46
+
47
+ outfile.write line
48
+ }
49
+ }
50
+ }
51
+
52
+ outfile.puts
53
+ outfile.puts "#endif"
54
+ }
55
+ end
56
+ }
57
+ end
58
+ end
59
+
60
+ module ScanHeader
61
+ extend self
62
+
63
+ def ctype_canonical_form(ctype)
64
+ ctype.gsub(%r!\*!, " * ").gsub(%r!\s+!, " ").strip
65
+ end
66
+
67
+ def parse_prototype(s, argnames = true)
68
+ func, args = s.strip.gsub(%r!\s+!, " ").split(%r![\(\)]!)
69
+ ret, name =
70
+ func.
71
+ strip.
72
+ match(%r!^(\w[*\s\w]*[*\s])(\w+)$!).
73
+ captures
74
+ desc = {}
75
+ desc[:name] = name
76
+ desc[:return] = ctype_canonical_form(ret)
77
+ desc[:args] = []
78
+ unless args == "" or args.strip == "void"
79
+ args.split(",").each { |arg|
80
+ arg.sub!(%r!\w+\s*$!, "") if argnames
81
+ desc[:args].push(ctype_canonical_form(arg))
82
+ }
83
+ end
84
+ desc
85
+ end
86
+
87
+ def scan_header_io(io, ppdefs = nil)
88
+ s = io.read
89
+ s.gsub!(%r!^\s*\#.*$!, "")
90
+ s.gsub!(%r!//.*$!, "")
91
+ s.gsub!(%r!/\*.*?\*/!m, "")
92
+ if ppdefs
93
+ s.gsub!(%r!\w+!) { |word|
94
+ if ppdefs[word]
95
+ ppdefs[word]
96
+ else
97
+ word
98
+ end
99
+ }
100
+ end
101
+ s.scan(%r!\w[*\w\s]*?\w+\s*\(.*?\)\s*\;!m) { |func|
102
+ yield parse_prototype(func)
103
+ }
104
+ end
105
+
106
+ def scan_header(header, ppdefs = nil, &block)
107
+ File.open(header) { |file|
108
+ scan_header_io(file, ppdefs, &block)
109
+ }
110
+ end
111
+ end
112
+
113
+ module FunctionDB
114
+ def self.read
115
+ db = {}
116
+
117
+ cppdefs = {
118
+ "extern" => "",
119
+
120
+ # these are in f2c.h
121
+ "C_f" => "void",
122
+ "Z_f" => "void",
123
+ }
124
+
125
+ ["include/LAPACK.h", "include/BLAS.h"].each { |filename|
126
+ print "reading #{filename}..."
127
+ ScanHeader.scan_header(filename, cppdefs) { |desc|
128
+ db[desc[:name]] = desc
129
+ }
130
+ puts "ok"
131
+ }
132
+
133
+ db
134
+ end
135
+ end
136
+
137
+ module Lapack_c
138
+ extend self
139
+
140
+ def write(db)
141
+ {
142
+
143
+ :s => /^s/,
144
+ :d => /^d/,
145
+ :c => /^c/,
146
+ :z => /^z/,
147
+ :x => /^[^sdcz]/,
148
+
149
+ }.each_pair { |letter, regex|
150
+ part = {}
151
+ db.keys.grep(regex).each { |key|
152
+ part[key] = db.delete(key)
153
+ }
154
+
155
+ write_file(part,
156
+ "rb_lapack_#{letter}",
157
+ "define_lapack_#{letter}")
158
+ }
159
+ end
160
+
161
+ def write_file(db, filename, funcname)
162
+ File.open("#{filename}.c", "w+") { |file|
163
+ file.puts %{#include "rb_lapack.h"\n\n}
164
+ db.keys.sort.each { |func|
165
+ Lapack_c.write_function(db[func], file)
166
+ }
167
+
168
+ file.puts "void #{funcname}()\n{\n"
169
+
170
+ db.keys.sort.each { |func|
171
+ file.puts <<EOS
172
+ rb_define_singleton_method(rb_cLapack,
173
+ "#{func.sub(%r!_$!, "")}",
174
+ #{Lapack_c.rbname(func)},
175
+ #{-1}) ;
176
+ EOS
177
+ }
178
+
179
+ file.puts "\n}"
180
+ }
181
+ end
182
+
183
+ def rbname(name)
184
+ "rb_" + name.sub(%r!_$!, "")
185
+ end
186
+
187
+ def write_function(desc, out)
188
+ rbname = rbname(desc[:name])
189
+ args = ['int argc', 'VALUE *argv', 'VALUE self']
190
+ conv = desc[:args].map { |type|
191
+ "to_" + case type
192
+ when %r!^(\w+)$!
193
+ $1
194
+ when %r!^(\w+)\s*\*$!
195
+ "#{$1}_ptr"
196
+ else
197
+ raise "unknown arg type in #{desc[:name]}: '#{type}'"
198
+ end.gsub(" ","_")
199
+ }
200
+ assign = desc[:args].map_with_index { |type, i|
201
+ "#{type} p#{i} = (#{type})NUM2ULONG(rb_funcall(v#{i}, #{conv[i]}, 0))"
202
+ }
203
+ ftncall = desc[:name] + "(" + desc[:args].size.enum.inject("") { |acc, i|
204
+ acc + "p#{i}, "
205
+ }.chop.chop + ")"
206
+ ret = if desc[:return] =~ %r!^void$!i
207
+ "#{ftncall} ; return Qnil ;"
208
+ else
209
+ "return " +
210
+ case desc[:return]
211
+ when %r!(^real$|^doublereal$)!
212
+ "rb_float_new((double)"
213
+ when %r!(^int|^logical$)!
214
+ "LONG2NUM((long)"
215
+ else
216
+ raise "unknown type return type in #{desc[:name]}: #{desc[:return]}"
217
+ end +
218
+ "#{ftncall})"
219
+ end
220
+ define_values = []
221
+ (0..desc[:args].size).map do |j|
222
+ define_values << "VALUE v#{j};"
223
+ end
224
+
225
+ out.puts <<EOS
226
+ VALUE #{rbname}(#{args.join(",")})
227
+ {
228
+ #{define_values.join("\n ") }
229
+ rb_scan_args(argc, argv, "#{desc[:args].size}*", #{(0..desc[:args].size).map{ |j| "&v#{j}" }.join(', ') });
230
+ #{assign.join(" ;\n ")} ;
231
+
232
+ #{ret} ;
233
+ }
234
+
235
+ EOS
236
+ end
237
+ end
238
+
239
+ module PullCode
240
+ def self.pull(sofile, *reps)
241
+ `nm -D #{sofile}`.each { |line|
242
+ line =~ %r!U (\w+)!
243
+ next unless $1
244
+ func = $1
245
+ reps.each { |d|
246
+ d = d.sub %r!/$!, ""
247
+ [
248
+ "#{d}/#{func}.c",
249
+ d + "/" + func.sub(%r!_$!, "") + ".c",
250
+ ].each { |fname|
251
+ if FileTest.exist? fname
252
+ FileUtils.cp fname, "."
253
+ puts "-->copied #{fname}"
254
+ break
255
+ end
256
+ }
257
+ }
258
+ }
259
+ end
260
+ end
261
+
262
+ module Main
263
+ extend self
264
+
265
+ def genheader(*args)
266
+ GenerateHeader.write(*args)
267
+ end
268
+
269
+ def pull(*args)
270
+ PullCode.pull(*args)
271
+ end
272
+
273
+ def write_c
274
+ db = FunctionDB.read
275
+ Lapack_c.write(db)
276
+ end
277
+
278
+ def config
279
+ unless have_header("f2c.h") and
280
+ have_library("blas") and
281
+ have_library("lapack")
282
+ puts "A full LAPACK installation was not found."
283
+ exit(-1)
284
+ end
285
+
286
+ $distcleanfiles = [
287
+ "rb_lapack_s.c",
288
+ "rb_lapack_d.c",
289
+ "rb_lapack_c.c",
290
+ "rb_lapack_z.c",
291
+ "rb_lapack_x.c",
292
+ ]
293
+ end
294
+
295
+ def create
296
+ create_makefile("lapack")
297
+ end
298
+
299
+ STDOUT.sync = true
300
+ action = ARGV.shift
301
+
302
+ if action
303
+ send(action, *ARGV)
304
+ else
305
+ config
306
+ write_c
307
+ create
308
+ end
309
+ end
@@ -0,0 +1,154 @@
1
+ /*
2
+ * Copyright (c) 2004-2008 by James M. Lawrence
3
+ *
4
+ * See LICENSE
5
+ *
6
+ */
7
+ #ifndef BLAS_H
8
+ #define BLAS_H
9
+ /* version 20031025 */
10
+ /* generated Fri Jun 04 05:58:15 EDT 2004-2008 */
11
+
12
+ extern int caxpy_(integer *n, complex *ca, complex *cx, integer *incx, complex *cy, integer *incy);
13
+ extern int ccopy_(integer *n, complex *cx, integer *incx, complex *cy, integer *incy);
14
+ extern C_f cdotc_(complex * ret_val, integer *n, complex *cx, integer *incx, complex *cy, integer *incy);
15
+ extern C_f cdotu_(complex * ret_val, integer *n, complex *cx, integer *incx, complex *cy, integer *incy);
16
+ extern int cgbmv_(char *trans, integer *m, integer *n, integer *kl, integer *ku, complex *alpha, complex *a, integer *lda, complex *x, integer *incx, complex *beta, complex *y, integer *incy);
17
+ extern int cgemm_(char *transa, char *transb, integer *m, integer *n, integer *k, complex *alpha, complex *a, integer *lda, complex *b, integer *ldb, complex *beta, complex *c__, integer *ldc);
18
+ extern int cgemv_(char *trans, integer *m, integer *n, complex *alpha, complex *a, integer *lda, complex *x, integer *incx, complex *beta, complex *y, integer *incy);
19
+ extern int cgerc_(integer *m, integer *n, complex *alpha, complex *x, integer *incx, complex *y, integer *incy, complex *a, integer *lda);
20
+ extern int cgeru_(integer *m, integer *n, complex *alpha, complex *x, integer *incx, complex *y, integer *incy, complex *a, integer *lda);
21
+ extern int chbmv_(char *uplo, integer *n, integer *k, complex *alpha, complex *a, integer *lda, complex *x, integer *incx, complex *beta, complex *y, integer *incy);
22
+ extern int chemm_(char *side, char *uplo, integer *m, integer *n, complex *alpha, complex *a, integer *lda, complex *b, integer *ldb, complex *beta, complex *c__, integer *ldc);
23
+ extern int chemv_(char *uplo, integer *n, complex *alpha, complex *a, integer *lda, complex *x, integer *incx, complex *beta, complex *y, integer *incy);
24
+ extern int cher_(char *uplo, integer *n, real *alpha, complex *x, integer *incx, complex *a, integer *lda);
25
+ extern int cher2_(char *uplo, integer *n, complex *alpha, complex *x, integer *incx, complex *y, integer *incy, complex *a, integer *lda);
26
+ extern int cher2k_(char *uplo, char *trans, integer *n, integer *k, complex *alpha, complex *a, integer *lda, complex *b, integer *ldb, real *beta, complex *c__, integer *ldc);
27
+ extern int cherk_(char *uplo, char *trans, integer *n, integer *k, real *alpha, complex *a, integer *lda, real *beta, complex *c__, integer *ldc);
28
+ extern int chpmv_(char *uplo, integer *n, complex *alpha, complex *ap, complex *x, integer *incx, complex *beta, complex *y, integer *incy);
29
+ extern int chpr_(char *uplo, integer *n, real *alpha, complex *x, integer *incx, complex *ap);
30
+ extern int chpr2_(char *uplo, integer *n, complex *alpha, complex *x, integer *incx, complex *y, integer *incy, complex *ap);
31
+ extern int crotg_(complex *ca, complex *cb, real *c__, complex *s);
32
+ extern int cscal_(integer *n, complex *ca, complex *cx, integer *incx);
33
+ extern int csscal_(integer *n, real *sa, complex *cx, integer *incx);
34
+ extern int cswap_(integer *n, complex *cx, integer *incx, complex *cy, integer *incy);
35
+ extern int csymm_(char *side, char *uplo, integer *m, integer *n, complex *alpha, complex *a, integer *lda, complex *b, integer *ldb, complex *beta, complex *c__, integer *ldc);
36
+ extern int csyr2k_(char *uplo, char *trans, integer *n, integer *k, complex *alpha, complex *a, integer *lda, complex *b, integer *ldb, complex *beta, complex *c__, integer *ldc);
37
+ extern int csyrk_(char *uplo, char *trans, integer *n, integer *k, complex *alpha, complex *a, integer *lda, complex *beta, complex *c__, integer *ldc);
38
+ extern int ctbmv_(char *uplo, char *trans, char *diag, integer *n, integer *k, complex *a, integer *lda, complex *x, integer *incx);
39
+ extern int ctbsv_(char *uplo, char *trans, char *diag, integer *n, integer *k, complex *a, integer *lda, complex *x, integer *incx);
40
+ extern int ctpmv_(char *uplo, char *trans, char *diag, integer *n, complex *ap, complex *x, integer *incx);
41
+ extern int ctpsv_(char *uplo, char *trans, char *diag, integer *n, complex *ap, complex *x, integer *incx);
42
+ extern int ctrmm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, complex *alpha, complex *a, integer *lda, complex *b, integer *ldb);
43
+ extern int ctrmv_(char *uplo, char *trans, char *diag, integer *n, complex *a, integer *lda, complex *x, integer *incx);
44
+ extern int ctrsm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, complex *alpha, complex *a, integer *lda, complex *b, integer *ldb);
45
+ extern int ctrsv_(char *uplo, char *trans, char *diag, integer *n, complex *a, integer *lda, complex *x, integer *incx);
46
+ extern doublereal dasum_(integer *n, doublereal *dx, integer *incx);
47
+ extern int daxpy_(integer *n, doublereal *da, doublereal *dx, integer *incx, doublereal *dy, integer *incy);
48
+ extern doublereal dcabs1_(doublecomplex *z__);
49
+ extern int dcopy_(integer *n, doublereal *dx, integer *incx, doublereal *dy, integer *incy);
50
+ extern doublereal ddot_(integer *n, doublereal *dx, integer *incx, doublereal *dy, integer *incy);
51
+ extern int dgbmv_(char *trans, integer *m, integer *n, integer *kl, integer *ku, doublereal *alpha, doublereal *a, integer *lda, doublereal *x, integer *incx, doublereal *beta, doublereal *y, integer *incy);
52
+ extern int dgemm_(char *transa, char *transb, integer *m, integer *n, integer *k, doublereal *alpha, doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *beta, doublereal *c__, integer *ldc);
53
+ extern int dgemv_(char *trans, integer *m, integer *n, doublereal *alpha, doublereal *a, integer *lda, doublereal *x, integer *incx, doublereal *beta, doublereal *y, integer *incy);
54
+ extern int dger_(integer *m, integer *n, doublereal *alpha, doublereal *x, integer *incx, doublereal *y, integer *incy, doublereal *a, integer *lda);
55
+ extern doublereal dnrm2_(integer *n, doublereal *x, integer *incx);
56
+ extern int drot_(integer *n, doublereal *dx, integer *incx, doublereal *dy, integer *incy, doublereal *c__, doublereal *s);
57
+ extern int drotg_(doublereal *da, doublereal *db, doublereal *c__, doublereal *s);
58
+ extern int dsbmv_(char *uplo, integer *n, integer *k, doublereal *alpha, doublereal *a, integer *lda, doublereal *x, integer *incx, doublereal *beta, doublereal *y, integer *incy);
59
+ extern int dscal_(integer *n, doublereal *da, doublereal *dx, integer *incx);
60
+ extern int dspmv_(char *uplo, integer *n, doublereal *alpha, doublereal *ap, doublereal *x, integer *incx, doublereal *beta, doublereal *y, integer *incy);
61
+ extern int dspr_(char *uplo, integer *n, doublereal *alpha, doublereal *x, integer *incx, doublereal *ap);
62
+ extern int dspr2_(char *uplo, integer *n, doublereal *alpha, doublereal *x, integer *incx, doublereal *y, integer *incy, doublereal *ap);
63
+ extern int dswap_(integer *n, doublereal *dx, integer *incx, doublereal *dy, integer *incy);
64
+ extern int dsymm_(char *side, char *uplo, integer *m, integer *n, doublereal *alpha, doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *beta, doublereal *c__, integer *ldc);
65
+ extern int dsymv_(char *uplo, integer *n, doublereal *alpha, doublereal *a, integer *lda, doublereal *x, integer *incx, doublereal *beta, doublereal *y, integer *incy);
66
+ extern int dsyr_(char *uplo, integer *n, doublereal *alpha, doublereal *x, integer *incx, doublereal *a, integer *lda);
67
+ extern int dsyr2_(char *uplo, integer *n, doublereal *alpha, doublereal *x, integer *incx, doublereal *y, integer *incy, doublereal *a, integer *lda);
68
+ extern int dsyr2k_(char *uplo, char *trans, integer *n, integer *k, doublereal *alpha, doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *beta, doublereal *c__, integer *ldc);
69
+ extern int dsyrk_(char *uplo, char *trans, integer *n, integer *k, doublereal *alpha, doublereal *a, integer *lda, doublereal *beta, doublereal *c__, integer *ldc);
70
+ extern int dtbmv_(char *uplo, char *trans, char *diag, integer *n, integer *k, doublereal *a, integer *lda, doublereal *x, integer *incx);
71
+ extern int dtbsv_(char *uplo, char *trans, char *diag, integer *n, integer *k, doublereal *a, integer *lda, doublereal *x, integer *incx);
72
+ extern int dtpmv_(char *uplo, char *trans, char *diag, integer *n, doublereal *ap, doublereal *x, integer *incx);
73
+ extern int dtpsv_(char *uplo, char *trans, char *diag, integer *n, doublereal *ap, doublereal *x, integer *incx);
74
+ extern int dtrmm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, doublereal *alpha, doublereal *a, integer *lda, doublereal *b, integer *ldb);
75
+ extern int dtrmv_(char *uplo, char *trans, char *diag, integer *n, doublereal *a, integer *lda, doublereal *x, integer *incx);
76
+ extern int dtrsm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, doublereal *alpha, doublereal *a, integer *lda, doublereal *b, integer *ldb);
77
+ extern int dtrsv_(char *uplo, char *trans, char *diag, integer *n, doublereal *a, integer *lda, doublereal *x, integer *incx);
78
+ extern doublereal dzasum_(integer *n, doublecomplex *zx, integer *incx);
79
+ extern doublereal dznrm2_(integer *n, doublecomplex *x, integer *incx);
80
+ extern integer icamax_(integer *n, complex *cx, integer *incx);
81
+ extern integer idamax_(integer *n, doublereal *dx, integer *incx);
82
+ extern integer isamax_(integer *n, real *sx, integer *incx);
83
+ extern integer izamax_(integer *n, doublecomplex *zx, integer *incx);
84
+ extern logical lsame_(char *ca, char *cb);
85
+ extern real sasum_(integer *n, real *sx, integer *incx);
86
+ extern int saxpy_(integer *n, real *sa, real *sx, integer *incx, real *sy, integer *incy);
87
+ extern real scasum_(integer *n, complex *cx, integer *incx);
88
+ extern real scnrm2_(integer *n, complex *x, integer *incx);
89
+ extern int scopy_(integer *n, real *sx, integer *incx, real *sy, integer *incy);
90
+ extern real sdot_(integer *n, real *sx, integer *incx, real *sy, integer *incy);
91
+ extern int sgbmv_(char *trans, integer *m, integer *n, integer *kl, integer *ku, real *alpha, real *a, integer *lda, real *x, integer *incx, real *beta, real *y, integer *incy);
92
+ extern int sgemm_(char *transa, char *transb, integer *m, integer *n, integer *k, real *alpha, real *a, integer *lda, real *b, integer *ldb, real *beta, real *c__, integer *ldc);
93
+ extern int sgemv_(char *trans, integer *m, integer *n, real *alpha, real *a, integer *lda, real *x, integer *incx, real *beta, real *y, integer *incy);
94
+ extern int sger_(integer *m, integer *n, real *alpha, real *x, integer *incx, real *y, integer *incy, real *a, integer *lda);
95
+ extern real snrm2_(integer *n, real *x, integer *incx);
96
+ extern int srot_(integer *n, real *sx, integer *incx, real *sy, integer *incy, real *c__, real *s);
97
+ extern int srotg_(real *sa, real *sb, real *c__, real *s);
98
+ extern int ssbmv_(char *uplo, integer *n, integer *k, real *alpha, real *a, integer *lda, real *x, integer *incx, real *beta, real *y, integer *incy);
99
+ extern int sscal_(integer *n, real *sa, real *sx, integer *incx);
100
+ extern int sspmv_(char *uplo, integer *n, real *alpha, real *ap, real *x, integer *incx, real *beta, real *y, integer *incy);
101
+ extern int sspr_(char *uplo, integer *n, real *alpha, real *x, integer *incx, real *ap);
102
+ extern int sspr2_(char *uplo, integer *n, real *alpha, real *x, integer *incx, real *y, integer *incy, real *ap);
103
+ extern int sswap_(integer *n, real *sx, integer *incx, real *sy, integer *incy);
104
+ extern int ssymm_(char *side, char *uplo, integer *m, integer *n, real *alpha, real *a, integer *lda, real *b, integer *ldb, real *beta, real *c__, integer *ldc);
105
+ extern int ssymv_(char *uplo, integer *n, real *alpha, real *a, integer *lda, real *x, integer *incx, real *beta, real *y, integer *incy);
106
+ extern int ssyr_(char *uplo, integer *n, real *alpha, real *x, integer *incx, real *a, integer *lda);
107
+ extern int ssyr2_(char *uplo, integer *n, real *alpha, real *x, integer *incx, real *y, integer *incy, real *a, integer *lda);
108
+ extern int ssyr2k_(char *uplo, char *trans, integer *n, integer *k, real *alpha, real *a, integer *lda, real *b, integer *ldb, real *beta, real *c__, integer *ldc);
109
+ extern int ssyrk_(char *uplo, char *trans, integer *n, integer *k, real *alpha, real *a, integer *lda, real *beta, real *c__, integer *ldc);
110
+ extern int stbmv_(char *uplo, char *trans, char *diag, integer *n, integer *k, real *a, integer *lda, real *x, integer *incx);
111
+ extern int stbsv_(char *uplo, char *trans, char *diag, integer *n, integer *k, real *a, integer *lda, real *x, integer *incx);
112
+ extern int stpmv_(char *uplo, char *trans, char *diag, integer *n, real *ap, real *x, integer *incx);
113
+ extern int stpsv_(char *uplo, char *trans, char *diag, integer *n, real *ap, real *x, integer *incx);
114
+ extern int strmm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, real *alpha, real *a, integer *lda, real *b, integer *ldb);
115
+ extern int strmv_(char *uplo, char *trans, char *diag, integer *n, real *a, integer *lda, real *x, integer *incx);
116
+ extern int strsm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, real *alpha, real *a, integer *lda, real *b, integer *ldb);
117
+ extern int strsv_(char *uplo, char *trans, char *diag, integer *n, real *a, integer *lda, real *x, integer *incx);
118
+ extern int xerbla_(char *srname, integer *info);
119
+ extern int zaxpy_(integer *n, doublecomplex *za, doublecomplex *zx, integer *incx, doublecomplex *zy, integer *incy);
120
+ extern int zcopy_(integer *n, doublecomplex *zx, integer *incx, doublecomplex *zy, integer *incy);
121
+ extern Z_f zdotc_(doublecomplex * ret_val, integer *n, doublecomplex *zx, integer *incx, doublecomplex *zy, integer *incy);
122
+ extern Z_f zdotu_(doublecomplex * ret_val, integer *n, doublecomplex *zx, integer *incx, doublecomplex *zy, integer *incy);
123
+ extern int zdscal_(integer *n, doublereal *da, doublecomplex *zx, integer *incx);
124
+ extern int zgbmv_(char *trans, integer *m, integer *n, integer *kl, integer *ku, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx, doublecomplex *beta, doublecomplex *y, integer *incy);
125
+ extern int zgemm_(char *transa, char *transb, integer *m, integer *n, integer *k, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, doublecomplex *beta, doublecomplex *c__, integer *ldc);
126
+ extern int zgemv_(char *trans, integer *m, integer *n, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx, doublecomplex *beta, doublecomplex *y, integer *incy);
127
+ extern int zgerc_(integer *m, integer *n, doublecomplex *alpha, doublecomplex *x, integer *incx, doublecomplex *y, integer *incy, doublecomplex *a, integer *lda);
128
+ extern int zgeru_(integer *m, integer *n, doublecomplex *alpha, doublecomplex *x, integer *incx, doublecomplex *y, integer *incy, doublecomplex *a, integer *lda);
129
+ extern int zhbmv_(char *uplo, integer *n, integer *k, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx, doublecomplex *beta, doublecomplex *y, integer *incy);
130
+ extern int zhemm_(char *side, char *uplo, integer *m, integer *n, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, doublecomplex *beta, doublecomplex *c__, integer *ldc);
131
+ extern int zhemv_(char *uplo, integer *n, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx, doublecomplex *beta, doublecomplex *y, integer *incy);
132
+ extern int zher_(char *uplo, integer *n, doublereal *alpha, doublecomplex *x, integer *incx, doublecomplex *a, integer *lda);
133
+ extern int zher2_(char *uplo, integer *n, doublecomplex *alpha, doublecomplex *x, integer *incx, doublecomplex *y, integer *incy, doublecomplex *a, integer *lda);
134
+ extern int zher2k_(char *uplo, char *trans, integer *n, integer *k, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, doublereal *beta, doublecomplex *c__, integer *ldc);
135
+ extern int zherk_(char *uplo, char *trans, integer *n, integer *k, doublereal *alpha, doublecomplex *a, integer *lda, doublereal *beta, doublecomplex *c__, integer *ldc);
136
+ extern int zhpmv_(char *uplo, integer *n, doublecomplex *alpha, doublecomplex *ap, doublecomplex *x, integer *incx, doublecomplex *beta, doublecomplex *y, integer *incy);
137
+ extern int zhpr_(char *uplo, integer *n, doublereal *alpha, doublecomplex *x, integer *incx, doublecomplex *ap);
138
+ extern int zhpr2_(char *uplo, integer *n, doublecomplex *alpha, doublecomplex *x, integer *incx, doublecomplex *y, integer *incy, doublecomplex *ap);
139
+ extern int zrotg_(doublecomplex *ca, doublecomplex *cb, doublereal *c__, doublecomplex *s);
140
+ extern int zscal_(integer *n, doublecomplex *za, doublecomplex *zx, integer *incx);
141
+ extern int zswap_(integer *n, doublecomplex *zx, integer *incx, doublecomplex *zy, integer *incy);
142
+ extern int zsymm_(char *side, char *uplo, integer *m, integer *n, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, doublecomplex *beta, doublecomplex *c__, integer *ldc);
143
+ extern int zsyr2k_(char *uplo, char *trans, integer *n, integer *k, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, doublecomplex *beta, doublecomplex *c__, integer *ldc);
144
+ extern int zsyrk_(char *uplo, char *trans, integer *n, integer *k, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *beta, doublecomplex *c__, integer *ldc);
145
+ extern int ztbmv_(char *uplo, char *trans, char *diag, integer *n, integer *k, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx);
146
+ extern int ztbsv_(char *uplo, char *trans, char *diag, integer *n, integer *k, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx);
147
+ extern int ztpmv_(char *uplo, char *trans, char *diag, integer *n, doublecomplex *ap, doublecomplex *x, integer *incx);
148
+ extern int ztpsv_(char *uplo, char *trans, char *diag, integer *n, doublecomplex *ap, doublecomplex *x, integer *incx);
149
+ extern int ztrmm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb);
150
+ extern int ztrmv_(char *uplo, char *trans, char *diag, integer *n, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx);
151
+ extern int ztrsm_(char *side, char *uplo, char *transa, char *diag, integer *m, integer *n, doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb);
152
+ extern int ztrsv_(char *uplo, char *trans, char *diag, integer *n, doublecomplex *a, integer *lda, doublecomplex *x, integer *incx);
153
+
154
+ #endif