Skip to content

Commit 776d7c7

Browse files
ChrisRackauckas-ClaudeChrisRackauckasclaude
authored
QA: run_qa v1.6 form + ExplicitImports (#468)
* QA: run_qa v1.6 form + ExplicitImports Convert the hand-rolled test/qa Aqua body to SciMLTesting's run_qa v1.6 declarative form and enable ExplicitImports (explicit_imports = true). - Add a test/qa/Project.toml sub-env (Aqua + SciMLTesting "1.6" + SafeTestsets + Test, package via [sources]) so the QA group is isolated, matching the SciMLTesting folder model used by sibling repos. - qa.jl now calls run_qa(ModelingToolkitStandardLibrary; explicit_imports = true, ...). Aqua + ExplicitImports come from SciMLTesting's own deps. JET is not run (the prior QA did not run JET). The original non-broken Aqua tweak (ambiguities recursive = false) is preserved via aqua_kwargs. - ExplicitImports findings (vs released SciMLTesting 1.6.0): * no_stale_explicit_imports: FIXED by removing genuinely unused imports (RealOutput in Electrical / IsothermalCompressible / TranslationalModelica; getdefault + IfElse.ifelse in Translational). * all_explicit_imports_via_owners / *_are_public / all_qualified_accesses_are_public: ignore other packages' non-public names (unwrap<-Symbolics, ifelse<-IfElse, getdefault/isvariable/t_nounits<-ModelingToolkitBase, SConst<-Symbolics, depwarn<-Base). Documented per source. * no_implicit_imports: many submodules `using ModelingToolkitBase, Symbolics, IfElse` for exported names/macros; mass-explicit refactor is large and tracked in #467, kept as ei_broken = (:no_implicit_imports,). - Drop now-stale Aqua from the root [extras]/[targets].test/[compat] (Aqua moved to the QA sub-env; ExplicitImports stays transitive via SciMLTesting). Verified locally on Julia 1.10 with SciMLTesting 1.6.0 from the registry: QA group = 16 Pass, 1 Broken, 0 Fail, 0 Error. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Downgrade: raise DiffEqBase floor to 6.190 The Downgrade CI lane precompile-failed with a `CommonSolve.init` method ambiguity between DiffEqBase's `init(::Union{AbstractDEProblem, NonlinearProblem}, args...)` and NonlinearSolveBase's `init(::AbstractNonlinearProblem, ::AbstractNonlinearTerminationMode, du, u, ...)`, surfaced while precompiling NonlinearSolveFirstOrder / OrdinaryDiffEq*. DiffEqBase 6.190.0 (commit "remove NonlinearSolve things") dropped `NonlinearProblem` from that `init` signature, removing the ambiguity. The old floor 6.189.1 still carried the colliding method, so downgrade resolved into the ambiguous state. Bump the floor to 6.190. Verified on Julia 1.10: with DiffEqBase 6.190.0 and the CI-downgrade-resolved solver stack (NonlinearSolveFirstOrder 1.7.0, NonlinearSolveBase 1.14.0, SciMLBase 2.125.0, OrdinaryDiffEq 6.102.1, OrdinaryDiffEqBDF/SDIRK/Default/ NonlinearSolve at floors), all 51 packages precompile cleanly (the 5 that failed in CI now pass). 6.190.0 requires SciMLBase >= 2.115.0, satisfied by the resolved 2.125.0. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * QA: eliminate ExplicitImports exceptions (no implicit imports) Make every submodule's `using ModelingToolkitBase/Symbolics/IfElse` explicit so the package no longer relies on implicit imports, then drop the corresponding ei exceptions from the QA configuration. Source changes (per-module explicit name lists derived from ExplicitImports.print_explicit_imports on Julia 1.12): - Each component submodule now imports exactly the macros/types it uses (e.g. @component, @connector, @nAmed, @parameters, @unpack, @variables, System, Equation, Flow, compose, connect, extend, ParentScope, domain_connect, @register_symbolic, @register_derivative, Differential), plus the bare module names that are accessed qualified. - Blocks/sources.jl: `using DiffEqBase`/`using PreallocationTools` made explicit (DiffCache, GeneralLazyBufferCache, get_tmp); DiffEqBase had no used names so only its module name is imported. - The thin wrapper modules (Magnetic, Mechanical, Hydraulic) only reference the ModelingToolkitBase module name, so they import just that. qa.jl exceptions removed (verified now unnecessary against released SciMLTesting 1.7.0 / SciMLBase 3.30 / ModelingToolkitBase 1.48 / Symbolics 7.29): - ei_broken = (:no_implicit_imports,) -> all 16 modules now pass the check. - all_explicit_imports_via_owners ignore (:unwrap) -> passes with no ignore. - all_explicit_imports_are_public: dropped :unwrap (public in Symbolics) and :getdefault (public in ModelingToolkitBase); only :ifelse remains. - all_qualified_accesses_are_public: dropped :t_nounits (public) and :depwarn (no longer flagged); only :ifelse, :SConst, :isvariable remain. Remaining ignores are irreducible (genuinely non-public upstream names): ifelse (IfElse's sole export, not declared public), SConst (Symbolics-internal, used in a @register_derivative), isvariable (ModelingToolkitBase-internal). Verified on Julia 1.12.6: full QA group green via run_qa (17 Pass / 0 Broken, was 16 Pass / 1 Broken), and a smoke test constructs one component from every affected module successfully (Blocks.Sine/DeadZone, Electrical.Pin, IsothermalCompressible.Cap, FluxTubes.Ground, etc.). Runic-formatted. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 0539325 commit 776d7c7

18 files changed

Lines changed: 79 additions & 44 deletions

File tree

Project.toml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@ Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
1414

1515
[compat]
1616
ADTypes = "1"
17-
Aqua = "0.8"
1817
ChainRulesCore = "1"
1918
ControlSystemsBase = "1.4"
2019
DataFrames = "1.7"
2120
DataInterpolations = "8"
22-
DiffEqBase = "6.189.1, 7"
21+
DiffEqBase = "6.190, 7"
2322
ForwardDiff = "0.10, 1"
2423
IfElse = "0.1"
2524
LinearAlgebra = "1.10"
@@ -44,7 +43,6 @@ julia = "1.10"
4443

4544
[extras]
4645
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
47-
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
4846
ControlSystemsBase = "aaaaaaaa-a6ca-5380-bf3e-84a91bcd477e"
4947
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
5048
DataInterpolations = "82cc6244-b520-54b8-b5a6-8a565e85f1d0"
@@ -66,4 +64,4 @@ SymbolicIndexingInterface = "2efcf032-c050-4f8e-a9bb-153293bab1f5"
6664
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
6765

6866
[targets]
69-
test = ["ADTypes", "Aqua", "LinearAlgebra", "OrdinaryDiffEqBDF", "OrdinaryDiffEqDefault", "OrdinaryDiffEq", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqSDIRK", "SafeTestsets", "SciMLTesting", "Test", "ControlSystemsBase", "DataFrames", "DataInterpolations", "SciMLBase", "SciMLStructures", "SymbolicIndexingInterface", "ForwardDiff", "SciCompDSL", "ModelingToolkit"]
67+
test = ["ADTypes", "LinearAlgebra", "OrdinaryDiffEqBDF", "OrdinaryDiffEqDefault", "OrdinaryDiffEq", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqSDIRK", "SafeTestsets", "SciMLTesting", "Test", "ControlSystemsBase", "DataFrames", "DataInterpolations", "SciMLBase", "SciMLStructures", "SymbolicIndexingInterface", "ForwardDiff", "SciCompDSL", "ModelingToolkit"]

src/Blocks/Blocks.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
The module `Blocks` contains common input-output components, referred to as blocks.
33
"""
44
module Blocks
5-
using ModelingToolkitBase, Symbolics
5+
using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named,
6+
@parameters, @unpack, System, compose, connect, extend,
7+
getdefault, t_nounits as t, D_nounits as D
8+
using Symbolics: Symbolics, @register_symbolic, @variables, Differential, Equation
69
import IfElse: ifelse
710
import ..@symcheck
8-
using ModelingToolkitBase: getdefault, t_nounits as t, D_nounits as D
911

1012
export RealInput, RealInputArray, RealOutput, RealOutputArray, SISO
1113
include("utils.jl")

src/Blocks/sources.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using DiffEqBase
1+
using DiffEqBase: DiffEqBase
22
import ChainRulesCore
3-
using PreallocationTools
3+
using PreallocationTools: DiffCache, GeneralLazyBufferCache, get_tmp
44

55
# Define and register smooth functions
66
# These are "smooth" aka differentiable and avoid Gibbs effect

src/Electrical/Electrical.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ This library contains electrical components to build up analog circuits.
44
"""
55
module Electrical
66

7-
using ModelingToolkitBase, Symbolics, IfElse
8-
using ModelingToolkitBase: t_nounits as t, D_nounits as D
7+
using IfElse: IfElse
8+
using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @constants,
9+
@named, @parameters, @unpack, Flow, System, connect, extend,
10+
t_nounits as t, D_nounits as D
11+
using Symbolics: Symbolics, @register_symbolic, @variables, Equation
912
using ..Thermal: HeatPort
1013
using ..Mechanical.Rotational: Flange, Support
11-
using ..Blocks: RealInput, RealOutput
14+
using ..Blocks: RealInput
1215

1316
export Pin, OnePort
1417
include("utils.jl")

src/Hydraulic/Hydraulic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Library of hydraulic models.
33
"""
44
module Hydraulic
55

6-
using ModelingToolkitBase
6+
using ModelingToolkitBase: ModelingToolkitBase
77

88
include("IsothermalCompressible/IsothermalCompressible.jl")
99

src/Hydraulic/IsothermalCompressible/IsothermalCompressible.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ Library to model iso-thermal compressible liquid fluid flow
33
"""
44
module IsothermalCompressible
55

6-
using ModelingToolkitBase, Symbolics
7-
using ModelingToolkitBase: t_nounits as t, D_nounits as D
6+
using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named,
7+
@parameters, Flow, ParentScope, System, connect, domain_connect,
8+
t_nounits as t, D_nounits as D
9+
using Symbolics: Symbolics, @register_derivative, @register_symbolic, @variables, Equation
810

9-
using ...Blocks: RealInput, RealOutput
11+
using ...Blocks: RealInput
1012
using ...Mechanical.Translational: MechanicalPort, Mass
1113

1214
using IfElse: ifelse

src/Magnetic/FluxTubes/FluxTubes.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module FluxTubes
2-
using ModelingToolkitBase
3-
using ModelingToolkitBase: t_nounits as t, D_nounits as D
2+
using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named,
3+
@parameters, @unpack, @variables, Equation, Flow, System, connect, extend,
4+
t_nounits as t, D_nounits as D
45
using ...Electrical: Pin
56

67
export PositiveMagneticPort, NegativeMagneticPort, TwoPort

src/Magnetic/Magnetic.jl

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

3-
using ModelingToolkitBase
3+
using ModelingToolkitBase: ModelingToolkitBase
44

55
# FluxTubes
66
include("FluxTubes/FluxTubes.jl")

src/Mechanical/Mechanical.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Library of mechanical models.
33
"""
44
module Mechanical
55

6-
using ModelingToolkitBase
6+
using ModelingToolkitBase: ModelingToolkitBase
77

88
include("Rotational/Rotational.jl")
99
include("Translational/Translational.jl")

src/Mechanical/MultiBody2D/MultiBody2D.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
module MultiBody2D
22

3-
using ModelingToolkitBase, Symbolics, IfElse
4-
using ModelingToolkitBase: t_nounits as t, D_nounits as D
3+
using IfElse: IfElse
4+
using ModelingToolkitBase: ModelingToolkitBase, @component, @named, @parameters,
5+
System, t_nounits as t, D_nounits as D
6+
using Symbolics: Symbolics, @variables, Equation
57
using ..TranslationalPosition
68

79
export Link

0 commit comments

Comments
 (0)