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
Esempio n. 2
0
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
Esempio n. 4
0
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