def decode_sets(bytes): """ Decodes a set of sets encoded using encode_sets (see above). >>> b = BitStream(hex='0x00000000000000010503').tobytes(); write_sets(decode_sets(b)) '{{0,2},{0,1}}' >>> b = BitStream(hex='0x000000000000000100').tobytes(); write_sets(decode_sets(b)) '{{}}' >>> b = BitStream(hex='0x0000000000000001').tobytes(); write_sets(decode_sets(b)) '{}' """ from bitstring.bitstream import BitStream, pack bs = BitStream(bytes=bytes) bytesperset, content = bs.readlist('uint:64, bits') setOfSets = set() for bits in content.cut(bytesperset * 8): aSet = set() bits.reverse() for i, b in enumerate(bits): if b is True: aSet.add(i) setOfSets.add(frozenset(aSet)) return setOfSets
def decode_sets(bytes): """ Decodes a set of sets encoded using encode_sets (see above). >>> b = BitStream(hex='0x00000000000000010503').tobytes(); write_sets(decode_sets(b)) '{{0,2},{0,1}}' >>> b = BitStream(hex='0x000000000000000100').tobytes(); write_sets(decode_sets(b)) '{{}}' >>> b = BitStream(hex='0x0000000000000001').tobytes(); write_sets(decode_sets(b)) '{}' """ from bitstring.bitstream import BitStream, pack bs = BitStream(bytes=bytes) bytesperset, content = bs.readlist('uint:64, bits') setOfSets = set() for bits in content.cut(bytesperset*8): aSet = set() bits.reverse() for i,b in enumerate(bits): if b is True: aSet.add(i) setOfSets.add(frozenset(aSet)) return setOfSets