mirror of
https://github.com/gonum/gonum.git
synced 2025-10-28 17:31:56 +08:00
Harmonise behaviour with reference code
Still missing on Idamax, but that may require some more thinking.
This commit is contained in:
@@ -10,7 +10,7 @@ package cblas
|
|||||||
/*
|
/*
|
||||||
#cgo CFLAGS: -g -O2
|
#cgo CFLAGS: -g -O2
|
||||||
#cgo linux LDFLAGS: -L/usr/lib/ -lcblas
|
#cgo linux LDFLAGS: -L/usr/lib/ -lcblas
|
||||||
#cgo darwin LDFLAGS: -DYA_BLAS -DYA_LAPACK -DYA_BLASMULT -framework Accelerate
|
#cgo darwin LDFLAGS: -DYA_BLAS -DYA_LAPACK -DYA_BLASMULT -framework vecLib
|
||||||
#include "cblas.h"
|
#include "cblas.h"
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
@@ -273,6 +273,9 @@ func (Blas) Snrm2(n int, x []float32, incX int) float32 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -285,6 +288,9 @@ func (Blas) Sasum(n int, x []float32, incX int) float32 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -297,6 +303,9 @@ func (Blas) Dnrm2(n int, x []float64, incX int) float64 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -309,6 +318,9 @@ func (Blas) Dasum(n int, x []float64, incX int) float64 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -321,6 +333,9 @@ func (Blas) Scnrm2(n int, x []complex64, incX int) float32 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -333,6 +348,9 @@ func (Blas) Scasum(n int, x []complex64, incX int) float32 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -345,6 +363,9 @@ func (Blas) Dznrm2(n int, x []complex128, incX int) float64 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -357,6 +378,9 @@ func (Blas) Dzasum(n int, x []complex128, incX int) float64 {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -369,6 +393,9 @@ func (Blas) Isamax(n int, x []float32, incX int) int {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -381,6 +408,9 @@ func (Blas) Idamax(n int, x []float64, incX int) int {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -393,6 +423,9 @@ func (Blas) Icamax(n int, x []complex64, incX int) int {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -405,6 +438,9 @@ func (Blas) Izamax(n int, x []complex128, incX int) int {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -669,6 +705,9 @@ func (Blas) Sscal(n int, alpha float32, x []float32, incX int) {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -681,6 +720,9 @@ func (Blas) Dscal(n int, alpha float64, x []float64, incX int) {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -693,6 +735,9 @@ func (Blas) Cscal(n int, alpha complex64, x []complex64, incX int) {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -705,6 +750,9 @@ func (Blas) Zscal(n int, alpha complex128, x []complex128, incX int) {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
@@ -717,6 +765,9 @@ func (Blas) Csscal(n int, alpha float32, x []complex64, incX int) {
|
|||||||
if incX == 0 {
|
if incX == 0 {
|
||||||
panic("cblas: zero x index increment")
|
panic("cblas: zero x index increment")
|
||||||
}
|
}
|
||||||
|
if incX < 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) {
|
||||||
panic("cblas: x index out of range")
|
panic("cblas: x index out of range")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -475,6 +475,15 @@ sub processParamToChecks {
|
|||||||
} elsif ($scalarArgs{'m'}) {
|
} elsif ($scalarArgs{'m'}) {
|
||||||
push @processed, "if (incX > 0 && (m-1)*incX >= len(x)) || (incX < 0 && (1-m)*incX >= len(x)) { panic(\"cblas: x index out of range\") }" if $scalarArgs{'incX'};
|
push @processed, "if (incX > 0 && (m-1)*incX >= len(x)) || (incX < 0 && (1-m)*incX >= len(x)) { panic(\"cblas: x index out of range\") }" if $scalarArgs{'incX'};
|
||||||
push @processed, "if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { panic(\"cblas: y index out of range\") }" if $scalarArgs{'incY'};
|
push @processed, "if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { panic(\"cblas: y index out of range\") }" if $scalarArgs{'incY'};
|
||||||
|
} elsif ($func =~ m/cblas_[sdcz]s?scal/) {
|
||||||
|
push @processed, "if incX < 0 { return }";
|
||||||
|
push @processed, "if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { panic(\"cblas: x index out of range\") }";
|
||||||
|
} elsif ($func =~ m/cblas_i[sdcz]amax/) {
|
||||||
|
push @processed, "if incX < 0 { return -1 }";
|
||||||
|
push @processed, "if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { panic(\"cblas: x index out of range\") }";
|
||||||
|
} elsif ($func =~ m/cblas_(?:[ds][zc]?asum|[sdz][cz]?nrm2)/) {
|
||||||
|
push @processed, "if incX < 0 { return 0 }";
|
||||||
|
push @processed, "if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { panic(\"cblas: x index out of range\") }";
|
||||||
} else {
|
} else {
|
||||||
push @processed, "if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { panic(\"cblas: x index out of range\") }" if $scalarArgs{'incX'};
|
push @processed, "if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { panic(\"cblas: x index out of range\") }" if $scalarArgs{'incX'};
|
||||||
push @processed, "if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { panic(\"cblas: y index out of range\") }" if $scalarArgs{'incY'};
|
push @processed, "if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { panic(\"cblas: y index out of range\") }" if $scalarArgs{'incY'};
|
||||||
|
|||||||
Reference in New Issue
Block a user