OSDN Git Service

new repo
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / blas.go
1 // Copyright ©2013 The Gonum Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 //go:generate ./conversions.bash
6
7 package blas
8
9 // Flag constants indicate Givens transformation H matrix state.
10 type Flag int
11
12 const (
13         Identity    Flag = iota - 2 // H is the identity matrix; no rotation is needed.
14         Rescaling                   // H specifies rescaling.
15         OffDiagonal                 // Off-diagonal elements of H are units.
16         Diagonal                    // Diagonal elements of H are units.
17 )
18
19 // SrotmParams contains Givens transformation parameters returned
20 // by the Float32 Srotm method.
21 type SrotmParams struct {
22         Flag
23         H [4]float32 // Column-major 2 by 2 matrix.
24 }
25
26 // DrotmParams contains Givens transformation parameters returned
27 // by the Float64 Drotm method.
28 type DrotmParams struct {
29         Flag
30         H [4]float64 // Column-major 2 by 2 matrix.
31 }
32
33 // Transpose is used to specify the transposition operation for a
34 // routine.
35 type Transpose int
36
37 const (
38         NoTrans Transpose = 111 + iota
39         Trans
40         ConjTrans
41 )
42
43 // Uplo is used to specify whether the matrix is an upper or lower
44 // triangular matrix.
45 type Uplo int
46
47 const (
48         All Uplo = 120 + iota
49         Upper
50         Lower
51 )
52
53 // Diag is used to specify whether the matrix is a unit or non-unit
54 // triangular matrix.
55 type Diag int
56
57 const (
58         NonUnit Diag = 131 + iota
59         Unit
60 )
61
62 // Side is used to specify from which side a multiplication operation
63 // is performed.
64 type Side int
65
66 const (
67         Left Side = 141 + iota
68         Right
69 )
70
71 // Float32 implements the single precision real BLAS routines.
72 type Float32 interface {
73         Float32Level1
74         Float32Level2
75         Float32Level3
76 }
77
78 // Float32Level1 implements the single precision real BLAS Level 1 routines.
79 type Float32Level1 interface {
80         Sdsdot(n int, alpha float32, x []float32, incX int, y []float32, incY int) float32
81         Dsdot(n int, x []float32, incX int, y []float32, incY int) float64
82         Sdot(n int, x []float32, incX int, y []float32, incY int) float32
83         Snrm2(n int, x []float32, incX int) float32
84         Sasum(n int, x []float32, incX int) float32
85         Isamax(n int, x []float32, incX int) int
86         Sswap(n int, x []float32, incX int, y []float32, incY int)
87         Scopy(n int, x []float32, incX int, y []float32, incY int)
88         Saxpy(n int, alpha float32, x []float32, incX int, y []float32, incY int)
89         Srotg(a, b float32) (c, s, r, z float32)
90         Srotmg(d1, d2, b1, b2 float32) (p SrotmParams, rd1, rd2, rb1 float32)
91         Srot(n int, x []float32, incX int, y []float32, incY int, c, s float32)
92         Srotm(n int, x []float32, incX int, y []float32, incY int, p SrotmParams)
93         Sscal(n int, alpha float32, x []float32, incX int)
94 }
95
96 // Float32Level2 implements the single precision real BLAS Level 2 routines.
97 type Float32Level2 interface {
98         Sgemv(tA Transpose, m, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
99         Sgbmv(tA Transpose, m, n, kL, kU int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
100         Strmv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int)
101         Stbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int)
102         Stpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int)
103         Strsv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int)
104         Stbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int)
105         Stpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int)
106         Ssymv(ul Uplo, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
107         Ssbmv(ul Uplo, n, k int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int)
108         Sspmv(ul Uplo, n int, alpha float32, ap []float32, x []float32, incX int, beta float32, y []float32, incY int)
109         Sger(m, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int)
110         Ssyr(ul Uplo, n int, alpha float32, x []float32, incX int, a []float32, lda int)
111         Sspr(ul Uplo, n int, alpha float32, x []float32, incX int, ap []float32)
112         Ssyr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int)
113         Sspr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32)
114 }
115
116 // Float32Level3 implements the single precision real BLAS Level 3 routines.
117 type Float32Level3 interface {
118         Sgemm(tA, tB Transpose, m, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
119         Ssymm(s Side, ul Uplo, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
120         Ssyrk(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, beta float32, c []float32, ldc int)
121         Ssyr2k(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int)
122         Strmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int)
123         Strsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int)
124 }
125
126 // Float64 implements the single precision real BLAS routines.
127 type Float64 interface {
128         Float64Level1
129         Float64Level2
130         Float64Level3
131 }
132
133 // Float64Level1 implements the double precision real BLAS Level 1 routines.
134 type Float64Level1 interface {
135         Ddot(n int, x []float64, incX int, y []float64, incY int) float64
136         Dnrm2(n int, x []float64, incX int) float64
137         Dasum(n int, x []float64, incX int) float64
138         Idamax(n int, x []float64, incX int) int
139         Dswap(n int, x []float64, incX int, y []float64, incY int)
140         Dcopy(n int, x []float64, incX int, y []float64, incY int)
141         Daxpy(n int, alpha float64, x []float64, incX int, y []float64, incY int)
142         Drotg(a, b float64) (c, s, r, z float64)
143         Drotmg(d1, d2, b1, b2 float64) (p DrotmParams, rd1, rd2, rb1 float64)
144         Drot(n int, x []float64, incX int, y []float64, incY int, c float64, s float64)
145         Drotm(n int, x []float64, incX int, y []float64, incY int, p DrotmParams)
146         Dscal(n int, alpha float64, x []float64, incX int)
147 }
148
149 // Float64Level2 implements the double precision real BLAS Level 2 routines.
150 type Float64Level2 interface {
151         Dgemv(tA Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
152         Dgbmv(tA Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
153         Dtrmv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int)
154         Dtbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int)
155         Dtpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int)
156         Dtrsv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int)
157         Dtbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int)
158         Dtpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int)
159         Dsymv(ul Uplo, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
160         Dsbmv(ul Uplo, n, k int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int)
161         Dspmv(ul Uplo, n int, alpha float64, ap []float64, x []float64, incX int, beta float64, y []float64, incY int)
162         Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int)
163         Dsyr(ul Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int)
164         Dspr(ul Uplo, n int, alpha float64, x []float64, incX int, ap []float64)
165         Dsyr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int)
166         Dspr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64)
167 }
168
169 // Float64Level3 implements the double precision real BLAS Level 3 routines.
170 type Float64Level3 interface {
171         Dgemm(tA, tB Transpose, m, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
172         Dsymm(s Side, ul Uplo, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
173         Dsyrk(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int)
174         Dsyr2k(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int)
175         Dtrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int)
176         Dtrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int)
177 }
178
179 // Complex64 implements the single precision complex BLAS routines.
180 type Complex64 interface {
181         Complex64Level1
182         Complex64Level2
183         Complex64Level3
184 }
185
186 // Complex64Level1 implements the single precision complex BLAS Level 1 routines.
187 type Complex64Level1 interface {
188         Cdotu(n int, x []complex64, incX int, y []complex64, incY int) (dotu complex64)
189         Cdotc(n int, x []complex64, incX int, y []complex64, incY int) (dotc complex64)
190         Scnrm2(n int, x []complex64, incX int) float32
191         Scasum(n int, x []complex64, incX int) float32
192         Icamax(n int, x []complex64, incX int) int
193         Cswap(n int, x []complex64, incX int, y []complex64, incY int)
194         Ccopy(n int, x []complex64, incX int, y []complex64, incY int)
195         Caxpy(n int, alpha complex64, x []complex64, incX int, y []complex64, incY int)
196         Cscal(n int, alpha complex64, x []complex64, incX int)
197         Csscal(n int, alpha float32, x []complex64, incX int)
198 }
199
200 // Complex64Level2 implements the single precision complex BLAS routines Level 2 routines.
201 type Complex64Level2 interface {
202         Cgemv(tA Transpose, m, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
203         Cgbmv(tA Transpose, m, n, kL, kU int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
204         Ctrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int)
205         Ctbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int)
206         Ctpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int)
207         Ctrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int)
208         Ctbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int)
209         Ctpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int)
210         Chemv(ul Uplo, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
211         Chbmv(ul Uplo, n, k int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int)
212         Chpmv(ul Uplo, n int, alpha complex64, ap []complex64, x []complex64, incX int, beta complex64, y []complex64, incY int)
213         Cgeru(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
214         Cgerc(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
215         Cher(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64, lda int)
216         Chpr(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64)
217         Cher2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int)
218         Chpr2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, ap []complex64)
219 }
220
221 // Complex64Level3 implements the single precision complex BLAS Level 3 routines.
222 type Complex64Level3 interface {
223         Cgemm(tA, tB Transpose, m, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
224         Csymm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
225         Csyrk(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, beta complex64, c []complex64, ldc int)
226         Csyr2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
227         Ctrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int)
228         Ctrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int)
229         Chemm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int)
230         Cherk(ul Uplo, t Transpose, n, k int, alpha float32, a []complex64, lda int, beta float32, c []complex64, ldc int)
231         Cher2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta float32, c []complex64, ldc int)
232 }
233
234 // Complex128 implements the double precision complex BLAS routines.
235 type Complex128 interface {
236         Complex128Level1
237         Complex128Level2
238         Complex128Level3
239 }
240
241 // Complex128Level1 implements the double precision complex BLAS Level 1 routines.
242 type Complex128Level1 interface {
243         Zdotu(n int, x []complex128, incX int, y []complex128, incY int) (dotu complex128)
244         Zdotc(n int, x []complex128, incX int, y []complex128, incY int) (dotc complex128)
245         Dznrm2(n int, x []complex128, incX int) float64
246         Dzasum(n int, x []complex128, incX int) float64
247         Izamax(n int, x []complex128, incX int) int
248         Zswap(n int, x []complex128, incX int, y []complex128, incY int)
249         Zcopy(n int, x []complex128, incX int, y []complex128, incY int)
250         Zaxpy(n int, alpha complex128, x []complex128, incX int, y []complex128, incY int)
251         Zscal(n int, alpha complex128, x []complex128, incX int)
252         Zdscal(n int, alpha float64, x []complex128, incX int)
253 }
254
255 // Complex128Level2 implements the double precision complex BLAS Level 2 routines.
256 type Complex128Level2 interface {
257         Zgemv(tA Transpose, m, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
258         Zgbmv(tA Transpose, m, n int, kL int, kU int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
259         Ztrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int)
260         Ztbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int)
261         Ztpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int)
262         Ztrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int)
263         Ztbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int)
264         Ztpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int)
265         Zhemv(ul Uplo, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
266         Zhbmv(ul Uplo, n, k int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int)
267         Zhpmv(ul Uplo, n int, alpha complex128, ap []complex128, x []complex128, incX int, beta complex128, y []complex128, incY int)
268         Zgeru(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
269         Zgerc(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
270         Zher(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128, lda int)
271         Zhpr(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128)
272         Zher2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int)
273         Zhpr2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, ap []complex128)
274 }
275
276 // Complex128Level3 implements the double precision complex BLAS Level 3 routines.
277 type Complex128Level3 interface {
278         Zgemm(tA, tB Transpose, m, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
279         Zsymm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
280         Zsyrk(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, beta complex128, c []complex128, ldc int)
281         Zsyr2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
282         Ztrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int)
283         Ztrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int)
284         Zhemm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int)
285         Zherk(ul Uplo, t Transpose, n, k int, alpha float64, a []complex128, lda int, beta float64, c []complex128, ldc int)
286         Zher2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta float64, c []complex128, ldc int)
287 }