From 2412f3abdfafa4e1129fc97568c5fc073421aa2a Mon Sep 17 00:00:00 2001 From: jariji <96840304+jariji@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:11:02 -0700 Subject: [PATCH 1/4] `set(arr, reverse, arr)` can change size --- src/functionlenses.jl | 2 +- test/test_functionlenses.jl | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/functionlenses.jl b/src/functionlenses.jl index f963aa0..17b5b7a 100644 --- a/src/functionlenses.jl +++ b/src/functionlenses.jl @@ -92,7 +92,7 @@ end set(::Tuple, ::typeof(reverse), v) = reverse(Tuple(v)) set(x::NamedTuple, ::typeof(reverse), v) = @set reverse(Tuple(x)) = v function set(x::AbstractVector, ::typeof(reverse), v) - res = similar(x, eltype(v)) + res = similar(x, eltype(v), size(v)) res .= v reverse!(res) res diff --git a/test/test_functionlenses.jl b/test/test_functionlenses.jl index 2ec966e..659c20d 100644 --- a/test/test_functionlenses.jl +++ b/test/test_functionlenses.jl @@ -188,6 +188,7 @@ end @test set([1, 2], reverse, (3, 4)) == [4, 3] @test set((1, 2), reverse, [3, 4]) === (4, 3) @test set((a=1, b=2), reverse, [3, 4]) === (a=4, b=3) + @test set([1, 2, 3], reverse, [5, 6]) == [6, 5] C = KeyedArray([1,2,3], x=[:a, :b, :c]) @test (@set vec(C) = [5,6,7])::KeyedArray == KeyedArray([5,6,7], x=[:a, :b, :c]) From cdc0df3d293dfa0d399ba1c70db3ac80ff44269d Mon Sep 17 00:00:00 2001 From: jariji <96840304+jariji@users.noreply.github.com> Date: Fri, 12 Sep 2025 20:23:33 -0700 Subject: [PATCH 2/4] Add reverse methods for KeyedArray --- ext/AxisKeysExt.jl | 7 +++++++ src/functionlenses.jl | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/ext/AxisKeysExt.jl b/ext/AxisKeysExt.jl index 80fd19c..6d91c61 100644 --- a/ext/AxisKeysExt.jl +++ b/ext/AxisKeysExt.jl @@ -10,4 +10,11 @@ Accessors.set(x::KeyedArray, f::Base.Fix2{typeof(axiskeys), Int}, v) = @set axis Accessors.set(x::KeyedArray, f::Base.Fix2{typeof(axiskeys), Symbol}, v) = @set named_axiskeys(x)[f.x] = v Accessors.set(x::KeyedArray, ::typeof(AxisKeys.keyless_unname), v::AbstractArray) = KeyedArray(v; named_axiskeys(x)...) + +function set(x::AbstractVector, ::typeof(reverse), v::KeyedArray) + res = similar(x, eltype(v)) + res .= v + reverse!(res) + res +end end diff --git a/src/functionlenses.jl b/src/functionlenses.jl index 17b5b7a..e6ed40e 100644 --- a/src/functionlenses.jl +++ b/src/functionlenses.jl @@ -92,6 +92,12 @@ end set(::Tuple, ::typeof(reverse), v) = reverse(Tuple(v)) set(x::NamedTuple, ::typeof(reverse), v) = @set reverse(Tuple(x)) = v function set(x::AbstractVector, ::typeof(reverse), v) + res = similar(x, eltype(v)) + res .= v + reverse!(res) + res +end +function set(x::AbstractVector, ::typeof(reverse), v::AbstractVector) res = similar(x, eltype(v), size(v)) res .= v reverse!(res) From 3e0694df058d4d118f7cd3882f9285e9027a9f94 Mon Sep 17 00:00:00 2001 From: jariji <96840304+jariji@users.noreply.github.com> Date: Fri, 12 Sep 2025 20:44:48 -0700 Subject: [PATCH 3/4] Fix --- ext/AxisKeysExt.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/AxisKeysExt.jl b/ext/AxisKeysExt.jl index 6d91c61..ec92f87 100644 --- a/ext/AxisKeysExt.jl +++ b/ext/AxisKeysExt.jl @@ -11,7 +11,7 @@ Accessors.set(x::KeyedArray, f::Base.Fix2{typeof(axiskeys), Symbol}, v) = @set n Accessors.set(x::KeyedArray, ::typeof(AxisKeys.keyless_unname), v::AbstractArray) = KeyedArray(v; named_axiskeys(x)...) -function set(x::AbstractVector, ::typeof(reverse), v::KeyedArray) +function set(x::KeyedArray, ::typeof(reverse), v) res = similar(x, eltype(v)) res .= v reverse!(res) From 5240f45a5f6d36cf312b2e6c137002238ca7eb9a Mon Sep 17 00:00:00 2001 From: jariji <96840304+jariji@users.noreply.github.com> Date: Fri, 12 Sep 2025 20:58:44 -0700 Subject: [PATCH 4/4] Fix --- ext/AxisKeysExt.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/AxisKeysExt.jl b/ext/AxisKeysExt.jl index ec92f87..0621ba2 100644 --- a/ext/AxisKeysExt.jl +++ b/ext/AxisKeysExt.jl @@ -11,7 +11,7 @@ Accessors.set(x::KeyedArray, f::Base.Fix2{typeof(axiskeys), Symbol}, v) = @set n Accessors.set(x::KeyedArray, ::typeof(AxisKeys.keyless_unname), v::AbstractArray) = KeyedArray(v; named_axiskeys(x)...) -function set(x::KeyedArray, ::typeof(reverse), v) +function set(x::KeyedArray, ::typeof(reverse), v::AbstractVector) res = similar(x, eltype(v)) res .= v reverse!(res)