Skip to content

Commit d50c07c

Browse files
committed
Simplify spin one
1 parent e5c0856 commit d50c07c

File tree

3 files changed

+16
-91
lines changed

3 files changed

+16
-91
lines changed

src/itensor/op.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ function op(name::AbstractString, s::Index...; adjoint::Bool=false, kwargs...)
7070
## end
7171

7272
common_stypes = _sitetypes(commontags_s)
73-
@ignore_derivatives push!(common_stypes, SiteType("Generic"))
73+
# TODO: Delete this.
74+
push!(common_stypes, SiteType("Generic"))
7475
opn = OpName(name)
7576
for st in common_stypes
7677
op_mat = AbstractArray(opn, st; kwargs...)

src/op.jl

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,10 @@ alias(::OpName"X") = (OpName"σ⁺"() + OpName"σ⁻"()) / 2
182182
@op_alias "iX" "im" op = OpName"X"()
183183
@op_alias "√X" "" op = OpName"X"()
184184
@op_alias "√NOT" "" op = OpName"X"()
185-
alias(n::OpName"Sx") = OpName("X") / 2
185+
alias(n::OpName"Sx") = OpName"X"() / 2
186186
@op_alias "" "Sx"
187187
@op_alias "Sₓ" "Sx"
188+
alias(::OpName"Sx2") = OpName"Sx"()^2
188189

189190
alias(::OpName"Y") = -im * (OpName"σ⁺"() - OpName"σ⁻"()) / 2
190191
# TODO: No subsript `\_y` available
@@ -193,9 +194,7 @@ alias(::OpName"Y") = -im * (OpName"σ⁺"() - OpName"σ⁻"()) / 2
193194
@op_alias "σ2" "Y"
194195
@op_alias "σ²" "Y"
195196
@op_alias "σ₂" "Y"
196-
function alias(::OpName"iY")
197-
return real(OpName"Y"()im)
198-
end
197+
alias(::OpName"iY") = (OpName"σ⁺"() - OpName"σ⁻"()) / 2
199198
@op_alias "iσy" "iY"
200199
# TODO: No subsript `\_y` available
201200
# in unicode.
@@ -207,6 +206,7 @@ alias(n::OpName"Sy") = OpName("Y") / 2
207206
@op_alias "" "Sy"
208207
alias(n::OpName"iSy") = OpName("iY") / 2
209208
@op_alias "iSʸ" "iSy"
209+
alias(::OpName"Sy2") = -OpName"iSy"()^2
210210

211211
function Base.AbstractArray(n::OpName"σᶻ", domain_size::Tuple{Int})
212212
d = only(domain_size)
@@ -221,7 +221,7 @@ end
221221
@op_alias "σ₃" "Z"
222222
@op_alias "σz" "Z"
223223
@op_alias "iZ" "im" op = OpName"Z"()
224-
alias(n::OpName"Sz") = OpName("Z") / 2
224+
alias(n::OpName"Sz") = OpName"Z"() / 2
225225
@op_alias "Sᶻ" "Sz"
226226
# TODO: Make sure it ends up real, using `S⁺` and `S⁻`,
227227
# define `Sx²`, `Sy²`, and `Sz²`, etc.
@@ -231,8 +231,9 @@ alias(n::OpName"Sz") = OpName("Z") / 2
231231
# = (d - 1) * (d + 1) / 4 * I
232232
# ```
233233
# where `s = (d - 1) / 2`. See https://en.wikipedia.org/wiki/Spin_(physics)#Higher_spins.
234-
alias(n::OpName"S2") = (OpName("")^2 + OpName("")^2 + OpName("Sᶻ")^2)
234+
alias(n::OpName"S2") = OpName"Sx2"() + OpName"Sy2"() + OpName"Sz2"()
235235
@op_alias "" "S2"
236+
alias(::OpName"Sz2") = OpName"Sz"()^2
236237

237238
using LinearAlgebra: eigen
238239
function Base.AbstractArray(n::OpName"H", domain_size::Tuple{Int})

src/sitetypes/spinone.jl

Lines changed: 7 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# TODO: Need to define or replace.
22
# using ITensorBase: complex!, QN
33

4+
Base.length(::SiteType"S=1") = 3
5+
46
alias(::SiteType"SpinOne") = SiteType"S=1"()
57

68
"""
@@ -54,97 +56,18 @@ state(::StateName"Y+", ::SiteType"S=1") = [-1 / 2, -im / sqrt(2), 1 / 2]
5456
state(::StateName"Y0", ::SiteType"S=1") = [1 / sqrt(2), 0, 1 / sqrt(2)]
5557
state(::StateName"Y-", ::SiteType"S=1") = [-1 / 2, im / sqrt(2), 1 / 2]
5658

57-
op(::OpName"Id", ::SiteType"S=1") = [
58-
1.0 0.0 0.0
59-
0.0 1.0 0.0
60-
0.0 0.0 1.0
61-
]
62-
63-
op(::OpName"Sz", ::SiteType"S=1") = [
64-
1.0 0.0 0.0
65-
0.0 0.0 0.0
66-
0.0 0.0 -1.0
67-
]
68-
69-
op(on::OpName"Sᶻ", t::SiteType"S=1") = op(alias(on), t)
70-
71-
op(::OpName"S+", ::SiteType"S=1") = [
72-
0.0 2 0.0
73-
0.0 0.0 2
74-
0.0 0.0 0.0
75-
]
76-
77-
op(on::OpName"S⁺", t::SiteType"S=1") = op(alias(on), t)
78-
op(on::OpName"Splus", t::SiteType"S=1") = op(alias(on), t)
79-
op(on::OpName"Sp", t::SiteType"S=1") = op(alias(on), t)
80-
81-
op(::OpName"S-", ::SiteType"S=1") = [
82-
0.0 0.0 0.0
83-
2 0.0 0.0
84-
0.0 2 0.0
85-
]
86-
87-
op(on::OpName"S⁻", t::SiteType"S=1") = op(alias(on), t)
88-
op(on::OpName"Sminus", t::SiteType"S=1") = op(alias(on), t)
89-
op(on::OpName"Sm", t::SiteType"S=1") = op(alias(on), t)
90-
91-
op(::OpName"Sx", ::SiteType"S=1") = [
92-
0.0 1/√2 0.0
93-
1/√2 0.0 1/√2
94-
0.0 1/√2 0.0
95-
]
96-
97-
op(on::OpName"Sˣ", t::SiteType"S=1") = op(alias(on), t)
98-
99-
op(::OpName"iSy", ::SiteType"S=1") = [
100-
0.0 1/√2 0.0
101-
-1/√2 0.0 1/√2
102-
0.0 -1/√2 0.0
103-
]
104-
105-
op(on::OpName"iSʸ", t::SiteType"S=1") = op(alias(on), t)
106-
107-
op(::OpName"Sy", ::SiteType"S=1") = [
108-
0.0 -im/√2 0.0
109-
im/√2 0.0 -im/√2
110-
0.0 im/√2 0.0
111-
]
112-
113-
op(on::OpName"Sʸ", t::SiteType"S=1") = op(alias(on), t)
114-
115-
op(::OpName"Sz2", ::SiteType"S=1") = [
116-
1.0 0.0 0.0
117-
0.0 0.0 0.0
118-
0.0 0.0 1.0
119-
]
120-
121-
op(::OpName"Sx2", ::SiteType"S=1") = [
122-
0.5 0.0 0.5
123-
0.0 1.0 0.0
124-
0.5 0.0 0.5
125-
]
126-
127-
op(::OpName"Sy2", ::SiteType"S=1") = [
128-
0.5 0.0 -0.5
129-
0.0 1.0 0.0
130-
-0.5 0.0 0.5
131-
]
132-
133-
op(::OpName"S2", ::SiteType"S=1") = [
134-
2.0 0.0 0.0
135-
0.0 2.0 0.0
136-
0.0 0.0 2.0
137-
]
138-
139-
op(on::OpName"S²", t::SiteType"S=1") = op(alias(on), t)
140-
59+
# TODO: Delete this.
14160
space(st::SiteType"SpinOne"; kwargs...) = space(alias(st); kwargs...)
14261

62+
# TODO: Delete this.
14363
state(name::StateName, st::SiteType"SpinOne") = state(name, alias(st))
64+
# TODO: Delete this.
14465
val(name::ValName, st::SiteType"SpinOne") = val(name, alias(st))
14566

67+
# TODO: Delete this.
14668
## function op!(Op::ITensor, o::OpName, st::SiteType"SpinOne", s::Index)
14769
## return op!(Op, o, alias(st), s)
14870
## end
14971

72+
# TODO: Delete this.
15073
op(o::OpName, st::SiteType"SpinOne") = op(o, alias(st))

0 commit comments

Comments
 (0)