Skip to content

Commit 7821461

Browse files
committed
Use explicit imports check
1 parent 411f7d3 commit 7821461

18 files changed

+124
-55
lines changed

Project.toml

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "NonlinearSolve"
22
uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
33
authors = ["SciML"]
4-
version = "3.12.0"
4+
version = "3.12.1"
55

66
[deps]
77
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
@@ -116,6 +116,7 @@ BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
116116
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
117117
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
118118
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
119+
ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7"
119120
FastLevenbergMarquardt = "7a0df574-e128-4d35-8cbd-3d84502bf7ce"
120121
FixedPointAcceleration = "817d07cb-a79a-5c30-9a31-890123675176"
121122
LeastSquaresOptim = "0fc2ff8b-aaa3-5acd-a817-1944a5e08891"
@@ -139,4 +140,4 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
139140
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
140141

141142
[targets]
142-
test = ["Aqua", "BandedMatrices", "BenchmarkTools", "CUDA", "Enzyme", "FastLevenbergMarquardt", "FixedPointAcceleration", "LeastSquaresOptim", "MINPACK", "ModelingToolkit", "NLSolvers", "NLsolve", "NaNMath", "NonlinearProblemLibrary", "OrdinaryDiffEq", "Pkg", "Random", "ReTestItems", "SIAMFANLEquations", "SpeedMapping", "StableRNGs", "StaticArrays", "Sundials", "Symbolics", "Test", "Zygote"]
143+
test = ["Aqua", "BandedMatrices", "BenchmarkTools", "CUDA", "Enzyme", "ExplicitImports", "FastLevenbergMarquardt", "FixedPointAcceleration", "LeastSquaresOptim", "MINPACK", "ModelingToolkit", "NLSolvers", "NLsolve", "NaNMath", "NonlinearProblemLibrary", "OrdinaryDiffEq", "Pkg", "Random", "ReTestItems", "SIAMFANLEquations", "SpeedMapping", "StableRNGs", "StaticArrays", "Sundials", "Symbolics", "Test", "Zygote"]

ext/NonlinearSolveBandedMatricesExt.jl

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
module NonlinearSolveBandedMatricesExt
22

3-
using BandedMatrices, LinearAlgebra, NonlinearSolve, SparseArrays
3+
using BandedMatrices: BandedMatrix
4+
using LinearAlgebra: Diagonal
5+
using NonlinearSolve: NonlinearSolve
6+
using SparseArrays: sparse
47

58
# This is used if we vcat a Banded Jacobian with a Diagonal Matrix in Levenberg
69
@inline NonlinearSolve._vcat(B::BandedMatrix, D::Diagonal) = vcat(sparse(B), D)

ext/NonlinearSolveFastLevenbergMarquardtExt.jl

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
module NonlinearSolveFastLevenbergMarquardtExt
22

3-
using ArrayInterface, NonlinearSolve, SciMLBase
4-
import ConcreteStructs: @concrete
5-
import FastClosures: @closure
6-
import FastLevenbergMarquardt as FastLM
7-
import StaticArraysCore: SArray
3+
using ArrayInterface: ArrayInterface
4+
using FastClosures: @closure
5+
using FastLevenbergMarquardt: FastLevenbergMarquardt
6+
using NonlinearSolve: NonlinearSolve, FastLevenbergMarquardtJL
7+
using SciMLBase: SciMLBase, NonlinearLeastSquaresProblem, NonlinearProblem, ReturnCode
8+
using StaticArraysCore: SArray
9+
10+
const FastLM = FastLevenbergMarquardt
811

912
@inline function _fast_lm_solver(::FastLevenbergMarquardtJL{linsolve}, x) where {linsolve}
1013
if linsolve === :cholesky

ext/NonlinearSolveFixedPointAccelerationExt.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module NonlinearSolveFixedPointAccelerationExt
22

3-
using NonlinearSolve, FixedPointAcceleration, SciMLBase
3+
using NonlinearSolve: NonlinearSolve, FixedPointAccelerationJL
4+
using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
5+
using FixedPointAcceleration: FixedPointAcceleration, fixed_point
46

57
function SciMLBase.__solve(prob::NonlinearProblem, alg::FixedPointAccelerationJL, args...;
68
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,

ext/NonlinearSolveLeastSquaresOptimExt.jl

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
module NonlinearSolveLeastSquaresOptimExt
22

3-
using NonlinearSolve, SciMLBase
4-
import ConcreteStructs: @concrete
5-
import LeastSquaresOptim as LSO
3+
using ConcreteStructs: @concrete
4+
using LeastSquaresOptim: LeastSquaresOptim
5+
using NonlinearSolve: NonlinearSolve, LeastSquaresOptimJL
6+
using SciMLBase: SciMLBase, NonlinearLeastSquaresProblem, NonlinearProblem, ReturnCode
7+
8+
const LSO = LeastSquaresOptim
69

710
@inline function _lso_solver(::LeastSquaresOptimJL{alg, ls}) where {alg, ls}
811
linsolve = ls === :qr ? LSO.QR() :

ext/NonlinearSolveMINPACKExt.jl

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
module NonlinearSolveMINPACKExt
22

3-
using MINPACK, NonlinearSolve, SciMLBase
4-
import FastClosures: @closure
3+
using MINPACK: MINPACK
4+
using NonlinearSolve: NonlinearSolve, CMINPACK
5+
using SciMLBase: SciMLBase, NonlinearLeastSquaresProblem, NonlinearProblem, ReturnCode
6+
using FastClosures: @closure
57

68
function SciMLBase.__solve(
79
prob::Union{NonlinearLeastSquaresProblem, NonlinearProblem}, alg::CMINPACK,

ext/NonlinearSolveNLSolversExt.jl

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
module NonlinearSolveNLSolversExt
22

3-
using ADTypes, FastClosures, NonlinearSolve, NLSolvers, SciMLBase, LinearAlgebra
4-
using FiniteDiff, ForwardDiff
3+
using ADTypes: ADTypes, AutoFiniteDiff, AutoForwardDiff, AutoPolyesterForwardDiff
4+
using FastClosures: @closure
5+
using FiniteDiff: FiniteDiff
6+
using ForwardDiff: ForwardDiff
7+
using LinearAlgebra: norm
8+
using NLSolvers: NLSolvers, NEqOptions, NEqProblem
9+
using NonlinearSolve: NonlinearSolve, NLSolversJL
10+
using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
511

612
function SciMLBase.__solve(prob::NonlinearProblem, alg::NLSolversJL, args...;
713
abstol = nothing, reltol = nothing, maxiters = 1000,

ext/NonlinearSolveNLsolveExt.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module NonlinearSolveNLsolveExt
22

3-
using NonlinearSolve, NLsolve, SciMLBase
3+
using NonlinearSolve: NonlinearSolve, NLsolveJL, TraceMinimal
4+
using NLsolve: NLsolve, OnceDifferentiable, nlsolve
5+
using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
46

57
function SciMLBase.__solve(
68
prob::NonlinearProblem, alg::NLsolveJL, args...; abstol = nothing,

ext/NonlinearSolveSIAMFANLEquationsExt.jl

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
module NonlinearSolveSIAMFANLEquationsExt
22

3-
using NonlinearSolve, SIAMFANLEquations, SciMLBase
4-
import FastClosures: @closure
3+
using FastClosures: @closure
4+
using NonlinearSolve: NonlinearSolve, SIAMFANLEquationsJL
5+
using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
6+
using SIAMFANLEquations: SIAMFANLEquations, aasol, nsol, nsoli, nsolsc, ptcsol, ptcsoli,
7+
ptcsolsc, secant
58

69
@inline function __siam_fanl_equations_retcode_mapping(sol)
710
if sol.errcode == 0

ext/NonlinearSolveSpeedMappingExt.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module NonlinearSolveSpeedMappingExt
22

3-
using NonlinearSolve, SciMLBase, SpeedMapping
3+
using NonlinearSolve: NonlinearSolve, SpeedMappingJL
4+
using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode
5+
using SpeedMapping: speedmapping
46

57
function SciMLBase.__solve(prob::NonlinearProblem, alg::SpeedMappingJL, args...;
68
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,

ext/NonlinearSolveSymbolicsExt.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module NonlinearSolveSymbolicsExt
22

3-
import NonlinearSolve, Symbolics
3+
using NonlinearSolve: NonlinearSolve
44

55
NonlinearSolve.is_extension_loaded(::Val{:Symbolics}) = true
66

ext/NonlinearSolveZygoteExt.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module NonlinearSolveZygoteExt
22

3-
import NonlinearSolve, Zygote
3+
using NonlinearSolve: NonlinearSolve
44

55
NonlinearSolve.is_extension_loaded(::Val{:Zygote}) = true
66

src/NonlinearSolve.jl

+55-27
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,58 @@ if isdefined(Base, :Experimental) && isdefined(Base.Experimental, Symbol("@max_m
44
@eval Base.Experimental.@max_methods 1
55
end
66

7-
import Reexport: @reexport
8-
import PrecompileTools: @recompile_invalidations, @compile_workload, @setup_workload
7+
using Reexport: @reexport
8+
using PrecompileTools: @recompile_invalidations, @compile_workload, @setup_workload
99

1010
@recompile_invalidations begin
11-
using ADTypes, ConcreteStructs, DiffEqBase, FastBroadcast, FastClosures, LazyArrays,
12-
LinearAlgebra, LinearSolve, MaybeInplace, Preferences, Printf, SciMLBase,
13-
SimpleNonlinearSolve, SparseArrays, SparseDiffTools
14-
15-
import ArrayInterface: ArrayInterface, undefmatrix, can_setindex, restructure,
16-
fast_scalar_indexing, ismutable
17-
import DiffEqBase: AbstractNonlinearTerminationMode,
18-
AbstractSafeNonlinearTerminationMode,
19-
AbstractSafeBestNonlinearTerminationMode,
20-
NonlinearSafeTerminationReturnCode, get_termination_mode
21-
import FiniteDiff
22-
import ForwardDiff
23-
import ForwardDiff: Dual
24-
import LineSearches
25-
import LinearSolve: ComposePreconditioner, InvPreconditioner, needs_concrete_A
26-
import RecursiveArrayTools: recursivecopy!, recursivefill!
27-
28-
import SciMLBase: AbstractNonlinearAlgorithm, JacobianWrapper, AbstractNonlinearProblem,
29-
AbstractSciMLOperator, NLStats, _unwrap_val, has_jac, isinplace
30-
import SparseDiffTools: AbstractSparsityDetection
31-
import StaticArraysCore: StaticArray, SVector, SArray, MArray, Size, SMatrix, MMatrix
32-
import SymbolicIndexingInterface: SymbolicIndexingInterface, ParameterIndexingProxy,
33-
symbolic_container, parameter_values, state_values,
34-
getu
11+
using ADTypes: AutoFiniteDiff, AutoForwardDiff, AutoPolyesterForwardDiff, AutoZygote,
12+
AutoEnzyme, AutoSparse
13+
# FIXME: deprecated, remove in future
14+
using ADTypes: AutoSparseFiniteDiff, AutoSparseForwardDiff,
15+
AutoSparsePolyesterForwardDiff, AutoSparseZygote
16+
17+
using ArrayInterface: ArrayInterface, can_setindex, restructure, fast_scalar_indexing,
18+
ismutable
19+
using ConcreteStructs: @concrete
20+
using DiffEqBase: DiffEqBase, AbstractNonlinearTerminationMode,
21+
AbstractSafeBestNonlinearTerminationMode, AbsNormTerminationMode,
22+
AbsSafeBestTerminationMode, AbsSafeTerminationMode,
23+
AbsTerminationMode, NormTerminationMode, RelNormTerminationMode,
24+
RelSafeBestTerminationMode, RelSafeTerminationMode,
25+
RelTerminationMode, SimpleNonlinearSolveTerminationMode,
26+
SteadyStateDiffEqTerminationMode
27+
using FastBroadcast: @..
28+
using FastClosures: @closure
29+
using FiniteDiff: FiniteDiff
30+
using ForwardDiff: ForwardDiff, Dual
31+
using LazyArrays: LazyArrays, ApplyArray, cache
32+
using LinearAlgebra: LinearAlgebra, ColumnNorm, Diagonal, I, LowerTriangular, Symmetric,
33+
UpperTriangular, axpy!, cond, diag, diagind, dot, issuccess,
34+
istril, istriu, lu, mul!, norm, pinv, tril!, triu!
35+
using LineSearches: LineSearches
36+
using LinearSolve: LinearSolve, LUFactorization, QRFactorization, ComposePreconditioner,
37+
InvPreconditioner, needs_concrete_A
38+
using MaybeInplace: @bb
39+
using Printf: @printf
40+
using Preferences: Preferences, @load_preference, @set_preferences!
41+
using RecursiveArrayTools: recursivecopy!, recursivefill!
42+
using SciMLBase: AbstractNonlinearAlgorithm, JacobianWrapper, AbstractNonlinearProblem,
43+
AbstractSciMLOperator, _unwrap_val, has_jac, isinplace
44+
using SparseArrays: AbstractSparseMatrix, SparseMatrixCSC
45+
using SparseDiffTools: SparseDiffTools, AbstractSparsityDetection,
46+
ApproximateJacobianSparsity, JacPrototypeSparsityDetection,
47+
NoSparsityDetection, PrecomputedJacobianColorvec,
48+
SymbolicsSparsityDetection, auto_jacvec, auto_jacvec!,
49+
auto_vecjac, init_jacobian, num_jacvec, num_jacvec!, num_vecjac,
50+
num_vecjac!, sparse_jacobian, sparse_jacobian!,
51+
sparse_jacobian_cache
52+
using StaticArraysCore: StaticArray, SVector, SArray, MArray, Size, SMatrix
53+
using SymbolicIndexingInterface: SymbolicIndexingInterface, ParameterIndexingProxy,
54+
symbolic_container, parameter_values, state_values,
55+
getu
3556
end
3657

37-
@reexport using ADTypes, SciMLBase, SimpleNonlinearSolve
58+
@reexport using SciMLBase, SimpleNonlinearSolve
3859

3960
# Type-Inference Friendly Check for Extension Loading
4061
is_extension_loaded(::Val) = false
@@ -166,4 +187,11 @@ export SteadyStateDiffEqTerminationMode, SimpleNonlinearSolveTerminationMode,
166187
# Tracing Functionality
167188
export TraceAll, TraceMinimal, TraceWithJacobianConditionNumber
168189

190+
# Reexport ADTypes
191+
export AutoFiniteDiff, AutoForwardDiff, AutoPolyesterForwardDiff, AutoZygote, AutoEnzyme,
192+
AutoSparse
193+
# FIXME: deprecated, remove in future
194+
export AutoSparseFiniteDiff, AutoSparseForwardDiff, AutoSparsePolyesterForwardDiff,
195+
AutoSparseZygote
196+
169197
end # module

src/abstract_types.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,12 @@ function returns_norm_form_damping(f::F) where {F}
311311
end
312312

313313
"""
314-
AbstractNonlinearSolveOperator <: SciMLBase.AbstractSciMLOperator
314+
AbstractNonlinearSolveOperator <: AbstractSciMLOperator
315315
316316
NonlinearSolve.jl houses a few custom operators. These will eventually be moved out but till
317317
then this serves as the abstract type for them.
318318
"""
319-
abstract type AbstractNonlinearSolveOperator{T} <: SciMLBase.AbstractSciMLOperator{T} end
319+
abstract type AbstractNonlinearSolveOperator{T} <: AbstractSciMLOperator{T} end
320320

321321
# Approximate Jacobian Algorithms
322322
"""

src/algorithms/lbroyden.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,4 @@ function LinearAlgebra.mul!(J::BroydenLowRankJacobian, u::AbstractArray,
169169
return J
170170
end
171171

172-
restructure(::BroydenLowRankJacobian, J::BroydenLowRankJacobian) = J
172+
ArrayInterface.restructure(::BroydenLowRankJacobian, J::BroydenLowRankJacobian) = J

src/descent/damped_newton.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ end
220220

221221
# J_cache is allowed to alias J
222222
## Compute ``J + D``
223-
@inline __dampen_jacobian!!(J_cache, J::SciMLBase.AbstractSciMLOperator, D) = J + D
223+
@inline __dampen_jacobian!!(J_cache, J::AbstractSciMLOperator, D) = J + D
224224
@inline __dampen_jacobian!!(J_cache, J::Number, D) = J + D
225225
@inline function __dampen_jacobian!!(J_cache, J::AbstractMatrix, D::AbstractMatrix)
226226
if __can_setindex(J_cache)

src/utils.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ LazyArrays.applied_axes(::typeof(__zero), x) = axes(x)
7373
@inline __maybe_symmetric(x::Number) = x
7474
## LinearSolve with `nothing` doesn't dispatch correctly here
7575
@inline __maybe_symmetric(x::StaticArray) = x
76-
@inline __maybe_symmetric(x::SparseArrays.AbstractSparseMatrix) = x
77-
@inline __maybe_symmetric(x::SciMLOperators.AbstractSciMLOperator) = x
76+
@inline __maybe_symmetric(x::AbstractSparseMatrix) = x
77+
@inline __maybe_symmetric(x::AbstractSciMLOperator) = x
7878

7979
# SparseAD --> NonSparseAD
8080
@inline __get_nonsparse_ad(backend::AutoSparse) = ADTypes.dense_ad(backend)

test/misc/qa_tests.jl

+14
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,17 @@
1313
Aqua.test_unbound_args(NonlinearSolve)
1414
Aqua.test_undefined_exports(NonlinearSolve)
1515
end
16+
17+
@testitem "Explicit Imports" tags=[:misc] begin
18+
using NonlinearSolve, ADTypes, SimpleNonlinearSolve, SciMLBase
19+
import BandedMatrices, FastLevenbergMarquardt, FixedPointAcceleration,
20+
LeastSquaresOptim, MINPACK, NLsolve, NLSolvers, SIAMFANLEquations, SpeedMapping,
21+
Symbolics, Zygote
22+
23+
using ExplicitImports
24+
25+
@test check_no_implicit_imports(NonlinearSolve;
26+
skip = (NonlinearSolve, Base, Core, SimpleNonlinearSolve, SciMLBase)) === nothing
27+
28+
@test check_no_stale_imports(NonlinearSolve) === nothing
29+
end

0 commit comments

Comments
 (0)