Skip to content

Commit b24d515

Browse files
authored
Change nameddims to nameddimsarray (#30)
1 parent 94c1c8c commit b24d515

File tree

11 files changed

+58
-58
lines changed

11 files changed

+58
-58
lines changed

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 <[email protected]> and contributors"]
4-
version = "0.3.12"
4+
version = "0.4.0"
55

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

TODO.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ It could be written in terms of `align_getindex`/`align_view`.
1515
- `mapnameddimsindices(f, a::AbstractNamedDimsArray)` (rename `replacenameddimsindices(f, a)` to `mapnameddimsindices(f, a)`, or have both?)
1616
- `cat` (define `CatName` as a combination of the input names?).
1717
- `canonize`/`flatten_array_wrappers` (https://github.com/mcabbott/NamedPlus.jl/blob/v0.0.5/src/permute.jl#L207)
18-
- `nameddims(PermutedDimsArray(a, perm), nameddimsindices)` -> `nameddims(a, nameddimsindices[invperm(perm)])`
19-
- `nameddims(transpose(a), nameddimsindices)` -> `nameddims(a, reverse(nameddimsindices))`
20-
- `Transpose(nameddims(a, nameddimsindices))` -> `nameddims(a, reverse(nameddimsindices))`
18+
- `nameddimsarray(PermutedDimsArray(a, perm), nameddimsindices)` -> `nameddimsarray(a, nameddimsindices[invperm(perm)])`
19+
- `nameddimsarray(transpose(a), nameddimsindices)` -> `nameddimsarray(a, reverse(nameddimsindices))`
20+
- `Transpose(nameddimsarray(a, nameddimsindices))` -> `nameddimsarray(a, reverse(nameddimsindices))`
2121
- etc.
2222
- `MappedName(old_name, name)`, acts like `Name(name)` but keeps track of the old name.
2323
- `nameddimsmap(a, ::Pair...)`: `namedmap(named(randn(2, 2, 2, 2), i, j, k, l), i => k, j => l)`
@@ -33,8 +33,8 @@ It could be written in terms of `align_getindex`/`align_view`.
3333
- Same as `replacedims(a, dimname1 => dimname1′, dimname1′ => dimname1, dimname2 => dimname2′, dimname2′ => dimname2)`.
3434
- `transpose(f, a)` like the function form of `replace`.
3535
- `tr` based on `MappedName(old_name, name)`.
36-
- Slicing: `nameddims(a, "i", "j")[1:2, 1:2] = nameddims(a[1:2, 1:2], Name(named(1:2, "i")), Name(named(1:2, "j")))`, i.e.
36+
- Slicing: `nameddimsarray(a, "i", "j")[1:2, 1:2] = nameddimsarray(a[1:2, 1:2], Name(named(1:2, "i")), Name(named(1:2, "j")))`, i.e.
3737
the parent gets sliced and the new dimensions names are the named slice.
3838
- Should `NamedDimsArray` store the named axes rather than just the dimension names?
39-
- Should `NamedDimsArray` have special axes types so that `axes(nameddims(a, "i", "j")) == axes(nameddims(a', "j", "i"))`,
39+
- Should `NamedDimsArray` have special axes types so that `axes(nameddimsarray(a, "i", "j")) == axes(nameddimsarray(a', "j", "i"))`,
4040
i.e. equality is based on `issetequal` and not dependent on the ordering of the dimensions?

ext/NamedDimsArraysBlockArraysExt/NamedDimsArraysBlockArraysExt.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module NamedDimsArraysBlockArraysExt
22
using ArrayLayouts: ArrayLayouts
33
using BlockArrays: Block, BlockRange
44
using NamedDimsArrays:
5-
AbstractNamedDimsArray, AbstractNamedUnitRange, getindex_named, view_nameddims
5+
AbstractNamedDimsArray, AbstractNamedUnitRange, getindex_named, view_nameddimsarray
66

77
function Base.getindex(r::AbstractNamedUnitRange{<:Integer}, I::Block{1})
88
# TODO: Use `Derive.@interface NamedArrayInterface() r[I]` instead.
@@ -18,17 +18,17 @@ const BlockIndex{N} = Union{Block{N},BlockRange{N},AbstractVector{<:Block{N}}}
1818

1919
function Base.view(a::AbstractNamedDimsArray, I1::Block{1}, Irest::BlockIndex{1}...)
2020
# TODO: Use `Derive.@interface NamedDimsArrayInterface() r[I]` instead.
21-
return view_nameddims(a, I1, Irest...)
21+
return view_nameddimsarray(a, I1, Irest...)
2222
end
2323

2424
function Base.view(a::AbstractNamedDimsArray, I::Block)
2525
# TODO: Use `Derive.@interface NamedDimsArrayInterface() r[I]` instead.
26-
return view_nameddims(a, Tuple(I)...)
26+
return view_nameddimsarray(a, Tuple(I)...)
2727
end
2828

2929
function Base.view(a::AbstractNamedDimsArray, I1::BlockIndex{1}, Irest::BlockIndex{1}...)
3030
# TODO: Use `Derive.@interface NamedDimsArrayInterface() r[I]` instead.
31-
return view_nameddims(a, I1, Irest...)
31+
return view_nameddimsarray(a, I1, Irest...)
3232
end
3333

3434
# Fix ambiguity error.

src/NamedDimsArrays.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module NamedDimsArrays
22

3-
export NamedDimsArray, aligndims, named, nameddims
3+
export NamedDimsArray, aligndims, named, nameddimsarray
44

55
include("isnamed.jl")
66
include("randname.jl")

src/abstractnameddimsarray.jl

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ const NamedDimsAxis = AbstractNamedUnitRange{
151151
}
152152

153153
# Generic constructor.
154-
function nameddims(a::AbstractArray, nameddimsindices)
154+
function nameddimsarray(a::AbstractArray, nameddimsindices)
155155
if iszero(ndims(a))
156-
return constructorof_nameddims(typeof(a))(a, nameddimsindices)
156+
return constructorof_nameddimsarray(typeof(a))(a, nameddimsindices)
157157
end
158158
# TODO: Check the shape of `nameddimsindices` matches the shape of `a`.
159159
arrtype = mapreduce(nameddimsarraytype, combine_nameddimsarraytype, nameddimsindices)
@@ -251,17 +251,19 @@ to_nameddimsaxis(I::NamedDimsIndices) = named(dename(only(axes(I))), I)
251251
# Interface inspired by [ConstructionBase.constructorof](https://github.com/JuliaObjects/ConstructionBase.jl).
252252
constructorof(type::Type{<:AbstractArray}) = unspecify_type_parameters(type)
253253

254-
constructorof_nameddims(type::Type{<:AbstractNamedDimsArray}) = constructorof(type)
255-
constructorof_nameddims(type::Type{<:AbstractArray}) = NamedDimsArray
254+
constructorof_nameddimsarray(type::Type{<:AbstractNamedDimsArray}) = constructorof(type)
255+
constructorof_nameddimsarray(type::Type{<:AbstractArray}) = NamedDimsArray
256256

257-
function similar_nameddims(a::AbstractNamedDimsArray, elt::Type, inds)
257+
function similar_nameddimsarray(a::AbstractNamedDimsArray, elt::Type, inds)
258258
ax = to_nameddimsaxes(inds)
259259
return constructorof(typeof(a))(similar(dename(a), elt, dename.(Tuple(ax))), name.(ax))
260260
end
261261

262-
function similar_nameddims(a::AbstractArray, elt::Type, inds)
262+
function similar_nameddimsarray(a::AbstractArray, elt::Type, inds)
263263
ax = to_nameddimsaxes(inds)
264-
return constructorof_nameddims(typeof(a))(similar(a, elt, dename.(Tuple(ax))), name.(ax))
264+
return constructorof_nameddimsarray(typeof(a))(
265+
similar(a, elt, dename.(Tuple(ax))), name.(ax)
266+
)
265267
end
266268

267269
# Base.similar gets the eltype at compile time.
@@ -272,11 +274,11 @@ end
272274
function Base.similar(
273275
a::AbstractArray, elt::Type, inds::Tuple{NamedDimsIndices,Vararg{NamedDimsIndices}}
274276
)
275-
return similar_nameddims(a, elt, inds)
277+
return similar_nameddimsarray(a, elt, inds)
276278
end
277279

278280
function Base.similar(a::AbstractArray, elt::Type, inds::NaiveOrderedSet)
279-
return similar_nameddims(a, elt, inds)
281+
return similar_nameddimsarray(a, elt, inds)
280282
end
281283

282284
function setnameddimsindices(a::AbstractNamedDimsArray, nameddimsindices)
@@ -506,15 +508,15 @@ function Base.view(a::AbstractArray, I1::NamedViewIndex, Irest::NamedViewIndex..
506508
I = (I1, Irest...)
507509
sub_dims = filter(dim -> I[dim] isa AbstractArray, ntuple(identity, ndims(a)))
508510
sub_nameddimsindices = map(dim -> I[dim], sub_dims)
509-
return nameddims(view(a, dename.(I)...), sub_nameddimsindices)
511+
return nameddimsarray(view(a, dename.(I)...), sub_nameddimsindices)
510512
end
511513

512514
function Base.getindex(a::AbstractArray, I1::NamedViewIndex, Irest::NamedViewIndex...)
513515
return copy(view(a, I1, Irest...))
514516
end
515517

516518
function Base.view(a::AbstractArray, I1::Name, Irest::Name...)
517-
return nameddims(a, name.((I1, Irest...)))
519+
return nameddimsarray(a, name.((I1, Irest...)))
518520
end
519521

520522
function Base.view(a::AbstractNamedDimsArray, I1::Name, Irest::Name...)
@@ -536,7 +538,7 @@ function Base.view(a::AbstractNamedDimsArray, I1::NamedViewIndex, Irest::NamedVi
536538
subinds = map(nameddimsindices(a), I) do dimname, i
537539
return checked_indexin(dename(i), dename(dimname))
538540
end
539-
return constructorof_nameddims(typeof(a))(
541+
return constructorof_nameddimsarray(typeof(a))(
540542
view(dename(a), subinds...), sub_nameddimsindices
541543
)
542544
end
@@ -550,22 +552,22 @@ end
550552
# Repeated definition of `Base.ViewIndex`.
551553
const ViewIndex = Union{Real,AbstractArray}
552554

553-
function view_nameddims(a::AbstractArray, I...)
555+
function view_nameddimsarray(a::AbstractArray, I...)
554556
sub_dims = filter(dim -> !(I[dim] isa Real), ntuple(identity, ndims(a)))
555557
sub_nameddimsindices = map(dim -> nameddimsindices(a, dim)[I[dim]], sub_dims)
556558
return constructorof(typeof(a))(view(dename(a), I...), sub_nameddimsindices)
557559
end
558560

559561
function Base.view(a::AbstractNamedDimsArray, I::ViewIndex...)
560-
return view_nameddims(a, I...)
562+
return view_nameddimsarray(a, I...)
561563
end
562564

563-
function getindex_nameddims(a::AbstractArray, I...)
565+
function getindex_nameddimsarray(a::AbstractArray, I...)
564566
return copy(view(a, I...))
565567
end
566568

567569
function Base.getindex(a::AbstractNamedDimsArray, I::ViewIndex...)
568-
return getindex_nameddims(a, I...)
570+
return getindex_nameddimsarray(a, I...)
569571
end
570572

571573
function Base.setindex!(
@@ -624,7 +626,7 @@ function aligneddims(a::AbstractArray, dims)
624626
"Dimension name mismatch $(nameddimsindices(a)), $(new_nameddimsindices)."
625627
),
626628
)
627-
return constructorof_nameddims(typeof(a))(
629+
return constructorof_nameddimsarray(typeof(a))(
628630
PermutedDimsArray(dename(a), perm), new_nameddimsindices
629631
)
630632
end
@@ -659,7 +661,7 @@ for (f, f′) in [(:rand, :_rand), (:randn, :_randn)]
659661
)
660662
ax = to_nameddimsaxes(inds)
661663
a = $f′(rng, elt, dename.(ax))
662-
return nameddims(a, name.(ax))
664+
return nameddimsarray(a, name.(ax))
663665
end
664666
function Base.$f(
665667
rng::AbstractRNG,
@@ -692,13 +694,13 @@ for f in [:zeros, :ones]
692694
)
693695
ax = to_nameddimsaxes(inds)
694696
a = $f(elt, dename.(ax))
695-
return nameddims(a, name.(ax))
697+
return nameddimsarray(a, name.(ax))
696698
end
697699
function Base.$f(
698700
elt::Type{<:Number}, dims::Tuple{AbstractNamedInteger,Vararg{AbstractNamedInteger}}
699701
)
700702
a = $f(elt, dename.(dims))
701-
return nameddims(a, Base.oneto.(dims))
703+
return nameddimsarray(a, Base.oneto.(dims))
702704
end
703705
end
704706
for dimtype in [:AbstractNamedInteger, :NamedDimsIndices]
@@ -715,11 +717,11 @@ end
715717
function Base.fill(value, inds::Tuple{NamedDimsIndices,Vararg{NamedDimsIndices}})
716718
ax = to_nameddimsaxes(inds)
717719
a = fill(value, dename.(ax))
718-
return nameddims(a, name.(ax))
720+
return nameddimsarray(a, name.(ax))
719721
end
720722
function Base.fill(value, dims::Tuple{AbstractNamedInteger,Vararg{AbstractNamedInteger}})
721723
a = fill(value, dename.(dims))
722-
return nameddims(a, Base.oneto.(dims))
724+
return nameddimsarray(a, Base.oneto.(dims))
723725
end
724726
end
725727
for dimtype in [:AbstractNamedInteger, :NamedDimsIndices]
@@ -896,7 +898,7 @@ function Base.show(io::IO, mime::MIME"text/plain", a::AbstractNamedDimsArray)
896898
end
897899

898900
function Base.show(io::IO, a::AbstractNamedDimsArray)
899-
print(io, "nameddims(")
901+
print(io, "nameddimsarray(")
900902
show(io, dename(a))
901903
print(io, ", ", nameddimsindices(a), ")")
902904
return nothing

src/adapt.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Adapt: Adapt, adapt
22

33
function Adapt.adapt_structure(to, a::AbstractNamedDimsArray)
4-
return nameddims(adapt(to, dename(a)), nameddimsindices(a))
4+
return nameddimsarray(adapt(to, dename(a)), nameddimsindices(a))
55
end

src/tensoralgebra.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ function TensorAlgebra.fusedims(na::AbstractNamedDimsArray, fusions::Pair...)
9595
end
9696
perm = blockedperm(na, nameddimsindices_fuse...)
9797
a_fused = fusedims(unname(na), perm)
98-
return nameddims(a_fused, nameddimsindices_fused)
98+
return nameddimsarray(a_fused, nameddimsindices_fused)
9999
end
100100

101101
function TensorAlgebra.splitdims(na::AbstractNamedDimsArray, splitters::Pair...)
@@ -116,7 +116,7 @@ function TensorAlgebra.splitdims(na::AbstractNamedDimsArray, splitters::Pair...)
116116
names_split[fused_dim] = split_names
117117
end
118118
names_split = reduce((x, y) -> (x..., y...), names_split)
119-
return nameddims(a_split, names_split)
119+
return nameddimsarray(a_split, names_split)
120120
end
121121

122122
function TensorAlgebra.qr(
@@ -140,8 +140,8 @@ function TensorAlgebra.qr(
140140
to_nameddimsindices(a, nameddimsindices_codomain)..., namedindices_q
141141
)
142142
nameddimsindices_r = (namedindices_r, to_nameddimsindices(a, nameddimsindices_domain)...)
143-
q = nameddims(q_unnamed, nameddimsindices_q)
144-
r = nameddims(r_unnamed, nameddimsindices_r)
143+
q = nameddimsarray(q_unnamed, nameddimsindices_q)
144+
r = nameddimsarray(r_unnamed, nameddimsindices_r)
145145
return q, r
146146
end
147147

@@ -176,9 +176,9 @@ function TensorAlgebra.svd(
176176
)
177177
nameddimsindices_s = (namedindices_u, namedindices_v)
178178
nameddimsindices_v = (namedindices_v, to_nameddimsindices(a, nameddimsindices_domain)...)
179-
u = nameddims(u_unnamed, nameddimsindices_u)
180-
s = nameddims(s_unnamed, nameddimsindices_s)
181-
v = nameddims(v_unnamed, nameddimsindices_v)
179+
u = nameddimsarray(u_unnamed, nameddimsindices_u)
180+
s = nameddimsarray(s_unnamed, nameddimsindices_s)
181+
v = nameddimsarray(v_unnamed, nameddimsindices_v)
182182
return u, s, v
183183
end
184184

test/test_adapt.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
using Adapt: adapt
2-
using NamedDimsArrays: nameddims
2+
using NamedDimsArrays: nameddimsarray
33
using Test: @test, @testset
44

5-
using NamedDimsArrays: nameddimsindices
6-
75
@testset "Adapt (eltype=$elt)" for elt in
86
(Float32, Float64, Complex{Float32}, Complex{Float64})
9-
na = nameddims(randn(2, 2), ("i", "j"))
7+
na = nameddimsarray(randn(2, 2), ("i", "j"))
108
na_complex = adapt(Array{complex(elt)}, na)
119
@test na na_complex
1210
@test eltype(na_complex) === complex(elt)

test/test_basics.jl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ using NamedDimsArrays:
2222
mapnameddimsindices,
2323
name,
2424
named,
25-
nameddims,
25+
nameddimsarray,
2626
nameddimsindices,
2727
namedoneto,
2828
replacenameddimsindices,
@@ -36,7 +36,7 @@ using Test: @test, @test_throws, @testset
3636
elt = Float64
3737
a = randn(elt, 3, 4)
3838
@test !isnamed(a)
39-
na = nameddims(a, ("i", "j"))
39+
na = nameddimsarray(a, ("i", "j"))
4040
@test na isa NamedDimsMatrix{elt,Matrix{elt}}
4141
@test na isa AbstractNamedDimsMatrix{elt}
4242
@test na isa NamedDimsArray{elt}
@@ -171,8 +171,8 @@ using Test: @test, @test_throws, @testset
171171
@test unname(na′) isa PermutedDimsArray{elt}
172172
@test a == permutedims(unname(na′), (2, 1))
173173

174-
na = nameddims(randn(elt, 2, 3), (:i, :j))
175-
nb = nameddims(randn(elt, 3, 2), (:j, :i))
174+
na = nameddimsarray(randn(elt, 2, 3), (:i, :j))
175+
nb = nameddimsarray(randn(elt, 3, 2), (:j, :i))
176176
nc = zeros(elt, named.((2, 3), (:i, :j)))
177177
Is = eachindex(na, nb)
178178
@test Is isa NamedDimsCartesianIndices{2}
@@ -184,25 +184,25 @@ using Test: @test, @test_throws, @testset
184184
end
185185
@test dename(nc, (:i, :j)) dename(na, (:i, :j)) + dename(nb, (:i, :j))
186186

187-
a = nameddims(randn(elt, 2, 3), (:i, :j))
188-
b = nameddims(randn(elt, 3, 2), (:j, :i))
187+
a = nameddimsarray(randn(elt, 2, 3), (:i, :j))
188+
b = nameddimsarray(randn(elt, 3, 2), (:j, :i))
189189
c = a + b
190190
@test dename(c, (:i, :j)) dename(a, (:i, :j)) + dename(b, (:i, :j))
191191
c = a .+ b
192192
@test dename(c, (:i, :j)) dename(a, (:i, :j)) + dename(b, (:i, :j))
193193
c = map(+, a, b)
194194
@test dename(c, (:i, :j)) dename(a, (:i, :j)) + dename(b, (:i, :j))
195-
c = nameddims(Array{elt}(undef, 2, 3), (:i, :j))
195+
c = nameddimsarray(Array{elt}(undef, 2, 3), (:i, :j))
196196
c = map!(+, c, a, b)
197197
@test dename(c, (:i, :j)) dename(a, (:i, :j)) + dename(b, (:i, :j))
198198
c = a .+ 2 .* b
199199
@test dename(c, (:i, :j)) dename(a, (:i, :j)) + 2 * dename(b, (:i, :j))
200-
c = nameddims(Array{elt}(undef, 2, 3), (:i, :j))
200+
c = nameddimsarray(Array{elt}(undef, 2, 3), (:i, :j))
201201
c .= a .+ 2 .* b
202202
@test dename(c, (:i, :j)) dename(a, (:i, :j)) + 2 * dename(b, (:i, :j))
203203

204204
# Regression test for proper permutations.
205-
a = nameddims(randn(elt, 2, 3, 4), (:i, :j, :k))
205+
a = nameddimsarray(randn(elt, 2, 3, 4), (:i, :j, :k))
206206
I = (:i => 2, :j => 3, :k => 4)
207207
for I′ in Combinatorics.permutations(I)
208208
@test a[I′...] == a[2, 3, 4]

test/test_blockarraysext.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
using BlockArrays: Block
22
using BlockSparseArrays: BlockSparseArray
3-
using NamedDimsArrays: dename, nameddims, nameddimsindices
3+
using NamedDimsArrays: dename, nameddimsarray, nameddimsindices
44
using Test: @test, @testset
55

66
@testset "NamedDimsArraysBlockArraysExt" begin
77
elt = Float64
88
a = BlockSparseArray{elt}([2, 3], [2, 3])
99
a[Block(2, 1)] = randn(elt, 3, 2)
1010
a[Block(1, 2)] = randn(elt, 2, 3)
11-
n = nameddims(a, ("i", "j"))
11+
n = nameddimsarray(a, ("i", "j"))
1212
i, j = nameddimsindices(n)
1313
@test dename(n[i[Block(2)], j[Block(1)]]) == a[Block(2, 1)]
1414
@test dename(n[Block(2), Block(1)]) == a[Block(2, 1)]

0 commit comments

Comments
 (0)