Skip to content

Commit 9f553b0

Browse files
authored
Constructor fixes (#185)
* some constructor fixes * add fix and tests * more isometry constructor fixes
1 parent 40e74d7 commit 9f553b0

File tree

4 files changed

+50
-11
lines changed

4 files changed

+50
-11
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,9 @@
66
__pycache__
77
.ipynb*
88
Manifest.toml
9-
.vscode
9+
.vscode
10+
benchmark
11+
experimental
12+
refs
13+
*.mathcha
14+

src/fusiontrees/fusiontrees.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,11 @@ function FusionTree{I}(uncoupled::NTuple{N}, coupled=one(I),
8686
_abelianinner(map(s -> convert(I, s),
8787
(uncoupled..., dual(coupled)))))
8888
end
89-
function FusionTree(uncoupled::Tuple{I,Vararg{I}}, coupled::I=one(I),
90-
isdual=ntuple(n -> false, length(uncoupled))) where {I<:Sector}
91-
FusionStyle(I) isa UniqueFusion ||
92-
error("fusion tree requires inner lines if `FusionStyle(I) <: MultipleFusion`")
93-
return FusionTree{I}(uncoupled, coupled, isdual,
94-
_abelianinner((uncoupled..., dual(coupled))))
89+
function FusionTree(uncoupled::NTuple{N,I}, coupled::I,
90+
isdual=ntuple(n -> false, length(uncoupled))) where {N,I<:Sector}
91+
return FusionTree{I}(uncoupled, coupled, isdual)
9592
end
93+
FusionTree(uncoupled::Tuple{I,Vararg{I}}) where {I<:Sector} = FusionTree(uncoupled, one(I))
9694

9795
# Properties
9896
sectortype(::Type{<:FusionTree{I}}) where {I<:Sector} = I

src/tensors/linalg.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ the spacetype does not have a Euclidean inner product, an error will be thrown.
120120
121121
See also [`isomorphism`](@ref) and [`isometry`](@ref).
122122
"""
123-
function unitary(::Type{A}, V::TensorMapSpace{S,N₁,N₂}) where {A<:VecOrNumber,S,N₁,N₂}
123+
function unitary(A::Type, V::TensorMapSpace{S,N₁,N₂}) where {S,N₁,N₂}
124124
InnerProductStyle(S) === EuclideanInnerProduct() || throw_invalid_innerproduct(:unitary)
125125
return isomorphism(A, V)
126126
end
@@ -155,9 +155,8 @@ for morphism in (:isomorphism, :unitary, :isometry)
155155
@eval begin
156156
$morphism(V::TensorMapSpace) = $morphism(Float64, V)
157157
$morphism(codomain::TensorSpace, domain::TensorSpace) = $morphism(codomain domain)
158-
function $morphism(::Type{T}, codomain::TensorSpace,
159-
domain::TensorSpace) where {T<:VecOrNumber}
160-
return $morphism(T, codomain domain)
158+
function $morphism(A::Type, codomain::TensorSpace, domain::TensorSpace)
159+
return $morphism(A, codomain domain)
161160
end
162161
$morphism(t::AbstractTensorMap) = $morphism(storagetype(t), space(t))
163162
end

test/fusiontrees.jl

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,43 @@ ti = time()
2525
@testset "Fusion tree $Istr: printing" begin
2626
@test eval(Meta.parse(sprint(show, f))) == f
2727
end
28+
@testset "Fusion tree $Istr: constructor properties" begin
29+
u = one(I)
30+
@constinferred FusionTree((), u, (), (), ())
31+
@constinferred FusionTree((u,), u, (false,), (), ())
32+
@constinferred FusionTree((u, u), u, (false, false), (), (1,))
33+
@constinferred FusionTree((u, u, u), u, (false, false, false), (u,), (1, 1))
34+
@constinferred FusionTree((u, u, u, u), u, (false, false, false, false), (u, u),
35+
(1, 1, 1))
36+
@test_throws MethodError FusionTree((u, u, u), u, (false, false), (u,), (1, 1))
37+
@test_throws MethodError FusionTree((u, u, u), u, (false, false, false), (u, u),
38+
(1, 1))
39+
@test_throws MethodError FusionTree((u, u, u), u, (false, false, false), (u,),
40+
(1, 1, 1))
41+
@test_throws MethodError FusionTree((u, u, u), u, (false, false, false), (), (1,))
42+
43+
f = FusionTree((u, u, u), u, (false, false, false), (u,), (1, 1))
44+
@test sectortype(f) == I
45+
@test length(f) == 3
46+
@test FusionStyle(f) == FusionStyle(I)
47+
@test BraidingStyle(f) == BraidingStyle(I)
48+
49+
if FusionStyle(I) isa UniqueFusion
50+
@constinferred FusionTree((), u, ())
51+
@constinferred FusionTree((u,), u, (false,))
52+
@constinferred FusionTree((u, u), u, (false, false))
53+
@constinferred FusionTree((u, u, u), u)
54+
@constinferred FusionTree((u, u, u, u))
55+
@test_throws MethodError FusionTree((u, u), u, (false, false, false))
56+
else
57+
errstr = "fusion tree requires inner lines if `FusionStyle(I) <: MultipleFusion`"
58+
@test_throws errstr FusionTree((), u, ())
59+
@test_throws errstr FusionTree((u,), u, (false,))
60+
@test_throws errstr FusionTree((u, u), u, (false, false))
61+
@test_throws errstr FusionTree((u, u, u), u)
62+
@test_throws errstr FusionTree((u, u, u, u))
63+
end
64+
end
2865
@testset "Fusion tree $Istr: insertat" begin
2966
N = 4
3067
out2 = ntuple(n -> randsector(I), N)

0 commit comments

Comments
 (0)