Skip to content

Commit 7e337dc

Browse files
Merge pull request #1131 from ChrisRackauckas-Claude/static-improvements-20260107-122841
Add JET.jl static analysis tests and fix type instabilities
2 parents d1c49c5 + f7e86ee commit 7e337dc

5 files changed

Lines changed: 25 additions & 7 deletions

File tree

Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Flux = "0.13, 0.14, 0.15, 0.16"
4040
ForwardDiff = "0.10, 1"
4141
Ipopt = "1"
4242
IterTools = "1.3"
43+
JET = "0.9, 0.10, 0.11"
4344
LinearAlgebra = "1.10"
4445
Logging = "1.10"
4546
LoggingExtras = "0.4, 1"
@@ -83,6 +84,7 @@ Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
8384
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
8485
Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9"
8586
IterTools = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
87+
JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b"
8688
Lux = "b2108857-7c20-44ae-9111-449ecde12c47"
8789
MLUtils = "f1d291b0-491e-4a28-83b9-f70985020b54"
8890
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
@@ -107,6 +109,6 @@ Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6"
107109

108110
[targets]
109111
test = ["Aqua", "BenchmarkTools", "Boltz", "ComponentArrays", "DiffEqFlux", "Enzyme", "FiniteDiff", "Flux", "ForwardDiff",
110-
"Ipopt", "IterTools", "Lux", "MLUtils", "ModelingToolkit", "Optim", "OptimizationLBFGSB", "OptimizationMOI", "OptimizationOptimJL", "OptimizationOptimisers",
112+
"Ipopt", "IterTools", "JET", "Lux", "MLUtils", "ModelingToolkit", "Optim", "OptimizationLBFGSB", "OptimizationMOI", "OptimizationOptimJL", "OptimizationOptimisers",
111113
"OrdinaryDiffEqTsit5", "Pkg", "Random", "ReverseDiff", "SafeTestsets", "SciMLSensitivity", "SparseArrays",
112114
"Symbolics", "Test", "Tracker", "Zygote", "Mooncake"]

lib/OptimizationBase/src/adtypes.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,22 +227,24 @@ end
227227
function filled_spad(adtype)
228228
return if adtype.sparsity_detector isa ADTypes.NoSparsityDetector &&
229229
adtype.coloring_algorithm isa ADTypes.NoColoringAlgorithm
230-
adtype = AutoSparse(
230+
AutoSparse(
231231
adtype.dense_ad; sparsity_detector = TracerSparsityDetector(),
232232
coloring_algorithm = GreedyColoringAlgorithm()
233233
)
234234
elseif adtype.sparsity_detector isa ADTypes.NoSparsityDetector &&
235235
!(adtype.coloring_algorithm isa ADTypes.NoColoringAlgorithm)
236-
adtype = AutoSparse(
236+
AutoSparse(
237237
adtype.dense_ad; sparsity_detector = TracerSparsityDetector(),
238238
coloring_algorithm = adtype.coloring_algorithm
239239
)
240240
elseif !(adtype.sparsity_detector isa ADTypes.NoSparsityDetector) &&
241241
adtype.coloring_algorithm isa ADTypes.NoColoringAlgorithm
242-
adtype = AutoSparse(
242+
AutoSparse(
243243
adtype.dense_ad; sparsity_detector = adtype.sparsity_detector,
244244
coloring_algorithm = GreedyColoringAlgorithm()
245245
)
246+
else
247+
adtype
246248
end
247249
end
248250

lib/OptimizationBase/src/function.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,15 @@ function instantiate_function(
249249
strtind = isnothing(_strtind) ? 5 : _strtind + 5
250250
open_nrmlbrkt_ind = findfirst('(', adtypestr)
251251
open_squigllybrkt_ind = findfirst('{', adtypestr)
252-
open_brkt_ind = isnothing(open_squigllybrkt_ind) ? open_nrmlbrkt_ind :
252+
open_brkt_ind = if isnothing(open_nrmlbrkt_ind) && isnothing(open_squigllybrkt_ind)
253+
length(adtypestr) + 1
254+
elseif isnothing(open_squigllybrkt_ind)
255+
open_nrmlbrkt_ind
256+
elseif isnothing(open_nrmlbrkt_ind)
257+
open_squigllybrkt_ind
258+
else
253259
min(open_nrmlbrkt_ind, open_squigllybrkt_ind)
260+
end
254261
adpkg = adtypestr[strtind:(open_brkt_ind - 1)]
255262
throw(ArgumentError("The passed automatic differentiation backend choice is not available. Please load the corresponding AD package $adpkg."))
256263
end

lib/OptimizationBase/src/solve.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,9 @@ function solve!(cache::SciMLBase.AbstractOptimizationCache)::SciMLBase.AbstractO
217217
end
218218

219219
# needs to be defined for each cache
220-
function __solve(cache::SciMLBase.AbstractOptimizationCache)::SciMLBase.AbstractOptimizationSolution end
220+
function __solve(cache::SciMLBase.AbstractOptimizationCache)
221+
throw(ArgumentError("__solve not implemented for cache type $(typeof(cache))"))
222+
end
221223
function __init(
222224
prob::SciMLBase.OptimizationProblem, alg, args...;
223225
kwargs...

test/qa.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Optimization, Aqua
1+
using Optimization, Aqua, JET
22
@testset "Aqua" begin
33
Aqua.find_persistent_tasks_deps(Optimization)
44
Aqua.test_ambiguities(Optimization, recursive = false)
@@ -20,3 +20,8 @@ using Optimization, Aqua
2020
Aqua.test_unbound_args(Optimization)
2121
Aqua.test_undefined_exports(Optimization)
2222
end
23+
24+
@testset "JET static analysis" begin
25+
rep = JET.report_package(Optimization; target_modules = (Optimization,))
26+
@test length(JET.get_reports(rep)) == 0
27+
end

0 commit comments

Comments
 (0)