Skip to content

Commit 5260dbd

Browse files
committed
inline empty edge cases
1 parent 9c5b664 commit 5260dbd

File tree

1 file changed

+10
-21
lines changed

1 file changed

+10
-21
lines changed

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

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -70,22 +70,15 @@ function product_sectors_isequal(s1, s2)
7070
end
7171

7272
# get clean results when mixing implementations
73-
function product_sectors_isequal(nt::NamedTuple, ::Tuple{})
74-
return product_sectors_isequal(nt, (;))
75-
end
76-
function product_sectors_isequal(::Tuple{}, nt::NamedTuple)
77-
return product_sectors_isequal((;), nt)
78-
end
79-
function product_sectors_isequal(::NamedTuple{()}, t::Tuple)
80-
return product_sectors_isequal((), t)
81-
end
82-
function product_sectors_isequal(t::Tuple, ::NamedTuple{()})
83-
return product_sectors_isequal(t, ())
73+
product_sectors_isequal(nt::NamedTuple, t::Tuple) = product_sectors_isequal(t, nt)
74+
function product_sectors_isequal(t::Tuple, nt::NamedTuple)
75+
if isempty(t)
76+
return product_sectors_isequal((;), nt)
77+
elseif isempty(nt)
78+
return product_sectors_isequal(t, ())
79+
end
80+
return false
8481
end
85-
product_sectors_isequal(::Tuple{}, ::NamedTuple{()}) = true
86-
product_sectors_isequal(::NamedTuple{()}, ::Tuple{}) = true
87-
product_sectors_isequal(::Tuple, ::NamedTuple) = false
88-
product_sectors_isequal(::NamedTuple, ::Tuple) = false
8982

9083
function product_sectors_isless(nt::NamedTuple, ::Tuple{})
9184
return product_sectors_isless(nt, (;))
@@ -109,19 +102,15 @@ product_sectors_isless(::Tuple, ::NamedTuple) = throw(ArgumentError("Not impleme
109102
product_sectors_type(::Type{<:SectorProduct{T}}) where {T} = T
110103

111104
function product_sectors_fusion_rule(sects1, sects2)
105+
isempty(sects1) && return SectorProduct(sects2)
106+
isempty(sects2) && return SectorProduct(sects1)
112107
shared_sect = shared_product_sectors_fusion_rule(
113108
product_sectors_common(sects1, sects2)...
114109
)
115110
diff_sect = SectorProduct(product_sectors_diff(sects1, sects2))
116111
return shared_sect × diff_sect
117112
end
118113

119-
# edge case with empty product_sectors
120-
product_sectors_fusion_rule(sects::Tuple, ::NamedTuple{()}) = SectorProduct(sects)
121-
product_sectors_fusion_rule(::NamedTuple{()}, sects::Tuple) = SectorProduct(sects)
122-
product_sectors_fusion_rule(sects::NamedTuple, ::Tuple{}) = SectorProduct(sects)
123-
product_sectors_fusion_rule(::Tuple{}, sects::NamedTuple) = SectorProduct(sects)
124-
125114
# ================================= Cartesian Product ====================================
126115
×(c1::AbstractSector, c2::AbstractSector) = ×(SectorProduct(c1), SectorProduct(c2))
127116
function ×(p1::SectorProduct, p2::SectorProduct)

0 commit comments

Comments
 (0)