import gc
from mlir.ir import *
def run(f):
print("\nTEST:", f.__name__)
f()
gc.collect()
assert Context._get_live_count() == 0
return f
@run
def testAffineExprCapsule():
with Context() as ctx:
affine_expr = AffineExpr.get_constant(42)
affine_expr_capsule = affine_expr._CAPIPtr
print(affine_expr_capsule)
affine_expr_2 = AffineExpr._CAPICreate(affine_expr_capsule)
assert affine_expr == affine_expr_2
assert affine_expr_2.context == ctx
@run
def testAffineExprEq():
with Context():
a1 = AffineExpr.get_constant(42)
a2 = AffineExpr.get_constant(42)
a3 = AffineExpr.get_constant(43)
print(a1 == a1)
print(a1 == a2)
print(a1 == a3)
print(a1 is None)
print(a1 == "foo")
@run
def testAffineExprContext():
with Context():
a1 = AffineExpr.get_constant(42)
with Context():
a2 = AffineExpr.get_constant(42)
print(a1 == a2)
run(testAffineExprContext)
@run
def testAffineExprConstant():
with Context():
a1 = AffineExpr.get_constant(42)
print(a1.value)
print(a1)
a2 = AffineConstantExpr.get(42)
print(a2.value)
print(a2)
assert a1 == a2
@run
def testAffineExprDim():
with Context():
d1 = AffineExpr.get_dim(1)
d11 = AffineDimExpr.get(1)
d2 = AffineDimExpr.get(2)
print(d1.position)
print(d1)
print(d2.position)
print(d2)
assert d1 == d11
assert d1 != d2
@run
def testAffineExprSymbol():
with Context():
s1 = AffineExpr.get_symbol(1)
s11 = AffineSymbolExpr.get(1)
s2 = AffineSymbolExpr.get(2)
print(s1.position)
print(s1)
print(s2.position)
print(s2)
assert s1 == s11
assert s1 != s2
@run
def testAffineAddExpr():
with Context():
d1 = AffineDimExpr.get(1)
d2 = AffineDimExpr.get(2)
d12 = AffineExpr.get_add(d1, d2)
print(d12)
d12op = d1 + d2
print(d12op)
d1cst_op = d1 + 2
print(d1cst_op)
d1cst_op2 = 2 + d1
print(d1cst_op2)
assert d12 == d12op
assert d12.lhs == d1
assert d12.rhs == d2
@run
def testAffineMulExpr():
with Context():
d1 = AffineDimExpr.get(1)
c2 = AffineConstantExpr.get(2)
expr = AffineExpr.get_mul(d1, c2)
print(expr)
op = d1 * c2
print(op)
op_cst = d1 * 2
print(op_cst)
op_cst2 = 2 * d1
print(op_cst2)
assert expr == op
assert expr == op_cst
assert expr.lhs == d1
assert expr.rhs == c2
@run
def testAffineModExpr():
with Context():
d1 = AffineDimExpr.get(1)
c2 = AffineConstantExpr.get(2)
expr = AffineExpr.get_mod(d1, c2)
print(expr)
op = d1 % c2
print(op)
op_cst = d1 % 2
print(op_cst)
print(2 % d1)
assert expr == op
assert expr == op_cst
assert expr.lhs == d1
assert expr.rhs == c2
expr2 = AffineExpr.get_mod(c2, d1)
expr3 = AffineExpr.get_mod(2, d1)
expr4 = AffineExpr.get_mod(d1, 2)
print(expr2)
print(expr3)
print(expr4)
assert expr2 == expr3
assert expr4 == expr
@run
def testAffineFloorDivExpr():
with Context():
d1 = AffineDimExpr.get(1)
c2 = AffineConstantExpr.get(2)
expr = AffineExpr.get_floor_div(d1, c2)
print(expr)
assert expr.lhs == d1
assert expr.rhs == c2
expr2 = AffineExpr.get_floor_div(c2, d1)
expr3 = AffineExpr.get_floor_div(2, d1)
expr4 = AffineExpr.get_floor_div(d1, 2)
print(expr2)
print(expr3)
print(expr4)
assert expr2 == expr3
assert expr4 == expr
@run
def testAffineCeilDivExpr():
with Context():
d1 = AffineDimExpr.get(1)
c2 = AffineConstantExpr.get(2)
expr = AffineExpr.get_ceil_div(d1, c2)
print(expr)
assert expr.lhs == d1
assert expr.rhs == c2
expr2 = AffineExpr.get_ceil_div(c2, d1)
expr3 = AffineExpr.get_ceil_div(2, d1)
expr4 = AffineExpr.get_ceil_div(d1, 2)
print(expr2)
print(expr3)
print(expr4)
assert expr2 == expr3
assert expr4 == expr
@run
def testAffineExprSub():
with Context():
d1 = AffineDimExpr.get(1)
d2 = AffineDimExpr.get(2)
expr = d1 - d2
print(expr)
assert expr.lhs == d1
rhs = AffineMulExpr(expr.rhs)
print(rhs.lhs)
print(rhs.rhs)
print(d1 - 42)
print(42 - d1)
c42 = AffineConstantExpr.get(42)
assert d1 - 42 == d1 - c42
assert 42 - d1 == c42 - d1
@run
def testClassHierarchy():
with Context():
d1 = AffineDimExpr.get(1)
c2 = AffineConstantExpr.get(2)
add = AffineAddExpr.get(d1, c2)
mul = AffineMulExpr.get(d1, c2)
mod = AffineModExpr.get(d1, c2)
floor_div = AffineFloorDivExpr.get(d1, c2)
ceil_div = AffineCeilDivExpr.get(d1, c2)
print(isinstance(d1, AffineBinaryExpr))
print(isinstance(c2, AffineBinaryExpr))
print(isinstance(add, AffineBinaryExpr))
print(isinstance(mul, AffineBinaryExpr))
print(isinstance(mod, AffineBinaryExpr))
print(isinstance(floor_div, AffineBinaryExpr))
print(isinstance(ceil_div, AffineBinaryExpr))
try:
AffineBinaryExpr(d1)
except ValueError as e:
print(e)
try:
AffineBinaryExpr(c2)
except ValueError as e:
print(e)
@run
def testIsInstance():
with Context():
d1 = AffineDimExpr.get(1)
c2 = AffineConstantExpr.get(2)
add = AffineAddExpr.get(d1, c2)
mul = AffineMulExpr.get(d1, c2)
print(AffineDimExpr.isinstance(d1))
print(AffineConstantExpr.isinstance(d1))
print(AffineConstantExpr.isinstance(c2))
print(AffineMulExpr.isinstance(c2))
print(AffineAddExpr.isinstance(add))
print(AffineMulExpr.isinstance(add))
print(AffineMulExpr.isinstance(mul))
print(AffineAddExpr.isinstance(mul))
@run
def testCompose():
with Context():
expr = AffineAddExpr.get(AffineDimExpr.get(0), AffineDimExpr.get(2))
map1 = AffineAddExpr.get(AffineDimExpr.get(0), AffineSymbolExpr.get(1))
map2 = AffineAddExpr.get(AffineDimExpr.get(1), AffineSymbolExpr.get(0))
map3 = AffineAddExpr.get(
AffineAddExpr.get(AffineDimExpr.get(0), AffineDimExpr.get(1)),
AffineDimExpr.get(2),
)
map = AffineMap.get(3, 2, [map1, map2, map3])
print(expr.compose(map))
@run
def testHash():
with Context():
d0 = AffineDimExpr.get(0)
s1 = AffineSymbolExpr.get(1)
assert hash(d0) == hash(AffineDimExpr.get(0))
assert hash(d0 + s1) == hash(AffineAddExpr.get(d0, s1))
dictionary = dict()
dictionary[d0] = 0
dictionary[s1] = 1
assert d0 in dictionary
assert s1 in dictionary