@@ -323,264 +323,3 @@ function planartrace!(
323323 )
324324 return planartrace! (C, TensorMap (A), p, q, α, β, backend, allocator)
325325end
326-
327- # function planarcontract!(C::AbstractTensorMap{<:Any,S,N₁,N₂},
328- # A::BraidingTensor{S},
329- # (oindA, cindA)::Index2Tuple{0,4},
330- # B::AbstractTensorMap{<:Any,S},
331- # (cindB, oindB)::Index2Tuple{4,<:Any},
332- # (p1, p2)::Index2Tuple{N₁,N₂},
333- # α::Number, β::Number,
334- # backend::Backend...) where {S,N₁,N₂}
335- # codA, domA = codomainind(A), domainind(A)
336- # codB, domB = codomainind(B), domainind(B)
337- # oindA, cindA, oindB, cindB = reorder_indices(codA, domA, codB, domB, oindA, cindA,
338- # oindB, cindB, p1, p2)
339-
340- # @assert space(B, cindB[1]) == space(A, cindA[1])' &&
341- # space(B, cindB[2]) == space(A, cindA[2])' &&
342- # space(B, cindB[3]) == space(A, cindA[3])' &&
343- # space(B, cindB[4]) == space(A, cindA[4])'
344-
345- # if BraidingStyle(sectortype(B)) isa Bosonic
346- # return trace!(α, B, β, C, (), oindB, (cindB[1], cindB[2]), (cindB[3], cindB[4]))
347- # end
348-
349- # if iszero(β)
350- # fill!(C, β)
351- # elseif β != 1
352- # rmul!(C, β)
353- # end
354- # I = sectortype(B)
355- # u = unit(I)
356- # f₀ = FusionTree{I}((), u, (), (), ())
357- # braidingtensor_levels = A.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
358- # inv_braid = braidingtensor_levels[cindA[2]] > braidingtensor_levels[cindA[3]]
359- # for (f₁, f₂) in fusiontrees(B)
360- # local newtrees
361- # for ((f₁′, f₂′), coeff′) in transpose(f₁, f₂, cindB, oindB)
362- # f₁′.coupled == u || continue
363- # a = f₁′.uncoupled[1]
364- # b = f₁′.uncoupled[2]
365- # f₁′.uncoupled[3] == dual(a) || continue
366- # f₁′.uncoupled[4] == dual(b) || continue
367- # # should be automatic by matching spaces:
368- # # f₁′.isdual[1] != f₁′.isdual[3] || continue
369- # # f₁′.isdual[2] != f₁′.isdual[4] || continue
370- # for (f₁′′, coeff′′) in artin_braid(f₁′, 2; inv=inv_braid)
371- # f₁′′.innerlines[1] == u || continue
372- # coeff = coeff′ * coeff′′ * sqrtdim(a) * sqrtdim(b)
373- # if f₁′′.isdual[1]
374- # coeff *= frobenius_schur_phase(a)
375- # end
376- # if f₁′′.isdual[3]
377- # coeff *= frobenius_schur_phase(b)
378- # end
379- # f12 = (f₀, f₂′)
380- # if @isdefined newtrees
381- # newtrees[f12] = get(newtrees, f12, zero(coeff)) + coeff
382- # else
383- # newtrees = Dict(f12 => coeff)
384- # end
385- # end
386- # end
387- # @isdefined(newtrees) || continue
388- # for ((f₁′, f₂′), coeff) in newtrees
389- # TO._trace!(coeff * α, B[f₁, f₂], true, C[f₁′, f₂′], oindB,
390- # (cindB[1], cindB[2]), (cindB[3], cindB[4]))
391- # end
392- # end
393- # return C
394- # end
395- # function planarcontract!(C::AbstractTensorMap{<:Any,S,N₁,N₂},
396- # A::AbstractTensorMap{<:Any,S},
397- # (oindA, cindA)::Index2Tuple{0,4},
398- # B::BraidingTensor{S},
399- # (cindB, oindB)::Index2Tuple{4,<:Any},
400- # (p1, p2)::Index2Tuple{N₁,N₂},
401- # α::Number, β::Number,
402- # backends...) where {S,N₁,N₂}
403- # codA, domA = codomainind(A), domainind(A)
404- # codB, domB = codomainind(B), domainind(B)
405- # oindA, cindA, oindB, cindB = reorder_indices(codA, domA, codB, domB, oindA, cindA,
406- # oindB, cindB, p1, p2)
407-
408- # @assert space(B, cindB[1]) == space(A, cindA[1])' &&
409- # space(B, cindB[2]) == space(A, cindA[2])' &&
410- # space(B, cindB[3]) == space(A, cindA[3])' &&
411- # space(B, cindB[4]) == space(A, cindA[4])'
412-
413- # if BraidingStyle(sectortype(B)) isa Bosonic
414- # return trace!(α, A, β, C, oindA, (), (cindA[1], cindA[2]), (cindA[3], cindA[4]))
415- # end
416-
417- # if iszero(β)
418- # fill!(C, β)
419- # elseif β != 1
420- # rmul!(C, β)
421- # end
422- # I = sectortype(B)
423- # u = unit(I)
424- # f₀ = FusionTree{I}((), u, (), (), ())
425- # braidingtensor_levels = B.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
426- # inv_braid = braidingtensor_levels[cindB[2]] > braidingtensor_levels[cindB[3]]
427- # for (f₁, f₂) in fusiontrees(A)
428- # local newtrees
429- # for ((f₁′, f₂′), coeff′) in transpose(f₁, f₂, oindA, cindA)
430- # f₂′.coupled == u || continue
431- # a = f₂′.uncoupled[1]
432- # b = f₂′.uncoupled[2]
433- # f₂′.uncoupled[3] == dual(a) || continue
434- # f₂′.uncoupled[4] == dual(b) || continue
435- # # should be automatic by matching spaces:
436- # # f₂′.isdual[1] != f₂′.isdual[3] || continue
437- # # f₂′.isdual[3] != f₂′.isdual[4] || continue
438- # for (f₂′′, coeff′′) in artin_braid(f₂′, 2; inv=inv_braid)
439- # f₂′′.innerlines[1] == u || continue
440- # coeff = coeff′ * conj(coeff′′ * sqrtdim(a) * sqrtdim(b))
441- # if f₂′′.isdual[1]
442- # coeff *= conj(frobenius_schur_phase(a))
443- # end
444- # if f₂′′.isdual[3]
445- # coeff *= conj(frobenius_schur_phase(b))
446- # end
447- # f12 = (f₁′, f₀)
448- # if @isdefined newtrees
449- # newtrees[f12] = get(newtrees, f12, zero(coeff)) + coeff
450- # else
451- # newtrees = Dict(f12 => coeff)
452- # end
453- # end
454- # end
455- # @isdefined(newtrees) || continue
456- # for ((f₁′, f₂′), coeff) in newtrees
457- # TO._trace!(coeff * α, A[f₁, f₂], true, C[f₁′, f₂′], oindA,
458- # (cindA[1], cindA[2]), (cindA[3], cindA[4]))
459- # end
460- # end
461- # return C
462- # end
463- # function planarcontract!(C::AbstractTensorMap{<:Any,S,N₁,N₂},
464- # A::BraidingTensor{S},
465- # (oindA, cindA)::Index2Tuple{1,3},
466- # B::AbstractTensorMap{<:Any,S},
467- # (cindB, oindB)::Index2Tuple{1,<:Any},
468- # (p1, p2)::Index2Tuple{N₁,N₂},
469- # α::Number, β::Number,
470- # backend::Backend...) where {S,N₁,N₂}
471- # codA, domA = codomainind(A), domainind(A)
472- # codB, domB = codomainind(B), domainind(B)
473- # oindA, cindA, oindB, cindB = reorder_indices(codA, domA, codB, domB, oindA, cindA,
474- # oindB, cindB, p1, p2)
475-
476- # @assert space(B, cindB[1]) == space(A, cindA[1])' &&
477- # space(B, cindB[2]) == space(A, cindA[2])' &&
478- # space(B, cindB[3]) == space(A, cindA[3])'
479-
480- # if BraidingStyle(sectortype(B)) isa Bosonic
481- # return trace!(α, B, β, C, (cindB[2],), oindB, (cindB[1],), (cindB[3],))
482- # end
483-
484- # if iszero(β)
485- # fill!(C, β)
486- # elseif β != 1
487- # rmul!(C, β)
488- # end
489- # I = sectortype(B)
490- # u = unit(I)
491- # braidingtensor_levels = A.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
492- # inv_braid = braidingtensor_levels[cindA[2]] > braidingtensor_levels[cindA[3]]
493- # for (f₁, f₂) in fusiontrees(B)
494- # local newtrees
495- # for ((f₁′, f₂′), coeff′) in transpose(f₁, f₂, cindB, oindB)
496- # a = f₁′.uncoupled[1]
497- # b = f₁′.uncoupled[2]
498- # b == f₁′.coupled || continue
499- # a == dual(f₁′.uncoupled[3]) || continue
500- # # should be automatic by matching spaces:
501- # # f₁′.isdual[1] != f₁.isdual[3] || continue
502- # for (f₁′′, coeff′′) in artin_braid(f₁′, 2; inv=inv_braid)
503- # f₁′′.innerlines[1] == u || continue
504- # coeff = coeff′ * coeff′′ * sqrtdim(a)
505- # if f₁′′.isdual[1]
506- # coeff *= frobenius_schur_phase(a)
507- # end
508- # f₁′′′ = FusionTree{I}((b,), b, (f₁′′.isdual[3],), (), ())
509- # f12 = (f₁′′′, f₂′)
510- # if @isdefined newtrees
511- # newtrees[f12] = get(newtrees, f12, zero(coeff)) + coeff
512- # else
513- # newtrees = Dict(f12 => coeff)
514- # end
515- # end
516- # end
517- # @isdefined(newtrees) || continue
518- # for ((f₁′, f₂′), coeff) in newtrees
519- # TO._trace!(coeff * α, B[f₁, f₂], true, C[f₁′, f₂′],
520- # (cindB[2], oindB...), (cindB[1],), (cindB[3],))
521- # end
522- # end
523- # return C
524- # end
525- # function planarcontract!(C::AbstractTensorMap{<:Any,S,N₁,N₂},
526- # A::AbstractTensorMap{<:Any,S},
527- # (oindA, cindA)::Index2Tuple{<:Any,3},
528- # B::BraidingTensor{S},
529- # (cindB, oindB)::Index2Tuple{3,1},
530- # (p1, p2)::Index2Tuple{N₁,N₂},
531- # α::Number, β::Number,
532- # backend::Backend...) where {S,N₁,N₂}
533- # codA, domA = codomainind(A), domainind(A)
534- # codB, domB = codomainind(B), domainind(B)
535- # oindA, cindA, oindB, cindB = reorder_indices(codA, domA, codB, domB, oindA, cindA,
536- # oindB, cindB, p1, p2)
537-
538- # @assert space(B, cindB[1]) == space(A, cindA[1])' &&
539- # space(B, cindB[2]) == space(A, cindA[2])' &&
540- # space(B, cindB[3]) == space(A, cindA[3])'
541-
542- # if BraidingStyle(sectortype(A)) isa Bosonic
543- # return trace!(α, A, β, C, oindA, (cindA[2],), (cindA[1],), (cindA[3],))
544- # end
545-
546- # if iszero(β)
547- # fill!(C, β)
548- # elseif β != 1
549- # rmul!(C, β)
550- # end
551- # I = sectortype(B)
552- # u = unit(I)
553- # braidingtensor_levels = B.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
554- # inv_braid = braidingtensor_levels[cindB[2]] > braidingtensor_levels[cindB[3]]
555- # for (f₁, f₂) in fusiontrees(A)
556- # local newtrees
557- # for ((f₁′, f₂′), coeff′) in transpose(f₁, f₂, oindA, cindA)
558- # a = f₂′.uncoupled[1]
559- # b = f₂′.uncoupled[2]
560- # b == f₂′.coupled || continue
561- # a == dual(f₂′.uncoupled[3]) || continue
562- # # should be automatic by matching spaces:
563- # # f₂′.isdual[1] != f₂.isdual[3] || continue
564- # for (f₂′′, coeff′′) in artin_braid(f₂′, 2; inv=inv_braid)
565- # f₂′′.innerlines[1] == u || continue
566- # coeff = coeff′ * conj(coeff′′ * sqrtdim(a))
567- # if f₂′′.isdual[1]
568- # coeff *= conj(frobenius_schur_phase(a))
569- # end
570- # f₂′′′ = FusionTree{I}((b,), b, (f₂′′.isdual[3],), (), ())
571- # f12 = (f₁′, f₂′′′)
572- # if @isdefined newtrees
573- # newtrees[f12] = get(newtrees, f12, zero(coeff)) + coeff
574- # else
575- # newtrees = Dict(f12 => coeff)
576- # end
577- # end
578- # end
579- # @isdefined(newtrees) || continue
580- # for ((f₁′, f₂′), coeff) in newtrees
581- # TO._trace!(coeff * α, A[f₁, f₂], true, C[f₁′, f₂′],
582- # (oindA..., cindA[2]), (cindA[1],), (cindA[3],))
583- # end
584- # end
585- # return C
586- # end
0 commit comments