Skip to content

Commit 72fd4cc

Browse files
authored
Added TimeReversed and its related functions (#11)
1 parent dc045b3 commit 72fd4cc

File tree

4 files changed

+77
-3
lines changed

4 files changed

+77
-3
lines changed

.gitignore

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

src/TensorKitSectors.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export rightone, leftone
1818
export pentagon_equation, hexagon_equation
1919

2020
export Trivial, Z2Irrep, Z3Irrep, Z4Irrep, ZNIrrep, U1Irrep, SU2Irrep, CU1Irrep
21-
export ProductSector
21+
export ProductSector, TimeReversed
2222
export FermionParity, FermionNumber, FermionSpin
2323
export PlanarTrivial, FibonacciAnyon, IsingAnyon
2424

@@ -58,7 +58,7 @@ include("precompile.jl")
5858
function __precompile__()
5959
for I in (Trivial, Z2Irrep, Z3Irrep, Z4Irrep, ZNIrrep, U1Irrep, SU2Irrep, CU1Irrep,
6060
FermionParity, FermionNumber, FermionSpin, PlanarTrivial, FibonacciAnyon,
61-
IsingAnyon)
61+
IsingAnyon, TimeReversed{IsingAnyon}, TimeReversed{FibonacciAnyon})
6262
precompile_sector(I)
6363
end
6464
end

src/sectors.jl

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,3 +459,62 @@ function Base.iterate(s::SectorSet{I}, args...) where {I<:Sector}
459459
val, state = next
460460
return convert(I, s.f(val)), state
461461
end
462+
463+
# Time reversed sector
464+
struct TimeReversed{I<:Sector} <: Sector
465+
a::I
466+
function TimeReversed{I}(a::I) where {I<:Sector}
467+
if BraidingStyle(I) isa NoBraiding
468+
throw(ArgumentError("TimeReversed is not defined for sectors $I with no braiding"))
469+
end
470+
return new{I}(a)
471+
end
472+
end
473+
FusionStyle(::Type{TimeReversed{I}}) where {I<:Sector} = FusionStyle(I)
474+
BraidingStyle(::Type{TimeReversed{I}}) where {I<:Sector} = BraidingStyle(I)
475+
function Nsymbol(a::TimeReversed{I}, b::TimeReversed{I},
476+
c::TimeReversed{I}) where {I<:Sector}
477+
return Nsymbol(a.a, b.a, c.a)
478+
end
479+
480+
function Fsymbol(a::TimeReversed{I}, b::TimeReversed{I}, c::TimeReversed{I},
481+
d::TimeReversed{I}, e::TimeReversed{I},
482+
f::TimeReversed{I}) where {I<:Sector}
483+
return Fsymbol(a.a, b.a, c.a, d.a, e.a, f.a)
484+
end
485+
function Rsymbol(a::TimeReversed{I}, b::TimeReversed{I},
486+
c::TimeReversed{I}) where {I<:Sector}
487+
return adjoint(Rsymbol(a.a, b.a, c.a))
488+
end
489+
490+
Base.one(::Type{TimeReversed{I}}) where {I<:Sector} = TimeReversed{I}(one(I))
491+
Base.conj(c::TimeReversed{I}) where {I<:Sector} = TimeReversed{I}(conj(c.a))
492+
function (c1::TimeReversed{I}, c2::TimeReversed{I}) where {I<:Sector}
493+
return Iterators.map(TimeReversed{I}, c1.a c2.a)
494+
end
495+
function Base.IteratorSize(::Type{SectorValues{TimeReversed{I}}}) where {I<:Sector}
496+
return Base.IteratorSize(values(I))
497+
end
498+
function Base.length(::SectorValues{TimeReversed{I}}) where {I<:Sector}
499+
return length(values(I))
500+
end
501+
function Base.getindex(::SectorValues{TimeReversed{I}}, i::Int) where {I<:Sector}
502+
return TimeReversed{I}(getindex(values(I), i))
503+
end
504+
function Base.iterate(::SectorValues{TimeReversed{I}}, state...) where {I<:Sector}
505+
next = iterate(values(I), state...)
506+
if isnothing(next)
507+
return nothing
508+
else
509+
obj, nextstate = next
510+
return TimeReversed{I}(obj), nextstate
511+
end
512+
end
513+
function findindex(::SectorValues{TimeReversed{I}},
514+
a::TimeReversed{I}) where {I<:Sector}
515+
return findindex(values(I), a.a)
516+
end
517+
518+
function Base.isless(c1::TimeReversed{I}, c2::TimeReversed{I}) where {I<:Sector}
519+
return isless(c1.a, c2.a)
520+
end

test/runtests.jl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,21 @@ const sectorlist = (Z2Irrep, Z3Irrep, Z4Irrep, U1Irrep, CU1Irrep, SU2Irrep, NewS
2020
Z3Irrep Z4Irrep, FermionParity U1Irrep SU2Irrep,
2121
FermionParity SU2Irrep SU2Irrep, NewSU2Irrep NewSU2Irrep,
2222
NewSU2Irrep SU2Irrep, FermionParity SU2Irrep NewSU2Irrep,
23-
FibonacciAnyon FibonacciAnyon Z2Irrep)
23+
FibonacciAnyon FibonacciAnyon Z2Irrep,
24+
TimeReversed{Z2Irrep},
25+
TimeReversed{Z3Irrep}, TimeReversed{Z4Irrep},
26+
TimeReversed{U1Irrep}, TimeReversed{CU1Irrep}, TimeReversed{SU2Irrep},
27+
TimeReversed{FibonacciAnyon}, TimeReversed{IsingAnyon},
28+
TimeReversed{FermionParity},
29+
TimeReversed{FermionParity FermionParity},
30+
TimeReversed{Z2Irrep Z3Irrep Z4Irrep},
31+
TimeReversed{Z2Irrep} TimeReversed{Z3Irrep} TimeReversed{Z4Irrep},
32+
TimeReversed{NewSU2Irrep NewSU2Irrep},
33+
TimeReversed{Z2Irrep FibonacciAnyon FibonacciAnyon},
34+
TimeReversed{NewSU2Irrep SU2Irrep},
35+
TimeReversed{FermionParity U1Irrep SU2Irrep},
36+
TimeReversed{FermionParity SU2Irrep SU2Irrep},
37+
TimeReversed{FermionParity SU2Irrep NewSU2Irrep})
2438

2539
@testset "$(TensorKitSectors.type_repr(I))" for I in sectorlist
2640
@include("sectors.jl")

0 commit comments

Comments
 (0)