Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "ITensorBase"
uuid = "4795dd04-0d67-49bb-8f44-b89c448a1dc7"
authors = ["ITensor developers <[email protected]> and contributors"]
version = "0.2.14"
version = "0.2.15"

[deps]
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
Expand Down Expand Up @@ -34,7 +34,7 @@ FillArrays = "1.13"
GradedArrays = "0.4"
LinearAlgebra = "1.10"
MapBroadcast = "0.1.5"
NamedDimsArrays = "0.7"
NamedDimsArrays = "0.8"
Random = "1.10"
SparseArraysBase = "0.7"
TensorAlgebra = "0.3, 0.4"
Expand Down
2 changes: 1 addition & 1 deletion docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde"
ITensorBase = "0.2"
Documenter = "1"
Literate = "2"
NamedDimsArrays = "0.7"
NamedDimsArrays = "0.8"
2 changes: 1 addition & 1 deletion examples/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde"
[compat]
ITensorBase = "0.2"
LinearAlgebra = "1.10"
NamedDimsArrays = "0.7"
NamedDimsArrays = "0.8"
51 changes: 7 additions & 44 deletions src/abstractitensor.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ using NamedDimsArrays:
NamedDimsArray,
dename,
dimnames,
mapnameddimsindices,
nameddimsindices,
replacenameddimsindices,
setnameddimsindices
inds,
mapinds

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

NamedDimsArrays.nameddimsarraytype(::Type{<:IndexName}) = ITensor
NamedDimsArrays.nameddimstype(::Type{<:IndexName}) = ITensor

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

Expand Down Expand Up @@ -82,15 +80,15 @@ end

mutable struct ITensor <: AbstractITensor
parent::AbstractArray
nameddimsindices
inds
function ITensor(parent::AbstractArray, dims)
# This checks the shapes of the inputs.
nameddimsindices = NamedDimsArrays.to_nameddimsindices(parent, dims)
return new(parent, nameddimsindices)
inds = NamedDimsArrays.to_inds(parent, dims)
return new(parent, inds)
end
end
Base.parent(a::ITensor) = getfield(a, :parent)
NamedDimsArrays.nameddimsindices(a::ITensor) = getfield(a, :nameddimsindices)
NamedDimsArrays.inds(a::ITensor) = getfield(a, :inds)
NamedDimsArrays.dename(a::ITensor) = parent(a)

function ITensor(parent::AbstractArray, i1::Index, i_rest::Index...)
Expand Down Expand Up @@ -118,38 +116,3 @@ end
function ITensor()
return ITensor(Zeros{UnspecifiedZero}(), ())
end

inds(a::AbstractITensor) = nameddimsindices(a)
setinds(a::AbstractITensor, inds) = setnameddimsindices(a, inds)

function uniqueinds(a1::AbstractITensor, a_rest::AbstractITensor...)
return setdiff(inds(a1), inds.(a_rest)...)
end
function uniqueind(a1::AbstractITensor, a_rest::AbstractITensor...)
return only(uniqueinds(a1, a_rest...))
end

function commoninds(a1::AbstractITensor, a_rest::AbstractITensor...)
return intersect(inds(a1), inds.(a_rest)...)
end
function commonind(a1::AbstractITensor, a_rest::AbstractITensor...)
return only(commoninds(a1, a_rest...))
end

function replaceinds(a::AbstractITensor, replacements::Pair...)
return replacenameddimsindices(a, replacements...)
end
function replaceinds(f, a::AbstractITensor)
return replacenameddimsindices(f, a)
end

function mapinds(f, a::AbstractITensor)
return mapnameddimsindices(f, a)
end

prime(a::AbstractITensor) = replaceinds(prime, a)
noprime(a::AbstractITensor) = replaceinds(noprime, a)
sim(a::AbstractITensor) = replaceinds(sim, a)

using VectorInterface: VectorInterface, scalartype
VectorInterface.scalartype(a::AbstractITensor) = scalartype(unallocatable(a))
31 changes: 17 additions & 14 deletions src/index.jl
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,20 @@ function IndexName(
)
return IndexName(id, Dict{String, String}(tags), plev)
end
NamedDimsArrays.randname(rng::AbstractRNG, ::Type{<:IndexName}) = IndexName(rng)
function NamedDimsArrays.randname(rng::AbstractRNG, n::IndexName)
return setid(n, rand(rng, UInt64))
end
function NamedDimsArrays.randname(rng::AbstractRNG, ::Type{<:IndexName})
return IndexName(rng)
end

id(n::IndexName) = n.id
tags(n::IndexName) = n.tags
plev(n::IndexName) = n.plev
id(n::IndexName) = getfield(n, :id)
tags(n::IndexName) = getfield(n, :tags)
plev(n::IndexName) = getfield(n, :plev)

setid(n::IndexName, id) = @set n.id = id
settags(n::IndexName, tags) = @set n.tags = tags
setplev(n::IndexName, plev) = @set n.plev = plev

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

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

setprime(n::IndexName, plev) = @set n.plev = plev
prime(n::IndexName) = setprime(n, plev(n) + 1)
noprime(n::IndexName) = setprime(n, 0)
sim(n::IndexName) = randname(n)
prime(n::IndexName) = setplev(n, plev(n) + 1)
noprime(n::IndexName) = setplev(n, 0)

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

struct Index{T, Value <: AbstractUnitRange{T}} <: AbstractNamedUnitRange{T, Value, IndexName}
struct Index{
T, Value <: AbstractUnitRange{T},
} <: AbstractNamedUnitRange{T, Value, IndexName}
value::Value
name::IndexName
end
Expand Down Expand Up @@ -117,13 +124,9 @@ gettag(i::Index, tagname::String, default) = gettag(name(i), tagname, default)
settag(i::Index, tagname::String, tag::String) = setname(i, settag(name(i), tagname, tag))
unsettag(i::Index, tagname::String) = setname(i, unsettag(name(i), tagname))

setprime(i::Index, plev) = setname(i, setprime(name(i), plev))
setplev(i::Index, plev) = setname(i, setplev(name(i), plev))
prime(i::Index) = setname(i, prime(name(i)))
noprime(i::Index) = setname(i, noprime(name(i)))
sim(i::Index) = setname(i, sim(name(i)))

# TODO: Delete this definition?
Base.adjoint(i::Index) = prime(i)

# Interface
# TODO: Overload `Base.parent` instead.
Expand Down
26 changes: 26 additions & 0 deletions src/quirks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,32 @@ dim(i::Index) = Int(length(i))
# `unname(length(i))` directly.
dim(a::AbstractITensor) = Int(length(a))

# TODO: Delete this definition?
Base.adjoint(i::Index) = prime(i)

# TODO: Deprecate, just use `randname` directly.
sim(n::IndexName) = randname(n)
sim(i::Index) = setname(i, sim(name(i)))
sim(a::AbstractITensor) = mapinds(sim, a)

# TODO: Maybe deprecate these and use `mapinds` directly?
prime(a::AbstractITensor) = mapinds(prime, a)
noprime(a::AbstractITensor) = mapinds(noprime, a)

# TODO: Delete these and just use set operations on `inds` directly.
function uniqueinds(a1::AbstractITensor, a_rest::AbstractITensor...)
return setdiff(inds(a1), inds.(a_rest)...)
end
function uniqueind(a1::AbstractITensor, a_rest::AbstractITensor...)
return only(uniqueinds(a1, a_rest...))
end
function commoninds(a1::AbstractITensor, a_rest::AbstractITensor...)
return intersect(inds(a1), inds.(a_rest)...)
end
function commonind(a1::AbstractITensor, a_rest::AbstractITensor...)
return only(commoninds(a1, a_rest...))
end

# TODO: Replace with a more general functionality in
# `GradedArrays`, like `isgraded`.
hasqns(r::AbstractUnitRange) = false
Expand Down
2 changes: 1 addition & 1 deletion test/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ BlockSparseArrays = "0.8, 0.9, 0.10"
DiagonalArrays = "0.3"
GradedArrays = "0.4"
ITensorBase = "0.2"
NamedDimsArrays = "0.7"
NamedDimsArrays = "0.8"
SafeTestsets = "0.1"
SparseArraysBase = "0.7"
Suppressor = "0.2"
Expand Down
4 changes: 2 additions & 2 deletions test/test_basics.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ using ITensorBase:
inds,
plev,
prime,
setprime,
setplev,
settag,
tags,
unsettag
Expand Down Expand Up @@ -65,7 +65,7 @@ const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})

i = Index(2)
@test plev(i) == 0
i = setprime(i, 2)
i = setplev(i, 2)
@test plev(i) == 2

i = Index(2)
Expand Down
Loading