From 8ec022ff4c7391feb5285c62d562c5e884c1d3f9 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Thu, 29 May 2025 17:15:29 -0400 Subject: [PATCH 1/5] Special cases for FillArrays.Eye --- Project.toml | 4 +- src/KroneckerArrays.jl | 304 ++++++++++++++++++++++++++++++++++++----- test/test_aqua.jl | 2 +- test/test_basics.jl | 15 ++ 4 files changed, 286 insertions(+), 39 deletions(-) diff --git a/Project.toml b/Project.toml index b0cf377..8ed52d9 100644 --- a/Project.toml +++ b/Project.toml @@ -1,16 +1,18 @@ name = "KroneckerArrays" uuid = "05d0b138-81bc-4ff7-84be-08becefb1ccc" authors = ["ITensor developers and contributors"] -version = "0.1.3" +version = "0.1.4" [deps] DerivableInterfaces = "6c5e35bf-e59e-4898-b73c-732dcc4ba65f" +FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MatrixAlgebraKit = "6c742aac-3347-4629-af66-fc926824e5e4" [compat] DerivableInterfaces = "0.4.5" +FillArrays = "1.13.0" GPUArraysCore = "0.2.0" LinearAlgebra = "1.10" MatrixAlgebraKit = "0.2.0" diff --git a/src/KroneckerArrays.jl b/src/KroneckerArrays.jl index c910c7d..7c7e7c3 100644 --- a/src/KroneckerArrays.jl +++ b/src/KroneckerArrays.jl @@ -234,6 +234,62 @@ function Base.:*(a::KroneckerArray, b::Number) return a.a ⊗ (a.b * b) end +function Base.:-(a::KroneckerArray) + return (-a.a) ⊗ a.b +end +for op in (:+, :-) + @eval begin + function Base.$op(a::KroneckerArray, b::KroneckerArray) + if a.b == b.b + return $op(a.a, b.a) ⊗ a.b + elseif a.a == b.a + return a.a ⊗ $op(a.b, b.b) + end + return throw( + ArgumentError( + "KroneckerArray addition is only supported when the first or secord arguments match.", + ), + ) + end + end +end + +function Base.map!(::typeof(identity), dest::KroneckerArray, a::KroneckerArray) + dest.a .= a.a + dest.b .= a.b + return dest +end +function Base.map!(::typeof(+), dest::KroneckerArray, a::KroneckerArray, b::KroneckerArray) + if a.b == b.b + map!(+, dest.a, a.a, b.a) + dest.b .= a.b + elseif a.a == b.a + dest.a .= a.a + map!(+, dest.b, a.b, b.b) + else + throw( + ArgumentError( + "KroneckerArray addition is only supported when the first or second arguments match.", + ), + ) + end + return dest +end +function Base.map!( + f::Base.Fix1{typeof(*),<:Number}, dest::KroneckerArray, a::KroneckerArray +) + dest.a .= f.f.(f.x, a.a) + dest.b .= a.b + return dest +end +function Base.map!( + f::Base.Fix2{typeof(*),<:Number}, dest::KroneckerArray, a::KroneckerArray +) + dest.a .= a.a + dest.b .= f.f.(a.b, f.x) + return dest +end + using LinearAlgebra: LinearAlgebra, Diagonal, @@ -346,67 +402,138 @@ function LinearAlgebra.lq(a::KroneckerArray) return KroneckerLQ(Fa.L ⊗ Fb.L, Fa.Q ⊗ Fb.Q) end -function Base.:-(a::KroneckerArray) +using DerivableInterfaces: DerivableInterfaces, zero! +function DerivableInterfaces.zero!(a::KroneckerArray) + zero!(a.a) + zero!(a.b) + return a +end + +using FillArrays: Eye +const EyeKronecker{T,A<:Eye{T},B<:AbstractMatrix{T}} = KroneckerMatrix{T,A,B} +const KroneckerEye{T,A<:AbstractMatrix{T},B<:Eye{T}} = KroneckerMatrix{T,A,B} +const EyeEye{T,A<:Eye{T},B<:Eye{T}} = KroneckerMatrix{T,A,B} + +function Base.:*(a::Number, b::EyeKronecker) + return b.a ⊗ (a * b.b) +end +function Base.:*(a::Number, b::KroneckerEye) + return (a * b.a) ⊗ b.b +end +function Base.:*(a::Number, b::EyeEye) + return (a * b.a) ⊗ b.b +end +function Base.:*(a::EyeKronecker, b::Number) + return a.a ⊗ (a.b * b) +end +function Base.:*(a::KroneckerEye, b::Number) + return (a.a * b) ⊗ a.b +end +function Base.:*(a::EyeEye, b::Number) + return a.a ⊗ (a.b * b) +end + +function Base.:-(a::EyeKronecker) + return a.a ⊗ (-a.b) +end +function Base.:-(a::KroneckerEye) + return (-a.a) ⊗ a.b +end +function Base.:-(a::EyeEye) return (-a.a) ⊗ a.b end for op in (:+, :-) @eval begin - function Base.$op(a::KroneckerArray, b::KroneckerArray) - if a.b == b.b - return $op(a.a, b.a) ⊗ a.b - elseif a.a == b.a - return a.a ⊗ $op(a.b, b.b) + function Base.$op(a::EyeKronecker, b::EyeKronecker) + if a.a ≠ b.a + return throw( + ArgumentError( + "KroneckerArray addition is only supported when the first or secord arguments match.", + ), + ) end - return throw( - ArgumentError( - "KroneckerArray addition is only supported when the first or secord arguments match.", - ), - ) + return a.a ⊗ $op(a.b, b.b) + end + function Base.$op(a::KroneckerEye, b::KroneckerEye) + if a.b ≠ b.b + return throw( + ArgumentError( + "KroneckerArray addition is only supported when the first or secord arguments match.", + ), + ) + end + return $op(a.a, b.a) ⊗ a.b + end + function Base.$op(a::EyeEye, b::EyeEye) + if a.b ≠ b.b + return throw( + ArgumentError( + "KroneckerArray addition is only supported when the first or secord arguments match.", + ), + ) + end + return $op(a.a, b.a) ⊗ a.b end end end -function Base.map!(::typeof(identity), dest::KroneckerArray, a::KroneckerArray) - dest.a .= a.a +function Base.map!(::typeof(identity), dest::EyeKronecker, a::EyeKronecker) dest.b .= a.b return dest end -function Base.map!(::typeof(+), dest::KroneckerArray, a::KroneckerArray, b::KroneckerArray) - if a.b == b.b - map!(+, dest.a, a.a, b.a) - dest.b .= a.b - elseif a.a == b.a - dest.a .= a.a - map!(+, dest.b, a.b, b.b) - else +function Base.map!(::typeof(identity), dest::KroneckerEye, a::KroneckerEye) + dest.a .= a.a + return dest +end +function Base.map!(::typeof(identity), dest::EyeEye, a::EyeEye) + return error("Can't write in-place.") +end +function Base.map!(f::typeof(+), dest::EyeKronecker, a::EyeKronecker, b::EyeKronecker) + if dest.a ≠ a.a ≠ b.a throw( ArgumentError( "KroneckerArray addition is only supported when the first or second arguments match.", ), ) end + map!(f, dest.b, a.b, b.b) return dest end -function Base.map!( - f::Base.Fix1{typeof(*),<:Number}, dest::KroneckerArray, a::KroneckerArray -) - dest.a .= f.x .* a.a - dest.b .= a.b +function Base.map!(f::typeof(+), dest::KroneckerEye, a::KroneckerEye, b::KroneckerEye) + if dest.b ≠ a.b ≠ b.b + throw( + ArgumentError( + "KroneckerArray addition is only supported when the first or second arguments match.", + ), + ) + end + map!(f, dest.a, a.a, b.a) return dest end -function Base.map!( - f::Base.Fix2{typeof(*),<:Number}, dest::KroneckerArray, a::KroneckerArray -) - dest.a .= a.a - dest.b .= a.b .* f.x +function Base.map!(f::typeof(+), dest::EyeEye, a::EyeEye, b::EyeEye) + return error("Can't write in-place.") +end +function Base.map!(f::Base.Fix1{typeof(*),<:Number}, dest::EyeKronecker, a::EyeKronecker) + dest.b .= f.f.(f.x, a.b) return dest end - -using DerivableInterfaces: DerivableInterfaces, zero! -function DerivableInterfaces.zero!(a::KroneckerArray) - zero!(a.a) - zero!(a.b) - return a +function Base.map!(f::Base.Fix1{typeof(*),<:Number}, dest::KroneckerEye, a::KroneckerEye) + dest.a .= f.f.(f.x, a.a) + return dest +end +function Base.map!(f::Base.Fix1{typeof(*),<:Number}, dest::EyeEye, a::EyeEye) + return error("Can't write in-place.") +end +function Base.map!(f::Base.Fix2{typeof(*),<:Number}, dest::EyeKronecker, a::EyeKronecker) + dest.b .= f.f.(a.b, f.x) + return dest +end +function Base.map!(f::Base.Fix2{typeof(*),<:Number}, dest::KroneckerEye, a::KroneckerEye) + dest.a .= f.f.(a.a, f.x) + return dest +end +function Base.map!(f::Base.Fix2{typeof(*),<:Number}, dest::EyeEye, a::EyeEye) + return error("Can't write in-place.") end using MatrixAlgebraKit: @@ -447,6 +574,38 @@ struct KroneckerAlgorithm{A,B} <: AbstractAlgorithm b::B end +using MatrixAlgebraKit: + copy_input, + eig_full, + eigh_full, + qr_compact, + qr_full, + left_polar, + lq_compact, + lq_full, + right_polar, + svd_compact, + svd_full + +for f in [ + :eig_full, + :eigh_full, + :qr_compact, + :qr_full, + :left_polar, + :lq_compact, + :lq_full, + :right_polar, + :svd_compact, + :svd_full, +] + @eval begin + function MatrixAlgebraKit.copy_input(::typeof($f), a::KroneckerMatrix) + return copy_input($f, a.a) ⊗ copy_input($f, a.b) + end + end +end + for f in (:eig, :eigh, :lq, :qr, :polar, :svd) ff = Symbol("default_", f, "_algorithm") @eval begin @@ -530,4 +689,75 @@ for f in (:left_null!, :right_null!) end end +# Special case for `FillArrays.Eye` matrices. +struct EyeAlgorithm <: AbstractAlgorithm end + +for f in [ + :eig_full, + :eigh_full, + :qr_compact, + :qr_full, + :left_polar, + :lq_compact, + :lq_full, + :right_polar, + :svd_compact, + :svd_full, +] + @eval begin + MatrixAlgebraKit.copy_input(::typeof($f), a::Eye) = a + end +end + +for f in (:eig, :eigh, :lq, :qr, :polar, :svd) + ff = Symbol("default_", f, "_algorithm") + @eval begin + function MatrixAlgebraKit.$ff(a::Eye; kwargs...) + return EyeAlgorithm() + end + end +end + +for f in ( + :eig_full!, + :eigh_full!, + :qr_compact!, + :qr_full!, + :left_polar!, + :lq_compact!, + :lq_full!, + :right_polar!, +) + @eval begin + nfactors(::typeof($f)) = 2 + end +end +for f in (:svd_compact!, :svd_full!) + @eval begin + nfactors(::typeof($f)) = 3 + end +end + +for f in ( + :eig_full!, + :eigh_full!, + :qr_compact!, + :qr_full!, + :left_polar!, + :lq_compact!, + :lq_full!, + :right_polar!, + :svd_compact!, + :svd_full!, +) + @eval begin + function MatrixAlgebraKit.initialize_output(::typeof($f), a::Eye, alg::EyeAlgorithm) + return ntuple(_ -> a, nfactors($f)) + end + function MatrixAlgebraKit.$f(a::Eye, F, alg::EyeAlgorithm; kwargs...) + return ntuple(_ -> a, nfactors($f)) + end + end +end + end diff --git a/test/test_aqua.jl b/test/test_aqua.jl index 5727e26..0146079 100644 --- a/test/test_aqua.jl +++ b/test/test_aqua.jl @@ -3,5 +3,5 @@ using Aqua: Aqua using Test: @testset @testset "Code quality (Aqua.jl)" begin - Aqua.test_all(KroneckerArrays) + Aqua.test_all(KroneckerArrays; piracies=false) end diff --git a/test/test_basics.jl b/test/test_basics.jl index 1c10b53..cb57239 100644 --- a/test/test_basics.jl +++ b/test/test_basics.jl @@ -1,3 +1,4 @@ +using FillArrays: Eye using KroneckerArrays: KroneckerArrays, ⊗, ×, diagonal, kron_nd using LinearAlgebra: Diagonal, I, eigen, eigvals, lq, qr, svd, svdvals, tr using Test: @test, @testset @@ -66,3 +67,17 @@ const elts = (Float32, Float64, ComplexF32, ComplexF64) @test collect(Q * R) ≈ collect(a) @test collect(Q'Q) ≈ I end + +@testset "FillArrays.Eye" begin + a = Eye(2) ⊗ randn(3, 3) + @test size(a) == (6, 6) + @test a + a == Eye(2) ⊗ (2a.b) + @test 2a == Eye(2) ⊗ (2a.b) + @test a * a == Eye(2) ⊗ (a.b * a.b) + + a = randn(3, 3) ⊗ Eye(2) + @test size(a) == (6, 6) + @test a + a == (2a.a) ⊗ Eye(2) + @test 2a == (2a.a) ⊗ Eye(2) + @test a * a == (a.a * a.a) ⊗ Eye(2) +end From d4f74a86ff53c519651c0b3a2361217546c45616 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Thu, 29 May 2025 17:31:54 -0400 Subject: [PATCH 2/5] Add some tests --- test/Project.toml | 2 ++ test/test_matrixalgebrakit.jl | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/test/Project.toml b/test/Project.toml index 790a8e3..5d58469 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,5 +1,6 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" KroneckerArrays = "05d0b138-81bc-4ff7-84be-08becefb1ccc" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MatrixAlgebraKit = "6c742aac-3347-4629-af66-fc926824e5e4" @@ -9,6 +10,7 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] Aqua = "0.8" +FillArrays = "1" KroneckerArrays = "0.1" LinearAlgebra = "1.10" MatrixAlgebraKit = "0.2" diff --git a/test/test_matrixalgebrakit.jl b/test/test_matrixalgebrakit.jl index c3dc399..c83a868 100644 --- a/test/test_matrixalgebrakit.jl +++ b/test/test_matrixalgebrakit.jl @@ -1,5 +1,6 @@ +using FillArrays: Eye using KroneckerArrays: ⊗ -using LinearAlgebra: Hermitian, I, diag, norm +using LinearAlgebra: Hermitian, I, diag, hermitianpart, norm using MatrixAlgebraKit: eig_full, eig_trunc, @@ -23,6 +24,8 @@ using MatrixAlgebraKit: svd_vals using Test: @test, @test_throws, @testset +herm(a) = hermitianpart(a).data + @testset "MatrixAlgebraKit" begin elt = Float32 @@ -30,6 +33,11 @@ using Test: @test, @test_throws, @testset d, v = eig_full(a) @test a * v ≈ v * d + a = randn(elt, 2, 2) ⊗ Eye(3) + d, v = eig_full(a) + @test d.b == v.b == Eye(3) + @test a * v ≈ v * d + a = randn(elt, 2, 2) ⊗ randn(elt, 3, 3) @test_throws MethodError eig_trunc(a) @@ -37,14 +45,14 @@ using Test: @test, @test_throws, @testset d = eig_vals(a) @test d ≈ diag(eig_full(a)[1]) - a = Hermitian(randn(elt, 2, 2)) ⊗ Hermitian(randn(elt, 3, 3)) + a = herm(randn(elt, 2, 2)) ⊗ herm(randn(elt, 3, 3)) d, v = eigh_full(a) @test a * v ≈ v * d - a = Hermitian(randn(elt, 2, 2)) ⊗ Hermitian(randn(elt, 3, 3)) + a = herm(randn(elt, 2, 2)) ⊗ herm(randn(elt, 3, 3)) @test_throws MethodError eigh_trunc(a) - a = Hermitian(randn(elt, 2, 2)) ⊗ Hermitian(randn(elt, 3, 3)) + a = herm(randn(elt, 2, 2)) ⊗ herm(randn(elt, 3, 3)) d = eigh_vals(a) @test d ≈ diag(eigh_full(a)[1]) @@ -102,6 +110,11 @@ using Test: @test, @test_throws, @testset @test collect(u'u) ≈ I @test collect(v * v') ≈ I + a = randn(elt, 2, 2) ⊗ Eye(3) + u, s, v = svd_compact(a) + @test u * s * v ≈ a + @test u.b == s.b == v.b == Eye(3) + a = randn(elt, 2, 2) ⊗ randn(elt, 3, 3) u, s, v = svd_full(a) @test u * s * v ≈ a From 04992ea70bd2e51278abed7fe58aaa365f311b0c Mon Sep 17 00:00:00 2001 From: mtfishman Date: Wed, 4 Jun 2025 17:23:30 -0400 Subject: [PATCH 3/5] Delete uses of FillArrays --- src/KroneckerArrays.jl | 91 +++++++---------------------------- test/Project.toml | 2 - test/test_matrixalgebrakit.jl | 11 ----- 3 files changed, 18 insertions(+), 86 deletions(-) diff --git a/src/KroneckerArrays.jl b/src/KroneckerArrays.jl index 7c7e7c3..bdedfc7 100644 --- a/src/KroneckerArrays.jl +++ b/src/KroneckerArrays.jl @@ -158,6 +158,8 @@ end arguments(a::KroneckerArray) = (a.a, a.b) arguments(a::KroneckerArray, n::Int) = arguments(a)[n] +argument_types(a::KroneckerArray) = argument_types(typeof(a)) +argument_types(::Type{<:KroneckerArray{<:Any,<:Any,A,B}}) where {A,B} = (A, B) function Base.print_array(io::IO, a::KroneckerArray) Base.print_array(io, a.a) @@ -609,12 +611,26 @@ end for f in (:eig, :eigh, :lq, :qr, :polar, :svd) ff = Symbol("default_", f, "_algorithm") @eval begin - function MatrixAlgebraKit.$ff(a::KroneckerMatrix; kwargs...) - return KroneckerAlgorithm($ff(a.a; kwargs...), $ff(a.b; kwargs...)) + function MatrixAlgebraKit.$ff(A::Type{<:KroneckerMatrix}; kwargs...) + A1, A2 = argument_types(A) + return KroneckerAlgorithm($ff(A1; kwargs...), $ff(A2; kwargs...)) end end end +# TODO: Delete this once https://github.com/QuantumKitHub/MatrixAlgebraKit.jl/pull/32 is merged. +function MatrixAlgebraKit.default_algorithm( + ::typeof(qr_compact!), A::Type{<:KroneckerMatrix}; kwargs... +) + return default_qr_algorithm(A; kwargs...) +end +# TODO: Delete this once https://github.com/QuantumKitHub/MatrixAlgebraKit.jl/pull/32 is merged. +function MatrixAlgebraKit.default_algorithm( + ::typeof(qr_full!), A::Type{<:KroneckerMatrix}; kwargs... +) + return default_qr_algorithm(A; kwargs...) +end + for f in ( :eig_full!, :eigh_full!, @@ -689,75 +705,4 @@ for f in (:left_null!, :right_null!) end end -# Special case for `FillArrays.Eye` matrices. -struct EyeAlgorithm <: AbstractAlgorithm end - -for f in [ - :eig_full, - :eigh_full, - :qr_compact, - :qr_full, - :left_polar, - :lq_compact, - :lq_full, - :right_polar, - :svd_compact, - :svd_full, -] - @eval begin - MatrixAlgebraKit.copy_input(::typeof($f), a::Eye) = a - end -end - -for f in (:eig, :eigh, :lq, :qr, :polar, :svd) - ff = Symbol("default_", f, "_algorithm") - @eval begin - function MatrixAlgebraKit.$ff(a::Eye; kwargs...) - return EyeAlgorithm() - end - end -end - -for f in ( - :eig_full!, - :eigh_full!, - :qr_compact!, - :qr_full!, - :left_polar!, - :lq_compact!, - :lq_full!, - :right_polar!, -) - @eval begin - nfactors(::typeof($f)) = 2 - end -end -for f in (:svd_compact!, :svd_full!) - @eval begin - nfactors(::typeof($f)) = 3 - end -end - -for f in ( - :eig_full!, - :eigh_full!, - :qr_compact!, - :qr_full!, - :left_polar!, - :lq_compact!, - :lq_full!, - :right_polar!, - :svd_compact!, - :svd_full!, -) - @eval begin - function MatrixAlgebraKit.initialize_output(::typeof($f), a::Eye, alg::EyeAlgorithm) - return ntuple(_ -> a, nfactors($f)) - end - function MatrixAlgebraKit.$f(a::Eye, F, alg::EyeAlgorithm; kwargs...) - return ntuple(_ -> a, nfactors($f)) - end - end -end - end diff --git a/test/Project.toml b/test/Project.toml index 5d58469..790a8e3 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,6 +1,5 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" -FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" KroneckerArrays = "05d0b138-81bc-4ff7-84be-08becefb1ccc" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MatrixAlgebraKit = "6c742aac-3347-4629-af66-fc926824e5e4" @@ -10,7 +9,6 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] Aqua = "0.8" -FillArrays = "1" KroneckerArrays = "0.1" LinearAlgebra = "1.10" MatrixAlgebraKit = "0.2" diff --git a/test/test_matrixalgebrakit.jl b/test/test_matrixalgebrakit.jl index c83a868..85822fd 100644 --- a/test/test_matrixalgebrakit.jl +++ b/test/test_matrixalgebrakit.jl @@ -1,4 +1,3 @@ -using FillArrays: Eye using KroneckerArrays: ⊗ using LinearAlgebra: Hermitian, I, diag, hermitianpart, norm using MatrixAlgebraKit: @@ -33,11 +32,6 @@ herm(a) = hermitianpart(a).data d, v = eig_full(a) @test a * v ≈ v * d - a = randn(elt, 2, 2) ⊗ Eye(3) - d, v = eig_full(a) - @test d.b == v.b == Eye(3) - @test a * v ≈ v * d - a = randn(elt, 2, 2) ⊗ randn(elt, 3, 3) @test_throws MethodError eig_trunc(a) @@ -110,11 +104,6 @@ herm(a) = hermitianpart(a).data @test collect(u'u) ≈ I @test collect(v * v') ≈ I - a = randn(elt, 2, 2) ⊗ Eye(3) - u, s, v = svd_compact(a) - @test u * s * v ≈ a - @test u.b == s.b == v.b == Eye(3) - a = randn(elt, 2, 2) ⊗ randn(elt, 3, 3) u, s, v = svd_full(a) @test u * s * v ≈ a From 4871df3c9b3becefcd85de476b4f597d29604162 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Wed, 4 Jun 2025 17:25:50 -0400 Subject: [PATCH 4/5] Add back FillArrays as a test dep --- test/Project.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Project.toml b/test/Project.toml index 790a8e3..5d58469 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,5 +1,6 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" KroneckerArrays = "05d0b138-81bc-4ff7-84be-08becefb1ccc" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MatrixAlgebraKit = "6c742aac-3347-4629-af66-fc926824e5e4" @@ -9,6 +10,7 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] Aqua = "0.8" +FillArrays = "1" KroneckerArrays = "0.1" LinearAlgebra = "1.10" MatrixAlgebraKit = "0.2" From e85b21af28e84ac30c96608714ad9a47a3c73ff3 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Wed, 4 Jun 2025 17:26:57 -0400 Subject: [PATCH 5/5] Continue testing for piracies --- test/test_aqua.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_aqua.jl b/test/test_aqua.jl index 0146079..5727e26 100644 --- a/test/test_aqua.jl +++ b/test/test_aqua.jl @@ -3,5 +3,5 @@ using Aqua: Aqua using Test: @testset @testset "Code quality (Aqua.jl)" begin - Aqua.test_all(KroneckerArrays; piracies=false) + Aqua.test_all(KroneckerArrays) end