1
+ macro get_cacheval (cache, algsym)
2
+ quote
3
+ if $ (esc (cache)). alg isa DefaultLinearSolver
4
+ getfield ($ (esc (cache)). cacheval, $ algsym)
5
+ else
6
+ $ (esc (cache)). cacheval
7
+ end
8
+ end
9
+ end
10
+
1
11
_ldiv! (x, A, b) = ldiv! (x, A, b)
2
12
3
13
function _ldiv! (x:: Vector , A:: Factorization , b:: Vector )
@@ -712,11 +722,11 @@ function SciMLBase.solve!(cache::LinearCache, alg::UMFPACKFactorization; kwargs.
712
722
if alg. check_pattern && ! (SuiteSparse. decrement (SparseArrays. getcolptr (A)) ==
713
723
cache. cacheval. colptr &&
714
724
SuiteSparse. decrement (SparseArrays. getrowval (A)) ==
715
- get_cacheval (cache, :UMFPACKFactorization ). rowval)
725
+ @ get_cacheval (cache, :UMFPACKFactorization ). rowval)
716
726
fact = lu (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
717
727
nonzeros (A)))
718
728
else
719
- fact = lu! (get_cacheval (cache, :UMFPACKFactorization ),
729
+ fact = lu! (@ get_cacheval (cache, :UMFPACKFactorization ),
720
730
SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
721
731
nonzeros (A)))
722
732
end
@@ -727,7 +737,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::UMFPACKFactorization; kwargs.
727
737
cache. isfresh = false
728
738
end
729
739
730
- y = ldiv! (cache. u, get_cacheval (cache, :UMFPACKFactorization ), cache. b)
740
+ y = ldiv! (cache. u, @ get_cacheval (cache, :UMFPACKFactorization ), cache. b)
731
741
SciMLBase. build_linear_solution (alg, y, nothing , cache)
732
742
end
733
743
@@ -782,7 +792,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::KLUFactorization; kwargs...)
782
792
A = convert (AbstractMatrix, A)
783
793
784
794
if cache. isfresh
785
- cacheval = get_cacheval (cache, :KLUFactorization )
795
+ cacheval = @ get_cacheval (cache, :KLUFactorization )
786
796
if cacheval != = nothing && alg. reuse_symbolic
787
797
if alg. check_pattern && ! (SuiteSparse. decrement (SparseArrays. getcolptr (A)) ==
788
798
cacheval. colptr &&
@@ -811,7 +821,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::KLUFactorization; kwargs...)
811
821
cache. isfresh = false
812
822
end
813
823
814
- y = ldiv! (cache. u, get_cacheval (cache, :KLUFactorization ), cache. b)
824
+ y = ldiv! (cache. u, @ get_cacheval (cache, :KLUFactorization ), cache. b)
815
825
SciMLBase. build_linear_solution (alg, y, nothing , cache)
816
826
end
817
827
@@ -863,7 +873,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::CHOLMODFactorization; kwargs.
863
873
A = convert (AbstractMatrix, A)
864
874
865
875
if cache. isfresh
866
- cacheval = get_cacheval (cache, :CHOLMODFactorization )
876
+ cacheval = @ get_cacheval (cache, :CHOLMODFactorization )
867
877
fact = cholesky (A; check = false )
868
878
if ! LinearAlgebra. issuccess (fact)
869
879
ldlt! (fact, A; check = false )
@@ -872,7 +882,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::CHOLMODFactorization; kwargs.
872
882
cache. isfresh = false
873
883
end
874
884
875
- cache. u .= get_cacheval (cache, :CHOLMODFactorization ) \ cache. b
885
+ cache. u .= @ get_cacheval (cache, :CHOLMODFactorization ) \ cache. b
876
886
SciMLBase. build_linear_solution (alg, cache. u, nothing , cache)
877
887
end
878
888
@@ -928,7 +938,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::RFLUFactorization{P, T};
928
938
kwargs... ) where {P, T}
929
939
A = cache. A
930
940
A = convert (AbstractMatrix, A)
931
- fact, ipiv = get_cacheval (cache, :RFLUFactorization )
941
+ fact, ipiv = @ get_cacheval (cache, :RFLUFactorization )
932
942
if cache. isfresh
933
943
if length (ipiv) != min (size (A)... )
934
944
ipiv = Vector {LinearAlgebra.BlasInt} (undef, min (size (A)... ))
@@ -937,7 +947,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::RFLUFactorization{P, T};
937
947
cache. cacheval = (fact, ipiv)
938
948
cache. isfresh = false
939
949
end
940
- y = ldiv! (cache. u, get_cacheval (cache, :RFLUFactorization )[1 ], cache. b)
950
+ y = ldiv! (cache. u, @ get_cacheval (cache, :RFLUFactorization )[1 ], cache. b)
941
951
SciMLBase. build_linear_solution (alg, y, nothing , cache)
942
952
end
943
953
@@ -1025,10 +1035,10 @@ function SciMLBase.solve!(cache::LinearCache, alg::NormalCholeskyFactorization;
1025
1035
cache. isfresh = false
1026
1036
end
1027
1037
if A isa SparseMatrixCSC
1028
- cache. u .= get_cacheval (cache, :NormalCholeskyFactorization ) \ (A' * cache. b)
1038
+ cache. u .= @ get_cacheval (cache, :NormalCholeskyFactorization ) \ (A' * cache. b)
1029
1039
y = cache. u
1030
1040
else
1031
- y = ldiv! (cache. u, get_cacheval (cache, :NormalCholeskyFactorization ), A' * cache. b)
1041
+ y = ldiv! (cache. u, @ get_cacheval (cache, :NormalCholeskyFactorization ), A' * cache. b)
1032
1042
end
1033
1043
SciMLBase. build_linear_solution (alg, y, nothing , cache)
1034
1044
end
@@ -1072,7 +1082,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::NormalBunchKaufmanFactorizati
1072
1082
cache. cacheval = fact
1073
1083
cache. isfresh = false
1074
1084
end
1075
- y = ldiv! (cache. u, get_cacheval (cache, :NormalBunchKaufmanFactorization ), A' * cache. b)
1085
+ y = ldiv! (cache. u, @ get_cacheval (cache, :NormalBunchKaufmanFactorization ), A' * cache. b)
1076
1086
SciMLBase. build_linear_solution (alg, y, nothing , cache)
1077
1087
end
1078
1088
@@ -1131,7 +1141,7 @@ end
1131
1141
function SciMLBase. solve! (cache:: LinearCache , alg:: FastLUFactorization ; kwargs... )
1132
1142
A = cache. A
1133
1143
A = convert (AbstractMatrix, A)
1134
- ws_and_fact = get_cacheval (cache, :FastLUFactorization )
1144
+ ws_and_fact = @ get_cacheval (cache, :FastLUFactorization )
1135
1145
if cache. isfresh
1136
1146
# we will fail here if A is a different *size* than in a previous version of the same cache.
1137
1147
# it may instead be desirable to resize the workspace.
@@ -1201,7 +1211,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::FastQRFactorization{P};
1201
1211
kwargs... ) where {P}
1202
1212
A = cache. A
1203
1213
A = convert (AbstractMatrix, A)
1204
- ws_and_fact = get_cacheval (cache, :FastQRFactorization )
1214
+ ws_and_fact = @ get_cacheval (cache, :FastQRFactorization )
1205
1215
if cache. isfresh
1206
1216
# we will fail here if A is a different *size* than in a previous version of the same cache.
1207
1217
# it may instead be desirable to resize the workspace.
@@ -1281,7 +1291,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::SparspakFactorization; kwargs
1281
1291
A = cache. A
1282
1292
if cache. isfresh
1283
1293
if cache. cacheval != = nothing && alg. reuse_symbolic
1284
- fact = sparspaklu! (get_cacheval (cache, :SparspakFactorization ),
1294
+ fact = sparspaklu! (@ get_cacheval (cache, :SparspakFactorization ),
1285
1295
SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
1286
1296
nonzeros (A)))
1287
1297
else
@@ -1291,6 +1301,6 @@ function SciMLBase.solve!(cache::LinearCache, alg::SparspakFactorization; kwargs
1291
1301
cache. cacheval = fact
1292
1302
cache. isfresh = false
1293
1303
end
1294
- y = ldiv! (cache. u, get_cacheval (cache, :SparspakFactorization ), cache. b)
1304
+ y = ldiv! (cache. u, @ get_cacheval (cache, :SparspakFactorization ), cache. b)
1295
1305
SciMLBase. build_linear_solution (alg, y, nothing , cache)
1296
1306
end
0 commit comments