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: 3 additions & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
name = "ITensorBase"
uuid = "4795dd04-0d67-49bb-8f44-b89c448a1dc7"
authors = ["ITensor developers <support@itensor.org> and contributors"]
version = "0.3.0"
version = "0.3.1"

[deps]
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
DerivableInterfaces = "6c5e35bf-e59e-4898-b73c-732dcc4ba65f"
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Expand All @@ -26,6 +27,7 @@ ITensorBaseSparseArraysBaseExt = ["NamedDimsArrays", "SparseArraysBase"]

[compat]
Accessors = "0.1.39"
ConstructionBase = "1.6.0"
DerivableInterfaces = "0.5"
DiagonalArrays = "0.3"
FillArrays = "1.13"
Expand Down
34 changes: 20 additions & 14 deletions src/index.jl
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
using Accessors: @set
using NamedDimsArrays:
NamedDimsArrays,
AbstractName,
AbstractNamedInteger,
AbstractNamedUnitRange,
AbstractNamedVector,
dename,
name,
randname,
setname
using NamedDimsArrays: NamedDimsArrays, AbstractName, AbstractNamedInteger,
AbstractNamedUnitRange, AbstractNamedVector, dename, name, randname, setname
using Random: Random, AbstractRNG

tagpairstring(pair::Pair) = repr(first(pair)) * "=>" * repr(last(pair))
Expand All @@ -26,10 +18,8 @@ struct IndexName <: AbstractName
plev::Int
end
function IndexName(
rng::AbstractRNG = Random.default_rng();
id::UInt64 = rand(rng, UInt64),
tags = Dict{String, String}(),
plev::Int = 0,
rng::AbstractRNG = Random.default_rng(); id::UInt64 = rand(rng, UInt64),
tags = Dict{String, String}(), plev::Int = 0,
)
return IndexName(id, Dict{String, String}(tags), plev)
end
Expand All @@ -44,6 +34,22 @@ id(n::IndexName) = getfield(n, :id)
tags(n::IndexName) = getfield(n, :tags)
plev(n::IndexName) = getfield(n, :plev)

using ConstructionBase: getfields
Base.:(==)(n1::IndexName, n2::IndexName) = getfields(n1) == getfields(n2)
Base.isequal(n1::IndexName, n2::IndexName) = isequal(getfields(n1), getfields(n2))
function Base.isless(n1::IndexName, n2::IndexName)
t1 = (id(n1), plev(n1), keys(tags(n1)), collect(values(tags(n1))))
t2 = (id(n2), plev(n2), keys(tags(n2)), collect(values(tags(n2))))
return isless(t1, t2)
end
function Base.hash(n::IndexName, h::UInt)
h = hash(:IndexName, h)
h = hash(id(n), h)
h = hash(tags(n), h)
h = hash(plev(n), h)
return h
end

setid(n::IndexName, id) = @set n.id = id
settags(n::IndexName, tags) = @set n.tags = tags
setplev(n::IndexName, plev) = @set n.plev = plev
Expand Down
111 changes: 63 additions & 48 deletions test/test_basics.jl
Original file line number Diff line number Diff line change
@@ -1,24 +1,74 @@
using DiagonalArrays: δ, delta, diagview
using ITensorBase:
ITensorBase,
ITensor,
Index,
gettag,
hastag,
plev,
prime,
setplev,
settag,
tags,
unsettag
using ITensorBase: ITensorBase, ITensor, Index, IndexName, gettag, hastag, plev, prime,
setplev, settag, tags, unsettag
using NamedDimsArrays: dename, inds, mapinds, name, named
using SparseArraysBase: oneelement
using LinearAlgebra: factorize
using Test: @test, @test_broken, @test_throws, @testset

const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
@testset "ITensorBase" begin
@testset "Basics" begin
@testset "IndexName" begin
n1 = IndexName(; id = UInt64(0))
n2 = IndexName(; id = UInt64(0))
@test n1 == n2
@test isequal(n1, n2)
@test hash(n1) ≡ hash(n2)

n1 = IndexName(; id = UInt64(0))
n2 = IndexName(; id = UInt64(1))
@test n1 ≠ n2
@test !isequal(n1, n2)
@test n1 < n2
@test isless(n1, n2)
@test hash(n1) ≠ hash(n2)

n1 = IndexName(; id = UInt64(0), plev = 0)
n2 = IndexName(; id = UInt64(0), plev = 1)
@test n1 ≠ n2
@test !isequal(n1, n2)
@test n1 < n2
@test isless(n1, n2)
@test hash(n1) ≠ hash(n2)
end
@testset "Index basics" begin
i = Index(2)
@test plev(i) == 0
i = setplev(i, 2)
@test plev(i) == 2

i = Index(2)
i = settag(i, "X", "x")
@test hastag(i, "X")
@test !hastag(i, "Y")
@test gettag(i, "X") == "x"
i = unsettag(i, "X")
@test isnothing(gettag(i, "X", nothing))
@test !hastag(i, "X")
@test !hastag(i, "Y")

i = Index(Base.OneTo(2))
@test length(i) == named(2, name(i))
@test dename(length(i)) == 2
@test dename(i) == 1:2
@test plev(i) == 0
@test length(tags(i)) == 0

for i in (
Index(2; tags = Dict(["X" => "Y"])),
Index(2; tags = ["X" => "Y"]),
Index(2; tags = ("X" => "Y",)),
Index(2; tags = "X" => "Y"),
)
@test Int(length(i)) == 2
@test hastag(i, "X")
@test gettag(i, "X") == "Y"
@test plev(i) == 0
@test length(tags(i)) == 1
end

end
@testset "ITensor basics" begin
elt = Float64
i, j = Index.((2, 2))
x = randn(elt, 2, 2)
Expand Down Expand Up @@ -57,41 +107,6 @@ const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
@test a == b
@test dename(a) == dename(b, (i, j, k))
@test dename(a) == permutedims(dename(b), (2, 3, 1))

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

i = Index(2)
i = settag(i, "X", "x")
@test hastag(i, "X")
@test !hastag(i, "Y")
@test gettag(i, "X") == "x"
i = unsettag(i, "X")
@test isnothing(gettag(i, "X", nothing))
@test !hastag(i, "X")
@test !hastag(i, "Y")

i = Index(Base.OneTo(2))
@test length(i) == named(2, name(i))
@test dename(length(i)) == 2
@test dename(i) == 1:2
@test plev(i) == 0
@test length(tags(i)) == 0

for i in (
Index(2; tags = Dict(["X" => "Y"])),
Index(2; tags = ["X" => "Y"]),
Index(2; tags = ("X" => "Y",)),
Index(2; tags = "X" => "Y"),
)
@test Int(length(i)) == 2
@test hastag(i, "X")
@test gettag(i, "X") == "Y"
@test plev(i) == 0
@test length(tags(i)) == 1
end
end
@testset "show" begin
id = rand(UInt64)
Expand Down
Loading