Skip to content

Commit a90386c

Browse files
Set last dimension to 0 for fusiontensor of forbidden fusions (#91)
* Set size as 0 for `fusiontensor` of forbidden fusions * Fix for NewSU2Irrep
1 parent 8662a37 commit a90386c

7 files changed

Lines changed: 17 additions & 8 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
*.jl.cov
33
*.jl.mem
44
Manifest.toml
5+
.vscode/
56
.DS_Store
67
build

src/fermions.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ twist(a::FermionParity) = a.isodd ? -1 : +1
5555

5656
function fusiontensor(a::I, b::I, c::I) where {I <: FermionParity}
5757
@warn "FermionParity Arrays do not preserve categorical properties." maxlog = 1
58-
return fill(Int(Nsymbol(a, b, c)), (1, 1, 1, 1))
58+
Nabc = Nsymbol(a, b, c)
59+
return fill(Int(Nabc), (1, 1, 1, Nabc))
5960
end
6061

6162
function Base.show(io::IO, a::FermionParity)

src/irreps/cu1irrep.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,9 @@ function Rsymbol(a::CU1Irrep, b::CU1Irrep, c::CU1Irrep)
218218
end
219219

220220
function fusiontensor(a::CU1Irrep, b::CU1Irrep, c::CU1Irrep)
221-
C = fill(zero(sectorscalartype(CU1Irrep)), dim(a), dim(b), dim(c), 1)
222-
!Nsymbol(a, b, c) && return C
221+
Nabc = Nsymbol(a, b, c)
222+
C = fill(zero(sectorscalartype(CU1Irrep)), dim(a), dim(b), dim(c), Nabc)
223+
Nabc || return C
223224
if c.j == 0
224225
if a.j == b.j == 0
225226
C[1, 1, 1, 1] = 1.0

src/irreps/dnirrep.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,9 @@ end
198198

199199
function fusiontensor(a::I, b::I, c::I) where {N, I <: DNIrrep{N}}
200200
T = sectorscalartype(I)
201-
C = zeros(T, dim(a), dim(b), dim(c), 1)
202-
Nsymbol(a, b, c) || return C
201+
Nabc = Nsymbol(a, b, c)
202+
C = zeros(T, dim(a), dim(b), dim(c), Nabc)
203+
Nabc || return C
203204

204205
if c.j == 0
205206
if a.j == b.j == 0 || (2 * a.j == 2 * b.j == N)

src/irreps/irreps.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ Rsymbol(a::I, b::I, c::I) where {I <: AbelianIrrep} = braidingscalartype(I)(Nsym
6666

6767
function fusiontensor(a::I, b::I, c::I) where {I <: AbelianIrrep}
6868
T = sectorscalartype(I)
69-
return fill(T(Nsymbol(a, b, c)), (1, 1, 1, 1))
69+
Nabc = Nsymbol(a, b, c)
70+
return fill(T(Nabc), (1, 1, 1, Nabc))
7071
end
7172

7273
include("znirrep.jl")

src/irreps/su2irrep.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ end
7272

7373
function fusiontensor(a::SU2Irrep, b::SU2Irrep, c::SU2Irrep)
7474
T = sectorscalartype(SU2Irrep)
75-
C = Array{T}(undef, dim(a), dim(b), dim(c), 1)
75+
Nabc = Nsymbol(a, b, c)
76+
C = Array{T}(undef, dim(a), dim(b), dim(c), Nabc)
77+
Nabc || return C
7678
ja, jb, jc = a.j, b.j, c.j
7779

7880
for kc in 1:dim(c), kb in 1:dim(b), ka in 1:dim(a)

test/newsectors.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ end
6565
dim(s::NewSU2Irrep) = twice(s.j) + 1
6666

6767
function fusiontensor(a::NewSU2Irrep, b::NewSU2Irrep, c::NewSU2Irrep)
68-
C = Array{Float64}(undef, dim(a), dim(b), dim(c), 1)
68+
Nabc = Nsymbol(a, b, c)
69+
C = Array{Float64}(undef, dim(a), dim(b), dim(c), Nabc)
70+
Nabc == 0 && return C
6971
ja, jb, jc = a.j, b.j, c.j
7072

7173
for kc in 1:dim(c), kb in 1:dim(b), ka in 1:dim(a)

0 commit comments

Comments
 (0)