'Compute the hash value of a set.
Note that we don\'t define __hash__: not all sets are hashable.
But if you define a hashable set type, its __hash__ should
call this function.
This must be compatible __eq__.
All sets ought to compare equal if they contain the same
elements, regardless of how they are implemented, and
regardless of the order of the elements; so there\'s not much
freedom for __eq__ or __hash__.  We match the algorithm used
by the built-in frozenset type.'

def _hash(self):

    MAX = sys.maxint
    MASK = ((2 * MAX) + 1)
    n = len(self)
    h = (1927868237 * (n + 1))
    h &= MASK
    for x in self:
        hx = hash(x)
        h ^= (((hx ^ (hx << 16)) ^ 89869747) * 3644798167)
        h &= MASK
    h = ((h * 69069) + 907133923)
    h &= MASK
    if (h > MAX):
        h -= (MASK + 1)
    if (h == (-1)):
        h = 590923713
    return h
