1 # This Python file uses the following encoding: utf-8
7 from itertools
import chain
9 class FrozenIndex(object):
10 """immutable collection of objects "indexed" by other objects"""
14 def __init__(self
, items
):
22 d
[k
] = frozenset(d
[k
])
24 self
.__values
= frozenset(list(self
.values()))
25 self
.__hash
= hash(tuple(items
))
27 def __contains__(self
, k
):
28 return k
in self
.__values
30 def __getitem__(self
, k
):
34 return FrozenIndex
.EMPTY
37 return iter(self
.values())
40 return len(list(self
.values()))
44 return self
.__dict
.get(k
)
46 return FrozenIndex
.EMPTY
49 return k
in self
.__dict
52 return tuple(((k
,v
) for k
in self
.__dict
for v
in self
.__dict
[k
]))
55 return (((k
,v
) for k
in self
.__dict
for v
in self
.__dict
[k
]))
58 return iter(self
.__dict
.keys())
61 return chain(*list(self
.__dict
.values()))
64 return list(self
.__dict
.keys())
67 return tuple(chain(*list(self
.__dict
.values())))
72 def __eq__(self
, othr
):
73 return self
.__dict
== othr
.__dict
75 def __ge__(self
, othr
):
76 return self
.__dict
>= othr
.__dict
78 def __gt__(self
, othr
):
79 return self
.__dict
> othr
.__dict
81 def __le__(self
, othr
):
82 return self
.__dict
<= othr
.__dict
84 def __lt__(self
, othr
):
85 return self
.__dict
< othr
.__dict
87 def __ne__(self
, othr
):
88 return self
.__dict
!= othr
.__dict
91 return self
.__dict
.__sizeof
__()
94 return repr(self
.__dict
)
97 return str(self
.__dict
)