diff --git a/src/EasyModelAnalysis.jl b/src/EasyModelAnalysis.jl index 9021bf9..e295af9 100644 --- a/src/EasyModelAnalysis.jl +++ b/src/EasyModelAnalysis.jl @@ -1,15 +1,27 @@ module EasyModelAnalysis -using LinearAlgebra -using Reexport +using Reexport: @reexport @reexport using DifferentialEquations @reexport using ModelingToolkit @reexport using Distributions -using Optimization, OptimizationBBO, OptimizationNLopt -using GlobalSensitivity, Turing -using AbstractMCMC -using SciMLExpectations @reexport using Plots + +using LinearAlgebra: LinearAlgebra, I, norm +using DifferentialEquations: DifferentialEquations, remake, solve +using ModelingToolkit: ModelingToolkit, Num, Symbolics, arguments, operation +using Distributions: Distributions, InverseGamma, MvNormal, product_distribution +using Plots: Plots, @layout, bar, plot, plot!, scatter! +using Optimization: Optimization, OptimizationProblem +using OptimizationBBO: OptimizationBBO, BBO_adaptive_de_rand_1_bin_radiuslimited +using OptimizationNLopt: OptimizationNLopt +using GlobalSensitivity: GlobalSensitivity, Sobol +using NLopt: NLopt, Opt, inequality_constraint! +using Turing: Turing, @varname +using AbstractMCMC: AbstractMCMC +using SciMLExpectations: SciMLExpectations, ExpectationProblem, GenericDistribution, + HCubatureJL, Koopman, SystemMap +using SciMLBase: SciMLBase, ContinuousCallback, EnsembleProblem, EnsembleSerial, + EnsembleSolution, EnsembleThreads, ODESolution, terminate! using SciMLBase.EnsembleAnalysis include("basics.jl") diff --git a/src/intervention.jl b/src/intervention.jl index e75d10b..3bdcc1b 100644 --- a/src/intervention.jl +++ b/src/intervention.jl @@ -31,9 +31,7 @@ function optimal_threshold_intervention( prob1 = remake(prob, p = p1) prob2 = remake(prob, p = p2) - function cost(x::Vector, grad::Vector) - return x[2] - x[1] - end + cost = (x::Vector, grad::Vector) -> x[2] - x[1] function duration_constraint(x::Vector, grad::Vector, ::Val{p} = Val(false)) where {p} prob_preintervention = remake(prob1, tspan = (t0, x[1])) diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 03e281b..0a6b61b 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -11,5 +11,5 @@ EasyModelAnalysis = {path = "../.."} [compat] Aqua = "0.8" SafeTestsets = "1, 0.1" -SciMLTesting = "1" +SciMLTesting = "1.6" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 3b25a94..0e7609e 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,24 +1,26 @@ -using EasyModelAnalysis, Aqua -@testset "Aqua" begin - # find_persistent_tasks_deps Pkg.develop's each dependency. On Julia 1.12 a Pkg - # regression (JuliaLang/Pkg.jl#4587) makes Pkg.develop honor a developed - # dependency's relative [sources] and resolve it against the depot, so - # OptimizationBBO (which pins its in-repo OptimizationBase via [sources], as - # every Optimization.jl sublibrary does) errors with "expected package - # OptimizationBase to exist at path .../OptimizationBBO/OptimizationBase". The - # [sources] is correct and load-bearing for the monorepo; the bug is upstream. - # Remove this version gate once Pkg.jl#4587 is fixed (see EasyModelAnalysis#303). - if VERSION < v"1.12" - Aqua.find_persistent_tasks_deps(EasyModelAnalysis) - end - Aqua.test_ambiguities(EasyModelAnalysis, recursive = false) - Aqua.test_deps_compat(EasyModelAnalysis) - Aqua.test_piracies( - EasyModelAnalysis, - treat_as_own = [] - ) - Aqua.test_project_extras(EasyModelAnalysis) - Aqua.test_stale_deps(EasyModelAnalysis) - Aqua.test_unbound_args(EasyModelAnalysis) - Aqua.test_undefined_exports(EasyModelAnalysis, broken = true) -end +using SciMLTesting, EasyModelAnalysis, Test + +run_qa( + EasyModelAnalysis; + explicit_imports = true, + aqua_kwargs = (; ambiguities = (; recursive = false)), + # undefined_exports: `Variable` and `rotate!` leak in (dead) via `@reexport` + # (SciML/EasyModelAnalysis.jl#300) + aqua_broken = (:undefined_exports,), + ei_kwargs = (; + all_qualified_accesses_via_owners = (; + ignore = ( + # `value` is the Symbolics unwrap API, re-exported through ModelingToolkit + # (the direct dependency); accessing it as `ModelingToolkit.value` is intended. + :value, + ), + ), + all_qualified_accesses_are_public = (; + ignore = ( + :AbstractMCMCEnsemble, # AbstractMCMC: no public alias for the ensemble type + :LN_SBPLX, # NLopt: algorithm constant, not marked public + :value, # ModelingToolkit: Symbolics unwrap re-export, not marked public + ), + ), + ), +)