4848 end
4949end
5050
51- for i in 1 : r, j in 1 : r # M x D (or Mop x C)
51+ for i in 1 : r, j in 1 : r
5252 i != j || continue # skip if fusion category
5353 @testset " $Istr right module category $i , $j " begin
5454 mod_objects = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
5555 fusion_objects = I .(j, j, MultiTensorKit. _get_dual_cache (I)[2 ][j, j])
5656
57- @testset " Unitarity of module F-move $i , $j " begin
57+ @testset " Unitarity of module F-move $i , $j " begin # written as MxD, but with i<->j checks MopxC
5858 for A in mod_objects, α in fusion_objects, β in fusion_objects
59- (A. j == α. i && α. j == β. i) || continue # skip if not compatible
6059 for B in ⊗ (A, α, β)
6160 Cs = collect (intersect (⊗ (A, α), map (dual, ⊗ (β, dual (B)))))
6261 γs = collect (intersect (⊗ (α, β), map (dual, ⊗ (dual (B), A))))
@@ -78,15 +77,14 @@ for i in 1:r, j in 1:r # M x D (or Mop x C)
7877 end
7978end
8079
81- for i in 1 : 7 , j in 1 : 7 # C x M (or D x Mop)
80+ for i in 1 : 7 , j in 1 : 7 # C x M (or D x Mop with i<->j )
8281 i != j || continue # skip if fusion category
8382 @testset " $Istr left module category $i , $j unitarity check" begin
8483 mod_objects = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
8584 fusion_objects = I .(i, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, i])
8685
8786 @testset " Unitarity of left module F-move" begin
8887 for a in fusion_objects, b in fusion_objects, A in mod_objects # written for M as left C-module category
89- (a. j == b. i && b. j == A. i) || continue # skip if not compatible
9088 for B in ⊗ (a, b, A)
9189 cs = collect (intersect (⊗ (a, b), map (dual, ⊗ (A, dual (B))))) # equivalent of es
9290 Cs = collect (intersect (⊗ (b, A), map (dual, ⊗ (dual (B), a)))) # equivalent of fs
@@ -101,24 +99,22 @@ for i in 1:7, j in 1:7 # C x M (or D x Mop)
10199 end
102100 end
103101 F = hvcat (length (Cs), Fblocks... )
104- isapprox (F' * F, one (F); atol= 1e-12 , rtol= 1e-12 ) ||
105- @show A, a, b, B, C, c, F
102+ @test isapprox (F' * F, one (F); atol= 1e-12 , rtol= 1e-12 )
106103 end
107104 end
108105 end
109106 end
110107end
111108
112- for i in 1 : 7 , j in 1 : 7 # bimodule check unitarity
109+ for i in 1 : 7 , j in 1 : 7 # bimodule check unitarity (C x M x D or D x Mop x C)
113110 i != j || continue # skip if fusion category
114111 @testset " $Istr bimodule category $i , $j " begin
115112 C_objects = I .(i, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, i])
116113 mod_objects = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
117114 D_objects = I .(j, j, MultiTensorKit. _get_dual_cache (I)[2 ][j, j])
118115
119- @testset " Unitarity of bimodule F-move" begin
116+ @testset " Unitarity of bimodule F-move" begin # written as CMD
120117 for a in C_objects, A in mod_objects, α in D_objects
121- (a. j == A. i && A. j == α. i) || continue # skip if not compatible
122118 for B in ⊗ (a, A, α)
123119 Cs = collect (intersect (⊗ (a, A), map (dual, ⊗ (α, dual (B))))) # equivalent of es
124120 Ds = collect (intersect (⊗ (A, α), map (dual, ⊗ (dual (B), a)))) # equivalent of fs
@@ -132,16 +128,45 @@ for i in 1:7, j in 1:7 # bimodule check unitarity
132128 size (Fs, 3 ) * size (Fs, 4 ))))
133129 end
134130 end
135- count += 1
136131 F = hvcat (length (Ds), Fblocks... )
137- isapprox (F' * F, one (F); atol= 1e-12 , rtol= 1e-12 ) ||
138- @show A, a, α, B, C, D, F
132+ @test isapprox (F' * F, one (F); atol= 1e-12 , rtol= 1e-12 )
139133 end
140134 end
141135 end
142136 end
143137end
144138
139+ for i in 1 : 7 , j in 1 : 7 # M x Mop x M -> M (or Mop x M x Mop -> Mop)
140+ i != j || continue # skip if not fusion category
141+ @testset " $Istr Module category $i ,$j and opposite $j ,$i " begin
142+ M_objects = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
143+ Mop_objects = I .(j, i, MultiTensorKit. _get_dual_cache (I)[2 ][j, i])
144+ C_objects = I .(i, i, MultiTensorKit. _get_dual_cache (I)[2 ][i,i])
145+ D_objects = I .(j, j, MultiTensorKit. _get_dual_cache (I)[2 ][j, j])
146+
147+ @testset " Unitarity of pure module F-move" begin
148+ for A in M_objects, Aop in Mop_objects, B in M_objects # written for M x Mop x M -> M
149+ for C in ⊗ (A, Aop, B)
150+ cs = collect (intersect (⊗ (A, Aop), map (dual, ⊗ (B, dual (C))))) # equivalent of es
151+ γs = collect (intersect (⊗ (Aop, B), map (dual, ⊗ (dual (C), A)))) # equivalent of fs
152+ Fblocks = Vector {Any} ()
153+ for c in cs
154+ for γ in γs
155+ Fs = Fsymbol (A, Aop, B, C, c, γ)
156+ push! (Fblocks,
157+ reshape (Fs,
158+ (size (Fs, 1 ) * size (Fs, 2 ),
159+ size (Fs, 3 ) * size (Fs, 4 ))))
160+ end
161+ end
162+ F = hvcat (length (γs), Fblocks... )
163+ @test isapprox (F' * F, one (F); atol= 1e-12 , rtol= 1e-12 )
164+ end
165+ end
166+ end
167+ end
168+ end
169+
145170@testset " $Istr Pentagon equation" begin
146171 objects = collect (values (I))
147172 for a in objects
150175 for c in objects
151176 b. j == c. i || continue # skip if not compatible
152177 for d in objects
153- c. j == d. i || continue # skip if not compatible # TODO : check if this is right
178+ c. j == d. i || continue # skip if not compatible
154179 @test pentagon_equation (a, b, c, d; atol= 1e-12 , rtol= 1e-12 )
155180 end
156181 end
0 commit comments