Skip to content

Commit 8655d7a

Browse files
Merge pull request #636 from SciML/explicitimportscode
Setup the codebase to use explicit imports
2 parents 3b10247 + a5c124e commit 8655d7a

13 files changed

+95
-47
lines changed

Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ ChainRulesCore = "1.22"
7777
ConcreteStructs = "0.2.3"
7878
DocStringExtensions = "0.9.3"
7979
EnumX = "1.0.4"
80+
ExplicitImports = "1"
8081
EnzymeCore = "0.8.1"
8182
FastAlmostBandedMatrices = "0.1"
8283
FastLapackInterface = "2"
@@ -122,6 +123,7 @@ julia = "1.10"
122123
[extras]
123124
AllocCheck = "9b6a8646-10ed-4001-bbdc-1d2f46dfbb1a"
124125
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
126+
ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7"
125127
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
126128
BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0"
127129
FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e"
@@ -150,4 +152,4 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
150152
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
151153

152154
[targets]
153-
test = ["Aqua", "Test", "IterativeSolvers", "InteractiveUtils", "KrylovKit", "KrylovPreconditioners", "Pkg", "Random", "SafeTestsets", "MultiFloats", "ForwardDiff", "HYPRE", "MPI", "BlockDiagonals", "FiniteDiff", "BandedMatrices", "FastAlmostBandedMatrices", "StaticArrays", "AllocCheck", "StableRNGs", "Zygote", "RecursiveFactorization", "Sparspak", "FastLapackInterface", "SparseArrays"]
155+
test = ["Aqua", "Test", "IterativeSolvers", "InteractiveUtils", "KrylovKit", "KrylovPreconditioners", "Pkg", "Random", "SafeTestsets", "MultiFloats", "ForwardDiff", "HYPRE", "MPI", "BlockDiagonals", "FiniteDiff", "BandedMatrices", "FastAlmostBandedMatrices", "StaticArrays", "AllocCheck", "StableRNGs", "Zygote", "RecursiveFactorization", "Sparspak", "FastLapackInterface", "SparseArrays", "ExplicitImports"]

ext/LinearSolveCUDAExt.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
module LinearSolveCUDAExt
22

33
using CUDA
4-
using LinearSolve
4+
using LinearSolve: LinearSolve, is_cusparse, defaultalg, cudss_loaded, DefaultLinearSolver,
5+
DefaultAlgorithmChoice, ALREADY_WARNED_CUDSS, LinearCache, needs_concrete_A,
6+
error_no_cudss_lu, CUDSS_LOADED, init_cacheval
57
using LinearSolve.LinearAlgebra, LinearSolve.SciMLBase, LinearSolve.ArrayInterface
68
using SciMLBase: AbstractSciMLOperator
79

ext/LinearSolveCUDSSExt.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module LinearSolveCUDSSExt
22

3-
using LinearSolve
3+
using LinearSolve: LinearSolve, cudss_loaded
44
using CUDSS
55

66
LinearSolve.cudss_loaded(A::CUDSS.CUDA.CUSPARSE.CuSparseMatrixCSR) = true

ext/LinearSolveEnzymeExt.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module LinearSolveEnzymeExt
22

3-
using LinearSolve
3+
using LinearSolve: LinearSolve, SciMLLinearSolveAlgorithm, init, solve!, LinearProblem,
4+
LinearCache, AbstractKrylovSubspaceMethod, DefaultLinearSolver,
5+
defaultalg_adjoint_eval, solve
46
using LinearSolve.LinearAlgebra
57
using EnzymeCore
68
using EnzymeCore: EnzymeRules

ext/LinearSolvePardisoExt.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ module LinearSolvePardisoExt
33
using Pardiso, LinearSolve
44
using SparseArrays
55
using SparseArrays: nonzeros, rowvals, getcolptr
6-
using LinearSolve: PardisoJL
6+
using LinearSolve: PardisoJL, @unpack
77

88
using LinearSolve.SciMLBase
9-
using LinearSolve.UnPack
109

1110
LinearSolve.needs_concrete_A(alg::PardisoJL) = true
1211

ext/LinearSolveRecursiveFactorizationExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
module LinearSolveRecursiveFactorizationExt
22

3-
using LinearSolve
3+
using LinearSolve: LinearSolve, userecursivefactorization, LinearCache, @get_cacheval, RFLUFactorization
44
using LinearSolve.LinearAlgebra, LinearSolve.ArrayInterface, RecursiveFactorization
5+
using SciMLBase: SciMLBase, ReturnCode
56

67
LinearSolve.userecursivefactorization(A::Union{Nothing, AbstractMatrix}) = true
78

ext/LinearSolveSparseArraysExt.jl

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
module LinearSolveSparseArraysExt
22

3-
using LinearSolve, LinearAlgebra
4-
using SparseArrays
5-
using SparseArrays: AbstractSparseMatrixCSC, nonzeros, rowvals, getcolptr
6-
using LinearSolve: BLASELTYPES, pattern_changed, ArrayInterface
3+
using LinearSolve: LinearSolve, BLASELTYPES, pattern_changed, ArrayInterface,
4+
@get_cacheval, CHOLMODFactorization, GenericFactorization, GenericLUFactorization,
5+
KLUFactorization, LUFactorization, NormalCholeskyFactorization, OperatorAssumptions,
6+
QRFactorization, RFLUFactorization, UMFPACKFactorization, solve
7+
using ArrayInterface: ArrayInterface
8+
using LinearAlgebra: LinearAlgebra, I, Hermitian, Symmetric, cholesky, ldiv!, lu, lu!, QR
9+
using SparseArrays: SparseArrays, AbstractSparseArray, AbstractSparseMatrixCSC, SparseMatrixCSC,
10+
nonzeros, rowvals, getcolptr, sparse, sprand
11+
using SparseArrays.UMFPACK: UMFPACK_OK
12+
using Base: /, \, convert
13+
using SciMLBase: SciMLBase, LinearProblem, ReturnCode
14+
import StaticArraysCore: SVector
715

816
# Can't `using KLU` because cannot have a dependency in there without
917
# requiring the user does `using KLU`
@@ -187,7 +195,7 @@ function SciMLBase.solve!(
187195
end
188196

189197
F = LinearSolve.@get_cacheval(cache, :UMFPACKFactorization)
190-
if F.status == SparseArrays.UMFPACK.UMFPACK_OK
198+
if F.status == UMFPACK_OK
191199
y = ldiv!(cache.u, F, cache.b)
192200
SciMLBase.build_linear_solution(alg, y, nothing, cache; retcode = ReturnCode.Success)
193201
else
@@ -298,36 +306,36 @@ function LinearSolve.init_cacheval(alg::NormalCholeskyFactorization,
298306
Symmetric{T, <:AbstractSparseArray{T}}}, b, u, Pl, Pr,
299307
maxiters::Int, abstol, reltol, verbose::Bool,
300308
assumptions::OperatorAssumptions) where {T <: BLASELTYPES}
301-
LinearSolve.ArrayInterface.cholesky_instance(convert(AbstractMatrix, A))
309+
ArrayInterface.cholesky_instance(convert(AbstractMatrix, A))
302310
end
303311

304312
# Specialize QR for the non-square case
305313
# Missing ldiv! definitions: https://github.com/JuliaSparse/SparseArrays.jl/issues/242
306314
function LinearSolve._ldiv!(x::Vector,
307-
A::Union{SparseArrays.QR, LinearAlgebra.QRCompactWY,
315+
A::Union{QR, LinearAlgebra.QRCompactWY,
308316
SparseArrays.SPQR.QRSparse,
309317
SparseArrays.CHOLMOD.Factor}, b::Vector)
310318
x .= A \ b
311319
end
312320

313321
function LinearSolve._ldiv!(x::AbstractVector,
314-
A::Union{SparseArrays.QR, LinearAlgebra.QRCompactWY,
322+
A::Union{QR, LinearAlgebra.QRCompactWY,
315323
SparseArrays.SPQR.QRSparse,
316324
SparseArrays.CHOLMOD.Factor}, b::AbstractVector)
317325
x .= A \ b
318326
end
319327

320328
# Ambiguity removal
321-
function LinearSolve._ldiv!(::LinearSolve.SVector,
329+
function LinearSolve._ldiv!(::SVector,
322330
A::Union{SparseArrays.CHOLMOD.Factor, LinearAlgebra.QR,
323331
LinearAlgebra.QRCompactWY, SparseArrays.SPQR.QRSparse},
324332
b::AbstractVector)
325333
(A \ b)
326334
end
327-
function LinearSolve._ldiv!(::LinearSolve.SVector,
335+
function LinearSolve._ldiv!(::SVector,
328336
A::Union{SparseArrays.CHOLMOD.Factor, LinearAlgebra.QR,
329337
LinearAlgebra.QRCompactWY, SparseArrays.SPQR.QRSparse},
330-
b::LinearSolve.SVector)
338+
b::SVector)
331339
(A \ b)
332340
end
333341

@@ -363,7 +371,7 @@ end
363371
function LinearSolve.init_cacheval(alg::QRFactorization, A::SparseMatrixCSC{Float64, <:Integer}, b, u, Pl, Pr,
364372
maxiters::Int, abstol, reltol, verbose::Bool,
365373
assumptions::OperatorAssumptions)
366-
LinearSolve.ArrayInterface.qr_instance(convert(AbstractMatrix, A), alg.pivot)
374+
ArrayInterface.qr_instance(convert(AbstractMatrix, A), alg.pivot)
367375
end
368376

369377
function LinearSolve.init_cacheval(

src/KLU/klu.jl

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
module KLU
22

3-
using SparseArrays
4-
using SparseArrays: SparseMatrixCSC
3+
using SparseArrays: SparseArrays, SparseMatrixCSC
54
import SparseArrays: nnz
65

76
export klu, klu!
87

98
const libklu = :libklu
9+
const libsuitesparseconfig = :libsuitesparseconfig
10+
using Base: Ptr, Cvoid, Cint, Cdouble, Cchar, Csize_t
1011
include("wrappers.jl")
1112

12-
import Base: (\), size, getproperty, setproperty!, propertynames, show
13+
import Base: (\), size, getproperty, setproperty!, propertynames, show,
14+
copy, eachindex, view, sortperm, unsafe_load, zeros, convert, eltype,
15+
length, parent, stride, finalizer, Complex, complex, imag, real, map!,
16+
summary, println, oneunit, sizeof, isdefined, setfield!, getfield,
17+
OutOfMemoryError, ArgumentError, OverflowError, ErrorException, DimensionMismatch
1318

1419
# Convert from 1-based to 0-based indices
1520
function decrement!(A::AbstractArray{T}) where {T <: Integer}
@@ -29,7 +34,8 @@ function increment!(A::AbstractArray{T}) where {T <: Integer}
2934
end
3035
increment(A::AbstractArray{<:Integer}) = increment!(copy(A))
3136

32-
using LinearAlgebra
37+
using LinearAlgebra: LinearAlgebra, ldiv!, Adjoint, Transpose, Factorization
38+
import LinearAlgebra: issuccess
3339

3440
const AdjointFact = isdefined(LinearAlgebra, :AdjointFactorization) ?
3541
LinearAlgebra.AdjointFactorization : Adjoint

src/LinearSolve.jl

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,33 @@ if isdefined(Base, :Experimental) &&
55
end
66

77
import PrecompileTools
8-
using ArrayInterface
9-
using Base: cache_dependencies, Bool
10-
using LinearAlgebra
8+
using ArrayInterface: ArrayInterface
9+
using Base: Bool, convert, copyto!, adjoint, transpose, /, \, require_one_based_indexing
10+
using LinearAlgebra: LinearAlgebra, BlasInt, LU, Adjoint, BLAS, Bidiagonal, BunchKaufman,
11+
ColumnNorm, Diagonal, Factorization, Hermitian, I, LAPACK, NoPivot,
12+
RowMaximum, RowNonZero, SymTridiagonal, Symmetric, Transpose,
13+
Tridiagonal, UniformScaling, axpby!, axpy!, bunchkaufman, bunchkaufman!,
14+
cholesky, cholesky!, diagind, dot, inv, ldiv!, ldlt!, lu, lu!, mul!, norm,
15+
qr, qr!, svd, svd!
1116
using LazyArrays: @~, BroadcastArray
12-
using SciMLBase: AbstractLinearAlgorithm, LinearAliasSpecifier
13-
using SciMLOperators
14-
using SciMLOperators: AbstractSciMLOperator, IdentityOperator
15-
using Setfield
16-
using UnPack
17-
using DocStringExtensions
18-
using EnumX
19-
using Markdown
20-
using ChainRulesCore
17+
using SciMLBase: SciMLBase, LinearAliasSpecifier, AbstractSciMLOperator,
18+
init, solve!, reinit!, solve, ReturnCode, LinearProblem
19+
using SciMLOperators: SciMLOperators, AbstractSciMLOperator, IdentityOperator, MatrixOperator,
20+
has_ldiv!, issquare
21+
using Setfield: @set, @set!
22+
using UnPack: @unpack
23+
using DocStringExtensions: DocStringExtensions
24+
using EnumX: EnumX, @enumx
25+
using Markdown: Markdown, @doc_str
26+
using ChainRulesCore: ChainRulesCore, NoTangent
27+
using Reexport: Reexport, @reexport
28+
using Libdl: Libdl, dlsym_e
2129
import InteractiveUtils
2230
import RecursiveArrayTools
2331

24-
import StaticArraysCore: StaticArray, SVector, MVector, SMatrix, MMatrix
32+
import StaticArraysCore: StaticArray, SVector, SMatrix
2533

26-
using LinearAlgebra: BlasInt, LU
27-
using LinearAlgebra.LAPACK: require_one_based_indexing,
28-
chkfinite, chkstride1,
34+
using LinearAlgebra.LAPACK: chkfinite, chkstride1,
2935
@blasfunc, chkargsok
3036

3137
import GPUArraysCore
@@ -34,8 +40,6 @@ import ConcreteStructs: @concrete
3440

3541
# wrap
3642
import Krylov
37-
using SciMLBase
38-
import Preferences
3943

4044
const CRC = ChainRulesCore
4145

@@ -51,9 +55,7 @@ else
5155
const usemkl = false
5256
end
5357

54-
using Reexport
5558
@reexport using SciMLBase
56-
using SciMLBase: _unwrap_val
5759

5860
abstract type SciMLLinearSolveAlgorithm <: SciMLBase.AbstractLinearAlgorithm end
5961
abstract type AbstractFactorization <: SciMLLinearSolveAlgorithm end
@@ -95,6 +97,11 @@ issparsematrix(A) = false
9597
make_SparseMatrixCSC(A) = nothing
9698
makeempty_SparseMatrixCSC(A) = nothing
9799

100+
# Stub functions for SparseArrays - overridden in extension
101+
getcolptr(A) = error("SparseArrays extension not loaded")
102+
rowvals(A) = error("SparseArrays extension not loaded")
103+
nonzeros(A) = error("SparseArrays extension not loaded")
104+
98105
EnumX.@enumx DefaultAlgorithmChoice begin
99106
LUFactorization
100107
QRFactorization

src/appleaccelerate.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::AppleAccelerateLUFactorizatio
252252
end
253253

254254
A, info = @get_cacheval(cache, :AppleAccelerateLUFactorization)
255-
LinearAlgebra.require_one_based_indexing(cache.u, cache.b)
255+
require_one_based_indexing(cache.u, cache.b)
256256
m, n = size(A, 1), size(A, 2)
257257
if m > n
258258
Bc = copy(cache.b)

0 commit comments

Comments
 (0)