Skip to content

Commit fdf8271

Browse files
borisdevoslkdvos
authored andcommitted
one -> unit + left/rightone -> left/rightunit + isone -> isunit when concerning sectors + some more unitspace
1 parent 755f56f commit fdf8271

12 files changed

Lines changed: 79 additions & 75 deletions

File tree

src/fusiontrees/fusiontrees.jl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct FusionTree{I <: Sector, N, M, L}
3434
) where
3535
{I <: Sector, N, M, L}
3636
# if N == 0
37-
# @assert coupled == one(coupled)
37+
# @assert coupled == unit(coupled)
3838
# elseif N == 1
3939
# @assert coupled == uncoupled[1]
4040
# elseif N == 2
@@ -89,7 +89,7 @@ function FusionTree(
8989
end
9090

9191
function FusionTree{I}(
92-
uncoupled::NTuple{N}, coupled = one(I), isdual = ntuple(n -> false, N)
92+
uncoupled::NTuple{N}, coupled = unit(I), isdual = ntuple(Returns(false), N)
9393
) where {I <: Sector, N}
9494
FusionStyle(I) isa UniqueFusion ||
9595
error("fusion tree requires inner lines if `FusionStyle(I) <: MultipleFusion`")
@@ -103,7 +103,7 @@ function FusionTree(
103103
) where {N, I <: Sector}
104104
return FusionTree{I}(uncoupled, coupled, isdual)
105105
end
106-
FusionTree(uncoupled::Tuple{I, Vararg{I}}) where {I <: Sector} = FusionTree(uncoupled, one(I))
106+
FusionTree(uncoupled::Tuple{I, Vararg{I}}) where {I <: Sector} = FusionTree(uncoupled, unit(I))
107107

108108
# Properties
109109
sectortype(::Type{<:FusionTree{I}}) where {I <: Sector} = I
@@ -159,17 +159,17 @@ end
159159

160160
# converting to actual array
161161
function Base.convert(A::Type{<:AbstractArray}, f::FusionTree{I, 0}) where {I}
162-
X = convert(A, fusiontensor(one(I), one(I), one(I)))[1, 1, :]
162+
X = convert(A, fusiontensor(unit(I), unit(I), unit(I)))[1, 1, :]
163163
return X
164164
end
165165
function Base.convert(A::Type{<:AbstractArray}, f::FusionTree{I, 1}) where {I}
166166
c = f.coupled
167167
if f.isdual[1]
168-
sqrtdc = sqrtdim(c)
169-
Zcbartranspose = sqrtdc * convert(A, fusiontensor(conj(c), c, one(c)))[:, :, 1, 1]
168+
sqrtdc = sqrtdim(c) # TODO: change conj to dual
169+
Zcbartranspose = sqrtdc * convert(A, fusiontensor(conj(c), c, unit(c)))[:, :, 1, 1]
170170
X = conj!(Zcbartranspose) # we want Zcbar^†
171171
else
172-
X = convert(A, fusiontensor(c, one(c), c))[:, 1, :, 1, 1]
172+
X = convert(A, fusiontensor(c, unit(c), c))[:, 1, :, 1, 1]
173173
end
174174
return X
175175
end
@@ -257,13 +257,13 @@ include("iterator.jl")
257257
# _abelianinner: generate the inner indices for given outer indices in the abelian case
258258
_abelianinner(outer::Tuple{}) = ()
259259
function _abelianinner(outer::Tuple{I}) where {I <: Sector}
260-
return isone(outer[1]) ? () : throw(SectorMismatch())
260+
return isunit(outer[1]) ? () : throw(SectorMismatch())
261261
end
262262
function _abelianinner(outer::Tuple{I, I}) where {I <: Sector}
263263
return outer[1] == dual(outer[2]) ? () : throw(SectorMismatch())
264264
end
265265
function _abelianinner(outer::Tuple{I, I, I}) where {I <: Sector}
266-
return isone(first((outer...))) ? () : throw(SectorMismatch())
266+
return isunit(first((outer...))) ? () : throw(SectorMismatch())
267267
end
268268
function _abelianinner(outer::Tuple{I, I, I, I, Vararg{I}}) where {I <: Sector}
269269
c = first(outer[1] outer[2])

src/fusiontrees/iterator.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""
22
fusiontrees(uncoupled::NTuple{N,I}[,
3-
coupled::I=one(I)[, isdual::NTuple{N,Bool}=ntuple(n -> false, length(uncoupled))]])
3+
coupled::I=unit(I)[, isdual::NTuple{N,Bool}=ntuple(n -> false, length(uncoupled))]])
44
where {N,I<:Sector} -> FusionTreeIterator{I,N,I}
55
66
Return an iterator over all fusion trees with a given coupled sector label `coupled` and
@@ -17,7 +17,7 @@ function fusiontrees(uncoupled::Tuple{Vararg{I}}, coupled::I) where {I <: Sector
1717
return fusiontrees(uncoupled, coupled, isdual)
1818
end
1919
function fusiontrees(uncoupled::Tuple{I, Vararg{I}}) where {I <: Sector}
20-
coupled = one(I)
20+
coupled = unit(I)
2121
isdual = ntuple(n -> false, length(uncoupled))
2222
return fusiontrees(uncoupled, coupled, isdual)
2323
end
@@ -38,7 +38,7 @@ Base.IteratorEltype(::FusionTreeIterator) = Base.HasEltype()
3838
Base.eltype(::Type{<:FusionTreeIterator{I, N}}) where {I <: Sector, N} = fusiontreetype(I, N)
3939

4040
Base.length(iter::FusionTreeIterator) = _fusiondim(iter.uncouplediterators, iter.coupled)
41-
_fusiondim(::Tuple{}, c::I) where {I <: Sector} = Int(isone(c))
41+
_fusiondim(::Tuple{}, c::I) where {I <: Sector} = Int(isunit(c))
4242
_fusiondim(iters::NTuple{1}, c::I) where {I <: Sector} = Int(c iters[1])
4343
function _fusiondim(iters::NTuple{2}, c::I) where {I <: Sector}
4444
d = 0
@@ -60,7 +60,7 @@ end
6060

6161
# * Iterator methods:
6262
# Start with special cases:
63-
function Base.iterate(it::FusionTreeIterator{I, 0}, state = !isone(it.coupled)) where {I <: Sector}
63+
function Base.iterate(it::FusionTreeIterator{I, 0}, state = !isunit(it.coupled)) where {I <: Sector}
6464
state && return nothing
6565
tree = FusionTree{I}((), it.coupled, (), (), ())
6666
return tree, true

src/fusiontrees/manipulations.jl

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ operation is the inverse of `insertat` in the sense that if
165165
f₂ = FusionTree{I}(f.uncoupled, f.coupled, isdual2, f.innerlines, f.vertices)
166166
return f₁, f₂
167167
elseif M === 0
168-
u = leftone(f.uncoupled[1])
168+
u = leftunit(f.uncoupled[1])
169169
f₁ = FusionTree{I}((), u, (), ())
170170
uncoupled2 = (u, f.uncoupled...)
171171
coupled2 = f.coupled
@@ -286,7 +286,7 @@ function bendright(f₁::FusionTree{I, N₁}, f₂::FusionTree{I, N₂}) where {
286286
# map final splitting vertex (a, b)<-c to fusion vertex a<-(c, dual(b))
287287
@assert N₁ > 0
288288
c = f₁.coupled
289-
a = N₁ == 1 ? leftone(f₁.uncoupled[1]) :
289+
a = N₁ == 1 ? leftunit(f₁.uncoupled[1]) :
290290
(N₁ == 2 ? f₁.uncoupled[1] : f₁.innerlines[end])
291291
b = f₁.uncoupled[N₁]
292292

@@ -358,7 +358,7 @@ function foldright(f₁::FusionTree{I, N₁}, f₂::FusionTree{I, N₂}) where {
358358
hasmultiplicities = FusionStyle(a) isa GenericFusion
359359
local newtrees
360360
if N₁ == 1
361-
cset = (leftone(c1),) # or rightone(a)
361+
cset = (leftunit(c1),) # or rightunit(a)
362362
elseif N₁ == 2
363363
cset = (f₁.uncoupled[2],)
364364
else
@@ -369,7 +369,7 @@ function foldright(f₁::FusionTree{I, N₁}, f₂::FusionTree{I, N₂}) where {
369369
for μ in 1:Nsymbol(c1, c2, c)
370370
fc = FusionTree((c1, c2), c, (!isduala, false), (), (μ,))
371371
for (fl′, coeff1) in insertat(fc, 2, f₁)
372-
N₁ > 1 && !isone(fl′.innerlines[1]) && continue
372+
N₁ > 1 && !isunit(fl′.innerlines[1]) && continue
373373
coupled = fl′.coupled
374374
uncoupled = Base.tail(Base.tail(fl′.uncoupled))
375375
isdual = Base.tail(Base.tail(fl′.isdual))
@@ -722,7 +722,7 @@ corresponding coefficients.
722722
function elementary_trace(f::FusionTree{I, N}, i) where {I <: Sector, N}
723723
(N > 1 && 1 <= i <= N) ||
724724
throw(ArgumentError("Cannot trace outputs i=$i and i+1 out of only $N outputs"))
725-
i < N || isone(f.coupled) ||
725+
i < N || isunit(f.coupled) ||
726726
throw(ArgumentError("Cannot trace outputs i=$N and 1 of fusion tree that couples to non-trivial sector"))
727727

728728
T = sectorscalartype(I)
@@ -735,7 +735,7 @@ function elementary_trace(f::FusionTree{I, N}, i) where {I <: Sector, N}
735735
# if trace is zero, return empty dict
736736
(b == dual(b′) && f.isdual[i] != f.isdual[j]) || return newtrees
737737
if i < N
738-
inner_extended = (leftone(f.uncoupled[1]), f.uncoupled[1], f.innerlines..., f.coupled)
738+
inner_extended = (leftunit(f.uncoupled[1]), f.uncoupled[1], f.innerlines..., f.coupled)
739739
a = inner_extended[i]
740740
d = inner_extended[i + 2]
741741
a == d || return newtrees
@@ -759,11 +759,11 @@ function elementary_trace(f::FusionTree{I, N}, i) where {I <: Sector, N}
759759
if i > 1
760760
c = f.innerlines[i - 1]
761761
if FusionStyle(I) isa MultiplicityFreeFusion
762-
coeff *= Fsymbol(a, b, dual(b), a, c, rightone(a))
762+
coeff *= Fsymbol(a, b, dual(b), a, c, rightunit(a))
763763
else
764764
μ = f.vertices[i - 1]
765765
ν = f.vertices[i]
766-
coeff *= Fsymbol(a, b, dual(b), a, c, rightone(a))[μ, ν, 1, 1]
766+
coeff *= Fsymbol(a, b, dual(b), a, c, rightunit(a))[μ, ν, 1, 1]
767767
end
768768
end
769769
if f.isdual[i]
@@ -772,7 +772,7 @@ function elementary_trace(f::FusionTree{I, N}, i) where {I <: Sector, N}
772772
push!(newtrees, f′ => coeff)
773773
return newtrees
774774
else # i == N
775-
unit = leftone(b)
775+
unit = leftunit(b)
776776
if N == 2
777777
f′ = FusionTree{I}((), unit, (), (), ())
778778
coeff = sqrtdim(b)
@@ -838,14 +838,14 @@ function artin_braid(f::FusionTree{I, N}, i; inv::Bool = false) where {I <: Sect
838838
vertices = f.vertices
839839
oneT = one(sectorscalartype(I))
840840

841-
if isone(uncoupled[i]) || isone(uncoupled[i + 1])
841+
if isunit(a) || isunit(b)
842842
# braiding with trivial sector: simple and always possible
843843
inner′ = inner
844844
vertices′ = vertices
845845
if i > 1 # we also need to alter innerlines and vertices
846846
inner′ = TupleTools.setindex(
847847
inner,
848-
inner_extended[isone(a) ? (i + 1) : (i - 1)],
848+
inner_extended[isunit(a) ? (i + 1) : (i - 1)],
849849
i - 1
850850
)
851851
vertices′ = TupleTools.setindex(vertices′, vertices[i], i - 1)

src/spaces/deligne.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function ⊠(V::GradedSpace, P₀::ProductSpace{<:ElementarySpace, 0})
2424
I₁ = sectortype(V)
2525
I₂ = sectortype(P₀)
2626
return Vect[I₁ I₂](
27-
ifelse(isdual(V), dual(c), c) one(I₂) => dim(V, c)
27+
ifelse(isdual(V), dual(c), c) unit(I₂) => dim(V, c)
2828
for c in sectors(V); dual = isdual(V)
2929
)
3030
end
@@ -34,21 +34,21 @@ function ⊠(P₀::ProductSpace{<:ElementarySpace, 0}, V::GradedSpace)
3434
I₁ = sectortype(P₀)
3535
I₂ = sectortype(V)
3636
return Vect[I₁ I₂](
37-
one(I₁) ifelse(isdual(V), dual(c), c) => dim(V, c)
37+
unit(I₁) ifelse(isdual(V), dual(c), c) => dim(V, c)
3838
for c in sectors(V); dual = isdual(V)
3939
)
4040
end
4141

4242
function (V::ComplexSpace, P₀::ProductSpace{<:ElementarySpace, 0})
4343
field(V) == field(P₀) || throw_incompatible_fields(V, P₀)
4444
I₂ = sectortype(P₀)
45-
return Vect[I₂](one(I₂) => dim(V); dual = isdual(V))
45+
return Vect[I₂](unit(I₂) => dim(V); dual = isdual(V))
4646
end
4747

4848
function (P₀::ProductSpace{<:ElementarySpace, 0}, V::ComplexSpace)
4949
field(P₀) == field(V) || throw_incompatible_fields(P₀, V)
5050
I₁ = sectortype(P₀)
51-
return Vect[I₁](one(I₁) => dim(V); dual = isdual(V))
51+
return Vect[I₁](unit(I₁) => dim(V); dual = isdual(V))
5252
end
5353

5454
function (P::ProductSpace{<:ElementarySpace, 0}, P₀::ProductSpace{<:ElementarySpace, 0})

src/spaces/gradedspace.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ InnerProductStyle(::Type{<:GradedSpace}) = EuclideanInnerProduct()
9494
function dim(V::GradedSpace)
9595
return reduce(
9696
+, dim(V, c) * dim(c) for c in sectors(V);
97-
init = zero(dim(one(sectortype(V))))
97+
init = zero(dim(unit(sectortype(V))))
9898
)
9999
end
100100
function dim(V::GradedSpace{I, <:AbstractDict}, c::I) where {I <: Sector}
@@ -133,9 +133,9 @@ function Base.axes(V::GradedSpace{I}, c::I) where {I <: Sector}
133133
end
134134
return (offset + 1):(offset + dim(c) * dim(V, c))
135135
end
136-
#TODO: one -> unit
137-
unitspace(S::Type{<:GradedSpace{I}}) where {I<:Sector} = S(one(I) => 1)
138-
Base.zero(S::Type{<:GradedSpace{I}}) where {I<:Sector} = S(one(I) => 0)
136+
137+
unitspace(S::Type{<:GradedSpace{I}}) where {I <: Sector} = S(unit(I) => 1)
138+
Base.zero(S::Type{<:GradedSpace{I}}) where {I <: Sector} = S(unit(I) => 0)
139139

140140
# TODO: the following methods can probably be implemented more efficiently for
141141
# `FiniteGradedSpace`, but we don't expect them to be used often in hot loops, so

src/spaces/productspace.jl

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ function blocksectors(P::ProductSpace{S, N}) where {S, N}
147147
end
148148
bs = Vector{I}()
149149
if N == 0
150-
push!(bs, one(I))
150+
push!(bs, unit(I))
151151
elseif N == 1
152152
for s in sectors(P)
153153
push!(bs, first(s))
@@ -241,8 +241,8 @@ function Base.literal_pow(::typeof(^), V::ElementarySpace, p::Val{N}) where {N}
241241
return ProductSpace{typeof(V), N}(ntuple(n -> V, p))
242242
end
243243

244-
fuse(P::ProductSpace{S,0}) where {S<:ElementarySpace} = unitspace(S)
245-
fuse(P::ProductSpace{S}) where {S<:ElementarySpace} = fuse(P.spaces...)
244+
fuse(P::ProductSpace{S, 0}) where {S <: ElementarySpace} = unitspace(S)
245+
fuse(P::ProductSpace{S}) where {S <: ElementarySpace} = fuse(P.spaces...)
246246

247247
"""
248248
insertleftunit(P::ProductSpace, i::Int=length(P) + 1; conj=false, dual=false)
@@ -253,8 +253,10 @@ More specifically, adds a left monoidal unit or its dual.
253253
254254
See also [`insertrightunit`](@ref insertrightunit(::ProductSpace, ::Val{i}) where {i}), [`removeunit`](@ref removeunit(::ProductSpace, ::Val{i}) where {i}).
255255
"""
256-
function insertleftunit(P::ProductSpace, ::Val{i}=Val(length(P) + 1);
257-
conj::Bool=false, dual::Bool=false) where {i}
256+
function insertleftunit(
257+
P::ProductSpace, ::Val{i} = Val(length(P) + 1);
258+
conj::Bool = false, dual::Bool = false
259+
) where {i}
258260
u = unitspace(spacetype(P))
259261
if dual
260262
u = TensorKit.dual(u)
@@ -274,8 +276,10 @@ More specifically, adds a right monoidal unit or its dual.
274276
275277
See also [`insertleftunit`](@ref insertleftunit(::ProductSpace, ::Val{i}) where {i}), [`removeunit`](@ref removeunit(::ProductSpace, ::Val{i}) where {i}).
276278
"""
277-
function insertrightunit(P::ProductSpace, ::Val{i}=Val(length(P));
278-
conj::Bool=false, dual::Bool=false) where {i}
279+
function insertrightunit(
280+
P::ProductSpace, ::Val{i} = Val(length(P));
281+
conj::Bool = false, dual::Bool = false
282+
) where {i}
279283
u = unitspace(spacetype(P))
280284
if dual
281285
u = TensorKit.dual(u)
@@ -325,8 +329,8 @@ function Base.promote_rule(::Type{S}, ::Type{<:ProductSpace{S}}) where {S <: Ele
325329
end
326330

327331
# ProductSpace to ElementarySpace
328-
Base.convert(::Type{S}, P::ProductSpace{S,0}) where {S<:ElementarySpace} = unitspace(S)
329-
Base.convert(::Type{S}, P::ProductSpace{S}) where {S<:ElementarySpace} = fuse(P.spaces...)
332+
Base.convert(::Type{S}, P::ProductSpace{S, 0}) where {S <: ElementarySpace} = unitspace(S)
333+
Base.convert(::Type{S}, P::ProductSpace{S}) where {S <: ElementarySpace} = fuse(P.spaces...)
330334

331335
# ElementarySpace to ProductSpace
332336
Base.convert(::Type{<:ProductSpace}, V::S) where {S <: ElementarySpace} = (V)

src/tensors/braidingtensor.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ end
366366
# rmul!(C, β)
367367
# end
368368
# I = sectortype(B)
369-
# u = one(I)
369+
# u = unit(I)
370370
# f₀ = FusionTree{I}((), u, (), (), ())
371371
# braidingtensor_levels = A.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
372372
# inv_braid = braidingtensor_levels[cindA[2]] > braidingtensor_levels[cindA[3]]
@@ -434,7 +434,7 @@ end
434434
# rmul!(C, β)
435435
# end
436436
# I = sectortype(B)
437-
# u = one(I)
437+
# u = unit(I)
438438
# f₀ = FusionTree{I}((), u, (), (), ())
439439
# braidingtensor_levels = B.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
440440
# inv_braid = braidingtensor_levels[cindB[2]] > braidingtensor_levels[cindB[3]]
@@ -501,7 +501,7 @@ end
501501
# rmul!(C, β)
502502
# end
503503
# I = sectortype(B)
504-
# u = one(I)
504+
# u = unit(I)
505505
# braidingtensor_levels = A.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
506506
# inv_braid = braidingtensor_levels[cindA[2]] > braidingtensor_levels[cindA[3]]
507507
# for (f₁, f₂) in fusiontrees(B)
@@ -563,7 +563,7 @@ end
563563
# rmul!(C, β)
564564
# end
565565
# I = sectortype(B)
566-
# u = one(I)
566+
# u = unit(I)
567567
# braidingtensor_levels = B.adjoint ? (1, 2, 2, 1) : (2, 1, 1, 2)
568568
# inv_braid = braidingtensor_levels[cindB[2]] > braidingtensor_levels[cindB[3]]
569569
# for (f₁, f₂) in fusiontrees(A)

src/tensors/linalg.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -608,13 +608,13 @@ function ⊠(t1::AbstractTensorMap, t2::AbstractTensorMap)
608608
dom1 = domain(t1) one(S2)
609609
t1′ = similar(t1, codom1 dom1)
610610
for (c, b) in blocks(t1)
611-
copy!(block(t1′, c one(I2)), b)
611+
copy!(block(t1′, c unit(I2)), b)
612612
end
613613
codom2 = one(S1) codomain(t2)
614614
dom2 = one(S1) domain(t2)
615615
t2′ = similar(t2, codom2 dom2)
616616
for (c, b) in blocks(t2)
617-
copy!(block(t2′, one(I1) c), b)
617+
copy!(block(t2′, unit(I1) c), b)
618618
end
619619
return t1′ t2′
620620
end

src/tensors/tensor.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -548,9 +548,9 @@ since it assumes a uniquely defined coupled charge.
548548
throw(ArgumentError("Number of sectors does not match."))
549549
s₁ = TupleTools.getindices(sectors, codomainind(t))
550550
s₂ = map(dual, TupleTools.getindices(sectors, domainind(t)))
551-
c1 = length(s₁) == 0 ? one(I) : (length(s₁) == 1 ? s₁[1] : first((s₁...)))
551+
c1 = length(s₁) == 0 ? unit(I) : (length(s₁) == 1 ? s₁[1] : first((s₁...)))
552552
@boundscheck begin
553-
c2 = length(s₂) == 0 ? one(I) : (length(s₂) == 1 ? s₂[1] : first((s₂...)))
553+
c2 = length(s₂) == 0 ? unit(I) : (length(s₂) == 1 ? s₂[1] : first((s₂...)))
554554
c2 == c1 || throw(SectorMismatch("Not a valid sector for this tensor"))
555555
hassector(codomain(t), s₁) && hassector(domain(t), s₂)
556556
end

test/fusiontrees.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ ti = time()
2626
@test eval(Meta.parse(sprint(show, f))) == f
2727
end
2828
@testset "Fusion tree $Istr: constructor properties" begin
29-
u = one(I)
29+
u = unit(I)
3030
@constinferred FusionTree((), u, (), (), ())
3131
@constinferred FusionTree((u,), u, (false,), (), ())
3232
@constinferred FusionTree((u, u), u, (false, false), (), (1,))
@@ -130,7 +130,7 @@ ti = time()
130130
outgoing = (s, dual(s), s, dual(s), s, dual(s))
131131
for bool in (true, false)
132132
isdual = (bool, !bool, bool, !bool, bool, !bool)
133-
for f in fusiontrees(outgoing, one(s), isdual)
133+
for f in fusiontrees(outgoing, unit(s), isdual)
134134
af = convert(Array, f)
135135
T = eltype(af)
136136

@@ -570,7 +570,7 @@ ti = time()
570570
@testset "Double fusion tree $Istr: planar trace" begin
571571
d1 = transpose(f1, f1, (N + 1, 1:N..., ((2N):-1:(N + 3))...), (N + 2,))
572572
f1front, = TK.split(f1, N - 1)
573-
T = typeof(Fsymbol(one(I), one(I), one(I), one(I), one(I), one(I))[1, 1, 1, 1])
573+
T = TensorKitSectors._Fscalartype(I)
574574
d2 = Dict{typeof((f1front, f1front)), T}()
575575
for ((f1′, f2′), coeff′) in d1
576576
for ((f1′′, f2′′), coeff′′) in

0 commit comments

Comments
 (0)