|
58 | 58 | # - ordered-like with a Tuple |
59 | 59 | # - dictionary-like with a NamedTuple |
60 | 60 |
|
61 | | -sectors_isequal(o1::Tuple, o2::Tuple) = (o1 == o2) |
| 61 | +function sectors_isequal(s1, s2) |
| 62 | + return ==(sym_sectors_insert_unspecified(s1, s2)...) |
| 63 | +end |
| 64 | + |
| 65 | +# get clean results when mixing implementations |
62 | 66 | function sectors_isequal(nt::NamedTuple, ::Tuple{}) |
63 | 67 | return sectors_isequal(nt, (;)) |
64 | 68 | end |
65 | 69 | function sectors_isequal(::Tuple{}, nt::NamedTuple) |
66 | 70 | return sectors_isequal((;), nt) |
67 | 71 | end |
68 | | -function sectors_isequal(nt1::NamedTuple, nt2::NamedTuple) |
69 | | - return ==(sym_sectors_insert_unspecified(nt1, nt2)...) |
| 72 | +function sectors_isequal(::NamedTuple{()}, t::Tuple) |
| 73 | + return sectors_isequal((), t) |
70 | 74 | end |
71 | | - |
72 | | -# get clean results when mixing implementations |
| 75 | +function sectors_isequal(t::Tuple, ::NamedTuple{()}) |
| 76 | + return sectors_isequal(t, ()) |
| 77 | +end |
| 78 | +sectors_isequal(::Tuple{}, ::NamedTuple{()}) = true |
| 79 | +sectors_isequal(::NamedTuple{()}, ::Tuple{}) = true |
73 | 80 | sectors_isequal(::Tuple, ::NamedTuple) = false |
74 | 81 | sectors_isequal(::NamedTuple, ::Tuple) = false |
75 | 82 |
|
76 | | -sectors_isless(::Tuple, ::Tuple) = throw(ArgumentError("Not implemented")) |
77 | | -sectors_isless(t1::T, t2::T) where {T<:Tuple} = t1 < t2 |
78 | 83 | function sectors_isless(nt::NamedTuple, ::Tuple{}) |
79 | 84 | return sectors_isless(nt, (;)) |
80 | 85 | end |
81 | 86 | function sectors_isless(::Tuple{}, nt::NamedTuple) |
82 | 87 | return sectors_isless((;), nt) |
83 | 88 | end |
84 | | -function sectors_isless(nt1::NamedTuple, nt2::NamedTuple) |
85 | | - return isless(sym_sectors_insert_unspecified(nt1, nt2)...) |
| 89 | +function sectors_isless(::NamedTuple{()}, t::Tuple) |
| 90 | + return sectors_isless((), t) |
| 91 | +end |
| 92 | +function sectors_isless(t::Tuple, ::NamedTuple{()}) |
| 93 | + return sectors_isless(t, ()) |
| 94 | +end |
| 95 | +function sectors_isless(s1, s2) |
| 96 | + return isless(sym_sectors_insert_unspecified(s1, s2)...) |
86 | 97 | end |
87 | 98 |
|
88 | 99 | sectors_isless(::NamedTuple, ::Tuple) = throw(ArgumentError("Not implemented")) |
@@ -223,6 +234,12 @@ function shared_sectors_fusion_rule(shared1::T, shared2::T) where {T<:Tuple} |
223 | 234 | return recover_style(T, fused) |
224 | 235 | end |
225 | 236 |
|
| 237 | +function sym_sectors_insert_unspecified(t1::Tuple, t2::Tuple) |
| 238 | + n1 = length(t1) |
| 239 | + n2 = length(t2) |
| 240 | + return (t1..., trivial.(t2[(n1 + 1):end])...), (t2..., trivial.(t1[(n2 + 1):end])...) |
| 241 | +end |
| 242 | + |
226 | 243 | # =========================== Dictionary-like implementation ============================= |
227 | 244 | function SectorProduct(nt::NamedTuple) |
228 | 245 | sectors = sort_keys(nt) |
|
0 commit comments