From 3d6828dea74e3ccd0374cc75778cf7c9d2b2c42d Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 27 Jun 2026 07:38:32 -0400 Subject: [PATCH 1/2] Remove ArrayInterfaceCore can_setindex type piracy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The package defined `can_setindex` for `FillArrays.AbstractFill` and `Zygote.OneElement` on `ArrayInterfaceCore` (function owned by ArrayInterface, types owned by FillArrays/Zygote) — type piracy that Aqua only tolerated via `piracies = (; broken = true)`. These methods were also effectively dead: they target the deprecated `ArrayInterfaceCore.can_setindex`, while the current solver stack (LinearSolve/NonlinearSolve) dispatches on `ArrayInterface.can_setindex`. The `AbstractFill`/`OneElement` immutability is now provided upstream by ArrayInterface's FillArrays extension (JuliaArrays/ArrayInterface.jl#493), which loads automatically since FillArrays is already a dependency. `Zygote.OneElement` is no longer constructed by current Zygote (gradients route through `ChainRules.OneElement`, already covered upstream). Drops the unused `ArrayInterfaceCore` dependency and re-enables the Aqua piracy check. Resolves #68. Co-Authored-By: Chris Rackauckas --- Project.toml | 2 -- src/ComplementaritySolve.jl | 8 ++------ test/aqua.jl | 1 - 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/Project.toml b/Project.toml index 626bb1d..1282785 100644 --- a/Project.toml +++ b/Project.toml @@ -4,7 +4,6 @@ authors = ["Avik Pal "] version = "1.0.0" [deps] -ArrayInterfaceCore = "30b0a656-2188-435a-8636-2ec0e6a096e2" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" ConcreteStructs = "2569d6c7-a4a2-43d3-a901-331e8e4be471" @@ -26,7 +25,6 @@ TruncatedStacktraces = "781d530d-4396-4725-bb49-402e4bee1e77" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [compat] -ArrayInterfaceCore = "0.1" ChainRulesCore = "1" CommonSolve = "0.2.6" ConcreteStructs = "0.2" diff --git a/src/ComplementaritySolve.jl b/src/ComplementaritySolve.jl index 3042a3c..5b62f4c 100644 --- a/src/ComplementaritySolve.jl +++ b/src/ComplementaritySolve.jl @@ -5,7 +5,6 @@ module ComplementaritySolve # Before release we will clean things up ## Core / QOL Dependencies -using ArrayInterfaceCore: ArrayInterfaceCore using ChainRulesCore: ChainRulesCore, NoTangent, ZeroTangent using GPUArraysCore: GPUArraysCore using SciMLBase: SciMLBase, FunctionOperator, LinearProblem, NonlinearFunction, @@ -46,11 +45,8 @@ const AA3 = AbstractArray{T, 3} where {T} const DEFAULT_NLSOLVER = SimpleNewtonRaphson() -### ----- Type Piracy Starts ----- ### -ArrayInterfaceCore.can_setindex(::Type{<:AbstractFill}) = false -ArrayInterfaceCore.can_setindex(::Zygote.OneElement) = false - -### ------ Type Piracy Ends ------ ### +# NOTE: `can_setindex` for FillArrays (`AbstractFill`/`OneElement`) lives upstream in +# ArrayInterface (ArrayInterfaceFillArraysExt); see JuliaArrays/ArrayInterface.jl. # NOTE: LinearSolve.defaultalg for AbstractSciMLOperator + AbstractGPUArray was upstreamed abstract type AbstractComplementarityAlgorithm end diff --git a/test/aqua.jl b/test/aqua.jl index 46836ec..ae4d4dd 100644 --- a/test/aqua.jl +++ b/test/aqua.jl @@ -3,7 +3,6 @@ using Aqua, ComplementaritySolve Aqua.test_all( ComplementaritySolve; ambiguities = false, # Too many ambiguities from downstream - piracies = (; broken = true), # Known type piracy for ArrayInterfaceCore persistent_tasks = false, # PATHSolver precompile workload triggers persistent task detection project_extras = false, # Not sure about this one deps_compat = false From 7b72ca5195c34b5c93aa7ec658e354aa1cfa87b4 Mon Sep 17 00:00:00 2001 From: Christopher Rackauckas Date: Sat, 27 Jun 2026 11:44:29 +0000 Subject: [PATCH 2/2] Apply suggestion from @ChrisRackauckas --- src/ComplementaritySolve.jl | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ComplementaritySolve.jl b/src/ComplementaritySolve.jl index 5b62f4c..e1c3a16 100644 --- a/src/ComplementaritySolve.jl +++ b/src/ComplementaritySolve.jl @@ -45,9 +45,6 @@ const AA3 = AbstractArray{T, 3} where {T} const DEFAULT_NLSOLVER = SimpleNewtonRaphson() -# NOTE: `can_setindex` for FillArrays (`AbstractFill`/`OneElement`) lives upstream in -# ArrayInterface (ArrayInterfaceFillArraysExt); see JuliaArrays/ArrayInterface.jl. -# NOTE: LinearSolve.defaultalg for AbstractSciMLOperator + AbstractGPUArray was upstreamed abstract type AbstractComplementarityAlgorithm end abstract type AbstractComplementaritySystemAlgorithm end