6262
6363arguments_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)
6769end
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)... )
7579end
7680
7781function arguments_product (s1, s2)
8387function 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)... )
8791end
8892
8993# ================================= Cartesian Product ====================================
@@ -178,13 +182,13 @@ function shared_arguments_fusion_rule(shared1::T, shared2::T) where {T<:Tuple}
178182 )
179183end
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 ])... )
184188end
185189
186190function _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)... )
188192end
189193# =========================== Dictionary-like implementation =============================
190194function SectorProduct (nt:: NamedTuple )
@@ -204,7 +208,7 @@ function arguments_symmetrystyle(NT::Type{<:NamedTuple})
204208 return mapreduce (SymmetryStyle, combine_styles, fieldtypes (NT); init= AbelianStyle ())
205209end
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))
210214end
@@ -239,5 +243,5 @@ function shared_arguments_fusion_rule(shared1::NT, shared2::NT) where {NT<:Named
239243end
240244
241245function _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)... )
243247end
0 commit comments