def extractPartialOrder(data, domain, external, orderLUT): precedes = setgraph(domain) follows = setgraph(domain) different = setgraph(domain) mustBeDifferent(different, external) for rank, renames in data.iteritems(): for rename in renames: mustBeDifferent(different, rename.keys()) mustBeDifferent(different, rename.values()) extractOrder(precedes, follows, rename, orderLUT) precedes = fuzzyorder.makeClosure(precedes, domain) follows = fuzzyorder.makeClosure(follows, domain) for p, s in precedes.iteritems(): assert not p in s, p for p, s in follows.iteritems(): assert not p in s, p return precedes, follows, different
def graphFromRenames(data, domain, keepOne=False): G = setgraph(domain) for rank, renames in data.iteritems(): for rename in renames: if len(rename) > 1 or keepOne: for k, v in rename.iteritems(): G[k].add(v) return G
def makeAnalogies(data, orderLUT): out = [] for rank, renames in data.iteritems(): for rename in renames: a = sorted(rename.iterkeys(), key=lambda e: orderLUT[e]) b = [rename[x] for x in a] makeAnalogySubranges(a, b, orderLUT, out) return out
def makeAnalogies(data, orderLUT): out = [] for rank, renames in data.iteritems(): for rename in renames: a = sorted(rename.iterkeys(), key=lambda e:orderLUT[e]) b = [rename[x] for x in a] makeAnalogySubranges(a, b, orderLUT, out) return out
def partitionRenames(data, domain, mapping): new = {} external = {} for d in domain: new[d] = {} external[d] = set() links = {} for rank, renames in data.iteritems(): for rename in renames: # Partition portions of the rename partition = collections.defaultdict(list) link = [] for k, v in rename.iteritems(): if mapping[k] == mapping[v]: partition[mapping[k]].append(k) else: link.append(k) # Build a rename for each group for g, p in partition.iteritems(): newrename = {} for k in p: newrename[k] = rename[k] for k, v in newrename.iteritems(): assert mapping[k] == mapping[v] if not rank in new[g]: new[g][rank] = [] new[g][rank].append(newrename) # Build renames that link partitions newrename = {} for k in link: newrename[k] = rename[k] external[mapping[k]].add(k) external[mapping[v]].add(v) if not rank in links: links[rank] = [] links[rank].append(newrename) return new, links, external
return new, links, external def graphFromRenames(data, domain, keepOne=False): G = setgraph(domain) for rank, renames in data.iteritems(): for rename in renames: if len(rename) > 1 or keepOne: for k, v in rename.iteritems(): G[k].add(v) return G # Calculate the domain domain = set() for rank, renames in data.iteritems(): for rename in renames: for k, v in rename.iteritems(): domain.add(k) domain.add(v) for defs in different: domain.update(defs) # Merging partitions should be conflict free. # Find and kill conflicts in the root partiton. # Merging def process(data, domain, external, level=0):