1try:
2    from collections.abc import MutableSet
3except ImportError:
4    from collections import MutableSet
5
6
7class SetMixin(MutableSet):
8
9    """
10    Mix-in for sets.  You must define __iter__, add, remove
11    """
12
13    def __len__(self):
14        length = 0
15        for item in self:
16            length += 1
17        return length
18
19    def __contains__(self, item):
20        for has_item in self:
21            if item == has_item:
22                return True
23        return False
24
25    issubset = MutableSet.__le__
26    issuperset = MutableSet.__ge__
27
28    union = MutableSet.__or__
29    intersection = MutableSet.__and__
30    difference = MutableSet.__sub__
31    symmetric_difference = MutableSet.__xor__
32
33    def copy(self):
34        return set(self)
35
36    def update(self, other):
37        self |= other
38
39    def intersection_update(self, other):
40        self &= other
41
42    def difference_update(self, other):
43        self -= other
44
45    def symmetric_difference_update(self, other):
46        self ^= other
47
48    def discard(self, item):
49        try:
50            self.remove(item)
51        except KeyError:
52            pass
53
54    @classmethod
55    def _from_iterable(cls, it):
56        return set(it)
57