Skip to content

Commit 46ffcfb

Browse files
committed
generic case
1 parent 752efe0 commit 46ffcfb

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

NDTensors/src/lib/SymmetrySectors/src/sector_product.jl

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -66,30 +66,32 @@ function sym_arguments_insert_unspecified(s1, s2)
6666
return arguments_insert_unspecified(s1, s2), arguments_insert_unspecified(s2, s1)
6767
end
6868

69-
function arguments_isequal(s1, s2)
70-
return ==(sym_arguments_insert_unspecified(s1, s2)...)
71-
end
72-
73-
# get clean results when mixing implementations
69+
arguments_isequal(s1, s2) = ==(sym_arguments_insert_unspecified(s1, s2)...)
7470
arguments_isequal(nt::NamedTuple, t::Tuple) = arguments_isequal(t, nt)
7571
function arguments_isequal(t::Tuple, nt::NamedTuple)
76-
isempty(t) && return arguments_isequal((;), nt)
7772
isempty(nt) && return arguments_isequal(t, ())
73+
isempty(t) && return arguments_isequal((;), nt)
7874
return false
7975
end
8076

81-
arguments_product(::NamedTuple{()}, t::Tuple) = t
82-
arguments_product(t::Tuple, ::NamedTuple{()}) = t
83-
arguments_product(::Tuple{}, nt::NamedTuple) = nt
84-
arguments_product(nt::NamedTuple, ::Tuple{}) = nt
77+
arguments_product(nt::NamedTuple, t::Tuple) = arguments_product(t, nt)
78+
function arguments_product(t::Tuple, nt::NamedTuple)
79+
isempty(nt) && return t
80+
isempty(t) && return nt
81+
throw(ArgumentError("Mixing Tuple and NamedTuple is illegal"))
82+
end
8583

8684
arguments_isless(s1, s2) = isless(sym_arguments_insert_unspecified(s1, s2)...)
87-
arguments_isless(nt::NamedTuple, ::Tuple{}) = arguments_isless(nt, (;))
88-
arguments_isless(::Tuple{}, nt::NamedTuple) = arguments_isless((;), nt)
89-
arguments_isless(::NamedTuple{()}, t::Tuple) = arguments_isless((), t)
90-
arguments_isless(t::Tuple, ::NamedTuple{()}) = arguments_isless(t, ())
91-
arguments_isless(::NamedTuple, ::Tuple) = throw(ArgumentError("Not implemented"))
92-
arguments_isless(::Tuple, ::NamedTuple) = throw(ArgumentError("Not implemented"))
85+
function arguments_isless(t::Tuple, nt::NamedTuple)
86+
isempty(nt) && return arguments_isless(t, ())
87+
isempty(t) && return arguments_isless((;), nt)
88+
throw(ArgumentError("Mixing Tuple and NamedTuple is illegal"))
89+
end
90+
function arguments_isless(nt::NamedTuple, t::Tuple)
91+
isempty(nt) && return arguments_isless((), t)
92+
isempty(t) && return arguments_isless(nt, (;))
93+
throw(ArgumentError("Mixing Tuple and NamedTuple is illegal"))
94+
end
9395

9496
# ================================= Cartesian Product ====================================
9597
×(c1::AbstractSector, c2::AbstractSector) = ×(SectorProduct(c1), SectorProduct(c2))

NDTensors/src/lib/SymmetrySectors/test/test_sector_product.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -550,8 +550,8 @@ end
550550
@test_throws ArgumentError st1 < sA1
551551
@test_throws MethodError st1 sA1
552552
@test_throws MethodError sA1 st1
553-
@test_throws MethodError st1 × sA1
554-
@test_throws MethodError sA1 × st1
553+
@test_throws ArgumentError st1 × sA1
554+
@test_throws ArgumentError sA1 × st1
555555
end
556556

557557
@testset "Empty SymmetrySector" begin
@@ -562,11 +562,18 @@ end
562562
@test s == TrivialSector()
563563
@test s == SectorProduct(())
564564
@test s == SectorProduct((;))
565+
566+
@test !(s < SectorProduct())
567+
@test !(s < SectorProduct(;))
568+
569+
@test (@inferred s × SectorProduct(())) == s
570+
@test (@inferred s × SectorProduct((;))) == s
571+
@test (@inferred s SectorProduct(())) == s
572+
@test (@inferred s SectorProduct((;))) == s
573+
565574
@test (@inferred dual(s)) == s
566-
@test (@inferred s × s) == s
567-
@test (@inferred s s) == s
568-
@test (@inferred quantum_dimension(s)) == 1
569575
@test (@inferred trivial(s)) == s
576+
@test (@inferred quantum_dimension(s)) == 1
570577

571578
g0 = gradedrange([s => 2])
572579
@test space_isequal((@inferred fusion_product(g0, g0)), gradedrange([s => 4]))
@@ -604,7 +611,6 @@ end
604611
@test s != sA1
605612
@test s != st1
606613

607-
@test !(s < s)
608614
@test s < st1
609615
@test SectorProduct(U1(-1)) < s
610616
@test s < sA1

0 commit comments

Comments
 (0)