mirror of
				https://github.com/gonum/gonum.git
				synced 2025-10-31 18:42:45 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			280 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			280 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Code generated by "go generate gonum.org/v1/gonum/blas”; DO NOT EDIT.
 | |
| 
 | |
| // 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 blas32
 | |
| 
 | |
| import "gonum.org/v1/gonum/blas"
 | |
| 
 | |
| // GeneralCols represents a matrix using the conventional column-major storage scheme.
 | |
| type GeneralCols General
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions as a and have adequate backing
 | |
| // data storage.
 | |
| func (t GeneralCols) From(a General) {
 | |
| 	if t.Rows != a.Rows || t.Cols != a.Cols {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if len(t.Data) < (t.Cols-1)*t.Stride+t.Rows {
 | |
| 		panic("blas32: short data slice")
 | |
| 	}
 | |
| 	for i := 0; i < a.Rows; i++ {
 | |
| 		for j, v := range a.Data[i*a.Stride : i*a.Stride+a.Cols] {
 | |
| 			t.Data[i+j*t.Stride] = v
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions as a and have adequate backing
 | |
| // data storage.
 | |
| func (t General) From(a GeneralCols) {
 | |
| 	if t.Rows != a.Rows || t.Cols != a.Cols {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if len(t.Data) < (t.Rows-1)*t.Stride+t.Cols {
 | |
| 		panic("blas32: short data slice")
 | |
| 	}
 | |
| 	for j := 0; j < a.Cols; j++ {
 | |
| 		for i, v := range a.Data[j*a.Stride : j*a.Stride+a.Rows] {
 | |
| 			t.Data[i*t.Stride+j] = v
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // TriangularCols represents a matrix using the conventional column-major storage scheme.
 | |
| type TriangularCols Triangular
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions, uplo and diag as a and have
 | |
| // adequate backing data storage.
 | |
| func (t TriangularCols) From(a Triangular) {
 | |
| 	if t.N != a.N {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if t.Uplo != a.Uplo {
 | |
| 		panic("blas32: mismatched BLAS uplo")
 | |
| 	}
 | |
| 	if t.Diag != a.Diag {
 | |
| 		panic("blas32: mismatched BLAS diag")
 | |
| 	}
 | |
| 	switch a.Uplo {
 | |
| 	default:
 | |
| 		panic("blas32: bad BLAS uplo")
 | |
| 	case blas.Upper:
 | |
| 		for i := 0; i < a.N; i++ {
 | |
| 			for j := i; j < a.N; j++ {
 | |
| 				t.Data[i+j*t.Stride] = a.Data[i*a.Stride+j]
 | |
| 			}
 | |
| 		}
 | |
| 	case blas.Lower:
 | |
| 		for i := 0; i < a.N; i++ {
 | |
| 			for j := 0; j <= i; j++ {
 | |
| 				t.Data[i+j*t.Stride] = a.Data[i*a.Stride+j]
 | |
| 			}
 | |
| 		}
 | |
| 	case blas.All:
 | |
| 		for i := 0; i < a.N; i++ {
 | |
| 			for j := 0; j < a.N; j++ {
 | |
| 				t.Data[i+j*t.Stride] = a.Data[i*a.Stride+j]
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions, uplo and diag as a and have
 | |
| // adequate backing data storage.
 | |
| func (t Triangular) From(a TriangularCols) {
 | |
| 	if t.N != a.N {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if t.Uplo != a.Uplo {
 | |
| 		panic("blas32: mismatched BLAS uplo")
 | |
| 	}
 | |
| 	if t.Diag != a.Diag {
 | |
| 		panic("blas32: mismatched BLAS diag")
 | |
| 	}
 | |
| 	switch a.Uplo {
 | |
| 	default:
 | |
| 		panic("blas32: bad BLAS uplo")
 | |
| 	case blas.Upper:
 | |
| 		for i := 0; i < a.N; i++ {
 | |
| 			for j := i; j < a.N; j++ {
 | |
| 				t.Data[i*t.Stride+j] = a.Data[i+j*a.Stride]
 | |
| 			}
 | |
| 		}
 | |
| 	case blas.Lower:
 | |
| 		for i := 0; i < a.N; i++ {
 | |
| 			for j := 0; j <= i; j++ {
 | |
| 				t.Data[i*t.Stride+j] = a.Data[i+j*a.Stride]
 | |
| 			}
 | |
| 		}
 | |
| 	case blas.All:
 | |
| 		for i := 0; i < a.N; i++ {
 | |
| 			for j := 0; j < a.N; j++ {
 | |
| 				t.Data[i*t.Stride+j] = a.Data[i+j*a.Stride]
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // BandCols represents a matrix using the band column-major storage scheme.
 | |
| type BandCols Band
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions and bandwidth as a and have
 | |
| // adequate backing data storage.
 | |
| func (t BandCols) From(a Band) {
 | |
| 	if t.Rows != a.Rows || t.Cols != a.Cols {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if t.KL != a.KL || t.KU != a.KU {
 | |
| 		panic("blas32: mismatched bandwidth")
 | |
| 	}
 | |
| 	if a.Stride < a.KL+a.KU+1 {
 | |
| 		panic("blas32: short stride for source")
 | |
| 	}
 | |
| 	if t.Stride < t.KL+t.KU+1 {
 | |
| 		panic("blas32: short stride for destination")
 | |
| 	}
 | |
| 	for i := 0; i < a.Rows; i++ {
 | |
| 		for j := max(0, i-a.KL); j < min(i+a.KU+1, a.Cols); j++ {
 | |
| 			t.Data[i+t.KU-j+j*t.Stride] = a.Data[j+a.KL-i+i*a.Stride]
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions and bandwidth as a and have
 | |
| // adequate backing data storage.
 | |
| func (t Band) From(a BandCols) {
 | |
| 	if t.Rows != a.Rows || t.Cols != a.Cols {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if t.KL != a.KL || t.KU != a.KU {
 | |
| 		panic("blas32: mismatched bandwidth")
 | |
| 	}
 | |
| 	if a.Stride < a.KL+a.KU+1 {
 | |
| 		panic("blas32: short stride for source")
 | |
| 	}
 | |
| 	if t.Stride < t.KL+t.KU+1 {
 | |
| 		panic("blas32: short stride for destination")
 | |
| 	}
 | |
| 	for j := 0; j < a.Cols; j++ {
 | |
| 		for i := max(0, j-a.KU); i < min(j+a.KL+1, a.Rows); i++ {
 | |
| 			t.Data[j+a.KL-i+i*a.Stride] = a.Data[i+t.KU-j+j*t.Stride]
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // TriangularBandCols represents a symmetric matrix using the band column-major storage scheme.
 | |
| type TriangularBandCols TriangularBand
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions, bandwidth and uplo as a and
 | |
| // have adequate backing data storage.
 | |
| func (t TriangularBandCols) From(a TriangularBand) {
 | |
| 	if t.N != a.N {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if t.K != a.K {
 | |
| 		panic("blas32: mismatched bandwidth")
 | |
| 	}
 | |
| 	if a.Stride < a.K+1 {
 | |
| 		panic("blas32: short stride for source")
 | |
| 	}
 | |
| 	if t.Stride < t.K+1 {
 | |
| 		panic("blas32: short stride for destination")
 | |
| 	}
 | |
| 	if t.Uplo != a.Uplo {
 | |
| 		panic("blas32: mismatched BLAS uplo")
 | |
| 	}
 | |
| 	if t.Diag != a.Diag {
 | |
| 		panic("blas32: mismatched BLAS diag")
 | |
| 	}
 | |
| 	dst := BandCols{
 | |
| 		Rows: t.N, Cols: t.N,
 | |
| 		Stride: t.Stride,
 | |
| 		Data:   t.Data,
 | |
| 	}
 | |
| 	src := Band{
 | |
| 		Rows: a.N, Cols: a.N,
 | |
| 		Stride: a.Stride,
 | |
| 		Data:   a.Data,
 | |
| 	}
 | |
| 	switch a.Uplo {
 | |
| 	default:
 | |
| 		panic("blas32: bad BLAS uplo")
 | |
| 	case blas.Upper:
 | |
| 		dst.KU = t.K
 | |
| 		src.KU = a.K
 | |
| 	case blas.Lower:
 | |
| 		dst.KL = t.K
 | |
| 		src.KL = a.K
 | |
| 	}
 | |
| 	dst.From(src)
 | |
| }
 | |
| 
 | |
| // From fills the receiver with elements from a. The receiver
 | |
| // must have the same dimensions, bandwidth and uplo as a and
 | |
| // have adequate backing data storage.
 | |
| func (t TriangularBand) From(a TriangularBandCols) {
 | |
| 	if t.N != a.N {
 | |
| 		panic("blas32: mismatched dimension")
 | |
| 	}
 | |
| 	if t.K != a.K {
 | |
| 		panic("blas32: mismatched bandwidth")
 | |
| 	}
 | |
| 	if a.Stride < a.K+1 {
 | |
| 		panic("blas32: short stride for source")
 | |
| 	}
 | |
| 	if t.Stride < t.K+1 {
 | |
| 		panic("blas32: short stride for destination")
 | |
| 	}
 | |
| 	if t.Uplo != a.Uplo {
 | |
| 		panic("blas32: mismatched BLAS uplo")
 | |
| 	}
 | |
| 	if t.Diag != a.Diag {
 | |
| 		panic("blas32: mismatched BLAS diag")
 | |
| 	}
 | |
| 	dst := Band{
 | |
| 		Rows: t.N, Cols: t.N,
 | |
| 		Stride: t.Stride,
 | |
| 		Data:   t.Data,
 | |
| 	}
 | |
| 	src := BandCols{
 | |
| 		Rows: a.N, Cols: a.N,
 | |
| 		Stride: a.Stride,
 | |
| 		Data:   a.Data,
 | |
| 	}
 | |
| 	switch a.Uplo {
 | |
| 	default:
 | |
| 		panic("blas32: bad BLAS uplo")
 | |
| 	case blas.Upper:
 | |
| 		dst.KU = t.K
 | |
| 		src.KU = a.K
 | |
| 	case blas.Lower:
 | |
| 		dst.KL = t.K
 | |
| 		src.KL = a.K
 | |
| 	}
 | |
| 	dst.From(src)
 | |
| }
 | |
| 
 | |
| func min(a, b int) int {
 | |
| 	if a < b {
 | |
| 		return a
 | |
| 	}
 | |
| 	return b
 | |
| }
 | |
| 
 | |
| func max(a, b int) int {
 | |
| 	if a > b {
 | |
| 		return a
 | |
| 	}
 | |
| 	return b
 | |
| }
 | 
