| #!/usr/bin/env python3 |
| |
| import sys, re |
| |
| database = dict() |
| database_r = dict() |
| |
| for arg in sys.argv[1:]: |
| with open(arg, "r") as f: |
| for line in f: |
| if "<" in line: |
| raise Exception("Found '<' in this line: %s" % line) |
| |
| line = line.split() |
| key = line[0] |
| bits = tuple(sorted(set(line[1:]))) |
| |
| if key in database: |
| print("Warning: Duplicate key: %s %s" % (key, bits)) |
| |
| if bits in database_r: |
| print("Warning: Duplicate bits: %s %s" % (key, bits)) |
| |
| database[key] = bits |
| database_r[bits] = key |
| |
| |
| def get_subsets(bits): |
| retval = list() |
| retval.append(bits) |
| for i in range(len(bits)): |
| for s in get_subsets(bits[i + 1:]): |
| retval.append(bits[0:i] + s) |
| return retval |
| |
| |
| def check_subsets(bits): |
| for sub_bits in sorted(get_subsets(bits)): |
| if sub_bits != bits and sub_bits != (): |
| if sub_bits in database_r: |
| print( |
| "Warning: Entry %s %s is a subset of entry %s %s." % |
| (database_r[sub_bits], sub_bits, database_r[bits], bits)) |
| |
| |
| for key, bits in database.items(): |
| check_subsets(bits) |