1// Code generated by "go generate gonum.org/v1/gonum/blas”; DO NOT EDIT.
2
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.
6
7package cblas128
8
9import "gonum.org/v1/gonum/blas"
10
11// GeneralCols represents a matrix using the conventional column-major storage scheme.
12type GeneralCols General
13
14// From fills the receiver with elements from a. The receiver
15// must have the same dimensions as a and have adequate backing
16// data storage.
17func (t GeneralCols) From(a General) {
18	if t.Rows != a.Rows || t.Cols != a.Cols {
19		panic("cblas128: mismatched dimension")
20	}
21	if len(t.Data) < (t.Cols-1)*t.Stride+t.Rows {
22		panic("cblas128: short data slice")
23	}
24	for i := 0; i < a.Rows; i++ {
25		for j, v := range a.Data[i*a.Stride : i*a.Stride+a.Cols] {
26			t.Data[i+j*t.Stride] = v
27		}
28	}
29}
30
31// From fills the receiver with elements from a. The receiver
32// must have the same dimensions as a and have adequate backing
33// data storage.
34func (t General) From(a GeneralCols) {
35	if t.Rows != a.Rows || t.Cols != a.Cols {
36		panic("cblas128: mismatched dimension")
37	}
38	if len(t.Data) < (t.Rows-1)*t.Stride+t.Cols {
39		panic("cblas128: short data slice")
40	}
41	for j := 0; j < a.Cols; j++ {
42		for i, v := range a.Data[j*a.Stride : j*a.Stride+a.Rows] {
43			t.Data[i*t.Stride+j] = v
44		}
45	}
46}
47
48// TriangularCols represents a matrix using the conventional column-major storage scheme.
49type TriangularCols Triangular
50
51// From fills the receiver with elements from a. The receiver
52// must have the same dimensions, uplo and diag as a and have
53// adequate backing data storage.
54func (t TriangularCols) From(a Triangular) {
55	if t.N != a.N {
56		panic("cblas128: mismatched dimension")
57	}
58	if t.Uplo != a.Uplo {
59		panic("cblas128: mismatched BLAS uplo")
60	}
61	if t.Diag != a.Diag {
62		panic("cblas128: mismatched BLAS diag")
63	}
64	switch a.Uplo {
65	default:
66		panic("cblas128: bad BLAS uplo")
67	case blas.Upper:
68		for i := 0; i < a.N; i++ {
69			for j := i; j < a.N; j++ {
70				t.Data[i+j*t.Stride] = a.Data[i*a.Stride+j]
71			}
72		}
73	case blas.Lower:
74		for i := 0; i < a.N; i++ {
75			for j := 0; j <= i; j++ {
76				t.Data[i+j*t.Stride] = a.Data[i*a.Stride+j]
77			}
78		}
79	case blas.All:
80		for i := 0; i < a.N; i++ {
81			for j := 0; j < a.N; j++ {
82				t.Data[i+j*t.Stride] = a.Data[i*a.Stride+j]
83			}
84		}
85	}
86}
87
88// From fills the receiver with elements from a. The receiver
89// must have the same dimensions, uplo and diag as a and have
90// adequate backing data storage.
91func (t Triangular) From(a TriangularCols) {
92	if t.N != a.N {
93		panic("cblas128: mismatched dimension")
94	}
95	if t.Uplo != a.Uplo {
96		panic("cblas128: mismatched BLAS uplo")
97	}
98	if t.Diag != a.Diag {
99		panic("cblas128: mismatched BLAS diag")
100	}
101	switch a.Uplo {
102	default:
103		panic("cblas128: bad BLAS uplo")
104	case blas.Upper:
105		for i := 0; i < a.N; i++ {
106			for j := i; j < a.N; j++ {
107				t.Data[i*t.Stride+j] = a.Data[i+j*a.Stride]
108			}
109		}
110	case blas.Lower:
111		for i := 0; i < a.N; i++ {
112			for j := 0; j <= i; j++ {
113				t.Data[i*t.Stride+j] = a.Data[i+j*a.Stride]
114			}
115		}
116	case blas.All:
117		for i := 0; i < a.N; i++ {
118			for j := 0; j < a.N; j++ {
119				t.Data[i*t.Stride+j] = a.Data[i+j*a.Stride]
120			}
121		}
122	}
123}
124
125// BandCols represents a matrix using the band column-major storage scheme.
126type BandCols Band
127
128// From fills the receiver with elements from a. The receiver
129// must have the same dimensions and bandwidth as a and have
130// adequate backing data storage.
131func (t BandCols) From(a Band) {
132	if t.Rows != a.Rows || t.Cols != a.Cols {
133		panic("cblas128: mismatched dimension")
134	}
135	if t.KL != a.KL || t.KU != a.KU {
136		panic("cblas128: mismatched bandwidth")
137	}
138	if a.Stride < a.KL+a.KU+1 {
139		panic("cblas128: short stride for source")
140	}
141	if t.Stride < t.KL+t.KU+1 {
142		panic("cblas128: short stride for destination")
143	}
144	for i := 0; i < a.Rows; i++ {
145		for j := max(0, i-a.KL); j < min(i+a.KU+1, a.Cols); j++ {
146			t.Data[i+t.KU-j+j*t.Stride] = a.Data[j+a.KL-i+i*a.Stride]
147		}
148	}
149}
150
151// From fills the receiver with elements from a. The receiver
152// must have the same dimensions and bandwidth as a and have
153// adequate backing data storage.
154func (t Band) From(a BandCols) {
155	if t.Rows != a.Rows || t.Cols != a.Cols {
156		panic("cblas128: mismatched dimension")
157	}
158	if t.KL != a.KL || t.KU != a.KU {
159		panic("cblas128: mismatched bandwidth")
160	}
161	if a.Stride < a.KL+a.KU+1 {
162		panic("cblas128: short stride for source")
163	}
164	if t.Stride < t.KL+t.KU+1 {
165		panic("cblas128: short stride for destination")
166	}
167	for j := 0; j < a.Cols; j++ {
168		for i := max(0, j-a.KU); i < min(j+a.KL+1, a.Rows); i++ {
169			t.Data[j+a.KL-i+i*a.Stride] = a.Data[i+t.KU-j+j*t.Stride]
170		}
171	}
172}
173
174// TriangularBandCols represents a symmetric matrix using the band column-major storage scheme.
175type TriangularBandCols TriangularBand
176
177// From fills the receiver with elements from a. The receiver
178// must have the same dimensions, bandwidth and uplo as a and
179// have adequate backing data storage.
180func (t TriangularBandCols) From(a TriangularBand) {
181	if t.N != a.N {
182		panic("cblas128: mismatched dimension")
183	}
184	if t.K != a.K {
185		panic("cblas128: mismatched bandwidth")
186	}
187	if a.Stride < a.K+1 {
188		panic("cblas128: short stride for source")
189	}
190	if t.Stride < t.K+1 {
191		panic("cblas128: short stride for destination")
192	}
193	if t.Uplo != a.Uplo {
194		panic("cblas128: mismatched BLAS uplo")
195	}
196	if t.Diag != a.Diag {
197		panic("cblas128: mismatched BLAS diag")
198	}
199	dst := BandCols{
200		Rows: t.N, Cols: t.N,
201		Stride: t.Stride,
202		Data:   t.Data,
203	}
204	src := Band{
205		Rows: a.N, Cols: a.N,
206		Stride: a.Stride,
207		Data:   a.Data,
208	}
209	switch a.Uplo {
210	default:
211		panic("cblas128: bad BLAS uplo")
212	case blas.Upper:
213		dst.KU = t.K
214		src.KU = a.K
215	case blas.Lower:
216		dst.KL = t.K
217		src.KL = a.K
218	}
219	dst.From(src)
220}
221
222// From fills the receiver with elements from a. The receiver
223// must have the same dimensions, bandwidth and uplo as a and
224// have adequate backing data storage.
225func (t TriangularBand) From(a TriangularBandCols) {
226	if t.N != a.N {
227		panic("cblas128: mismatched dimension")
228	}
229	if t.K != a.K {
230		panic("cblas128: mismatched bandwidth")
231	}
232	if a.Stride < a.K+1 {
233		panic("cblas128: short stride for source")
234	}
235	if t.Stride < t.K+1 {
236		panic("cblas128: short stride for destination")
237	}
238	if t.Uplo != a.Uplo {
239		panic("cblas128: mismatched BLAS uplo")
240	}
241	if t.Diag != a.Diag {
242		panic("cblas128: mismatched BLAS diag")
243	}
244	dst := Band{
245		Rows: t.N, Cols: t.N,
246		Stride: t.Stride,
247		Data:   t.Data,
248	}
249	src := BandCols{
250		Rows: a.N, Cols: a.N,
251		Stride: a.Stride,
252		Data:   a.Data,
253	}
254	switch a.Uplo {
255	default:
256		panic("cblas128: bad BLAS uplo")
257	case blas.Upper:
258		dst.KU = t.K
259		src.KU = a.K
260	case blas.Lower:
261		dst.KL = t.K
262		src.KL = a.K
263	}
264	dst.From(src)
265}
266
267func min(a, b int) int {
268	if a < b {
269		return a
270	}
271	return b
272}
273
274func max(a, b int) int {
275	if a > b {
276		return a
277	}
278	return b
279}
280