linalg 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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