@@ -3,16 +3,16 @@ using TensorKitSectors, TensorKit
33using Test, TestExtras
44
55I = A4Object
6- s = size (A4Object)
6+ Istr = TensorKitSectors. type_repr (I)
7+ r = size (I)
78
8- @testset " Basic type properties" verbose = true begin
9- Istr = TensorKitSectors. type_repr (I)
9+ @testset " $Istr Basic type properties" verbose = true begin
1010 @test eval (Meta. parse (sprint (show, I))) == I
1111 @test eval (Meta. parse (TensorKitSectors. type_repr (I))) == I
1212end
1313
14- @testset " Fusion Category $i " for i in 1 : s
15- objects = A4Object .(i, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, i])
14+ @testset " $Istr Fusion Category $i " for i in 1 : r
15+ objects = I .(i, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, i])
1616
1717 @testset " Basic properties" begin
1818 s = rand (objects, 3 )
4848 end
4949end
5050
51- @testset " Pentagon equation" begin
52- objects = collect (values (A4Object))
51+ for i in 1 : r, j in 1 : r # M x D (or Mop x C)
52+ i != j || continue # skip if fusion category
53+ @testset " $Istr right module category $i , $j " begin
54+ mod_objects = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
55+ fusion_objects = I .(j, j, MultiTensorKit. _get_dual_cache (I)[2 ][j, j])
56+
57+ @testset " Unitarity of module F-move $i , $j " begin
58+ for A in mod_objects, α in fusion_objects, β in fusion_objects
59+ (A. j == α. i && α. j == β. i) || continue # skip if not compatible
60+ for B in ⊗ (A, α, β)
61+ Cs = collect (intersect (⊗ (A, α), map (dual, ⊗ (β, dual (B)))))
62+ γs = collect (intersect (⊗ (α, β), map (dual, ⊗ (dual (B), A))))
63+ Fblocks = Vector {Any} ()
64+ for C in Cs
65+ for γ in γs
66+ Fs = Fsymbol (A, α, β, B, C, γ)
67+ push! (Fblocks,
68+ reshape (Fs,
69+ (size (Fs, 1 ) * size (Fs, 2 ),
70+ size (Fs, 3 ) * size (Fs, 4 ))))
71+ end
72+ end
73+ F = hvcat (length (γs), Fblocks... )
74+ @test isapprox (F' * F, one (F); atol= 1e-12 , rtol= 1e-12 )
75+ end
76+ end
77+ end
78+ end
79+ end
80+
81+ for i in 1 : 7 , j in 1 : 7 # C x M (or D x Mop)
82+ i != j || continue # skip if fusion category
83+ @testset " $Istr left module category $i , $j unitarity check" begin
84+ mod_objects = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
85+ fusion_objects = I .(i, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, i])
86+
87+ @testset " Unitarity of left module F-move" begin
88+ 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
90+ for B in ⊗ (a, b, A)
91+ cs = collect (intersect (⊗ (a, b), map (dual, ⊗ (A, dual (B))))) # equivalent of es
92+ Cs = collect (intersect (⊗ (b, A), map (dual, ⊗ (dual (B), a)))) # equivalent of fs
93+ Fblocks = Vector {Any} ()
94+ for c in cs
95+ for C in Cs
96+ Fs = Fsymbol (a, b, A, B, c, C)
97+ push! (Fblocks,
98+ reshape (Fs,
99+ (size (Fs, 1 ) * size (Fs, 2 ),
100+ size (Fs, 3 ) * size (Fs, 4 ))))
101+ end
102+ end
103+ 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
106+ end
107+ end
108+ end
109+ end
110+ end
111+
112+ for i in 1 : 7 , j in 1 : 7 # bimodule check unitarity
113+ i != j || continue # skip if fusion category
114+ @testset " $Istr bimodule category $i , $j " begin
115+ C_objects = I .(i, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, i])
116+ mod_objects = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
117+ D_objects = I .(j, j, MultiTensorKit. _get_dual_cache (I)[2 ][j, j])
118+
119+ @testset " Unitarity of bimodule F-move" begin
120+ 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
122+ for B in ⊗ (a, A, α)
123+ Cs = collect (intersect (⊗ (a, A), map (dual, ⊗ (α, dual (B))))) # equivalent of es
124+ Ds = collect (intersect (⊗ (A, α), map (dual, ⊗ (dual (B), a)))) # equivalent of fs
125+ Fblocks = Vector {Any} ()
126+ for C in Cs
127+ for D in Ds
128+ Fs = Fsymbol (a, A, α, B, C, D)
129+ push! (Fblocks,
130+ reshape (Fs,
131+ (size (Fs, 1 ) * size (Fs, 2 ),
132+ size (Fs, 3 ) * size (Fs, 4 ))))
133+ end
134+ end
135+ count += 1
136+ 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
139+ end
140+ end
141+ end
142+ end
143+ end
144+
145+ @testset " $Istr Pentagon equation" begin
146+ objects = collect (values (I))
53147 for a in objects
54148 for b in objects
55149 a. j == b. i || continue # skip if not compatible
56150 for c in objects
57151 b. j == c. i || continue # skip if not compatible
58152 for d in objects
59- c. j == d. i || continue # skip if not compatible
153+ c. j == d. i || continue # skip if not compatible # TODO : check if this is right
60154 @test pentagon_equation (a, b, c, d; atol= 1e-12 , rtol= 1e-12 )
61155 end
62156 end
63157 end
64158 end
65159end
66160
67- @testset " A4 Category ($i , $j ) units and duals" for i in 1 : s , j in 1 : s
68- Cij_obs = A4Object .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
161+ @testset " $Istr ($i , $j ) units and duals" for i in 1 : r , j in 1 : r
162+ Cij_obs = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
69163
70- s = rand (Cij_obs, 1 )[ 1 ]
164+ s = rand (Cij_obs)
71165 @test eval (Meta. parse (sprint (show, s))) == s
72166 @test @constinferred (hash (s)) == hash (deepcopy (s))
73167 @test i == j ? isone (@constinferred (one (s))) :
74168 (isone (@constinferred (leftone (s))) && isone (@constinferred (rightone (s))))
75169 @constinferred dual (s)
76- @test dual (s) == A4Object (j, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, j][s. label])
170+ @test dual (s) == I . (j, i, MultiTensorKit. _get_dual_cache (I)[2 ][i, j][s. label])
77171 @test dual (dual (s)) == s
78172end
79173
80- @testset " A4 Category ($i , $j ) left and right units" for i in 1 : s , j in 1 : s
81- Cij_obs = A4Object .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
174+ @testset " $Istr ($i , $j ) left and right units" for i in 1 : r , j in 1 : r
175+ Cij_obs = I .(i, j, MultiTensorKit. _get_dual_cache (I)[2 ][i, j])
82176
83177 s = rand (Cij_obs, 1 )[1 ]
84- sp = Vect[A4Object ](s => 1 )
178+ sp = Vect[I ](s => 1 )
85179 W = sp ← sp
86180 for T in (Float32, ComplexF64)
87181 t = @constinferred rand (T, W)
0 commit comments