Skip to content

Commit ac73f3b

Browse files
committed
Remove ITensor code, update README
1 parent 531ea1b commit ac73f3b

File tree

11 files changed

+111
-532
lines changed

11 files changed

+111
-532
lines changed

README.md

Lines changed: 30 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -32,147 +32,51 @@ julia> Pkg.add("ITensorQuantumOperatorDefinitions")
3232
## Examples
3333

3434
````julia
35-
using ITensorQuantumOperatorDefinitions: ITensorQuantumOperatorDefinitions as Ops
36-
37-
using ITensorBase: ITensor, Index, tags
3835
using ITensorQuantumOperatorDefinitions:
39-
OpName, SiteType, StateName, , controlled, expand, op, siteind, siteinds, state
36+
OpName, SiteType, StateName, , controlled, op, state
4037
using LinearAlgebra: Diagonal
38+
using SparseArrays: SparseMatrixCSC, SparseVector
4139
using Test: @test
4240

43-
@test length(SiteType("Qubit")) == 2
44-
@test size(SiteType("Qubit")) == (2,)
45-
@test size(SiteType("Qubit"), 1) == 2
46-
@test axes(SiteType("Qubit")) == (Base.OneTo(2),)
47-
@test axes(SiteType("Qubit"), 1) == Base.OneTo(2)
48-
````
49-
50-
TODO: Delete.
41+
@test state("0") == [1, 0]
42+
@test state("1") == [0, 1]
5143

52-
````julia
53-
# @test Integer(StateName("0"), SiteType("Qubit")) === 1
54-
# @test Integer(StateName("0")) == 1
55-
# @test Integer(StateName("1"), SiteType("Qubit")) === 2
56-
# @test Integer(StateName("1")) == 2
57-
# @test Int(StateName("0"), SiteType("Qubit")) === 1
58-
# @test Int(StateName("1"), SiteType("Qubit")) === 2
59-
# @test Int32(StateName("0"), SiteType("Qubit")) === Int32(1)
60-
# @test Int32(StateName("1"), SiteType("Qubit")) === Int32(2)
61-
#
62-
# @test Integer(StateName("Up"), SiteType("Qubit")) === 1
63-
# @test Integer(StateName("Dn"), SiteType("Qubit")) === 2
64-
# @test Int(StateName("Up"), SiteType("Qubit")) === 1
65-
# @test Int(StateName("Dn"), SiteType("Qubit")) === 2
66-
# @test Int32(StateName("Up"), SiteType("Qubit")) === Int32(1)
67-
# @test Int32(StateName("Dn"), SiteType("Qubit")) === Int32(2)
68-
69-
@test AbstractArray(StateName("0"), SiteType("Qubit")) == [1, 0]
70-
@test AbstractArray(StateName("1"), SiteType("Qubit")) == [0, 1]
71-
@test AbstractArray{Float32}(StateName("0"), SiteType("Qubit")) == Float32[1, 0]
72-
@test AbstractArray{Float32}(StateName("1"), SiteType("Qubit")) == Float32[0, 1]
73-
@test Vector{Float32}(StateName("0"), SiteType("Qubit")) == Float32[1, 0]
74-
@test Vector{Float32}(StateName("1"), SiteType("Qubit")) == Float32[0, 1]
75-
76-
# TODO: Add this back.
77-
# @test AbstractArray(StateName("Up"), SiteType("Qubit")) == [1, 0]
78-
# @test AbstractArray(StateName("Dn"), SiteType("Qubit")) == [0, 1]
79-
80-
@test Matrix(OpName("X"), SiteType("Qubit")) == [0 1; 1 0]
81-
@test Matrix(OpName("σx"), SiteType("Qubit")) == [0 1; 1 0]
82-
@test Matrix(OpName("σ1"), SiteType("Qubit")) == [0 1; 1 0]
83-
@test Matrix(OpName("Z"), SiteType("Qubit")) == [1 0; 0 -1]
84-
85-
@test Matrix(OpName("Rx"; θ=π), SiteType("Qubit")) [0 -im; -im 0]
86-
87-
# TODO: Delete.
88-
##@test Matrix(OpName("Rx"; θ=π)) ≈ [0 -im; -im 0]
89-
90-
@test Array{<:Any,4}(OpName("CNOT"), (SiteType("Qubit"), SiteType("Qubit"))) ==
91-
[1; 0;; 0; 0;;; 0; 1;; 0; 0;;;; 0; 0;; 0; 1;;; 0; 0;; 1; 0]
92-
````
93-
94-
TODO: Support:
95-
`AbstractArray(OpName("CNOT"), (2, 2))`?
96-
97-
````julia
98-
@test Array(OpName("CNOT"), (SiteType("Qubit"), SiteType("Qubit"))) ==
99-
[1 0 0 0; 0 1 0 0; 0 0 0 1; 0 0 1 0]
100-
````
44+
@test state(Float32, "0") == [1, 0]
45+
@test eltype(state(Float32, "1")) === Float32
10146

102-
TODO: Should we allow this?
103-
@test Array(OpName("CNOT"), (SiteType("Qubit"), SiteType("Qudit"; length=2))) == [1 0 0 0; 0 1 0 0; 0 0 0 1; 0 0 1 0]
47+
@test Vector(StateName("0")) == [1, 0]
48+
@test Vector(StateName("1")) == [0, 1]
10449

105-
````julia
106-
@test AbstractArray(OpName("I"), SiteType("Qudit"; length=4)) == Diagonal(trues(4))
107-
@test AbstractArray(OpName("Id"), SiteType("Qudit"; length=4)) == Diagonal(trues(4))
108-
109-
@test Matrix(exp(-im * π / 4 * kron(OpName("X"), OpName("X"))))
110-
Matrix(OpName("RXX"; θ=π / 2))
111-
@test Matrix(exp(-im * π / 4 * kron(OpName("Y"), OpName("Y"))))
112-
Matrix(OpName("RYY"; θ=π / 2))
113-
@test Matrix(exp(-im * π / 4 * kron(OpName("Z"), OpName("Z"))))
114-
Matrix(OpName("RZZ"; θ=π / 2))
115-
````
50+
@test Vector{Float32}(StateName("0")) == [1, 0]
51+
@test eltype(Vector{Float32}(StateName("0"))) === Float32
11652

117-
TODO: This is broken, investigate.
118-
@test Matrix(exp(-im * π/4 * kron(OpName("X"), OpName("Y")))) ≈ Matrix(OpName("RXY"; θ=π/2))
53+
@test state(SparseVector, "0") == [1, 0]
54+
@test state(SparseVector, "0") isa SparseVector
11955

120-
````julia
121-
@test siteind("Qubit") isa Index
122-
@test Int(length(siteind("Qubit"))) == 2
123-
@test "Qubit" in tags(siteind("Qubit"))
124-
@test siteinds("Qubit", 4) isa Vector{<:Index}
125-
@test length(siteinds("Qubit", 4)) == 4
126-
@test all(s -> "Qubit" in tags(s), siteinds("Qubit", 4))
127-
128-
I, X, Y, Z = OpName.(("I", "X", "Y", "Z"))
129-
paulis = (I, X, Y, Z)
130-
131-
M = randn(ComplexF64, (2, 2))
132-
c = expand(M, Matrix.(paulis))
133-
M′ = Matrix(sum(c .* paulis))
134-
@test M M′
135-
136-
paulis2 = vec(splat(kron).(Iterators.product(paulis, paulis)))
137-
M2 = randn(ComplexF64, (4, 4))
138-
c2 = expand(M2, Matrix.(paulis2))
139-
M2′ = Matrix(sum(c2 .* paulis2))
140-
@test M2 M2′
141-
142-
@test AbstractArray(I, (SiteType("Qubit"), SiteType("Qudit"; length=3))) ==
143-
Diagonal(trues(6))
144-
@test AbstractArray{<:Any,4}(I, (SiteType("Qubit"), SiteType("Qudit"; length=3))) ==
145-
reshape(Diagonal(trues(6)), (2, 3, 2, 3))
146-
147-
s1, s2 = Index.((2, 2), "Qubit")
148-
````
56+
@test state("0", 3) == [1, 0, 0]
57+
@test state("1", 3) == [0, 1, 0]
58+
@test state("2", 3) == [0, 0, 1]
14959

150-
TODO: Define.
60+
@test Vector(StateName("0"), 3) == [1, 0, 0]
61+
@test Vector(StateName("1"), 3) == [0, 1, 0]
62+
@test Vector(StateName("2"), 3) == [0, 0, 1]
15163

152-
````julia
153-
# @test ITensor(OpName("Rx"; θ=π), s1) ≈ ITensor([0 -im; -im 0], (s1', s1))
154-
````
64+
@test op("X") == [0 1; 1 0]
65+
@test op("Y") == [0 -im; im 0]
66+
@test op("Z") == [1 0; 0 -1]
15567

156-
Specify just the domain.
68+
@test op("Z") isa Diagonal
15769

158-
````julia
159-
# ITensor(OpName("CNOT"), (s1, s2))
160-
````
70+
@test op(Float32, "X") == [0 1; 1 0]
71+
@test eltype(op(Float32, "X")) === Float32
72+
@test op(SparseMatrixCSC, "X") == [0 1; 1 0]
73+
@test op(SparseMatrixCSC, "X") isa SparseMatrixCSC
16174

162-
TODO: Allow specifying codomain and domain.
163-
ITensor(OpName("CNOT"), (s1', s2'), dag.((s1, s2)))
164-
TODO: Allow specifying the array type.
165-
ITensor(Array{Float32}, OpName("CNOT"), (s1', s2'), dag.((s1, s2)))
166-
TODO: Allow specifying the eltype.
167-
ITensor(Float32, OpName("CNOT"), (s1', s2'), dag.((s1, s2)))
75+
@test Matrix(OpName("X")) == [0 1; 1 0]
76+
@test Matrix(OpName("Y")) == [0 -im; im 0]
77+
@test Matrix(OpName("Z")) == [1 0; 0 -1]
16878

169-
````julia
170-
# @test val(s, "Up") == 1
171-
# @test val(s, "Dn") == 2
172-
# @test state("Up", s) == ITensor([1, 0], (s,))
173-
# @test state("Dn", s) == ITensor([0, 1], (s,))
174-
# @test op("X", s) == ITensor([0 1; 1 0], (s', s))
175-
# @test op("Z", s) == ITensor([1 0; 0 -1], (s', s))
79+
@test Matrix(OpName("Rx"; θ=π / 3)) [sin/ 3) -cos/ 3)*im; -cos/ 3)*im sin/ 3)]
17680
````
17781

17882
---

examples/README.jl

Lines changed: 41 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -37,124 +37,48 @@ julia> Pkg.add("ITensorQuantumOperatorDefinitions")
3737

3838
# ## Examples
3939

40-
using ITensorQuantumOperatorDefinitions: ITensorQuantumOperatorDefinitions as Ops
41-
42-
using ITensorBase: ITensor, Index, tags
4340
using ITensorQuantumOperatorDefinitions:
44-
OpName, SiteType, StateName, , controlled, expand, op, siteind, siteinds, state
41+
OpName, SiteType, StateName, , controlled, op, state
4542
using LinearAlgebra: Diagonal
43+
using SparseArrays: SparseMatrixCSC, SparseVector
4644
using Test: @test
4745

48-
@test length(SiteType("Qubit")) == 2
49-
@test size(SiteType("Qubit")) == (2,)
50-
@test size(SiteType("Qubit"), 1) == 2
51-
@test axes(SiteType("Qubit")) == (Base.OneTo(2),)
52-
@test axes(SiteType("Qubit"), 1) == Base.OneTo(2)
53-
54-
# TODO: Delete.
55-
## @test Integer(StateName("0"), SiteType("Qubit")) === 1
56-
## @test Integer(StateName("0")) == 1
57-
## @test Integer(StateName("1"), SiteType("Qubit")) === 2
58-
## @test Integer(StateName("1")) == 2
59-
## @test Int(StateName("0"), SiteType("Qubit")) === 1
60-
## @test Int(StateName("1"), SiteType("Qubit")) === 2
61-
## @test Int32(StateName("0"), SiteType("Qubit")) === Int32(1)
62-
## @test Int32(StateName("1"), SiteType("Qubit")) === Int32(2)
63-
##
64-
## @test Integer(StateName("Up"), SiteType("Qubit")) === 1
65-
## @test Integer(StateName("Dn"), SiteType("Qubit")) === 2
66-
## @test Int(StateName("Up"), SiteType("Qubit")) === 1
67-
## @test Int(StateName("Dn"), SiteType("Qubit")) === 2
68-
## @test Int32(StateName("Up"), SiteType("Qubit")) === Int32(1)
69-
## @test Int32(StateName("Dn"), SiteType("Qubit")) === Int32(2)
70-
71-
@test AbstractArray(StateName("0"), SiteType("Qubit")) == [1, 0]
72-
@test AbstractArray(StateName("1"), SiteType("Qubit")) == [0, 1]
73-
@test AbstractArray{Float32}(StateName("0"), SiteType("Qubit")) == Float32[1, 0]
74-
@test AbstractArray{Float32}(StateName("1"), SiteType("Qubit")) == Float32[0, 1]
75-
@test Vector{Float32}(StateName("0"), SiteType("Qubit")) == Float32[1, 0]
76-
@test Vector{Float32}(StateName("1"), SiteType("Qubit")) == Float32[0, 1]
77-
78-
## TODO: Add this back.
79-
## @test AbstractArray(StateName("Up"), SiteType("Qubit")) == [1, 0]
80-
## @test AbstractArray(StateName("Dn"), SiteType("Qubit")) == [0, 1]
81-
82-
@test Matrix(OpName("X"), SiteType("Qubit")) == [0 1; 1 0]
83-
@test Matrix(OpName("σx"), SiteType("Qubit")) == [0 1; 1 0]
84-
@test Matrix(OpName("σ1"), SiteType("Qubit")) == [0 1; 1 0]
85-
@test Matrix(OpName("Z"), SiteType("Qubit")) == [1 0; 0 -1]
86-
87-
@test Matrix(OpName("Rx"; θ=π), SiteType("Qubit")) [0 -im; -im 0]
88-
89-
## TODO: Delete.
90-
##@test Matrix(OpName("Rx"; θ=π)) ≈ [0 -im; -im 0]
91-
92-
@test Array{<:Any,4}(OpName("CNOT"), (SiteType("Qubit"), SiteType("Qubit"))) ==
93-
[1; 0;; 0; 0;;; 0; 1;; 0; 0;;;; 0; 0;; 0; 1;;; 0; 0;; 1; 0]
94-
95-
# TODO: Support:
96-
# `AbstractArray(OpName("CNOT"), (2, 2))`?
97-
98-
@test Array(OpName("CNOT"), (SiteType("Qubit"), SiteType("Qubit"))) ==
99-
[1 0 0 0; 0 1 0 0; 0 0 0 1; 0 0 1 0]
100-
101-
# TODO: Should we allow this?
102-
# @test Array(OpName("CNOT"), (SiteType("Qubit"), SiteType("Qudit"; length=2))) == [1 0 0 0; 0 1 0 0; 0 0 0 1; 0 0 1 0]
103-
104-
@test AbstractArray(OpName("I"), SiteType("Qudit"; length=4)) == Diagonal(trues(4))
105-
@test AbstractArray(OpName("Id"), SiteType("Qudit"; length=4)) == Diagonal(trues(4))
106-
107-
@test Matrix(exp(-im * π / 4 * kron(OpName("X"), OpName("X"))))
108-
Matrix(OpName("RXX"; θ=π / 2))
109-
@test Matrix(exp(-im * π / 4 * kron(OpName("Y"), OpName("Y"))))
110-
Matrix(OpName("RYY"; θ=π / 2))
111-
@test Matrix(exp(-im * π / 4 * kron(OpName("Z"), OpName("Z"))))
112-
Matrix(OpName("RZZ"; θ=π / 2))
113-
114-
# TODO: This is broken, investigate.
115-
# @test Matrix(exp(-im * π/4 * kron(OpName("X"), OpName("Y")))) ≈ Matrix(OpName("RXY"; θ=π/2))
116-
117-
@test siteind("Qubit") isa Index
118-
@test Int(length(siteind("Qubit"))) == 2
119-
@test "Qubit" in tags(siteind("Qubit"))
120-
@test siteinds("Qubit", 4) isa Vector{<:Index}
121-
@test length(siteinds("Qubit", 4)) == 4
122-
@test all(s -> "Qubit" in tags(s), siteinds("Qubit", 4))
123-
124-
I, X, Y, Z = OpName.(("I", "X", "Y", "Z"))
125-
paulis = (I, X, Y, Z)
126-
127-
M = randn(ComplexF64, (2, 2))
128-
c = expand(M, Matrix.(paulis))
129-
M′ = Matrix(sum(c .* paulis))
130-
@test M M′
131-
132-
paulis2 = vec(splat(kron).(Iterators.product(paulis, paulis)))
133-
M2 = randn(ComplexF64, (4, 4))
134-
c2 = expand(M2, Matrix.(paulis2))
135-
M2′ = Matrix(sum(c2 .* paulis2))
136-
@test M2 M2′
137-
138-
@test AbstractArray(I, (SiteType("Qubit"), SiteType("Qudit"; length=3))) ==
139-
Diagonal(trues(6))
140-
@test AbstractArray{<:Any,4}(I, (SiteType("Qubit"), SiteType("Qudit"; length=3))) ==
141-
reshape(Diagonal(trues(6)), (2, 3, 2, 3))
142-
143-
s1, s2 = Index.((2, 2), "Qubit")
144-
# TODO: Define.
145-
## @test ITensor(OpName("Rx"; θ=π), s1) ≈ ITensor([0 -im; -im 0], (s1', s1))
146-
# Specify just the domain.
147-
## ITensor(OpName("CNOT"), (s1, s2))
148-
# TODO: Allow specifying codomain and domain.
149-
# ITensor(OpName("CNOT"), (s1', s2'), dag.((s1, s2)))
150-
# TODO: Allow specifying the array type.
151-
# ITensor(Array{Float32}, OpName("CNOT"), (s1', s2'), dag.((s1, s2)))
152-
# TODO: Allow specifying the eltype.
153-
# ITensor(Float32, OpName("CNOT"), (s1', s2'), dag.((s1, s2)))
154-
155-
## @test val(s, "Up") == 1
156-
## @test val(s, "Dn") == 2
157-
## @test state("Up", s) == ITensor([1, 0], (s,))
158-
## @test state("Dn", s) == ITensor([0, 1], (s,))
159-
## @test op("X", s) == ITensor([0 1; 1 0], (s', s))
160-
## @test op("Z", s) == ITensor([1 0; 0 -1], (s', s))
46+
@test state("0") == [1, 0]
47+
@test state("1") == [0, 1]
48+
49+
@test state(Float32, "0") == [1, 0]
50+
@test eltype(state(Float32, "1")) === Float32
51+
52+
@test Vector(StateName("0")) == [1, 0]
53+
@test Vector(StateName("1")) == [0, 1]
54+
55+
@test Vector{Float32}(StateName("0")) == [1, 0]
56+
@test eltype(Vector{Float32}(StateName("0"))) === Float32
57+
58+
@test state(SparseVector, "0") == [1, 0]
59+
@test state(SparseVector, "0") isa SparseVector
60+
61+
@test state("0", 3) == [1, 0, 0]
62+
@test state("1", 3) == [0, 1, 0]
63+
@test state("2", 3) == [0, 0, 1]
64+
65+
@test Vector(StateName("0"), 3) == [1, 0, 0]
66+
@test Vector(StateName("1"), 3) == [0, 1, 0]
67+
@test Vector(StateName("2"), 3) == [0, 0, 1]
68+
69+
@test op("X") == [0 1; 1 0]
70+
@test op("Y") == [0 -im; im 0]
71+
@test op("Z") == [1 0; 0 -1]
72+
73+
@test op("Z") isa Diagonal
74+
75+
@test op(Float32, "X") == [0 1; 1 0]
76+
@test eltype(op(Float32, "X")) === Float32
77+
@test op(SparseMatrixCSC, "X") == [0 1; 1 0]
78+
@test op(SparseMatrixCSC, "X") isa SparseMatrixCSC
79+
80+
@test Matrix(OpName("X")) == [0 1; 1 0]
81+
@test Matrix(OpName("Y")) == [0 -im; im 0]
82+
@test Matrix(OpName("Z")) == [1 0; 0 -1]
83+
84+
@test Matrix(OpName("Rx"; θ=π / 3)) [sin/ 3) -cos/ 3)*im; -cos/ 3)*im sin/ 3)]
Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
11
module ITensorQuantumOperatorDefinitions
22

33
include("sitetype.jl")
4-
include("space.jl")
54
include("state.jl")
65
include("op.jl")
76
include("has_fermion_string.jl")
8-
97
include("sitetypes/qubit.jl")
108
include("sitetypes/spinone.jl")
119
include("sitetypes/fermion.jl")
1210
include("sitetypes/electron.jl")
1311
include("sitetypes/tj.jl")
1412
include("sitetypes/qudit.jl")
1513

16-
include("itensor/siteinds.jl")
17-
include("itensor/state.jl")
18-
include("itensor/op.jl")
19-
include("itensor/has_fermion_string.jl")
20-
2114
end

src/itensor/has_fermion_string.jl

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)