1 // Code generated by "go generate gonum.org/v1/gonum/blas”; DO NOT EDIT.
3 // Copyright ©2015 The Gonum Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
10 math "gonum.org/v1/gonum/internal/cmplx64"
13 "gonum.org/v1/gonum/blas"
16 func newGeneralFrom(a GeneralCols) General {
21 Data: make([]complex64, a.Rows*a.Cols),
27 func (m General) dims() (r, c int) { return m.Rows, m.Cols }
28 func (m General) at(i, j int) complex64 { return m.Data[i*m.Stride+j] }
30 func newGeneralColsFrom(a General) GeneralCols {
35 Data: make([]complex64, a.Rows*a.Cols),
41 func (m GeneralCols) dims() (r, c int) { return m.Rows, m.Cols }
42 func (m GeneralCols) at(i, j int) complex64 { return m.Data[i+j*m.Stride] }
44 type general interface {
46 at(i, j int) complex64
49 func sameGeneral(a, b general) bool {
52 if ar != br || ac != bc {
55 for i := 0; i < ar; i++ {
56 for j := 0; j < ac; j++ {
57 if a.at(i, j) != b.at(i, j) || math.IsNaN(a.at(i, j)) != math.IsNaN(b.at(i, j)) {
65 var generalTests = []General{
66 {Rows: 2, Cols: 3, Stride: 3, Data: []complex64{
70 {Rows: 3, Cols: 2, Stride: 2, Data: []complex64{
75 {Rows: 3, Cols: 3, Stride: 3, Data: []complex64{
80 {Rows: 2, Cols: 3, Stride: 5, Data: []complex64{
84 {Rows: 3, Cols: 2, Stride: 5, Data: []complex64{
89 {Rows: 3, Cols: 3, Stride: 5, Data: []complex64{
96 func TestConvertGeneral(t *testing.T) {
97 for _, test := range generalTests {
98 colmajor := newGeneralColsFrom(test)
99 if !sameGeneral(colmajor, test) {
100 t.Errorf("unexpected result for row major to col major conversion:\n\tgot: %#v\n\tfrom:%#v",
103 rowmajor := newGeneralFrom(colmajor)
104 if !sameGeneral(rowmajor, test) {
105 t.Errorf("unexpected result for col major to row major conversion:\n\tgot: %#v\n\twant:%#v",
111 func newTriangularFrom(a TriangularCols) Triangular {
115 Data: make([]complex64, a.N*a.N),
123 func (m Triangular) n() int { return m.N }
124 func (m Triangular) at(i, j int) complex64 {
125 if m.Diag == blas.Unit && i == j {
128 if m.Uplo == blas.Lower && i < j && j < m.N {
131 if m.Uplo == blas.Upper && i > j {
134 return m.Data[i*m.Stride+j]
136 func (m Triangular) uplo() blas.Uplo { return m.Uplo }
137 func (m Triangular) diag() blas.Diag { return m.Diag }
139 func newTriangularColsFrom(a Triangular) TriangularCols {
143 Data: make([]complex64, a.N*a.N),
151 func (m TriangularCols) n() int { return m.N }
152 func (m TriangularCols) at(i, j int) complex64 {
153 if m.Diag == blas.Unit && i == j {
156 if m.Uplo == blas.Lower && i < j {
159 if m.Uplo == blas.Upper && i > j && i < m.N {
162 return m.Data[i+j*m.Stride]
164 func (m TriangularCols) uplo() blas.Uplo { return m.Uplo }
165 func (m TriangularCols) diag() blas.Diag { return m.Diag }
167 type triangular interface {
169 at(i, j int) complex64
174 func sameTriangular(a, b triangular) bool {
180 for i := 0; i < an; i++ {
181 for j := 0; j < an; j++ {
182 if a.at(i, j) != b.at(i, j) || math.IsNaN(a.at(i, j)) != math.IsNaN(b.at(i, j)) {
190 var triangularTests = []Triangular{
191 {N: 3, Stride: 3, Data: []complex64{
196 {N: 3, Stride: 5, Data: []complex64{
203 func TestConvertTriangular(t *testing.T) {
204 for _, test := range triangularTests {
205 for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower, blas.All} {
206 for _, diag := range []blas.Diag{blas.Unit, blas.NonUnit} {
209 colmajor := newTriangularColsFrom(test)
210 if !sameTriangular(colmajor, test) {
211 t.Errorf("unexpected result for row major to col major conversion:\n\tgot: %#v\n\tfrom:%#v",
214 rowmajor := newTriangularFrom(colmajor)
215 if !sameTriangular(rowmajor, test) {
216 t.Errorf("unexpected result for col major to row major conversion:\n\tgot: %#v\n\twant:%#v",
224 func newBandFrom(a BandCols) Band {
230 Stride: a.KL + a.KU + 1,
231 Data: make([]complex64, a.Rows*(a.KL+a.KU+1)),
233 for i := range t.Data {
234 t.Data[i] = math.NaN()
240 func (m Band) dims() (r, c int) { return m.Rows, m.Cols }
241 func (m Band) at(i, j int) complex64 {
243 if pj < 0 || m.KL+m.KU+1 <= pj {
246 return m.Data[i*m.Stride+pj]
248 func (m Band) bandwidth() (kl, ku int) { return m.KL, m.KU }
250 func newBandColsFrom(a Band) BandCols {
256 Stride: a.KL + a.KU + 1,
257 Data: make([]complex64, a.Cols*(a.KL+a.KU+1)),
259 for i := range t.Data {
260 t.Data[i] = math.NaN()
266 func (m BandCols) dims() (r, c int) { return m.Rows, m.Cols }
267 func (m BandCols) at(i, j int) complex64 {
269 if pj < 0 || m.KL+m.KU+1 <= pj {
272 return m.Data[j*m.Stride+pj]
274 func (m BandCols) bandwidth() (kl, ku int) { return m.KL, m.KU }
276 type band interface {
278 at(i, j int) complex64
279 bandwidth() (kl, ku int)
282 func sameBand(a, b band) bool {
285 if ar != br || ac != bc {
288 akl, aku := a.bandwidth()
289 bkl, bku := b.bandwidth()
290 if akl != bkl || aku != bku {
293 for i := 0; i < ar; i++ {
294 for j := 0; j < ac; j++ {
295 if a.at(i, j) != b.at(i, j) || math.IsNaN(a.at(i, j)) != math.IsNaN(b.at(i, j)) {
303 var bandTests = []Band{
304 {Rows: 3, Cols: 4, KL: 0, KU: 0, Stride: 1, Data: []complex64{
309 {Rows: 3, Cols: 3, KL: 0, KU: 0, Stride: 1, Data: []complex64{
314 {Rows: 4, Cols: 3, KL: 0, KU: 0, Stride: 1, Data: []complex64{
319 {Rows: 4, Cols: 3, KL: 0, KU: 1, Stride: 2, Data: []complex64{
324 {Rows: 3, Cols: 4, KL: 0, KU: 1, Stride: 2, Data: []complex64{
329 {Rows: 3, Cols: 4, KL: 1, KU: 1, Stride: 3, Data: []complex64{
334 {Rows: 4, Cols: 3, KL: 1, KU: 1, Stride: 3, Data: []complex64{
340 {Rows: 3, Cols: 4, KL: 2, KU: 1, Stride: 4, Data: []complex64{
345 {Rows: 4, Cols: 3, KL: 2, KU: 1, Stride: 4, Data: []complex64{
352 {Rows: 3, Cols: 4, KL: 0, KU: 0, Stride: 5, Data: []complex64{
357 {Rows: 3, Cols: 3, KL: 0, KU: 0, Stride: 5, Data: []complex64{
362 {Rows: 4, Cols: 3, KL: 0, KU: 0, Stride: 5, Data: []complex64{
367 {Rows: 4, Cols: 3, KL: 0, KU: 1, Stride: 5, Data: []complex64{
372 {Rows: 3, Cols: 4, KL: 0, KU: 1, Stride: 5, Data: []complex64{
377 {Rows: 3, Cols: 4, KL: 1, KU: 1, Stride: 5, Data: []complex64{
382 {Rows: 4, Cols: 3, KL: 1, KU: 1, Stride: 5, Data: []complex64{
388 {Rows: 3, Cols: 4, KL: 2, KU: 1, Stride: 5, Data: []complex64{
393 {Rows: 4, Cols: 3, KL: 2, KU: 1, Stride: 5, Data: []complex64{
401 func TestConvertBand(t *testing.T) {
402 for _, test := range bandTests {
403 colmajor := newBandColsFrom(test)
404 if !sameBand(colmajor, test) {
405 t.Errorf("unexpected result for row major to col major conversion:\n\tgot: %#v\n\tfrom:%#v",
408 rowmajor := newBandFrom(colmajor)
409 if !sameBand(rowmajor, test) {
410 t.Errorf("unexpected result for col major to row major conversion:\n\tgot: %#v\n\twant:%#v",
416 func newTriangularBandFrom(a TriangularBandCols) TriangularBand {
421 Data: make([]complex64, a.N*(a.K+1)),
425 for i := range t.Data {
426 t.Data[i] = math.NaN()
432 func (m TriangularBand) n() (n int) { return m.N }
433 func (m TriangularBand) at(i, j int) complex64 {
434 if m.Diag == blas.Unit && i == j {
438 Rows: m.N, Cols: m.N,
444 panic("cblas64: bad BLAS uplo")
458 func (m TriangularBand) bandwidth() (k int) { return m.K }
459 func (m TriangularBand) uplo() blas.Uplo { return m.Uplo }
460 func (m TriangularBand) diag() blas.Diag { return m.Diag }
462 func newTriangularBandColsFrom(a TriangularBand) TriangularBandCols {
463 t := TriangularBandCols{
467 Data: make([]complex64, a.N*(a.K+1)),
471 for i := range t.Data {
472 t.Data[i] = math.NaN()
478 func (m TriangularBandCols) n() (n int) { return m.N }
479 func (m TriangularBandCols) at(i, j int) complex64 {
480 if m.Diag == blas.Unit && i == j {
484 Rows: m.N, Cols: m.N,
490 panic("cblas64: bad BLAS uplo")
504 func (m TriangularBandCols) bandwidth() (k int) { return m.K }
505 func (m TriangularBandCols) uplo() blas.Uplo { return m.Uplo }
506 func (m TriangularBandCols) diag() blas.Diag { return m.Diag }
508 type triangularBand interface {
510 at(i, j int) complex64
516 func sameTriangularBand(a, b triangularBand) bool {
522 if a.uplo() != b.uplo() {
525 if a.diag() != b.diag() {
533 for i := 0; i < an; i++ {
534 for j := 0; j < an; j++ {
535 if a.at(i, j) != b.at(i, j) || math.IsNaN(a.at(i, j)) != math.IsNaN(b.at(i, j)) {
543 var triangularBandTests = []TriangularBand{
544 {N: 3, K: 0, Stride: 1, Uplo: blas.Upper, Data: []complex64{
549 {N: 3, K: 0, Stride: 1, Uplo: blas.Lower, Data: []complex64{
554 {N: 3, K: 1, Stride: 2, Uplo: blas.Upper, Data: []complex64{
559 {N: 3, K: 1, Stride: 2, Uplo: blas.Lower, Data: []complex64{
564 {N: 3, K: 2, Stride: 3, Uplo: blas.Upper, Data: []complex64{
569 {N: 3, K: 2, Stride: 3, Uplo: blas.Lower, Data: []complex64{
575 {N: 3, K: 0, Stride: 5, Uplo: blas.Upper, Data: []complex64{
580 {N: 3, K: 0, Stride: 5, Uplo: blas.Lower, Data: []complex64{
585 {N: 3, K: 1, Stride: 5, Uplo: blas.Upper, Data: []complex64{
590 {N: 3, K: 1, Stride: 5, Uplo: blas.Lower, Data: []complex64{
595 {N: 3, K: 2, Stride: 5, Uplo: blas.Upper, Data: []complex64{
600 {N: 3, K: 2, Stride: 5, Uplo: blas.Lower, Data: []complex64{
607 func TestConvertTriBand(t *testing.T) {
608 for _, test := range triangularBandTests {
609 colmajor := newTriangularBandColsFrom(test)
610 if !sameTriangularBand(colmajor, test) {
611 t.Errorf("unexpected result for row major to col major conversion:\n\tgot: %#v\n\tfrom:%#v",
614 rowmajor := newTriangularBandFrom(colmajor)
615 if !sameTriangularBand(rowmajor, test) {
616 t.Errorf("unexpected result for col major to row major conversion:\n\tgot: %#v\n\twant:%#v",