aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/gonum.org/v1/gonum/lapack/lapack.go
blob: 5f60438f2cdac1f435d1a02fbd47d03fad060729 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
// Copyright ©2015 The Gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lapack

import "gonum.org/v1/gonum/blas"

// Complex128 defines the public complex128 LAPACK API supported by gonum/lapack.
type Complex128 interface{}

// Float64 defines the public float64 LAPACK API supported by gonum/lapack.
type Float64 interface {
	Dgecon(norm MatrixNorm, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64
	Dgeev(jobvl LeftEVJob, jobvr RightEVJob, n int, a []float64, lda int, wr, wi []float64, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) (first int)
	Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool
	Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int)
	Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int)
	Dgesvd(jobU, jobVT SVDJob, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int) (ok bool)
	Dgetrf(m, n int, a []float64, lda int, ipiv []int) (ok bool)
	Dgetri(n int, a []float64, lda int, ipiv []int, work []float64, lwork int) (ok bool)
	Dgetrs(trans blas.Transpose, n, nrhs int, a []float64, lda int, ipiv []int, b []float64, ldb int)
	Dggsvd3(jobU, jobV, jobQ GSVDJob, m, n, p int, a []float64, lda int, b []float64, ldb int, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, lwork int, iwork []int) (k, l int, ok bool)
	Dlantr(norm MatrixNorm, uplo blas.Uplo, diag blas.Diag, m, n int, a []float64, lda int, work []float64) float64
	Dlange(norm MatrixNorm, m, n int, a []float64, lda int, work []float64) float64
	Dlansy(norm MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64
	Dlapmr(forward bool, m, n int, x []float64, ldx int, k []int)
	Dlapmt(forward bool, m, n int, x []float64, ldx int, k []int)
	Dormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int)
	Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int)
	Dpbcon(uplo blas.Uplo, n, kd int, ab []float64, ldab int, anorm float64, work []float64, iwork []int) float64
	Dpbtrf(uplo blas.Uplo, n, kd int, ab []float64, ldab int) (ok bool)
	Dpbtrs(uplo blas.Uplo, n, kd, nrhs int, ab []float64, ldab int, b []float64, ldb int)
	Dpocon(uplo blas.Uplo, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64
	Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool)
	Dpotri(ul blas.Uplo, n int, a []float64, lda int) (ok bool)
	Dpotrs(ul blas.Uplo, n, nrhs int, a []float64, lda int, b []float64, ldb int)
	Dpstrf(uplo blas.Uplo, n int, a []float64, lda int, piv []int, tol float64, work []float64) (rank int, ok bool)
	Dsyev(jobz EVJob, uplo blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) (ok bool)
	Dtbtrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, kd, nrhs int, a []float64, lda int, b []float64, ldb int) (ok bool)
	Dtrcon(norm MatrixNorm, uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int, work []float64, iwork []int) float64
	Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) (ok bool)
	Dtrtrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int) (ok bool)
}

// Direct specifies the direction of the multiplication for the Householder matrix.
type Direct byte

const (
	Forward  Direct = 'F' // Reflectors are right-multiplied, H_0 * H_1 * ... * H_{k-1}.
	Backward Direct = 'B' // Reflectors are left-multiplied, H_{k-1} * ... * H_1 * H_0.
)

// Sort is the sorting order.
type Sort byte

const (
	SortIncreasing Sort = 'I'
	SortDecreasing Sort = 'D'
)

// StoreV indicates the storage direction of elementary reflectors.
type StoreV byte

const (
	ColumnWise StoreV = 'C' // Reflector stored in a column of the matrix.
	RowWise    StoreV = 'R' // Reflector stored in a row of the matrix.
)

// MatrixNorm represents the kind of matrix norm to compute.
type MatrixNorm byte

const (
	MaxAbs       MatrixNorm = 'M' // max(abs(A(i,j)))
	MaxColumnSum MatrixNorm = 'O' // Maximum absolute column sum (one norm)
	MaxRowSum    MatrixNorm = 'I' // Maximum absolute row sum (infinity norm)
	Frobenius    MatrixNorm = 'F' // Frobenius norm (sqrt of sum of squares)
)

// MatrixType represents the kind of matrix represented in the data.
type MatrixType byte

const (
	General  MatrixType = 'G' // A general dense matrix.
	UpperTri MatrixType = 'U' // An upper triangular matrix.
	LowerTri MatrixType = 'L' // A lower triangular matrix.
)

// Pivot specifies the pivot type for plane rotations.
type Pivot byte

const (
	Variable Pivot = 'V'
	Top      Pivot = 'T'
	Bottom   Pivot = 'B'
)

// ApplyOrtho specifies which orthogonal matrix is applied in Dormbr.
type ApplyOrtho byte

const (
	ApplyP ApplyOrtho = 'P' // Apply P or Pᵀ.
	ApplyQ ApplyOrtho = 'Q' // Apply Q or Qᵀ.
)

// GenOrtho specifies which orthogonal matrix is generated in Dorgbr.
type GenOrtho byte

const (
	GeneratePT GenOrtho = 'P' // Generate Pᵀ.
	GenerateQ  GenOrtho = 'Q' // Generate Q.
)

// SVDJob specifies the singular vector computation type for SVD.
type SVDJob byte

const (
	SVDAll       SVDJob = 'A' // Compute all columns of the orthogonal matrix U or V.
	SVDStore     SVDJob = 'S' // Compute the singular vectors and store them in the orthogonal matrix U or V.
	SVDOverwrite SVDJob = 'O' // Compute the singular vectors and overwrite them on the input matrix A.
	SVDNone      SVDJob = 'N' // Do not compute singular vectors.
)

// GSVDJob specifies the singular vector computation type for Generalized SVD.
type GSVDJob byte

const (
	GSVDU    GSVDJob = 'U' // Compute orthogonal matrix U.
	GSVDV    GSVDJob = 'V' // Compute orthogonal matrix V.
	GSVDQ    GSVDJob = 'Q' // Compute orthogonal matrix Q.
	GSVDUnit GSVDJob = 'I' // Use unit-initialized matrix.
	GSVDNone GSVDJob = 'N' // Do not compute orthogonal matrix.
)

// EVComp specifies how eigenvectors are computed in Dsteqr.
type EVComp byte

const (
	EVOrig     EVComp = 'V' // Compute eigenvectors of the original symmetric matrix.
	EVTridiag  EVComp = 'I' // Compute eigenvectors of the tridiagonal matrix.
	EVCompNone EVComp = 'N' // Do not compute eigenvectors.
)

// EVJob specifies whether eigenvectors are computed in Dsyev.
type EVJob byte

const (
	EVCompute EVJob = 'V' // Compute eigenvectors.
	EVNone    EVJob = 'N' // Do not compute eigenvectors.
)

// LeftEVJob specifies whether left eigenvectors are computed in Dgeev.
type LeftEVJob byte

const (
	LeftEVCompute LeftEVJob = 'V' // Compute left eigenvectors.
	LeftEVNone    LeftEVJob = 'N' // Do not compute left eigenvectors.
)

// RightEVJob specifies whether right eigenvectors are computed in Dgeev.
type RightEVJob byte

const (
	RightEVCompute RightEVJob = 'V' // Compute right eigenvectors.
	RightEVNone    RightEVJob = 'N' // Do not compute right eigenvectors.
)

// BalanceJob specifies matrix balancing operation.
type BalanceJob byte

const (
	Permute      BalanceJob = 'P'
	Scale        BalanceJob = 'S'
	PermuteScale BalanceJob = 'B'
	BalanceNone  BalanceJob = 'N'
)

// SchurJob specifies whether the Schur form is computed in Dhseqr.
type SchurJob byte

const (
	EigenvaluesOnly     SchurJob = 'E'
	EigenvaluesAndSchur SchurJob = 'S'
)

// SchurComp specifies whether and how the Schur vectors are computed in Dhseqr.
type SchurComp byte

const (
	SchurOrig SchurComp = 'V' // Compute Schur vectors of the original matrix.
	SchurHess SchurComp = 'I' // Compute Schur vectors of the upper Hessenberg matrix.
	SchurNone SchurComp = 'N' // Do not compute Schur vectors.
)

// UpdateSchurComp specifies whether the matrix of Schur vectors is updated in Dtrexc.
type UpdateSchurComp byte

const (
	UpdateSchur     UpdateSchurComp = 'V' // Update the matrix of Schur vectors.
	UpdateSchurNone UpdateSchurComp = 'N' // Do not update the matrix of Schur vectors.
)

// EVSide specifies what eigenvectors are computed in Dtrevc3.
type EVSide byte

const (
	EVRight EVSide = 'R' // Compute only right eigenvectors.
	EVLeft  EVSide = 'L' // Compute only left eigenvectors.
	EVBoth  EVSide = 'B' // Compute both right and left eigenvectors.
)

// EVHowMany specifies which eigenvectors are computed in Dtrevc3 and how.
type EVHowMany byte

const (
	EVAll      EVHowMany = 'A' // Compute all right and/or left eigenvectors.
	EVAllMulQ  EVHowMany = 'B' // Compute all right and/or left eigenvectors multiplied by an input matrix.
	EVSelected EVHowMany = 'S' // Compute selected right and/or left eigenvectors.
)

// MaximizeNormX specifies the heuristic method for computing a contribution to
// the reciprocal Dif-estimate in Dlatdf.
type MaximizeNormXJob byte

const (
	LocalLookAhead       MaximizeNormXJob = 0 // Solve Z*x=h-f where h is a vector of ±1.
	NormalizedNullVector MaximizeNormXJob = 2 // Compute an approximate null-vector e of Z, normalize e and solve Z*x=±e-f.
)