@@ -243,24 +243,46 @@ end
243243# -> A-move (foldleft, foldright) is complicated, needs to be reexpressed in standard form
244244
245245# flip a duality flag of a fusion tree
246- function flip (f₁:: FusionTree{I,N₁} , f₂:: FusionTree{I,N₂} , i:: Int ) where {I<: Sector ,N₁,N₂}
246+ function flip (f₁:: FusionTree{I,N₁} , f₂:: FusionTree{I,N₂} , i:: Int ;
247+ inv:: Bool = false ) where {I<: Sector ,N₁,N₂}
247248 @assert 0 < i ≤ N₁ + N₂
248249 if i ≤ N₁
249250 a = f₁. uncoupled[i]
250- fs = frobeniusschur (a) * twist (a)
251- factor = f₁. isdual[i] ? fs : one (fs)
251+ χₐ = frobeniusschur (a)
252+ θₐ = twist (a)
253+ if ! inv
254+ factor = f₁. isdual[i] ? χₐ * θₐ : one (θₐ)
255+ else
256+ factor = f₁. isdual[i] ? one (θₐ) : χₐ * conj (θₐ)
257+ end
252258 isdual′ = TupleTools. setindex (f₁. isdual, ! f₁. isdual[i], i)
253259 f₁′ = FusionTree {I} (f₁. uncoupled, f₁. coupled, isdual′, f₁. innerlines, f₁. vertices)
254260 return SingletonDict ((f₁′, f₂) => factor)
255261 else
256262 i -= N₁
257263 a = f₂. uncoupled[i]
258- factor = f₂. isdual[i] ? frobeniusschur (a) : twist (a)
264+ χₐ = frobeniusschur (a)
265+ θₐ = twist (a)
266+ if ! inv
267+ factor = f₂. isdual[i] ? χₐ * one (θₐ) : θₐ
268+ else
269+ factor = f₂. isdual[i] ? conj (θₐ) : χₐ * one (θₐ)
270+ end
259271 isdual′ = TupleTools. setindex (f₂. isdual, ! f₂. isdual[i], i)
260272 f₂′ = FusionTree {I} (f₂. uncoupled, f₂. coupled, isdual′, f₂. innerlines, f₂. vertices)
261273 return SingletonDict ((f₁, f₂′) => factor)
262274 end
263275end
276+ function flip (f₁:: FusionTree{I,N₁} , f₂:: FusionTree{I,N₂} , ind;
277+ inv:: Bool = false ) where {I<: Sector ,N₁,N₂}
278+ f₁′, f₂′ = f₁, f₂
279+ factor = one (sectorscalartype (I))
280+ for i in ind
281+ (f₁′, f₂′), s = only (flip (f₁′, f₂′, i; inv))
282+ factor *= s
283+ end
284+ return SingletonDict ((f₁′, f₂′) => factor)
285+ end
264286
265287# change to N₁ - 1, N₂ + 1
266288function bendright (f₁:: FusionTree{I,N₁} , f₂:: FusionTree{I,N₂} ) where {I<: Sector ,N₁,N₂}
0 commit comments