Skip to content

Commit db80554

Browse files
authored
Update to NamedDimsArrays v0.8 (#88)
1 parent bdaf46a commit db80554

File tree

8 files changed

+57
-65
lines changed

8 files changed

+57
-65
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ITensorBase"
22
uuid = "4795dd04-0d67-49bb-8f44-b89c448a1dc7"
33
authors = ["ITensor developers <[email protected]> and contributors"]
4-
version = "0.2.14"
4+
version = "0.2.15"
55

66
[deps]
77
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
@@ -34,7 +34,7 @@ FillArrays = "1.13"
3434
GradedArrays = "0.4"
3535
LinearAlgebra = "1.10"
3636
MapBroadcast = "0.1.5"
37-
NamedDimsArrays = "0.7"
37+
NamedDimsArrays = "0.8"
3838
Random = "1.10"
3939
SparseArraysBase = "0.7"
4040
TensorAlgebra = "0.3, 0.4"

docs/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde"
88
ITensorBase = "0.2"
99
Documenter = "1"
1010
Literate = "2"
11-
NamedDimsArrays = "0.7"
11+
NamedDimsArrays = "0.8"

examples/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde"
66
[compat]
77
ITensorBase = "0.2"
88
LinearAlgebra = "1.10"
9-
NamedDimsArrays = "0.7"
9+
NamedDimsArrays = "0.8"

src/abstractitensor.jl

Lines changed: 7 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@ using NamedDimsArrays:
55
NamedDimsArray,
66
dename,
77
dimnames,
8-
mapnameddimsindices,
9-
nameddimsindices,
10-
replacenameddimsindices,
11-
setnameddimsindices
8+
inds,
9+
mapinds
1210

1311
abstract type AbstractITensor <: AbstractNamedDimsArray{Any, Any} end
1412

15-
NamedDimsArrays.nameddimsarraytype(::Type{<:IndexName}) = ITensor
13+
NamedDimsArrays.nameddimstype(::Type{<:IndexName}) = ITensor
1614

1715
Base.ndims(::Type{<:AbstractITensor}) = Any
1816

@@ -82,15 +80,15 @@ end
8280

8381
mutable struct ITensor <: AbstractITensor
8482
parent::AbstractArray
85-
nameddimsindices
83+
inds
8684
function ITensor(parent::AbstractArray, dims)
8785
# This checks the shapes of the inputs.
88-
nameddimsindices = NamedDimsArrays.to_nameddimsindices(parent, dims)
89-
return new(parent, nameddimsindices)
86+
inds = NamedDimsArrays.to_inds(parent, dims)
87+
return new(parent, inds)
9088
end
9189
end
9290
Base.parent(a::ITensor) = getfield(a, :parent)
93-
NamedDimsArrays.nameddimsindices(a::ITensor) = getfield(a, :nameddimsindices)
91+
NamedDimsArrays.inds(a::ITensor) = getfield(a, :inds)
9492
NamedDimsArrays.dename(a::ITensor) = parent(a)
9593

9694
function ITensor(parent::AbstractArray, i1::Index, i_rest::Index...)
@@ -118,38 +116,3 @@ end
118116
function ITensor()
119117
return ITensor(Zeros{UnspecifiedZero}(), ())
120118
end
121-
122-
inds(a::AbstractITensor) = nameddimsindices(a)
123-
setinds(a::AbstractITensor, inds) = setnameddimsindices(a, inds)
124-
125-
function uniqueinds(a1::AbstractITensor, a_rest::AbstractITensor...)
126-
return setdiff(inds(a1), inds.(a_rest)...)
127-
end
128-
function uniqueind(a1::AbstractITensor, a_rest::AbstractITensor...)
129-
return only(uniqueinds(a1, a_rest...))
130-
end
131-
132-
function commoninds(a1::AbstractITensor, a_rest::AbstractITensor...)
133-
return intersect(inds(a1), inds.(a_rest)...)
134-
end
135-
function commonind(a1::AbstractITensor, a_rest::AbstractITensor...)
136-
return only(commoninds(a1, a_rest...))
137-
end
138-
139-
function replaceinds(a::AbstractITensor, replacements::Pair...)
140-
return replacenameddimsindices(a, replacements...)
141-
end
142-
function replaceinds(f, a::AbstractITensor)
143-
return replacenameddimsindices(f, a)
144-
end
145-
146-
function mapinds(f, a::AbstractITensor)
147-
return mapnameddimsindices(f, a)
148-
end
149-
150-
prime(a::AbstractITensor) = replaceinds(prime, a)
151-
noprime(a::AbstractITensor) = replaceinds(noprime, a)
152-
sim(a::AbstractITensor) = replaceinds(sim, a)
153-
154-
using VectorInterface: VectorInterface, scalartype
155-
VectorInterface.scalartype(a::AbstractITensor) = scalartype(unallocatable(a))

src/index.jl

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,20 @@ function IndexName(
3333
)
3434
return IndexName(id, Dict{String, String}(tags), plev)
3535
end
36-
NamedDimsArrays.randname(rng::AbstractRNG, ::Type{<:IndexName}) = IndexName(rng)
36+
function NamedDimsArrays.randname(rng::AbstractRNG, n::IndexName)
37+
return setid(n, rand(rng, UInt64))
38+
end
39+
function NamedDimsArrays.randname(rng::AbstractRNG, ::Type{<:IndexName})
40+
return IndexName(rng)
41+
end
3742

38-
id(n::IndexName) = n.id
39-
tags(n::IndexName) = n.tags
40-
plev(n::IndexName) = n.plev
43+
id(n::IndexName) = getfield(n, :id)
44+
tags(n::IndexName) = getfield(n, :tags)
45+
plev(n::IndexName) = getfield(n, :plev)
4146

47+
setid(n::IndexName, id) = @set n.id = id
4248
settags(n::IndexName, tags) = @set n.tags = tags
49+
setplev(n::IndexName, plev) = @set n.plev = plev
4350

4451
hastag(n::IndexName, tagname::String) = haskey(tags(n), tagname)
4552

@@ -56,10 +63,8 @@ function unsettag(n::IndexName, tagname::String)
5663
return settags(n, newtags)
5764
end
5865

59-
setprime(n::IndexName, plev) = @set n.plev = plev
60-
prime(n::IndexName) = setprime(n, plev(n) + 1)
61-
noprime(n::IndexName) = setprime(n, 0)
62-
sim(n::IndexName) = randname(n)
66+
prime(n::IndexName) = setplev(n, plev(n) + 1)
67+
noprime(n::IndexName) = setplev(n, 0)
6368

6469
function Base.show(io::IO, i::IndexName)
6570
idstr = "id=$(id(i) % 1000)"
@@ -82,7 +87,9 @@ NamedDimsArrays.name(i::IndexVal) = i.name
8287
# Constructor
8388
NamedDimsArrays.named(i::Integer, name::IndexName) = IndexVal(i, name)
8489

85-
struct Index{T, Value <: AbstractUnitRange{T}} <: AbstractNamedUnitRange{T, Value, IndexName}
90+
struct Index{
91+
T, Value <: AbstractUnitRange{T},
92+
} <: AbstractNamedUnitRange{T, Value, IndexName}
8693
value::Value
8794
name::IndexName
8895
end
@@ -117,13 +124,9 @@ gettag(i::Index, tagname::String, default) = gettag(name(i), tagname, default)
117124
settag(i::Index, tagname::String, tag::String) = setname(i, settag(name(i), tagname, tag))
118125
unsettag(i::Index, tagname::String) = setname(i, unsettag(name(i), tagname))
119126

120-
setprime(i::Index, plev) = setname(i, setprime(name(i), plev))
127+
setplev(i::Index, plev) = setname(i, setplev(name(i), plev))
121128
prime(i::Index) = setname(i, prime(name(i)))
122129
noprime(i::Index) = setname(i, noprime(name(i)))
123-
sim(i::Index) = setname(i, sim(name(i)))
124-
125-
# TODO: Delete this definition?
126-
Base.adjoint(i::Index) = prime(i)
127130

128131
# Interface
129132
# TODO: Overload `Base.parent` instead.

src/quirks.jl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,32 @@ dim(i::Index) = Int(length(i))
1010
# `unname(length(i))` directly.
1111
dim(a::AbstractITensor) = Int(length(a))
1212

13+
# TODO: Delete this definition?
14+
Base.adjoint(i::Index) = prime(i)
15+
16+
# TODO: Deprecate, just use `randname` directly.
17+
sim(n::IndexName) = randname(n)
18+
sim(i::Index) = setname(i, sim(name(i)))
19+
sim(a::AbstractITensor) = mapinds(sim, a)
20+
21+
# TODO: Maybe deprecate these and use `mapinds` directly?
22+
prime(a::AbstractITensor) = mapinds(prime, a)
23+
noprime(a::AbstractITensor) = mapinds(noprime, a)
24+
25+
# TODO: Delete these and just use set operations on `inds` directly.
26+
function uniqueinds(a1::AbstractITensor, a_rest::AbstractITensor...)
27+
return setdiff(inds(a1), inds.(a_rest)...)
28+
end
29+
function uniqueind(a1::AbstractITensor, a_rest::AbstractITensor...)
30+
return only(uniqueinds(a1, a_rest...))
31+
end
32+
function commoninds(a1::AbstractITensor, a_rest::AbstractITensor...)
33+
return intersect(inds(a1), inds.(a_rest)...)
34+
end
35+
function commonind(a1::AbstractITensor, a_rest::AbstractITensor...)
36+
return only(commoninds(a1, a_rest...))
37+
end
38+
1339
# TODO: Replace with a more general functionality in
1440
# `GradedArrays`, like `isgraded`.
1541
hasqns(r::AbstractUnitRange) = false

test/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ BlockSparseArrays = "0.8, 0.9, 0.10"
2020
DiagonalArrays = "0.3"
2121
GradedArrays = "0.4"
2222
ITensorBase = "0.2"
23-
NamedDimsArrays = "0.7"
23+
NamedDimsArrays = "0.8"
2424
SafeTestsets = "0.1"
2525
SparseArraysBase = "0.7"
2626
Suppressor = "0.2"

test/test_basics.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ using ITensorBase:
1212
inds,
1313
plev,
1414
prime,
15-
setprime,
15+
setplev,
1616
settag,
1717
tags,
1818
unsettag
@@ -65,7 +65,7 @@ const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
6565

6666
i = Index(2)
6767
@test plev(i) == 0
68-
i = setprime(i, 2)
68+
i = setplev(i, 2)
6969
@test plev(i) == 2
7070

7171
i = Index(2)

0 commit comments

Comments
 (0)