Skip to content
This repository has been archived by the owner on Dec 10, 2018. It is now read-only.

Commit

Permalink
mat64: be strict with triangle for SymDense
Browse files Browse the repository at this point in the history
  • Loading branch information
kortschak committed Oct 1, 2015
1 parent a0f0f82 commit 2b57b28
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 23 deletions.
28 changes: 6 additions & 22 deletions mat64/matrix.go
Original file line number Diff line number Diff line change
Expand Up @@ -522,20 +522,12 @@ func Max(a Matrix) float64 {
return max
case RawSymmetricer:
rm := m.RawSymmetric()
if rm.Uplo == blas.Upper {
max := math.Inf(-1)
for i := 0; i < rm.N; i++ {
for _, v := range rm.Data[i*rm.Stride+i : i*rm.Stride+rm.N] {
if v > max {
max = v
}
}
}
return max
if rm.Uplo != blas.Upper {
panic(badSymTriangle)
}
max := math.Inf(-1)
for i := 0; i < rm.N; i++ {
for _, v := range rm.Data[i*rm.Stride : i*rm.Stride+i+1] {
for _, v := range rm.Data[i*rm.Stride+i : i*rm.Stride+rm.N] {
if v > max {
max = v
}
Expand Down Expand Up @@ -604,20 +596,12 @@ func Min(a Matrix) float64 {
return min
case RawSymmetricer:
rm := m.RawSymmetric()
if rm.Uplo == blas.Upper {
min := math.Inf(1)
for i := 0; i < rm.N; i++ {
for _, v := range rm.Data[i*rm.Stride+i : i*rm.Stride+rm.N] {
if v < min {
min = v
}
}
}
return min
if rm.Uplo != blas.Upper {
panic(badSymTriangle)
}
min := math.Inf(1)
for i := 0; i < rm.N; i++ {
for _, v := range rm.Data[i*rm.Stride : i*rm.Stride+i+1] {
for _, v := range rm.Data[i*rm.Stride+i : i*rm.Stride+rm.N] {
if v < min {
min = v
}
Expand Down
14 changes: 13 additions & 1 deletion mat64/symmetric.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ var (

const badSymTriangle = "mat64: blas64.Symmetric not upper"

// SymDense is a symmetric matrix that uses Dense storage.
// SymDense is a symmetric matrix that uses dense storage. SymDense
// matrices are encoded in upper the upper triangle.
type SymDense struct {
mat blas64.Symmetric
}
Expand Down Expand Up @@ -85,6 +86,17 @@ func (s *SymDense) RawSymmetric() blas64.Symmetric {
return s.mat
}

// SetRawSymmetric sets the underlying blas64.Symmertic used by the receiver.
// Changes to elements in the receiver following the call will be reflected
// in b. SetRawSymmetric will panic if b is not an upper-encoded symmetric
// matrix.
func (s *SymDense) SetRawSymmetric(b blas64.Symmetric) {
if b.Uplo != blas.Upper {
panic(badSymTriangle)
}
s.mat = b
}

func (s *SymDense) isZero() bool {
return s.mat.N == 0
}
Expand Down

0 comments on commit 2b57b28

Please sign in to comment.