def tryCollapse(data, domain, external, orderLUT): precedes, follows, different = extractPartialOrder(data, domain, external, orderLUT) fuser = fuzzyorder.Fuser(precedes, follows, different) ranks = sorted(data.iterkeys(), reverse=True) def tryFuse(rename, giveup=True): for k, v in rename.iteritems(): if fuser.canFuse(k, v): fuser.doFuse(k, v) elif giveup: break skipped = [] for rank in ranks: renames = data[rank] for rename in renames: # TODO skip problematic? for k, v in rename.iteritems(): # Can we completely fuse? if not fuser.canFuse(k, v): skipped.append(rename) else: tryFuse(rename) mapping = {} for d in domain: mapping[d] = fuser.union[d] newdomain = set(mapping.values()) print "LEN", len(newdomain) return mapping
def handleLeaf(data, domain, external, G, level): ## print ## print ## ## print domain ## print external ## print data ranks = sorted(data.iterkeys(), reverse=True) ## for rank in ranks: ## print rank ## for rename in data[rank]: ## print '\t', rename if data: ## for scc in filteredSCC(graphFromRenames(data, domain, True)): ## print '\t'*level, len(scc), scc order, orderLUT = fuzzyorder.findBestOrder(data, domain, 0.99) mapping = tryCollapse(data, domain, external, orderLUT) ## mapping = fuser.makeMapping(domain) ## newdata = fuzzyorder.translateData(data, mapping) ## fuzzyorder.printViolations(newdata) if 97 in domain: fo = open('leaf_dump.py', 'w') fo.write('data = ') fo.write(repr(data)) fo.write('\n') fo.write('domain = ') fo.write(repr(domain)) fo.write('\n') fo.write('external = ') fo.write(repr(external)) fo.write('\n') fo.write('analogies = ') fo.write(repr(makeAnalogies(data, orderLUT))) fo.write('\n') fo.close() return list(order), mapping else: mapping = {} for d in domain: mapping[d] = d return list(domain), mapping