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
Exemple #2
0
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 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
Exemple #4
0
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
Exemple #7
0
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
Exemple #8
0
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
	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):
Exemple #10
0
    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):