Skip to content

Commit 64f0c5c

Browse files
Refactor error handling and rename type aliases
- Replace custom `assert` function with Julia's built-in `@assert` macro - Update error type from `LinearAlgebraError` to standard `AssertionError` - Rename type aliases for LU factorization and partial pivoting LU factorization - Simplify variable names in kernel methods - Update test cases to expect `AssertionError`
1 parent e4b48fa commit 64f0c5c

9 files changed

+42
-48
lines changed

src/SimpleLinearAlgebra.jl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,6 @@ module SimpleLinearAlgebra
1414
message::String
1515
end
1616

17-
function assert(obj, condition::Bool, message::String)
18-
if !condition
19-
cls = split(string(typeof(obj)), ".")[2]
20-
message = @sprintf("%s failed: %s", cls, message)
21-
LinearAlgebraError(message) |> throw
22-
end
23-
end
24-
2517
include("forward-substitution.jl")
2618
include("back-substitution.jl")
2719
include("lu-factorization.jl")

src/back-substitution.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ struct BackSubstitutionProblem <: ProblemMixin
55

66
function BackSubstitutionProblem(u, b, tol)
77
prob = new(u, b, tol)
8-
assert(prob, istriu(u), "matrix must be upper triangular")
8+
@assert istriu(u) "matrix must be upper triangular"
99
return prob
1010
end
1111
end
@@ -26,7 +26,7 @@ function kernel(prob::BackSubstitutionProblem)
2626
x = zeros(n)
2727

2828
for i in n:-1:1
29-
assert(prob, abs(u[i, i]) > tol, "matrix is singular")
29+
@assert abs(u[i, i]) > tol "matrix is singular"
3030
x[i] += b[i] / u[i, i]
3131

3232
if i == n

src/forward-substitution.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ struct ForwardSubstitutionProblem <: ProblemMixin
55

66
function ForwardSubstitutionProblem(l, b, tol)
77
prob = new(l, b, tol)
8-
assert(prob, istril(l), "matrix must be lower triangular")
8+
@assert istril(l) "matrix must be lower triangular"
99
return prob
1010
end
1111
end
@@ -25,7 +25,7 @@ function kernel(prob::ForwardSubstitutionProblem)
2525
x = zeros(n)
2626

2727
for i in 1:n
28-
assert(prob, abs(l[i, i]) > tol, "matrix is singular")
28+
@assert abs(l[i, i]) > tol "matrix is singular"
2929
x[i] += b[i] / l[i, i]
3030

3131
if i == 1

src/lu-factorization.jl

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ struct LUFactorizationSolution <: SolutionMixin
44

55
function LUFactorizationSolution(l, u)
66
s = new(l, u)
7-
assert(s, istril(l), "matrix must be lower triangular")
8-
assert(s, istriu(u), "matrix must be upper triangular")
7+
@assert istril(l) "matrix must be lower triangular"
8+
@assert istriu(u) "matrix must be upper triangular"
99
return s
1010
end
1111
end
@@ -17,23 +17,23 @@ struct Version1 <: LUFactorizationProblemMixin
1717
tol::Real
1818
end
1919

20-
function kernel(p::Version1)
21-
tol = p.tol
22-
u = copy(p.a)
20+
function kernel(prob::Version1)
21+
tol = prob.tol
22+
u = copy(prob.a)
2323
n = size(u, 1)
2424

2525
l = Matrix{Float64}(I, n, n)
2626

2727
for k in 1:n-1
28-
assert(p, abs(u[k, k]) > tol, "Gaussian elimination failed")
28+
@assert abs(u[k, k]) > tol "Gaussian elimination failed"
2929

3030
m_k = Matrix{Float64}(I, n, n)
3131
for i in k+1:n
3232
m_k[i, k] = -u[i, k] / u[k, k]
3333
end
3434

3535
l = l * inv(m_k)
36-
u .= m_k * u
36+
u = m_k * u
3737
end
3838

3939
return LUFactorizationSolution(tril(l), triu(u))
@@ -44,26 +44,26 @@ struct Version2 <: LUFactorizationProblemMixin
4444
tol::Real
4545
end
4646

47-
function kernel(p::Version2)
48-
tol = p.tol
49-
u = copy(p.a)
47+
function kernel(prob::Version2)
48+
tol = prob.tol
49+
u = copy(prob.a)
5050
n = size(u, 1)
5151

5252
# initialize l to be the identity matrix
5353
l = Matrix{Float64}(I, n, n)
5454

5555
for k in 1:n-1
56-
assert(p, abs(u[k, k]) > tol, "Gaussian elimination failed")
56+
@assert abs(u[k, k]) > tol "Gaussian elimination failed"
5757
l[k+1:n, k] = u[k+1:n, k] / u[k, k]
5858
u[k+1:n, k+1:n] -= l[k+1:n, k] * u[k, k+1:n]'
5959
end
6060

6161
return LUFactorizationSolution(tril(l), triu(u))
6262
end
6363

64-
LUFactVersion1 = Version1
65-
LUFactVersion2 = Version2
66-
export LUFactVersion1, LUFactVersion2
64+
LUFactorizationV1 = Version1
65+
LUFactorizationV2 = Version2
66+
export LUFactorizationV1, LUFactorizationV2
6767

68-
LUFactorizationProblem = Version2
69-
export LUFactorizationProblem
68+
LUFactorization = LUFactorizationV2
69+
export LUFactorization

src/partial-pivoting-lu-factorization.jl

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ struct PartialPivotingLUFactorizationSolution <: SolutionMixin
33
u::AbstractMatrix
44
p::Vector{Int}
55
function PartialPivotingLUFactorizationSolution(l, u, p)
6-
s = new(l, u, p)
7-
assert(s, istril(l), "matrix must be lower triangular")
8-
assert(s, istriu(u), "matrix must be upper triangular")
9-
assert(s, isperm(p), "matrix must be a permutation matrix")
10-
return s
6+
sol = new(l, u, p)
7+
@assert istril(l) "matrix must be lower triangular"
8+
@assert istriu(u) "matrix must be upper triangular"
9+
@assert isperm(p) "matrix must be a permutation matrix"
10+
return sol
1111
end
1212
end
1313

@@ -16,9 +16,11 @@ struct PartialPivotingLUFactorizationProblem <: ProblemMixin
1616
tol::Real
1717
end
1818

19-
function kernel(p::PartialPivotingLUFactorizationProblem)
20-
tol = p.tol
21-
u = copy(p.a)
19+
PartialPivotingLUFactorization = PartialPivotingLUFactorizationProblem
20+
21+
function kernel(prob::PartialPivotingLUFactorizationProblem)
22+
tol = prob.tol
23+
u = copy(prob.a)
2224
n = size(u, 1)
2325

2426
l = zeros(n, n)
@@ -56,4 +58,4 @@ function kernel(p::PartialPivotingLUFactorizationProblem)
5658
return PartialPivotingLUFactorizationSolution(tril(l), triu(u), p)
5759
end
5860

59-
export PartialPivotingLUFactorizationProblem
61+
export PartialPivotingLUFactorization

test/back-substitution.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ end
1616
tol = 1e-10
1717
u = rand(n, n)
1818
b = rand(n)
19-
@test_throws LinearAlgebraError BackSubstitution(u, b, tol)
19+
@test_throws AssertionError BackSubstitution(u, b, tol)
2020
end
2121

2222
@testset "singular matrix" begin
@@ -25,5 +25,5 @@ end
2525
u = zeros(n, n)
2626
b = rand(n)
2727
prob = BackSubstitution(u, b, tol)
28-
@test_throws LinearAlgebraError kernel(prob)
28+
@test_throws AssertionError kernel(prob)
2929
end

test/forward-substitution.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ end
1515
tol = 1e-10
1616
l = rand(n, n)
1717
b = rand(n)
18-
@test_throws LinearAlgebraError ForwardSubstitution(l, b, tol)
18+
@test_throws AssertionError ForwardSubstitution(l, b, tol)
1919
end
2020

2121
@testset "singular matrix" begin
@@ -24,5 +24,5 @@ end
2424
l = zeros(n, n)
2525
b = rand(n)
2626
prob = ForwardSubstitution(l, b, tol)
27-
@test_throws LinearAlgebraError kernel(prob)
27+
@test_throws AssertionError kernel(prob)
2828
end

test/lu-factorization.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
tol = 1e-10
44
a = rand(n, n)
55

6-
p = LUFactVersion1(a, tol)
6+
p = LUFactorizationV1(a, tol)
77
s = kernel(p)
88
l = s.l
99
u = s.u
@@ -18,7 +18,7 @@ end
1818
tol = 1e-10
1919
a = rand(n, n)
2020

21-
p = LUFactVersion2(a, tol)
21+
p = LUFactorizationV2(a, tol)
2222
s = kernel(p)
2323
l = s.l
2424
u = s.u
@@ -33,7 +33,7 @@ end
3333
tol = 1e-10
3434
a = rand(n, n)
3535

36-
p = LUFactorizationProblem(a, tol)
36+
p = LUFactorization(a, tol)
3737
s = kernel(p)
3838
l = s.l
3939
u = s.u
@@ -47,6 +47,6 @@ end
4747
n = 10
4848
tol = 1e-10
4949
a = zeros(n, n)
50-
p = LUFactorizationProblem(a, tol)
51-
@test_throws LinearAlgebraError kernel(p)
50+
p = LUFactorization(a, tol)
51+
@test_throws AssertionError kernel(p)
5252
end

test/partial-pivoting-lu-factorization.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
tol = 1e-10
44
a = rand(n, n)
55

6-
p = PartialPivotingLUFactorizationProblem(a, tol)
6+
p = PartialPivotingLUFactorization(a, tol)
77
s = kernel(p)
88

99
@test istril(s.l)
@@ -14,7 +14,7 @@
1414
u = s.u
1515
p = zeros(Int, n, n)
1616
setindex!.(Ref(p), 1, 1:n, s.p)
17-
17+
1818
@test minimum(a[s.p, :] - l * u) < tol
1919
@test minimum(p * a - l * u) < tol
2020
end

0 commit comments

Comments
 (0)