From e5d7e7d3b607ecdf84099179ac536d097083bf99 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Wed, 10 Jun 2026 09:47:48 +0200 Subject: [PATCH] Preserve uplo when adapting Symmetric/Hermitian wrappers. adapt_structure reconstructed these wrappers without passing the uplo field, silently turning lower-triangle views into upper ones whenever kernel arguments were adapted. Co-Authored-By: Claude Fable 5 --- Project.toml | 2 +- src/wrappers.jl | 4 ++-- test/runtests.jl | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Project.toml b/Project.toml index 96fa25c..16daa59 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Adapt" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.6.0" +version = "4.6.1" [workspace] projects = ["test"] diff --git a/src/wrappers.jl b/src/wrappers.jl index 24b8106..b323f5f 100644 --- a/src/wrappers.jl +++ b/src/wrappers.jl @@ -46,9 +46,9 @@ adapt_structure(to, A::LinearAlgebra.Tridiagonal) = adapt_structure(to, A::LinearAlgebra.Bidiagonal) = LinearAlgebra.Bidiagonal(adapt(to, A.dv), adapt(to, A.ev), A.uplo) adapt_structure(to, A::LinearAlgebra.Symmetric) = - LinearAlgebra.Symmetric(adapt(to, parent(A))) + LinearAlgebra.Symmetric(adapt(to, parent(A)), A.uplo == 'U' ? :U : :L) adapt_structure(to, A::LinearAlgebra.Hermitian) = - LinearAlgebra.Hermitian(adapt(to, parent(A))) + LinearAlgebra.Hermitian(adapt(to, parent(A)), A.uplo == 'U' ? :U : :L) # we generally don't support multiple layers of wrappers, but some occur often diff --git a/test/runtests.jl b/test/runtests.jl index 32465aa..84538df 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -175,6 +175,8 @@ using LinearAlgebra @test_adapt CustomArray UnitUpperTriangular(mat.arr) UnitUpperTriangular(mat) AnyCustomArray @test_adapt CustomArray Symmetric(mat.arr) Symmetric(mat) AnyCustomArray @test_adapt CustomArray Hermitian(mat.arr) Hermitian(mat) AnyCustomArray +@test_adapt CustomArray Symmetric(mat.arr, :L) Symmetric(mat, :L) AnyCustomArray +@test_adapt CustomArray Hermitian(mat.arr, :L) Hermitian(mat, :L) AnyCustomArray @test_adapt CustomArray Diagonal(vec.arr) Diagonal(vec) AnyCustomArray