Skip to content

Commit 496fa5a

Browse files
committed
generic isless
1 parent f130f34 commit 496fa5a

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,20 @@ end
6262

6363
arguments_type(::Type{<:SectorProduct{T}}) where {T} = T
6464

65-
function sym_arguments_insert_unspecified(s1, s2)
66-
return arguments_insert_unspecified(s1, s2), arguments_insert_unspecified(s2, s1)
65+
arguments_maybe_insert_unspecified(s1, ::Any) = s1
66+
function sym_arguments_maybe_insert_unspecified(s1, s2)
67+
return arguments_maybe_insert_unspecified(s1, s2),
68+
arguments_maybe_insert_unspecified(s2, s1)
6769
end
6870

69-
arguments_isequal(s1, s2) = ==(sym_arguments_insert_unspecified(s1, s2)...)
70-
arguments_isequal(nt::NamedTuple, t::Tuple) = arguments_isequal(t, nt)
71-
function arguments_isequal(t::Tuple, nt::NamedTuple)
72-
isempty(nt) && return arguments_isequal(t, ())
73-
isempty(t) && return arguments_isequal((;), nt)
74-
return false
71+
function arguments_isequal(s1, s2)
72+
isempty(s1) && return _arguments_isequal(empty(s2), s2)
73+
isempty(s2) && return _arguments_isequal(s1, empty(s1))
74+
return _arguments_isequal(s1, s2)
75+
end
76+
77+
function _arguments_isequal(s1, s2)
78+
return ==(sym_arguments_maybe_insert_unspecified(s1, s2)...)
7579
end
7680

7781
function arguments_product(s1, s2)
@@ -83,7 +87,7 @@ end
8387
function arguments_isless(a1, a2)
8488
isempty(a1) && return _arguments_isless(empty(a2), a2)
8589
isempty(a2) && return _arguments_isless(a1, empty(a1))
86-
return isless(sym_arguments_insert_unspecified(a1, a2)...)
90+
return isless(sym_arguments_maybe_insert_unspecified(a1, a2)...)
8791
end
8892

8993
# ================================= Cartesian Product ====================================
@@ -178,13 +182,13 @@ function shared_arguments_fusion_rule(shared1::T, shared2::T) where {T<:Tuple}
178182
)
179183
end
180184

181-
function arguments_insert_unspecified(t1::Tuple, t2::Tuple)
185+
function arguments_maybe_insert_unspecified(t1::Tuple, t2::Tuple)
182186
n1 = length(t1)
183187
return (t1..., trivial.(t2[(n1 + 1):end])...)
184188
end
185189

186190
function _arguments_isless(t1::Tuple, t2::Tuple)
187-
return isless(sym_arguments_insert_unspecified(t1, t2)...)
191+
return isless(sym_arguments_maybe_insert_unspecified(t1, t2)...)
188192
end
189193
# =========================== Dictionary-like implementation =============================
190194
function SectorProduct(nt::NamedTuple)
@@ -204,7 +208,7 @@ function arguments_symmetrystyle(NT::Type{<:NamedTuple})
204208
return mapreduce(SymmetryStyle, combine_styles, fieldtypes(NT); init=AbelianStyle())
205209
end
206210

207-
function arguments_insert_unspecified(nt1::NamedTuple, nt2::NamedTuple)
211+
function arguments_maybe_insert_unspecified(nt1::NamedTuple, nt2::NamedTuple)
208212
diff1 = arguments_trivial(typeof(setdiff_keys(nt2, nt1)))
209213
return sort_keys(union_keys(nt1, diff1))
210214
end
@@ -239,5 +243,5 @@ function shared_arguments_fusion_rule(shared1::NT, shared2::NT) where {NT<:Named
239243
end
240244

241245
function _arguments_isless(nt1::NamedTuple, nt2::NamedTuple)
242-
return isless(sym_arguments_insert_unspecified(nt1, nt2)...)
246+
return isless(sym_arguments_maybe_insert_unspecified(nt1, nt2)...)
243247
end

0 commit comments

Comments
 (0)