Example #1
0
	def testUnionRename(self):
		from iegen import Relation
		from iegen.parser import PresParser

		prelation1=PresParser.parse_relation('{[a]->[ap]:a>10 and ap>20}')
		prelation2=PresParser.parse_relation('{[a]->[ap]:a<5 and ap<10}')
		prelation3=PresParser.parse_relation('{[a]->[ap]:a=7 and ap=14}')
		relation1=Relation('{[a]->[ap]:a>10 and ap>20}')
		relation2=Relation('{[b]->[bp]:b<5 and bp<10}')
		relation3=Relation('{[c]->[cp]:c=7 and cp=14}')
		unioned=relation1.union(relation2).union(relation3)
		unioned_res=Relation(relations=[prelation1,prelation2,prelation3])

		self.failUnless(unioned==unioned_res,'%s!=%s'%(unioned,unioned_res))

		prelation1=PresParser.parse_relation('{[a]->[ap]:a>10 and ap>20}')
		prelation2=PresParser.parse_relation('{[a]->[ap]:a<5 and ap<10}')
		prelation3=PresParser.parse_relation('{[a]->[ap]:a=7 and ap=14}')
		relation1=Relation('{[a]->[ap]:a>10 and ap>20}')
		relation2=Relation('{[b]->[bp]:b<5 and bp<10}')
		relation3=Relation('{[c]->[cp]:c=7 and cp=14}')
		unioned=unioned.union(relation1)
		unioned_res=Relation(relations=[prelation1,prelation2,prelation3])

		self.failUnless(unioned==unioned_res,'%s!=%s'%(unioned,unioned_res))
Example #2
0
	def testUnionNonDestructive(self):
		from iegen import Relation

		relation1=Relation('{[a]->[a]}')
		relation2=Relation('{[b]->[b]}')
		unioned=relation1.union(relation2)

		self.failIf(unioned is relation1,'%s is %s'%(unioned,relation1))
		self.failIf(unioned is relation2,'%s is %s'%(unioned,relation2))
Example #3
0
	def testUnion(self):
		from iegen import Relation
		from iegen.parser import PresParser

		prelation1=PresParser.parse_relation('{[a]->[a]:a>10}')
		prelation2=PresParser.parse_relation('{[b]->[b]:b>11}')
		relation1=Relation('{[a]->[a]:a>10}')
		relation2=Relation('{[b]->[b]:b>11}')
		unioned=relation1.union(relation2)
		unioned_res=Relation(relations=[prelation1,prelation2])

		self.failUnless(unioned==unioned_res,'%s!=%s'%(unioned,unioned_res))

		prelation1=PresParser.parse_relation('{[a]->[a]:a>10}')
		prelation2=PresParser.parse_relation('{[b]->[b]:b>11}')
		prelation3=PresParser.parse_relation('{[b]->[b]:b>11}')
		relation1=Relation('{[a]->[a]:a>10}')
		relation2=Relation('{[b]->[b]:b>11}')
		unioned=unioned.union(relation1)
		unioned_res=Relation(relations=[prelation1,prelation2,prelation3])

		self.failUnless(unioned==unioned_res,'%s!=%s'%(unioned,unioned_res))
Example #4
0
a4_1 =  R_x0_x1.compose(a4_0)
#print a4_1
#PrettyPrintVisitor().visit(a4_1)
print
print "\ta8_1 = R_x0_x1 compose a8_0 = "
a8_1 =  R_x0_x1.compose(a8_0)
#print a8_1
#PrettyPrintVisitor().visit(a8_1)


#### Loop Alignment
print
print "==== Loop Alignment"
print "The transformation relation: "
T_I0_to_I1 = Relation('{[c0, s, c0, i, c0] -> [c0, s, c0, j, c0] : c0=0 && j=sigma(i)}')
T_I0_to_I1 = T_I0_to_I1.union( Relation('{[c0, s, c1, ii, x] -> [c0, s, c1, ii, x] : c0=0 && c1=1}') )
print "\tT_I0_to_I1 = "
#PrettyPrintVisitor().visit(T_I0_to_I1)
print
print "Updating access relations due to T_I0_to_I1: "
print
print "\ta1_2  = a1_1 compose (inverse T_I0_to_I1)"
a1_2 =  a1_1.compose( T_I0_to_I1.inverse() )
#print a1_2
#PrettyPrintVisitor().visit(a1_2)
print
print "\ta4_2  = a4_1 compose (inverse T_I0_to_I1)"
a4_2 =  a4_1.compose( T_I0_to_I1.inverse() )
#print a4_2
#PrettyPrintVisitor().visit(a4_2)
print
Example #5
0
# Turned out this was another un-renaming bug.  Issue #124 is now fixed.

import iegen
from iegen import Set
from iegen import Relation
from iegen import Symbolic

import iegen.simplify
iegen.simplify.register_inverse_pair('delta','delta_inv')

from iegen.ast.visitor import PrettyPrintVisitor



D_1_2 = Relation("{[c0,s,c1,i,c2] -> [c0,s,c3,ii,c2] : i = inter1(ii) && c1=0 && c2=0 && c0=0 && c3=1}")
D_1_2 = D_1_2.union(Relation("{[c0,s,c1,i,c2] -> [c0,s,c3,ii,c2] : i = inter2(ii) && c1=0 && c2=0 && c0=0 && c3=1}"))
print
print "D_1_2 = ", D_1_2
PrettyPrintVisitor().visit(D_1_2)
D_1_3 = D_1_2


print
T_I0_to_I1 = Relation('{[c0, s, c0, i, c0] -> [c0, s, c0, j, c0] : c0=0 && j=sigma(i)}')
T_I0_to_I1 = T_I0_to_I1.union( Relation('{[c0, s, c1, ii, x] -> [c0, s, c1, ii, x] : c0=0 && c1=1}') )
print "\tT_I0_to_I1 = "
PrettyPrintVisitor().visit(T_I0_to_I1)
print
T_I1_to_I2 = Relation("{[c0,s,c0,i,c0] -> [c0,s,c0,i,c0] : c0=0 }")
T_I1_to_I2 = T_I1_to_I2.union( Relation("{[c0,s,c1,ii,x] -> [c7,s,c8,j,x] : j = delta(ii) && c0=0  && c1=1 }"))
print "T_I1_to_I2 = "
Example #6
0
# compose_bug_136.py
#

import iegen
from iegen import Set
from iegen import Relation
from iegen import Symbolic

import iegen.simplify

iegen.simplify.register_inverse_pair("delta", "delta_inv")

from iegen.ast.visitor import PrettyPrintVisitor

D_ST = Relation("{ [c0,i] -> [x,j] : i+-1*sigma(inter1(delta_inv(j)))=0 && c0=0 }")
D_ST = D_ST.union(Relation("{ [c0,i] -> [x,j] : i+-1*sigma(inter2(delta_inv(j)))=0 && c0 = 0  }"))

D_ST.compose(D_ST)
Example #7
0
	def testNoUnionSameObject(self):
		from iegen import Relation

		rel=Relation('{[a]->[a]}')
		rel.union(rel)
Example #8
0
	def testUnionDiffArity(self):
		from iegen import Relation

		relation1=Relation('{[]->[]}')
		relation2=Relation('{[a]->[a]}')
		relation1.union(relation2)
#print '___START___'
#print 'R_x0_x1:',R_x0_x1
#print 'a8_0:',a8_0
a8_1 =  R_x0_x1.compose(a8_0)
#print 'R_x0_x1.compose(a8_0):',a8_1
#print '___END___'
print a8_1
#PrettyPrintVisitor().visit(a8_1)


#### Loop Alignment
print
print "==== Loop Alignment"
print "The transformation relation: "
T_I0_to_I1 = Relation('{[c0, s, c0, i, c0] -> [c0, s, c0, j, c0] : c0=0 && j=sigma(i)}')
T_I0_to_I1 = T_I0_to_I1.union( Relation('{[c0, s, c1, ii, x] -> [c0, s, c1, ii, x] : c0=0 && c1=1}') )
print "\tT_I0_to_I1 = "
print T_I0_to_I1
#PrettyPrintVisitor().visit(T_I0_to_I1)
print
print "Updating access relations due to T_I0_to_I1: "
print
print "\ta1_2  = a1_1 compose (inverse T_I0_to_I1)"
#print '___START___'
#print 'a1_1:',a1_1
#print 'T_I0_to_I1:',T_I0_to_I1
#print 'T_I0_to_I1.inverse():',T_I0_to_I1.inverse()
a1_2 =  a1_1.compose( T_I0_to_I1.inverse() )
#print 'a1_1.compose(T_I0_to_I1.inverse())',a1_2
#print '___END___'
print 'a1_2 =  a1_1.compose( T_I0_to_I1.inverse() ):'