mirror of https://github.com/openXC7/prjxray.git
48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
#!/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)
|