Skip to content

Commit c1ae4b5

Browse files
authored
Pair slicing (#49)
1 parent 1aa7d8d commit c1ae4b5

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "NamedDimsArrays"
22
uuid = "60cbd0c0-df58-4cb7-918c-6f5607b73fde"
33
authors = ["ITensor developers <support@itensor.org> and contributors"]
4-
version = "0.5.3"
4+
version = "0.5.4"
55

66
[deps]
77
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"

src/abstractnameddimsarray.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,11 @@ function Base.view(a::AbstractNamedDimsArray, I1::NamedViewIndex, Irest::NamedVi
587587
view(dename(a), subinds...), sub_nameddimsindices
588588
)
589589
end
590+
function Base.view(a::AbstractNamedDimsArray, I1::Pair, Irest::Pair...)
591+
I = (I1, Irest...)
592+
nameddimsindices = to_nameddimsindices(a, first.(I))
593+
return view(a, map((i, name) -> name[i], last.(I), nameddimsindices)...)
594+
end
590595

591596
function Base.getindex(
592597
a::AbstractNamedDimsArray, I1::NamedViewIndex, Irest::NamedViewIndex...

test/test_basics.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,26 @@ using Test: @test, @test_throws, @testset
160160
@test dimnames(na) == ("i",)
161161
@test dename(na) == a
162162

163+
# slicing
164+
a = randn(elt, 3, 3)
165+
na = NamedDimsArray(a, ("i", "j"))
166+
for na′ in (na[named(2:3, "i"), named(2:3, "j")], na["i" => 2:3, "j" => 2:3])
167+
@test nameddimsindices(na′) == (named(2:3, "i"), named(2:3, "j"))
168+
@test dename(na′) == a[2:3, 2:3]
169+
@test dename(na′) isa typeof(a)
170+
end
171+
172+
# view slicing
173+
a = randn(elt, 3, 3)
174+
na = NamedDimsArray(a, ("i", "j"))
175+
for na′ in
176+
(@view(na[named(2:3, "i"), named(2:3, "j")]), @view(na["i" => 2:3, "j" => 2:3]))
177+
@test nameddimsindices(na′) == (named(2:3, "i"), named(2:3, "j"))
178+
@test copy(dename(na′)) == a[2:3, 2:3]
179+
@test dename(na′) === @view(a[2:3, 2:3])
180+
@test dename(na′) isa SubArray{elt,2}
181+
end
182+
163183
# aliasing
164184
a′ = randn(elt, 2, 2)
165185
i = Name("i")

0 commit comments

Comments
 (0)