Skip to content
Open
5 changes: 4 additions & 1 deletion csparse_demo1_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ func TestDemo1(t *testing.T) {
stdin.Write(b)

// load data
T := Load(&stdin)
T, err := Load(&stdin)
if err != nil {
t.Fatal(err)
}

// A compressed-column form of T
A, err := Compress(T)
Expand Down
5 changes: 4 additions & 1 deletion csparse_demo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,10 @@ func get_problem(f io.Reader, tol float64, output bool) *problem {
return nil
}
// load triplet matrix T from a file */
T := Load(f)
T, err := Load(f)
if err != nil {
panic(err)
}
A, err := Compress(T)
if err != nil {
panic(err)
Expand Down
6 changes: 6 additions & 0 deletions solvers.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,14 @@ func (lu *LU) Factorize(A *Matrix) error {
}()
// ordering and symbolic analysis
lu.s = cs_sqr(lu.order, lu.a, false)
if lu.s == nil {
return fmt.Errorf("matrix S in LU decomposition is nil")
}
// numeric LU factorization
lu.n = cs_lu(lu.a, lu.s, tol)
if lu.n == nil {
return fmt.Errorf("matrix N in LU decomposition is nil")
}

return nil
}
Expand Down
38 changes: 19 additions & 19 deletions sparse.go
Original file line number Diff line number Diff line change
Expand Up @@ -2243,17 +2243,16 @@ func cs_leaf(i int, j int, first []int, maxfirst []int, prevleaf []int, ancestor
// Load - load a triplet matrix from a file
//
// Name function in CSparse : cs_load.
func Load(f io.Reader) *Triplet {
func Load(f io.Reader) (T *Triplet, err error) {
if f == nil {
// use double for integers to avoid csi conflicts
// check inputs
return nil
return nil, fmt.Errorf("Input reader is nil")
}
// allocate result
T, err := NewTriplet()
T, err = NewTriplet()
if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) // TODO (KI) error hanling
return nil
return nil, err
}
for {
var i, j int
Expand All @@ -2264,14 +2263,13 @@ func Load(f io.Reader) *Triplet {
break
}
if err != nil || n != 3 {
return nil
return nil, fmt.Errorf("not correct data: %d\n err = %v", n, err)
}
if err := Entry(T, i, j, x); err != nil { // TODO (KI) error handling
_ = err
return nil
return nil, err
}
}
return T
return T, nil
}

// cs_lsolve - solve Lx=b where x and b are dense. x=b on input, solution on output.
Expand Down Expand Up @@ -2704,15 +2702,15 @@ func cs_maxtrans(A *Matrix, seed int) []int {
// var Ap []int
// var jimatch []int
// var w []int
var cheap []int
var js []int
var is []int
var ps []int
// var cheap []int
// var js []int
// var is []int
// var ps []int
// var Ai []int
var Cp []int
var jmatch []int
var imatch []int
var q []int
// var q []int
// var C []cs
if !(A != nil && A.nz == -1) {
// check inputs
Expand Down Expand Up @@ -2805,10 +2803,12 @@ func cs_maxtrans(A *Matrix, seed int) []int {
}()
// get workspace
w = make([]int, 5*n)
cheap = w[n:]
js = w[2*n:]
is = w[3*n:]
ps = w[4*n:]
var (
cheap = w[n:]
js = w[2*n:]
is = w[3*n:]
ps = w[4*n:]
)

// for cheap assignment
for j = 0; j < n; j++ {
Expand All @@ -2826,7 +2826,7 @@ func cs_maxtrans(A *Matrix, seed int) []int {
}

// q = random permutation
q = cs_randperm(n, seed)
q := cs_randperm(n, seed)

// augment, starting at column q[k]
for k = 0; k < n; k++ {
Expand Down
Loading