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