Skip to content

Commit 4283351

Browse files
committed
remove unneeded code
1 parent a78beb0 commit 4283351

File tree

1 file changed

+14
-85
lines changed

1 file changed

+14
-85
lines changed

src/fusion_trees/clebsch_gordan_tensors.jl

Lines changed: 14 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ using GradedArrays:
1212
SU2,
1313
SectorRange,
1414
SymmetryStyle,
15+
TrivialSector,
1516
dual,
1617
istrivial,
1718
quantum_dimension,
@@ -21,6 +22,7 @@ using GradedArrays:
2122
zero_odd
2223
using TensorAlgebra: contract
2324
using TensorProducts:
25+
import TensorKitSectors as TKS
2426

2527
function symbol_1j(s::SectorRange)
2628
cgt = clebsch_gordan_tensor(s, dual(s), trivial(s), 1)
@@ -47,92 +49,19 @@ function clebsch_gordan_tensor(
4749
return cgt
4850
end
4951

50-
function clebsch_gordan_tensor(s1::S, s2::S, s3::S, outer_mult_index::Int) where {S}
51-
return clebsch_gordan_tensor(SymmetryStyle(S), s1, s2, s3, outer_mult_index)
52-
end
53-
54-
function clebsch_gordan_tensor(
55-
::AbelianStyle, s1::S, s2::S, s3::S, outer_mult_index::Int
56-
) where {S}
57-
@assert outer_mult_index == 1
58-
return s1 s2 == s3 ? ones((1, 1, 1)) : zeros((1, 1, 1))
59-
end
60-
61-
function clebsch_gordan_tensor(::NotAbelianStyle, s1::O2, s2::O2, s3::O2, ::Int)
62-
return clebsch_gordan_tensor(s1, s2, s3) # no outer multiplicity
63-
end
64-
65-
function clebsch_gordan_tensor(s1::O2, s2::O2, s3::O2)
66-
d1 = quantum_dimension(s1)
67-
d2 = quantum_dimension(s2)
68-
d3 = quantum_dimension(s3)
69-
cgt = zeros((d1, d2, d3))
70-
s3 sectors(s1 s2) && return cgt
71-
72-
# adapted from TensorKit
73-
l1 = sector_label(s1)
74-
l2 = sector_label(s2)
75-
l3 = sector_label(s3)
76-
if l3 <= 0 # 0even or 0odd
77-
if l1 <= 0 && l2 <= 0
78-
cgt[1, 1, 1, 1] = 1.0
79-
else
80-
if istrivial(s3)
81-
cgt[1, 2, 1, 1] = 1.0 / sqrt(2)
82-
cgt[2, 1, 1, 1] = 1.0 / sqrt(2)
83-
else
84-
cgt[1, 2, 1, 1] = 1.0 / sqrt(2)
85-
cgt[2, 1, 1, 1] = -1.0 / sqrt(2)
86-
end
87-
end
88-
elseif l1 <= 0 # 0even or 0odd
89-
cgt[1, 1, 1, 1] = 1.0
90-
cgt[1, 2, 2, 1] = s1 == zero_odd(O2) ? -1.0 : 1.0
91-
elseif l2 == 0
92-
cgt[1, 1, 1, 1] = 1.0
93-
cgt[2, 1, 2, 1] = s2 == zero_odd(O2) ? -1.0 : 1.0
94-
elseif l3 == l1 + l2
95-
cgt[1, 1, 1, 1] = 1.0
96-
cgt[2, 2, 2, 1] = 1.0
97-
elseif l3 == l1 - l2
98-
cgt[1, 2, 1, 1] = 1.0
99-
cgt[2, 1, 2, 1] = 1.0
100-
elseif l3 == l2 - l1
101-
cgt[2, 1, 1, 1] = 1.0
102-
cgt[1, 2, 2, 1] = 1.0
52+
function clebsch_gordan_tensor(s1::S, s2::S, s3::S, outer_mult_index::Int = 1) where {S}
53+
CGC = TKS.fusiontensor(GradedArrays.label.((s1, s2, s3))...)
54+
outer_mult_index axes(CGC, 4) || throw(ArgumentError("invalid outer multiplicity index"))
55+
if TKS.FusionStyle(S) === TKS.GenericFusion()
56+
# TODO: do we want a view here?
57+
return CGC[:, :, :, outer_mult_index]
58+
else
59+
return dropdims(CGC; dims = 4)
10360
end
104-
return cgt
105-
end
106-
107-
function clebsch_gordan_tensor(::NotAbelianStyle, s1::SU2, s2::SU2, s3::SU2, ::Int)
108-
return clebsch_gordan_tensor(s1, s2, s3) # no outer multiplicity
10961
end
11062

111-
function clebsch_gordan_tensor(s1::SU2, s2::SU2, s3::SU2)
112-
d1 = quantum_dimension(s1)
113-
d2 = quantum_dimension(s2)
114-
d3 = quantum_dimension(s3)
115-
j1 = half(d1 - 1)
116-
j2 = half(d2 - 1)
117-
j3 = half(d3 - 1)
118-
cgtensor = Array{Float64, 3}(undef, (d1, d2, d3))
119-
for (i, j, k) in Iterators.product(1:d1, 1:d2, 1:d3)
120-
m1 = j1 - i + 1
121-
m2 = j2 - j + 1
122-
m3 = j3 - k + 1
123-
cgtensor[i, j, k] = clebschgordan(j1, m1, j2, m2, j3, m3)
124-
end
125-
return cgtensor
63+
# TODO: remove once TensorKitSectors fixes this
64+
function clebsch_gordan_tensor(s1::TrivialSector, s2::TrivialSector, s3::TrivialSector, outer_mult_index::Int = 1)
65+
outer_mult_index == 1 || throw(ArgumentError("invalid outer multiplicity index"))
66+
return fill(1, (1, 1, 1))
12667
end
127-
128-
## TODO: Implement and move to `FusionTensorsSUNRepresentationsExt`.
129-
## function clebsch_gordan_tensor(
130-
## ::NotAbelianStyle, s1::SU{3}, s2::SU{3}, s3::SU{3}, outer_mult_index::Int
131-
## )
132-
## d1 = quantum_dimension(s1)
133-
## d2 = quantum_dimension(s2)
134-
## d3 = quantum_dimension(s3)
135-
## cgtensor = zeros(d1, d2, d3)
136-
## # dummy
137-
## return cgtensor
138-
## end

0 commit comments

Comments
 (0)