Fix error in iterative implementation of combine_classes

This commit is contained in:
Matt Guthaus 2018-11-14 10:05:04 -08:00
parent 4ebb8a26c4
commit 18d874a96a
1 changed files with 12 additions and 29 deletions

View File

@ -653,48 +653,31 @@ class router(router_tech):
debug.info(2,"Analyzing pin groups for {}.".format(pin_name))
pin_set = self.pins[pin_name]
local_debug = False
# Put each pin in an equivalence class of it's own
equiv_classes = [set([x]) for x in pin_set]
if local_debug:
debug.info(0,"INITIAL\n"+pformat(equiv_classes))
first_run = True
while (first_run or len(equiv_classes)<len(old_equiv_classes)):
first_run=False
def combine_classes(equiv_classes):
for class1 in equiv_classes:
for class2 in equiv_classes:
if class1 == class2:
continue
#class3 = compare_classes(class1, class2)
# Compare each pin in each class,
# and if any overlap, return the combined the class
combined_class = None
# and if any overlap, update equiv_classes to include the combined the class
for p1 in class1:
for p2 in class2:
if p1.overlaps(p2):
combined_class = class1 | class2
if local_debug:
debug.info(0,"COMBINE:"+pformat(combined_class))
break
else:
continue
break
if combined_class:
old_equiv_classes = equiv_classes
equiv_classes.remove(class1)
equiv_classes.remove(class2)
equiv_classes.append(combined_class)
break
else:
continue
break
equiv_classes.remove(class1)
equiv_classes.remove(class2)
equiv_classes.append(combined_class)
return(equiv_classes)
return(equiv_classes)
old_length = math.inf
while (len(equiv_classes)<old_length):
old_length = len(equiv_classes)
equiv_classes = combine_classes(equiv_classes)
if local_debug:
debug.info(0,"FINAL "+pformat(equiv_classes))
self.pin_groups[pin_name] = [pin_group(name=pin_name, pin_set=x, router=self) for x in equiv_classes]
def convert_pins(self, pin_name):