diff --git a/lib/OptimizationAuglag/test/qa/Project.toml b/lib/OptimizationAuglag/test/qa/Project.toml index ee182f1a0..722331ade 100644 --- a/lib/OptimizationAuglag/test/qa/Project.toml +++ b/lib/OptimizationAuglag/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationAuglag = "2ea93f80-9333-43a1-a68d-1f53b957a421" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationAuglag = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationAuglag = "2" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationAuglag/test/qa/qa.jl b/lib/OptimizationAuglag/test/qa/qa.jl index 9932f62a5..8ad565cd6 100644 --- a/lib/OptimizationAuglag/test/qa/qa.jl +++ b/lib/OptimizationAuglag/test/qa/qa.jl @@ -1,14 +1,25 @@ -using OptimizationAuglag, Aqua, JET +using SciMLTesting, OptimizationAuglag, JET using Test -@testset "Aqua" begin - # OptimizationOptimisers is used in tests as the inner solver, not in src. - Aqua.test_all( - OptimizationAuglag; - stale_deps = (; ignore = [:OptimizationOptimisers]) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationAuglag; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# * the ignored stale imports are part of the intentionally re-surfaced API. +run_qa( + OptimizationAuglag; + explicit_imports = true, + aqua_kwargs = (; + # OptimizationOptimisers is used in tests as the inner solver, not in src. + stale_deps = (; ignore = [:OptimizationOptimisers]), + ), + ei_kwargs = (; + no_stale_explicit_imports = (; ignore = (:norm,)), + all_qualified_accesses_are_public = (; ignore = (:OptimizationState, :__solve, :_check_and_convert_maxiters, :allowscallback, :allowsfg, :isa_dataiterator, :requiresconsjac, :requiresgradient)), + all_explicit_imports_are_public = (; ignore = (:OptimizationStats,)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationBBO/test/qa/Project.toml b/lib/OptimizationBBO/test/qa/Project.toml index f218fdc2b..6e7766a9e 100644 --- a/lib/OptimizationBBO/test/qa/Project.toml +++ b/lib/OptimizationBBO/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationBBO = "3e6eede4-6085-4f62-9a71-46d9bc1eb92b" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationBBO = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationBBO = "0.4" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationBBO/test/qa/qa.jl b/lib/OptimizationBBO/test/qa/qa.jl index 6706c6eda..84de7e4fb 100644 --- a/lib/OptimizationBBO/test/qa/qa.jl +++ b/lib/OptimizationBBO/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationBBO, Aqua, JET +using SciMLTesting, OptimizationBBO, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationBBO) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationBBO; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationBBO; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (Symbol("@logmsg"), :LogLevel, :OptRunController, :OptimizationState, :OptimizationStats, :SingleObjectiveMethodNames, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :deduce_retcode, :elapsed_time, :num_steps, :requiresbounds, :shutdown_optimizer!)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationBase/test/qa/Project.toml b/lib/OptimizationBase/test/qa/Project.toml index 89cfc4cb8..f048ff0de 100644 --- a/lib/OptimizationBase/test/qa/Project.toml +++ b/lib/OptimizationBase/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationBase = "bca83a33-5cc9-4baa-983d-23429ab6bcbb" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationBase = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationBase = "5" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationBase/test/qa/qa.jl b/lib/OptimizationBase/test/qa/qa.jl index 468e4dd1b..98302651a 100644 --- a/lib/OptimizationBase/test/qa/qa.jl +++ b/lib/OptimizationBase/test/qa/qa.jl @@ -1,21 +1,37 @@ -using OptimizationBase, Aqua, JET +using SciMLTesting, OptimizationBase, JET using Test -@testset "Aqua" begin - # OptimizationBase defines the Optimization solve interface itself, so it - # extends SciMLBase's __init/__solve and CommonSolve's init/solve/solve! (the - # latter reexported through SciMLBase) on SciMLBase.OptimizationProblem / - # AbstractOptimizationCache. Those are our *own* interface functions, so mark - # them as own for the piracy check rather than flagging the SciML types. - SB = OptimizationBase.SciMLBase - Aqua.test_all( - OptimizationBase; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# * the ignored stale imports are part of the intentionally re-surfaced API. +# OptimizationBase defines the Optimization solve interface itself, so it +# extends SciMLBase's __init/__solve and CommonSolve's init/solve/solve! (the +# latter reexported through SciMLBase) on SciMLBase.OptimizationProblem / +# AbstractOptimizationCache. Those are our *own* interface functions, so mark +# them as own for the piracy check rather than flagging the SciML types. +SB = OptimizationBase.SciMLBase +run_qa( + OptimizationBase; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [SB.__init, SB.__solve, SB.init, SB.solve, SB.solve!], - ) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationBase; target_defined_modules = true) -end + ), + ), + ei_kwargs = (; + no_stale_explicit_imports = (; ignore = (:I, :OptimizationStats, :extract_alg)), + all_qualified_accesses_via_owners = (; ignore = (:IsInfinite, :IteratorSize, :SizeUnknown)), + # Names imported/accessed from SciMLBase (plus Base.Iterators and + # SparseConnectivityTracer's AbstractTracer) that remain non-public in their + # source pkg on the registered releases (SciMLBase 3.27.0). The fix belongs + # upstream via `public` declarations there, not a local change. + all_qualified_accesses_are_public = (; ignore = (:AbstractOptimizationCache, :AbstractOptimizationFunction, :AbstractOptimizationSolution, :AbstractTracer, :ChainRulesOriginator, :IsInfinite, :IteratorSize, :MaxSense, :MinSense, :NoAD, :NonConcreteEltypeError, :SizeUnknown, :__init, :allowsconsjvp, :allowsconsvjp, :allowsfg, :allowsfgh, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian, :requireslagh)), + all_explicit_imports_are_public = (; ignore = (:KeywordArgError, :MaxSense, :MinSense, :ObjSense, :OptimizationStats, :__init, :__solve, :_concrete_solve_adjoint, :_concrete_solve_forward, :allowscallback, :extract_alg, :get_concrete_p, :get_concrete_u0, :get_root_indp, :get_updated_symbolic_problem, :has_kwargs, :promote_u0, :requiresbounds, :requiresconshess, :requiresconsjac, :requiresconstraints, :requiresgradient, :requireshessian, :wrap_sol)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationCMAEvolutionStrategy/test/qa/Project.toml b/lib/OptimizationCMAEvolutionStrategy/test/qa/Project.toml index 0e597e373..0aac83460 100644 --- a/lib/OptimizationCMAEvolutionStrategy/test/qa/Project.toml +++ b/lib/OptimizationCMAEvolutionStrategy/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationCMAEvolutionStrategy = "bd407f91-200f-4536-9381-e4ba712f53f8" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationCMAEvolutionStrategy = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationCMAEvolutionStrategy = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationCMAEvolutionStrategy/test/qa/qa.jl b/lib/OptimizationCMAEvolutionStrategy/test/qa/qa.jl index c3cd2f061..a7204f920 100644 --- a/lib/OptimizationCMAEvolutionStrategy/test/qa/qa.jl +++ b/lib/OptimizationCMAEvolutionStrategy/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationCMAEvolutionStrategy, Aqua, JET +using SciMLTesting, OptimizationCMAEvolutionStrategy, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationCMAEvolutionStrategy) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationCMAEvolutionStrategy; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationCMAEvolutionStrategy; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:BasicLogger, :OptimizationState, :OptimizationStats, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationEvolutionary/test/qa/Project.toml b/lib/OptimizationEvolutionary/test/qa/Project.toml index aeaad3d28..f352d5d04 100644 --- a/lib/OptimizationEvolutionary/test/qa/Project.toml +++ b/lib/OptimizationEvolutionary/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationEvolutionary = "cb963754-43f6-435e-8d4b-99009ff27753" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationEvolutionary = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationEvolutionary = "0.4" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationEvolutionary/test/qa/qa.jl b/lib/OptimizationEvolutionary/test/qa/qa.jl index 16a740881..1d9185cee 100644 --- a/lib/OptimizationEvolutionary/test/qa/qa.jl +++ b/lib/OptimizationEvolutionary/test/qa/qa.jl @@ -1,15 +1,23 @@ -using OptimizationEvolutionary, Aqua, JET +using SciMLTesting, OptimizationEvolutionary, JET using Test using Evolutionary -@testset "Aqua" begin - # SciML trait/interface methods are our own, not piracy — mark them as such. - # The Evolutionary.trace! override IS genuine piracy (changes Evolutionary's - # tracing globally); mark the piracy test broken until it's replaced. - SB = OptimizationEvolutionary.SciMLBase - Aqua.test_all( - OptimizationEvolutionary; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# SciML trait/interface methods are our own, not piracy — mark them as such. +# The Evolutionary.trace! override IS genuine piracy (changes Evolutionary's +# tracing globally); mark the piracy test broken until it's replaced. +SB = OptimizationEvolutionary.SciMLBase +run_qa( + OptimizationEvolutionary; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; broken = true, treat_as_own = [ SB.__solve, @@ -22,10 +30,11 @@ using Evolutionary SB.requiresgradient, SB.requireshessian, ], - ) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationEvolutionary; target_defined_modules = true) -end + ), + ), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats, :minimum)), + all_qualified_accesses_are_public = (; ignore = (:AbstractOptimizer, :OptimizationState, :OptimizationStats, :OptimizationTrace, :OptimizationTraceRecord, :Options, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :converged, :minimizer, :minimum, :optimize, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian, :trace!, :update!)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationGCMAES/test/qa/Project.toml b/lib/OptimizationGCMAES/test/qa/Project.toml index 423742e1e..cf54a6e6c 100644 --- a/lib/OptimizationGCMAES/test/qa/Project.toml +++ b/lib/OptimizationGCMAES/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationGCMAES = "6f0a0517-dbc2-4a7a-8a20-99ae7f27e911" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationGCMAES = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationGCMAES = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationGCMAES/test/qa/qa.jl b/lib/OptimizationGCMAES/test/qa/qa.jl index 225a72039..252b4aa93 100644 --- a/lib/OptimizationGCMAES/test/qa/qa.jl +++ b/lib/OptimizationGCMAES/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationGCMAES, Aqua, JET +using SciMLTesting, OptimizationGCMAES, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationGCMAES) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationGCMAES; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationGCMAES; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:OptimizationStats, :__init, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :maximize, :minimize, :requiresbounds, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian, :supports_sense)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationIpopt/test/qa/Project.toml b/lib/OptimizationIpopt/test/qa/Project.toml index 65af98957..b2b0ed65e 100644 --- a/lib/OptimizationIpopt/test/qa/Project.toml +++ b/lib/OptimizationIpopt/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationIpopt = "43fad042-7963-4b32-ab19-e2a4f9a67124" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationIpopt = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationIpopt = "1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationIpopt/test/qa/qa.jl b/lib/OptimizationIpopt/test/qa/qa.jl index 9966d9a09..c2781de1f 100644 --- a/lib/OptimizationIpopt/test/qa/qa.jl +++ b/lib/OptimizationIpopt/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationIpopt, Aqua, JET +using SciMLTesting, OptimizationIpopt, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationIpopt) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationIpopt; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationIpopt; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (Symbol("@logmsg"), :AbstractOptimizationCache, :ApplicationReturnStatus, :DEFAULT_VERBOSE, :Diverging_Iterates, :Feasible_Point_Found, :GetIpoptCurrentIterate, :Infeasible_Problem_Detected, :LogLevel, :Maximum_CpuTime_Exceeded, :Maximum_Iterations_Exceeded, :Maximum_WallTime_Exceeded, :OptimizationState, :OptimizationStats, :ReInitCache, :Search_Direction_Becomes_Too_Small, :Solve_Succeeded, :Solved_To_Acceptable_Level, :User_Requested_Stop, :__init, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :_process_verbose_param, :allowscallback, :get_observed, :get_p, :get_paramsyms, :get_syms, :instantiate_function, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian, :supports_opt_cache_interface, :supports_sense)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationLBFGSB/test/qa/Project.toml b/lib/OptimizationLBFGSB/test/qa/Project.toml index c76c93798..b864f609b 100644 --- a/lib/OptimizationLBFGSB/test/qa/Project.toml +++ b/lib/OptimizationLBFGSB/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationLBFGSB = "22f7324a-a79d-40f2-bebe-3af60c77bd15" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationLBFGSB = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationLBFGSB = "1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationLBFGSB/test/qa/qa.jl b/lib/OptimizationLBFGSB/test/qa/qa.jl index 8b7decd57..2dfc281ee 100644 --- a/lib/OptimizationLBFGSB/test/qa/qa.jl +++ b/lib/OptimizationLBFGSB/test/qa/qa.jl @@ -1,10 +1,20 @@ -using OptimizationLBFGSB, Aqua, JET +using SciMLTesting, OptimizationLBFGSB, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationLBFGSB) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationLBFGSB; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationLBFGSB; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:OptimizationState, :OptimizationStats, :__solve, :_check_and_convert_maxiters, :_opt_bounds, :allowscallback, :requiresconsjac, :requiresgradient, :structdiff)), + all_explicit_imports_are_public = (; ignore = (:OptimizationStats, :deduce_retcode)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationMOI/test/qa/Project.toml b/lib/OptimizationMOI/test/qa/Project.toml index 2155d4793..70e5cedeb 100644 --- a/lib/OptimizationMOI/test/qa/Project.toml +++ b/lib/OptimizationMOI/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationMOI = "fd9f6733-72f4-499f-8506-86b2bdd0dea1" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationMOI = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationMOI = "1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationMOI/test/qa/qa.jl b/lib/OptimizationMOI/test/qa/qa.jl index 3d7cfdac8..eb4a37ad4 100644 --- a/lib/OptimizationMOI/test/qa/qa.jl +++ b/lib/OptimizationMOI/test/qa/qa.jl @@ -1,16 +1,25 @@ -using OptimizationMOI, Aqua, JET +using SciMLTesting, OptimizationMOI, JET using Test using MathOptInterface -@testset "Aqua" begin - # OptimizationMOI implements the SciML optimization interface for - # MathOptInterface, so the trait/interface methods it adds extend SciML's *own* - # functions rather than committing type piracy — mark those functions as own. - SB = OptimizationMOI.SciMLBase - OB = OptimizationMOI.OptimizationBase - Aqua.test_all( - OptimizationMOI; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# * the ignored stale imports are part of the intentionally re-surfaced API. +# OptimizationMOI implements the SciML optimization interface for +# MathOptInterface, so the trait/interface methods it adds extend SciML's *own* +# functions rather than committing type piracy — mark those functions as own. +SB = OptimizationMOI.SciMLBase +OB = OptimizationMOI.OptimizationBase +run_qa( + OptimizationMOI; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [ SB.__init, SB.__solve, @@ -29,10 +38,13 @@ using MathOptInterface SB.supports_opt_cache_interface, OB.supports_sense, ], - ) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationMOI; target_defined_modules = true) -end + ), + ), + ei_kwargs = (; + no_stale_explicit_imports = (; ignore = (:parameters, :toexpr, :unknowns, :varmap_to_vars)), + all_qualified_accesses_via_owners = (; ignore = (Symbol("@sync"), :OptimizationStats)), + all_qualified_accesses_are_public = (; ignore = (Symbol("@sync"), :ALMOST_DUAL_INFEASIBLE, :ALMOST_INFEASIBLE, :ALMOST_LOCALLY_SOLVED, :ALMOST_OPTIMAL, :AbstractNLPEvaluator, :AbstractOptimizationCache, :AbstractOptimizer, :BarrierIterations, :CachingOptimizer, :Code, :DEFAULT_VERBOSE, :DUAL_INFEASIBLE, :EqualTo, :GetAttributeNotAllowed, :GreaterThan, :INFEASIBLE, :INFEASIBLE_OR_UNBOUNDED, :INTERRUPTED, :INVALID_MODEL, :INVALID_OPTION, :ITERATION_LIMIT, :Integer, :LOCALLY_INFEASIBLE, :LOCALLY_SOLVED, :LessThan, :MAX_SENSE, :MEMORY_LIMIT, :MIN_SENSE, :NLPBlock, :NLPBlockData, :NLPBoundsPair, :NODE_LIMIT, :NORM_LIMIT, :NUMERICAL_ERROR, :OBJECTIVE_LIMIT, :OPTIMAL, :OPTIMIZE_NOT_CALLED, :OTHER_ERROR, :OTHER_LIMIT, :ObjectiveFunction, :ObjectiveSense, :ObjectiveValue, :OptimizationState, :OptimizationStats, :OptimizerWithAttributes, :RawOptimizerAttribute, :ReInitCache, :ResultCount, :SLOW_PROGRESS, :SOLUTION_LIMIT, :ScalarAffineFunction, :ScalarAffineTerm, :ScalarQuadraticFunction, :ScalarQuadraticTerm, :Silent, :SolveTimeSec, :TIME_LIMIT, :TerminationStatus, :TerminationStatusCode, :TimeLimitSec, :Tunable, :UniversalFallback, :Utilities, :VariableIndex, :VariablePrimal, :VariablePrimalStart, :ZeroOne, :__init, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :_process_verbose_param, :add_constraint, :add_variables, :allowscallback, :canonicalize, :constraint_expr, :empty!, :eval_constraint, :eval_constraint_jacobian, :eval_constraint_jacobian_product, :eval_constraint_jacobian_transpose_product, :eval_hessian_lagrangian, :eval_objective, :eval_objective_gradient, :features_available, :get, :get_observed, :get_p, :get_paramsyms, :get_syms, :hessian_lagrangian_structure, :initialize, :instantiate, :instantiate_function, :is_empty, :jacobian_structure, :objective_expr, :optimize!, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian, :set, :supports, :supports_incremental_interface, :supports_opt_cache_interface, :supports_sense)), + all_explicit_imports_are_public = (; ignore = (:varmap_to_vars,)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationMadNLP/test/qa/Project.toml b/lib/OptimizationMadNLP/test/qa/Project.toml index 4b788ec05..05e37cc8d 100644 --- a/lib/OptimizationMadNLP/test/qa/Project.toml +++ b/lib/OptimizationMadNLP/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationMadNLP = "5d9c809f-c847-4062-9fba-1793bbfef577" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationMadNLP = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationMadNLP = "2" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationMadNLP/test/qa/qa.jl b/lib/OptimizationMadNLP/test/qa/qa.jl index 846c95e3f..50d05ac45 100644 --- a/lib/OptimizationMadNLP/test/qa/qa.jl +++ b/lib/OptimizationMadNLP/test/qa/qa.jl @@ -1,17 +1,24 @@ -using OptimizationMadNLP, Aqua, JET +using SciMLTesting, OptimizationMadNLP, JET using Test -@testset "Aqua" begin - # `@reexport using OptimizationBase` brings in SciMLBase's `solve!` while - # `using MadNLP` also pulls a `solve!` into scope; the clash leaves - # OptimizationMadNLP's `solve!` export pointing at neither binding. - # Mark broken until the reexport is restructured. - Aqua.test_all( - OptimizationMadNLP; - undefined_exports = (; broken = true) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationMadNLP; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# undefined_exports broken (tracked against SciML/Optimization.jl): the module +# `@reexport`s two packages that both export the name below, leaving it an +# unresolved conflict binding; the fix is a maintainer choice of which wins. +# Conflicting export: `solve!` (MadNLP + OptimizationBase). +run_qa( + OptimizationMadNLP; + explicit_imports = true, + aqua_broken = (:undefined_exports,), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (Symbol("@logmsg"), :AbstractBarrierUpdate, :AbstractMadNLPSolver, :AbstractUserCallback, :DIVERGING_ITERATES, :ExactHessian, :INFEASIBLE_PROBLEM_DETECTED, :INFO, :LogLevel, :LogLevels, :MAXIMUM_ITERATIONS_EXCEEDED, :MAXIMUM_WALLTIME_EXCEEDED, :NOT_ENOUGH_DEGREES_OF_FREEDOM, :OptimizationState, :OptimizationStats, :QuasiNewtonOptions, :RESTORATION_FAILED, :SEARCH_DIRECTION_BECOMES_TOO_SMALL, :SOLVED_TO_ACCEPTABLE_LEVEL, :SOLVE_SUCCEEDED, :Status, :USER_REQUESTED_STOP, :WARN, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :allowsconsjvp, :allowsconsvjp, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian, :requireslagh, :supports_sense)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationManopt/test/qa/Project.toml b/lib/OptimizationManopt/test/qa/Project.toml index 4c32d53cf..4f0c32b32 100644 --- a/lib/OptimizationManopt/test/qa/Project.toml +++ b/lib/OptimizationManopt/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationManopt = "e57b7fff-7ee7-4550-b4f0-90e9476e9fb6" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationManopt = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationManopt = "1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationManopt/test/qa/qa.jl b/lib/OptimizationManopt/test/qa/qa.jl index 04e04a0ea..4d34a6e36 100644 --- a/lib/OptimizationManopt/test/qa/qa.jl +++ b/lib/OptimizationManopt/test/qa/qa.jl @@ -1,15 +1,24 @@ -using OptimizationManopt, Aqua, JET +using SciMLTesting, OptimizationManopt, JET using Test -@testset "Aqua" begin - # Manifolds is declared because the curvature analysis path may pull it in, - # but no symbol from it is currently used in src — ignore it for now. - Aqua.test_all( - OptimizationManopt; - stale_deps = (; ignore = [:Manifolds]) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationManopt; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationManopt; + explicit_imports = true, + aqua_kwargs = (; + # Manifolds is declared because the curvature analysis path may pull it in, + # but no symbol from it is currently used in src — ignore it for now. + stale_deps = (; ignore = [:Manifolds]), + ), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:AbstractManifold,)), + all_qualified_accesses_are_public = (; ignore = (:AbstractManifold, :OptimizationState, :__solve, :allowscallback, :build_solution, :requiresgradient, :requireshessian, :supports_sense)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationMetaheuristics/test/qa/Project.toml b/lib/OptimizationMetaheuristics/test/qa/Project.toml index 5b15df1f9..868a0da39 100644 --- a/lib/OptimizationMetaheuristics/test/qa/Project.toml +++ b/lib/OptimizationMetaheuristics/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationMetaheuristics = "3aafef2f-86ae-4776-b337-85a36adf0b55" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationMetaheuristics = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationMetaheuristics = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationMetaheuristics/test/qa/qa.jl b/lib/OptimizationMetaheuristics/test/qa/qa.jl index 78663cab8..36668cef5 100644 --- a/lib/OptimizationMetaheuristics/test/qa/qa.jl +++ b/lib/OptimizationMetaheuristics/test/qa/qa.jl @@ -1,17 +1,26 @@ -using OptimizationMetaheuristics, Aqua, JET +using SciMLTesting, OptimizationMetaheuristics, JET using Test using Metaheuristics -@testset "Aqua" begin - # OptimizationMetaheuristics implements the SciML optimization interface for - # Metaheuristics, so the trait/interface methods it adds extend SciML's *own* - # functions rather than committing type piracy — mark those functions as own. - # `@reexport using Metaheuristics` exports `solve!`, which clashes with SciMLBase's - # `solve!` brought in transitively via OptimizationBase; mark broken until restructured. - SB = OptimizationMetaheuristics.SciMLBase - Aqua.test_all( - OptimizationMetaheuristics; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# OptimizationMetaheuristics implements the SciML optimization interface for +# Metaheuristics, so the trait/interface methods it adds extend SciML's *own* +# functions rather than committing type piracy — mark those functions as own. +# undefined_exports broken (tracked against SciML/Optimization.jl): +# `@reexport using Metaheuristics` exports `solve!`, which clashes with SciMLBase's +# `solve!` brought in transitively via OptimizationBase; mark broken until restructured. +SB = OptimizationMetaheuristics.SciMLBase +run_qa( + OptimizationMetaheuristics; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [ SB.__init, SB.__solve, @@ -21,10 +30,11 @@ using Metaheuristics SB.requiresbounds, ], ), - undefined_exports = (; broken = true) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationMetaheuristics; target_defined_modules = true) -end + ), + aqua_broken = (:undefined_exports,), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:AbstractAlgorithm, :OptimizationStats, :__init, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :create_child, :get_best, :requiresbounds)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationMultistartOptimization/test/qa/Project.toml b/lib/OptimizationMultistartOptimization/test/qa/Project.toml index dc92f62bc..d52c71fb3 100644 --- a/lib/OptimizationMultistartOptimization/test/qa/Project.toml +++ b/lib/OptimizationMultistartOptimization/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationMultistartOptimization = "e4316d97-8bbb-4fd3-a7d8-3851d2a72823" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationMultistartOptimization = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationMultistartOptimization = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationMultistartOptimization/test/qa/qa.jl b/lib/OptimizationMultistartOptimization/test/qa/qa.jl index 2eff8b8b8..194f63d41 100644 --- a/lib/OptimizationMultistartOptimization/test/qa/qa.jl +++ b/lib/OptimizationMultistartOptimization/test/qa/qa.jl @@ -1,16 +1,24 @@ -using OptimizationMultistartOptimization, Aqua, JET +using SciMLTesting, OptimizationMultistartOptimization, JET using Test using MultistartOptimization -@testset "Aqua" begin - # OptimizationMultistartOptimization implements the SciML optimization interface - # for MultistartOptimization, so the trait/interface methods it adds extend - # SciML's *own* functions rather than committing type piracy — mark those - # functions as own. - SB = OptimizationMultistartOptimization.SciMLBase - Aqua.test_all( - OptimizationMultistartOptimization; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# OptimizationMultistartOptimization implements the SciML optimization interface +# for MultistartOptimization, so the trait/interface methods it adds extend +# SciML's *own* functions rather than committing type piracy — mark those +# functions as own. +SB = OptimizationMultistartOptimization.SciMLBase +run_qa( + OptimizationMultistartOptimization; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [ SB.__init, SB.__solve, @@ -21,10 +29,11 @@ using MultistartOptimization ], ), # OptimizationNLopt is used in tests as the inner solver, not in src. - stale_deps = (; ignore = [:OptimizationNLopt]) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationMultistartOptimization; target_defined_modules = true) -end + stale_deps = (; ignore = [:OptimizationNLopt]), + ), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:OptimizationStats, :__init, :__solve, :allowscallback, :requiresbounds)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationNLPModels/test/qa/Project.toml b/lib/OptimizationNLPModels/test/qa/Project.toml index 72ecb52b5..f3f57dafc 100644 --- a/lib/OptimizationNLPModels/test/qa/Project.toml +++ b/lib/OptimizationNLPModels/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationNLPModels = "064b21be-54cf-11ef-1646-cdfee32b588f" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationNLPModels = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationNLPModels = "1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationNLPModels/test/qa/qa.jl b/lib/OptimizationNLPModels/test/qa/qa.jl index 5eff5628d..e28069631 100644 --- a/lib/OptimizationNLPModels/test/qa/qa.jl +++ b/lib/OptimizationNLPModels/test/qa/qa.jl @@ -1,23 +1,33 @@ -using OptimizationNLPModels, Aqua, JET +using SciMLTesting, OptimizationNLPModels, JET using Test using NLPModels -@testset "Aqua" begin - # This package defines SciMLBase.OptimizationFunction / SciMLBase.OptimizationProblem - # constructors for NLPModels.AbstractNLPModel. Those constructors extend SciML's - # *own* types, so mark those (not the NLPModels type) as own for the piracy check. - SB = OptimizationNLPModels.SciMLBase - Aqua.test_all( - OptimizationNLPModels; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# This package defines SciMLBase.OptimizationFunction / SciMLBase.OptimizationProblem +# constructors for NLPModels.AbstractNLPModel. Those constructors extend SciML's +# *own* types, so mark those (not the NLPModels type) as own for the piracy check. +SB = OptimizationNLPModels.SciMLBase +run_qa( + OptimizationNLPModels; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [SB.OptimizationFunction, SB.OptimizationProblem], ), # Optimization sublibraries used to construct OptimizationProblems in tests # but not `using`d in src; Aqua's static analysis can't see test-only usage. - stale_deps = (; ignore = [:OptimizationLBFGSB, :OptimizationMOI, :OptimizationOptimJL]) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationNLPModels; target_defined_modules = true) -end + stale_deps = (; ignore = [:OptimizationLBFGSB, :OptimizationMOI, :OptimizationOptimJL]), + ), + ei_kwargs = (; + # `NoAD` is owned by SciMLBase and remains non-public there on the registered + # release (SciMLBase 3.24.0); fix belongs upstream via a `public` declaration. + all_qualified_accesses_are_public = (; ignore = (:NoAD,)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationNLopt/test/qa/Project.toml b/lib/OptimizationNLopt/test/qa/Project.toml index 121b10ec5..185ab7065 100644 --- a/lib/OptimizationNLopt/test/qa/Project.toml +++ b/lib/OptimizationNLopt/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationNLopt = "4e6fcdb7-1186-4e1f-a706-475e75c168bb" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationNLopt = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationNLopt = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationNLopt/test/qa/qa.jl b/lib/OptimizationNLopt/test/qa/qa.jl index ffb0c53df..e097364e4 100644 --- a/lib/OptimizationNLopt/test/qa/qa.jl +++ b/lib/OptimizationNLopt/test/qa/qa.jl @@ -1,19 +1,27 @@ -using OptimizationNLopt, Aqua, JET +using SciMLTesting, OptimizationNLopt, JET using Test using NLopt -@testset "Aqua" begin - # OptimizationNLopt implements the SciML optimization interface for NLopt, so - # the trait/interface methods it adds extend SciML's *own* functions rather - # than committing type piracy — mark those functions as own for Aqua's piracy - # check. NLopt.Algorithm is also kept for the `(::NLopt.Algorithm)()` - # normalization method, which extends NLopt's type directly and has no SciML - # function to attribute it to. - SB = OptimizationNLopt.SciMLBase - OB = OptimizationNLopt.OptimizationBase - Aqua.test_all( - OptimizationNLopt; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# OptimizationNLopt implements the SciML optimization interface for NLopt, so +# the trait/interface methods it adds extend SciML's *own* functions rather +# than committing type piracy — mark those functions as own for Aqua's piracy +# check. NLopt.Algorithm is also kept for the `(::NLopt.Algorithm)()` +# normalization method, which extends NLopt's type directly and has no SciML +# function to attribute it to. +SB = OptimizationNLopt.SciMLBase +OB = OptimizationNLopt.OptimizationBase +run_qa( + OptimizationNLopt; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [ SB.__init, SB.__solve, @@ -27,10 +35,12 @@ using NLopt OB.supports_sense, NLopt.Algorithm, ], - ) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationNLopt; target_defined_modules = true) -end + ), + ), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:AUGLAG, :LD_AUGLAG, :LN_AUGLAG, :OptimizationState, :OptimizationStats, :__init, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :nlopt_set_param, :requiresconsjac, :requiresgradient, :requireshessian, :supports_sense)), + all_explicit_imports_are_public = (; ignore = (:deduce_retcode,)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationNOMAD/test/qa/Project.toml b/lib/OptimizationNOMAD/test/qa/Project.toml index 79959d0de..b06ef126e 100644 --- a/lib/OptimizationNOMAD/test/qa/Project.toml +++ b/lib/OptimizationNOMAD/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationNOMAD = "2cab0595-8222-4775-b714-9828e6a9e01b" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationNOMAD = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationNOMAD = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationNOMAD/test/qa/qa.jl b/lib/OptimizationNOMAD/test/qa/qa.jl index 5a01837b7..be8719883 100644 --- a/lib/OptimizationNOMAD/test/qa/qa.jl +++ b/lib/OptimizationNOMAD/test/qa/qa.jl @@ -1,15 +1,24 @@ -using OptimizationNOMAD, Aqua, JET +using SciMLTesting, OptimizationNOMAD, JET using Test -@testset "Aqua" begin - # `@reexport using OptimizationBase` exports `solve!`, which clashes with NOMAD's - # `solve!` brought in via `using NOMAD`; mark broken until the reexport is restructured. - Aqua.test_all( - OptimizationNOMAD; - undefined_exports = (; broken = true) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationNOMAD; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# undefined_exports broken (tracked against SciML/Optimization.jl): the module +# `@reexport`s two packages that both export the name below, leaving it an +# unresolved conflict binding; the fix is a maintainer choice of which wins. +# Conflicting export: `solve` (NOMAD + CommonSolve). +run_qa( + OptimizationNOMAD; + explicit_imports = true, + aqua_broken = (:undefined_exports,), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:DefaultOptimizationCache, :OptimizationStats, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationODE/test/qa/Project.toml b/lib/OptimizationODE/test/qa/Project.toml index ed09d8691..1987a2f88 100644 --- a/lib/OptimizationODE/test/qa/Project.toml +++ b/lib/OptimizationODE/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationODE = "dfa73e59-e644-4d8a-bf84-188d7ecb34e4" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationODE = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationODE = "0.1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationODE/test/qa/qa.jl b/lib/OptimizationODE/test/qa/qa.jl index 955692f8d..a5c04658c 100644 --- a/lib/OptimizationODE/test/qa/qa.jl +++ b/lib/OptimizationODE/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationODE, Aqua, JET +using SciMLTesting, OptimizationODE, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationODE) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationODE; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationODE; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:OptimizationStats, :__init, :__solve, :allowscallback, :requiresbounds, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationOptimJL/test/qa/Project.toml b/lib/OptimizationOptimJL/test/qa/Project.toml index 5ff01b753..693940a0d 100644 --- a/lib/OptimizationOptimJL/test/qa/Project.toml +++ b/lib/OptimizationOptimJL/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationOptimJL = "36348300-93cb-4f02-beb5-3c3902f8871e" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationOptimJL = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationOptimJL = "0.4" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationOptimJL/test/qa/qa.jl b/lib/OptimizationOptimJL/test/qa/qa.jl index 294f8b08f..755e258cd 100644 --- a/lib/OptimizationOptimJL/test/qa/qa.jl +++ b/lib/OptimizationOptimJL/test/qa/qa.jl @@ -1,16 +1,24 @@ -using OptimizationOptimJL, Aqua, JET +using SciMLTesting, OptimizationOptimJL, JET using Test using Optim -@testset "Aqua" begin - # OptimizationOptimJL implements the SciML optimization interface for Optim, - # so the trait/interface methods it adds extend SciML's *own* functions rather - # than committing type piracy — mark those functions as own. - SB = OptimizationOptimJL.SciMLBase - OB = OptimizationOptimJL.OptimizationBase - Aqua.test_all( - OptimizationOptimJL; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# OptimizationOptimJL implements the SciML optimization interface for Optim, +# so the trait/interface methods it adds extend SciML's *own* functions rather +# than committing type piracy — mark those functions as own. +SB = OptimizationOptimJL.SciMLBase +OB = OptimizationOptimJL.OptimizationBase +run_qa( + OptimizationOptimJL; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [ SB.__init, SB.__solve, @@ -26,10 +34,11 @@ using Optim SB.requireshessian, OB.supports_sense, ], - ) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationOptimJL; target_defined_modules = true) -end + ), + ), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:NLSolversBase, :OptimizationStats)), + all_qualified_accesses_are_public = (; ignore = (:AbstractConstrainedOptimizer, :AbstractOptimizer, :ConstrainedOptimizer, :KrylovTrustRegion, :NLSolversBase, :NoAD, :OptimizationState, :OptimizationStats, :Options, :ZerothOrderOptimizer, :__init, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :alloc_DF, :alloc_H, :allowscallback, :allowsfg, :converged, :iteration_limit_reached, :requiresbounds, :requiresconshess, :requiresconsjac, :requiresgradient, :requireshessian, :supports_sense, :value)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationOptimisers/test/qa/Project.toml b/lib/OptimizationOptimisers/test/qa/Project.toml index 070872911..e62b5604b 100644 --- a/lib/OptimizationOptimisers/test/qa/Project.toml +++ b/lib/OptimizationOptimisers/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationOptimisers = "42dfb2eb-d2b4-4451-abcd-913932933ac1" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationOptimisers = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationOptimisers = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationOptimisers/test/qa/qa.jl b/lib/OptimizationOptimisers/test/qa/qa.jl index 77d29b63c..65762606b 100644 --- a/lib/OptimizationOptimisers/test/qa/qa.jl +++ b/lib/OptimizationOptimisers/test/qa/qa.jl @@ -1,15 +1,23 @@ -using OptimizationOptimisers, Aqua, JET +using SciMLTesting, OptimizationOptimisers, JET using Test using Optimisers -@testset "Aqua" begin - # OptimizationOptimisers implements the SciML optimization interface for - # Optimisers, so the trait/interface methods it adds extend SciML's *own* - # functions rather than committing type piracy — mark those functions as own. - SB = OptimizationOptimisers.SciMLBase - Aqua.test_all( - OptimizationOptimisers; - piracies = ( +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +# OptimizationOptimisers implements the SciML optimization interface for +# Optimisers, so the trait/interface methods it adds extend SciML's *own* +# functions rather than committing type piracy — mark those functions as own. +SB = OptimizationOptimisers.SciMLBase +run_qa( + OptimizationOptimisers; + explicit_imports = true, + aqua_kwargs = (; + piracies = (; treat_as_own = [ SB.__init, SB.__solve, @@ -18,10 +26,11 @@ using Optimisers SB.has_init, SB.requiresgradient, ], - ) - ) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationOptimisers; target_defined_modules = true) -end + ), + ), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:OptimizationState, :OptimizationStats, :__init, :__solve, :_check_and_convert_maxiters, :allowscallback, :allowsfg, :isa_dataiterator, :requiresgradient)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationPRIMA/test/qa/Project.toml b/lib/OptimizationPRIMA/test/qa/Project.toml index bc1a3494b..848f462fa 100644 --- a/lib/OptimizationPRIMA/test/qa/Project.toml +++ b/lib/OptimizationPRIMA/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationPRIMA = "72f8369c-a2ea-4298-9126-56167ce9cbc2" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationPRIMA = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationPRIMA = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationPRIMA/test/qa/qa.jl b/lib/OptimizationPRIMA/test/qa/qa.jl index 5f983ba1a..348af4076 100644 --- a/lib/OptimizationPRIMA/test/qa/qa.jl +++ b/lib/OptimizationPRIMA/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationPRIMA, Aqua, JET +using SciMLTesting, OptimizationPRIMA, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationPRIMA) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationPRIMA; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationPRIMA; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:AnalysisResults, :DAMAGING_ROUNDING, :FTARGET_ACHIEVED, :INVALID_INPUT, :MAXFUN_REACHED, :MAXTR_REACHED, :NAN_INF_F, :NAN_INF_MODEL, :NAN_INF_X, :NO_SPACE_BETWEEN_BOUNDS, :NoAD, :OptimizationState, :OptimizationStats, :ReInitCache, :SMALL_TR_RADIUS, :Status, :ZERO_LINEAR_CONSTRAINT, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :_process_verbose_param, :allowscallback, :apply_sense, :instantiate_function, :requiresconshess, :requiresconsjac, :requiresconstraints, :supports_sense)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationPolyalgorithms/test/qa/Project.toml b/lib/OptimizationPolyalgorithms/test/qa/Project.toml index b784e5046..b92b7fcb2 100644 --- a/lib/OptimizationPolyalgorithms/test/qa/Project.toml +++ b/lib/OptimizationPolyalgorithms/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationPolyalgorithms = "500b13db-7e66-49ce-bda4-eed966be6282" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationPolyalgorithms = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationPolyalgorithms = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationPolyalgorithms/test/qa/qa.jl b/lib/OptimizationPolyalgorithms/test/qa/qa.jl index 837d8cffb..91a63d1c7 100644 --- a/lib/OptimizationPolyalgorithms/test/qa/qa.jl +++ b/lib/OptimizationPolyalgorithms/test/qa/qa.jl @@ -1,10 +1,18 @@ -using OptimizationPolyalgorithms, Aqua, JET +using SciMLTesting, OptimizationPolyalgorithms, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationPolyalgorithms) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationPolyalgorithms; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationPolyalgorithms; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_are_public = (; ignore = (:__solve, :allowscallback, :requiresgradient)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationPyCMA/test/qa/Project.toml b/lib/OptimizationPyCMA/test/qa/Project.toml index 94c0cfa30..c43ebe101 100644 --- a/lib/OptimizationPyCMA/test/qa/Project.toml +++ b/lib/OptimizationPyCMA/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationPyCMA = "fb0822aa-1fe5-41d8-99a6-e7bf6c238d3b" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationPyCMA = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationPyCMA = "1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationPyCMA/test/qa/qa.jl b/lib/OptimizationPyCMA/test/qa/qa.jl index 6b4eeb39a..f2ee94cde 100644 --- a/lib/OptimizationPyCMA/test/qa/qa.jl +++ b/lib/OptimizationPyCMA/test/qa/qa.jl @@ -1,10 +1,16 @@ -using OptimizationPyCMA, Aqua, JET +using SciMLTesting, OptimizationPyCMA, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationPyCMA) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationPyCMA; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl. This env +# can only be analyzed where CondaPkg can run; the broken checks are the +# `@reexport`/`using` module-name relies plus qualified accesses to SciMLBase/ +# OptimizationBase internals that are not (yet) declared public. +run_qa( + OptimizationPyCMA; + explicit_imports = true, + ei_broken = ( + :no_implicit_imports, + :all_qualified_accesses_via_owners, + :all_qualified_accesses_are_public, + ), +) diff --git a/lib/OptimizationQuadDIRECT/test/qa/Project.toml b/lib/OptimizationQuadDIRECT/test/qa/Project.toml index 75abe80d9..36ebe6e44 100644 --- a/lib/OptimizationQuadDIRECT/test/qa/Project.toml +++ b/lib/OptimizationQuadDIRECT/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationQuadDIRECT = "842ac81e-713d-465f-80f7-84eddaced298" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationQuadDIRECT = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationQuadDIRECT = "0.3" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationQuadDIRECT/test/qa/qa.jl b/lib/OptimizationQuadDIRECT/test/qa/qa.jl index 10fd60aa9..e2b922d89 100644 --- a/lib/OptimizationQuadDIRECT/test/qa/qa.jl +++ b/lib/OptimizationQuadDIRECT/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationQuadDIRECT, Aqua, JET +using SciMLTesting, OptimizationQuadDIRECT, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationQuadDIRECT) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationQuadDIRECT; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationQuadDIRECT; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats, :position)), + all_qualified_accesses_are_public = (; ignore = (:DefaultOptimizationCache, :OptimizationStats, :__solve, :_check_and_convert_maxiters, :allowscallback, :position, :requiresbounds)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationSciPy/test/qa/Project.toml b/lib/OptimizationSciPy/test/qa/Project.toml index bacc78eb2..cbc295724 100644 --- a/lib/OptimizationSciPy/test/qa/Project.toml +++ b/lib/OptimizationSciPy/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationSciPy = "cce07bd8-c79b-4b00-aee8-8db9cce22837" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationSciPy = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationSciPy = "0.4" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationSciPy/test/qa/qa.jl b/lib/OptimizationSciPy/test/qa/qa.jl index da96418ec..8b8e6e19a 100644 --- a/lib/OptimizationSciPy/test/qa/qa.jl +++ b/lib/OptimizationSciPy/test/qa/qa.jl @@ -1,10 +1,16 @@ -using OptimizationSciPy, Aqua, JET +using SciMLTesting, OptimizationSciPy, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationSciPy) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationSciPy; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl. This env +# can only be analyzed where CondaPkg can run; the broken checks are the +# `@reexport`/`using` module-name relies plus qualified accesses to SciMLBase/ +# OptimizationBase internals that are not (yet) declared public. +run_qa( + OptimizationSciPy; + explicit_imports = true, + ei_broken = ( + :no_implicit_imports, + :all_qualified_accesses_via_owners, + :all_qualified_accesses_are_public, + ), +) diff --git a/lib/OptimizationSophia/test/qa/Project.toml b/lib/OptimizationSophia/test/qa/Project.toml index b93bfb1f7..f6a0cb686 100644 --- a/lib/OptimizationSophia/test/qa/Project.toml +++ b/lib/OptimizationSophia/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationSophia = "892fee11-dca1-40d6-b698-84ba0d87399a" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationSophia = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationSophia = "1" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationSophia/test/qa/qa.jl b/lib/OptimizationSophia/test/qa/qa.jl index 5fd14e090..9108b7906 100644 --- a/lib/OptimizationSophia/test/qa/qa.jl +++ b/lib/OptimizationSophia/test/qa/qa.jl @@ -1,10 +1,18 @@ -using OptimizationSophia, Aqua, JET +using SciMLTesting, OptimizationSophia, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationSophia) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationSophia; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationSophia; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_are_public = (; ignore = (:OptimizationState, :__init, :__solve, :_check_and_convert_maxiters, :allowscallback, :allowsfg, :isa_dataiterator, :requiresgradient, :requireshessian)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/OptimizationSpeedMapping/test/qa/Project.toml b/lib/OptimizationSpeedMapping/test/qa/Project.toml index 882c268e2..ada131fdf 100644 --- a/lib/OptimizationSpeedMapping/test/qa/Project.toml +++ b/lib/OptimizationSpeedMapping/test/qa/Project.toml @@ -2,6 +2,7 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" OptimizationSpeedMapping = "3d669222-0d7d-4eb9-8a9f-d8528b0d9b91" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -10,6 +11,7 @@ OptimizationSpeedMapping = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" OptimizationSpeedMapping = "0.2" +SciMLTesting = "1.6" Test = "1" -julia = "1.10" diff --git a/lib/OptimizationSpeedMapping/test/qa/qa.jl b/lib/OptimizationSpeedMapping/test/qa/qa.jl index 0d57b5c5c..cb911615a 100644 --- a/lib/OptimizationSpeedMapping/test/qa/qa.jl +++ b/lib/OptimizationSpeedMapping/test/qa/qa.jl @@ -1,10 +1,19 @@ -using OptimizationSpeedMapping, Aqua, JET +using SciMLTesting, OptimizationSpeedMapping, JET using Test -@testset "Aqua" begin - Aqua.test_all(OptimizationSpeedMapping) -end - -@testset "JET static analysis" begin - JET.test_package(OptimizationSpeedMapping; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + OptimizationSpeedMapping; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + all_qualified_accesses_are_public = (; ignore = (:OptimizationStats, :__solve, :_check_and_convert_maxiters, :_check_and_convert_maxtime, :allowscallback, :requiresgradient)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/lib/SimpleOptimization/test/qa/Project.toml b/lib/SimpleOptimization/test/qa/Project.toml index 25d788e20..c47ddea66 100644 --- a/lib/SimpleOptimization/test/qa/Project.toml +++ b/lib/SimpleOptimization/test/qa/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" +SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" SimpleOptimization = "510db2f7-4254-4e34-bbda-04240c91ca8f" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" @@ -10,6 +11,7 @@ SimpleOptimization = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" +julia = "1.10" +SciMLTesting = "1.6" SimpleOptimization = "1" Test = "1" -julia = "1.10" diff --git a/lib/SimpleOptimization/test/qa/qa.jl b/lib/SimpleOptimization/test/qa/qa.jl index 6a8e70bb4..bb4c4ee39 100644 --- a/lib/SimpleOptimization/test/qa/qa.jl +++ b/lib/SimpleOptimization/test/qa/qa.jl @@ -1,10 +1,23 @@ -using SimpleOptimization, Aqua, JET +using SciMLTesting, SimpleOptimization, JET using Test -@testset "Aqua" begin - Aqua.test_all(SimpleOptimization) -end - -@testset "JET static analysis" begin - JET.test_package(SimpleOptimization; target_defined_modules = true) -end +# ExplicitImports findings, all tracked against SciML/Optimization.jl: +# * no_implicit_imports broken: the module relies on `@reexport`/`using` +# module names (SciMLBase/OptimizationBase/Reexport/...) that cannot be made +# explicit without restructuring. +# * the ignored *_are_public / *_via_owners names are owned by SciMLBase, +# OptimizationBase, the backend, or Base and are not (yet) declared public; +# the proper fix is upstream `public` declarations, not a local change. +run_qa( + SimpleOptimization; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_via_owners = (; ignore = (:OptimizationStats,)), + # `gradient` (ForwardDiff) and `instantiate_gradient` (SimpleOptimization's + # own internal) are non-public in their owners; `_unwrap_val` is a SciMLBase + # internal still non-public on the registered release (SciMLBase 3.24.0). + all_qualified_accesses_are_public = (; ignore = (:gradient, :instantiate_gradient, :OptimizationStats, :__solve, :_check_and_convert_maxiters)), + all_explicit_imports_are_public = (; ignore = (:_unwrap_val,)), + ), + ei_broken = (:no_implicit_imports,), +) diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 3c7cf8328..7b7309a46 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -14,6 +14,6 @@ Aqua = "0.8" JET = "0.9, 0.10, 0.11" Optimization = "5" SafeTestsets = "0.0.1, 0.1" -SciMLTesting = "1" +SciMLTesting = "1.6" Test = "1.10" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index a3f6622f7..aa46ae2c5 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,29 +1,40 @@ -using Optimization, Aqua, JET +using SciMLTesting, Optimization, JET using Test -@testset "Aqua" begin - Aqua.find_persistent_tasks_deps(Optimization) - Aqua.test_ambiguities(Optimization, recursive = false) - Aqua.test_deps_compat(Optimization) - Aqua.test_piracies( - Optimization, - treat_as_own = [ - OptimizationProblem, - Optimization.SciMLBase.AbstractOptimizationCache, - ] - ) - Aqua.test_project_extras(Optimization) - if !(VERSION < v"1.11") - # in CI we need to dev packages to run the tests - # which adds stale deps - # on later versions [sources] is used instead - Aqua.test_stale_deps(Optimization) - end - Aqua.test_unbound_args(Optimization) - Aqua.test_undefined_exports(Optimization) -end - -@testset "JET static analysis" begin - rep = JET.report_package(Optimization; target_modules = (Optimization,)) - @test length(JET.get_reports(rep)) == 0 -end +# no_implicit_imports: Optimization is a facade that `@reexport`s SciMLBase/ADTypes/ +# OptimizationBase and `using`s many helper modules; the implicit-import surface is +# large and intentional. Tracked as known-broken (SciML/Optimization.jl). +# no_stale_explicit_imports ignores: `instantiate_function` is reached as +# `Optimization.instantiate_function` by downstream/tests; `ReInitCache` and +# `OptimizationStats` are part of the intentionally re-surfaced cache/stats API. +# *_are_public ignores: these names are owned by SciMLBase/OptimizationBase, which +# have not (yet) declared them public, so the non-public flag is on the source pkg. +run_qa( + Optimization; + explicit_imports = true, + aqua_kwargs = (; + ambiguities = (; recursive = false), + piracies = (; + treat_as_own = [ + Optimization.SciMLBase.OptimizationProblem, + Optimization.SciMLBase.AbstractOptimizationCache, + ], + ), + ), + ei_kwargs = (; + no_stale_explicit_imports = (; + ignore = (:instantiate_function, :ReInitCache, :OptimizationStats), + ), + all_explicit_imports_are_public = (; + # Owned by SciMLBase (MaxSense/MinSense/ObjSense/OptimizationStats) and + # OptimizationBase (ReInitCache/instantiate_function); not yet declared + # public in their source pkgs (verified non-public on SciMLBase 3.24.0 / + # OptimizationBase 5.1.3). Fix belongs upstream via `public` declarations. + ignore = ( + :MaxSense, :MinSense, :ObjSense, :OptimizationStats, + :ReInitCache, :instantiate_function, + ), + ), + ), + ei_broken = (:no_implicit_imports,), +)