From d8f88fb6561caf63ca6935ddffe21de2e1dbb704 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 1 Aug 2026 04:25:07 -0400 Subject: [PATCH] Make QA scan the StaticArrays extension ExplicitImports only checks a package extension when the extension module actually exists, which requires its trigger weakdep to be loaded. The QA environment loaded no weakdeps, so ExponentialUtilitiesStaticArraysExt was never scanned. Load StaticArrays in test/qa/qa.jl so it is. The newly-scanned extension reported two findings. `using StaticArrays` followed by `StaticArrays.arithmetic_closure`/`SMatrix`/`SVector` is fixed at the source with an explicit import list. `arithmetic_closure` is documented by StaticArrays but not declared public and has no public equivalent, so it is ignored with a comment. Co-Authored-By: Chris Rackauckas --- ext/ExponentialUtilitiesStaticArraysExt.jl | 2 +- test/qa/Project.toml | 2 ++ test/qa/qa.jl | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ext/ExponentialUtilitiesStaticArraysExt.jl b/ext/ExponentialUtilitiesStaticArraysExt.jl index 109e616e..f552386c 100644 --- a/ext/ExponentialUtilitiesStaticArraysExt.jl +++ b/ext/ExponentialUtilitiesStaticArraysExt.jl @@ -2,7 +2,7 @@ module ExponentialUtilitiesStaticArraysExt export default_tolerance, theta, THETA32, THETA64 -using StaticArrays +using StaticArrays: StaticArrays, SMatrix, SVector import Base: @propagate_inbounds import LinearAlgebra: tr, I, opnorm, norm import ExponentialUtilities diff --git a/test/qa/Project.toml b/test/qa/Project.toml index d07cb06f..ebf799ee 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -6,6 +6,7 @@ JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" +StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] @@ -14,5 +15,6 @@ Aqua = "0.8" JET = "0.9, 0.10, 0.11" SafeTestsets = "0.1, 1" SciMLTesting = "2.4" +StaticArrays = "1.9.8" Test = "1" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index f60d679c..b7b8f73a 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,6 +1,11 @@ using SciMLTesting, ExponentialUtilities, JET, Test, LinearAlgebra using AllocCheck: check_allocs +# ExplicitImports only sees a package extension once its trigger weakdep is +# loaded (`Base.get_extension` returns `nothing` otherwise), so loading +# StaticArrays here is what puts ExponentialUtilitiesStaticArraysExt under QA. +using StaticArrays + run_qa( ExponentialUtilities; ei_kwargs = (; @@ -8,10 +13,16 @@ run_qa( # LAPACK balancing wrapper `gebal_noalloc!` (which keeps the CPU matrix # exponential allocation-free), plus `Base.promote_op` used to infer the # exponential! workspace type at cache construction without allocating. + # `arithmetic_closure` (owned by StaticArrays) is the only spelling of + # "type you get from doing arithmetic on this eltype", which the + # StaticArrays extension needs to pick the working eltype for `expv` on + # an integer-valued `SMatrix`. It is documented -- its own docstring + # demonstrates `import StaticArrays.arithmetic_closure` -- but StaticArrays + # has not declared it `public`, and there is no public equivalent. all_qualified_accesses_are_public = (; ignore = ( - Symbol("@blasfunc"), :BlasInt, :chkfinite, :chklapackerror, - :chkstride1, :libblastrampoline, :promote_op, + Symbol("@blasfunc"), :BlasInt, :arithmetic_closure, :chkfinite, + :chklapackerror, :chkstride1, :libblastrampoline, :promote_op, ), ), # `chkstride1` (owned by LinearAlgebra) and `libblastrampoline` (owned by