Add dbcheck.py, split seg_int.segbits

Signed-off-by: Clifford Wolf <clifford@clifford.at>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
Clifford Wolf 2017-11-12 17:31:22 +01:00 committed by Tim 'mithro' Ansell
parent de1f909a37
commit 67d461a1ed
4 changed files with 63 additions and 15 deletions

View File

@ -1,2 +1,3 @@
/specimen_[0-9][0-9][0-9]/
/seg_int.segbits
/seg_clbll_int.segbits
/seg_clblm_int.segbits

View File

@ -4,13 +4,16 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
database: $(SPECIMENS_OK)
../../tools/segmatch -m 5 -M 15 -o seg_int.segbits \
$(addsuffix /segdata_clbll.txt,$(SPECIMENS)) \
../../tools/segmatch -m 5 -M 15 -o seg_clbll_int.segbits \
$(addsuffix /segdata_clbll.txt,$(SPECIMENS))
../../tools/segmatch -m 5 -M 15 -o seg_clblm_int.segbits \
$(addsuffix /segdata_clblm.txt,$(SPECIMENS))
pushdb:
bash ../../utils/mergedb.sh seg_int.segbits \
../../database/$(XRAY_DATABASE)/seg_int.segbits
bash ../../utils/mergedb.sh seg_clbll_int.segbits \
../../database/$(XRAY_DATABASE)/seg_clbll_int.segbits
bash ../../utils/mergedb.sh seg_clblm_int.segbits \
../../database/$(XRAY_DATABASE)/seg_clblm_int.segbits
$(SPECIMENS_OK):
bash generate.sh $(subst /OK,,$@)

View File

@ -23,6 +23,7 @@ for segname, segdata in grid["segments"].items():
if segtype not in segbits:
segbits[segtype] = dict()
segbits_r[segtype] = dict()
routebits[segtype] = dict()
segframes[segtype] = segdata["frames"]
print("Loading %s segbits." % segtype)
@ -32,14 +33,14 @@ for segname, segdata in grid["segments"].items():
segbits[segtype][bit_name] = bit_pos
segbits_r[segtype][bit_pos] = bit_name
print("Loading routing segbits.")
with open("../database/%s/seg_int.segbits" % os.getenv("XRAY_DATABASE")) as f:
for line in f:
bit_name, *bit_pos = line.split()
for bit in bit_pos:
if bit not in routebits:
routebits[bit] = set()
routebits[bit].add(bit_name)
print("Loading %s_int segbits." % segtype)
with open("../database/%s/seg_%s_int.segbits" % (os.getenv("XRAY_DATABASE"), segtype)) as f:
for line in f:
bit_name, *bit_pos = line.split()
for bit in bit_pos:
if bit not in routebits[segtype]:
routebits[segtype][bit] = set()
routebits[segtype][bit].add(bit_name)
#################################################
@ -169,8 +170,8 @@ for segtype in segbits.keys():
bgcolor = "#cccc88"
label = bit_name[-5] + "5"
elif bit_pos in routebits:
title += list(routebits[bit_pos])
elif bit_pos in routebits[segtype]:
title += list(routebits[segtype][bit_pos])
bgcolor = "#6666cc"
label = "R"

43
utils/dbcheck.py Normal file
View File

@ -0,0 +1,43 @@
#!/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:
raise Exception("Duplicate key: %s %s" % (key, bits))
if bits in database_r:
raise Exception("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:
raise Exception("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)