# RUN: %PYTHON %s | FileCheck %s import gc from mlir.ir import * def run(f): print("\nTEST:", f.__name__) f() gc.collect() assert Context._get_live_count() == 0 return f # CHECK-LABEL: TEST: testIntegerSetCapsule @run def testIntegerSetCapsule(): with Context() as ctx: is1 = IntegerSet.get_empty(1, 1, ctx) capsule = is1._CAPIPtr # CHECK: mlir.ir.IntegerSet._CAPIPtr print(capsule) is2 = IntegerSet._CAPICreate(capsule) assert is1 == is2 assert is2.context is ctx # CHECK-LABEL: TEST: testIntegerSetGet @run def testIntegerSetGet(): with Context(): d0 = AffineDimExpr.get(0) d1 = AffineDimExpr.get(1) s0 = AffineSymbolExpr.get(0) c42 = AffineConstantExpr.get(42) # CHECK: (d0, d1)[s0] : (d0 - d1 == 0, s0 - 42 >= 0) set0 = IntegerSet.get(2, 1, [d0 - d1, s0 - c42], [True, False]) print(set0) # CHECK: (d0)[s0] : (1 == 0) set1 = IntegerSet.get_empty(1, 1) print(set1) # CHECK: (d0)[s0, s1] : (d0 - s1 == 0, s0 - 42 >= 0) set2 = set0.get_replaced([d0, AffineSymbolExpr.get(1)], [s0], 1, 2) print(set2) try: IntegerSet.get(2, 1, [], []) except ValueError as e: # CHECK: Expected non-empty list of constraints print(e) try: IntegerSet.get(2, 1, [d0 - d1], [True, False]) except ValueError as e: # CHECK: Expected the number of constraints to match that of equality flags print(e) try: IntegerSet.get(2, 1, [0], [True]) except RuntimeError as e: # CHECK: Invalid expression when attempting to create an IntegerSet print(e) try: IntegerSet.get(2, 1, [None], [True]) except RuntimeError as e: # CHECK: Invalid expression (None?) when attempting to create an IntegerSet print(e) try: set0.get_replaced([d0], [s0], 1, 1) except ValueError as e: # CHECK: Expected the number of dimension replacement expressions to match that of dimensions print(e) try: set0.get_replaced([d0, d1], [s0, s0], 1, 1) except ValueError as e: # CHECK: Expected the number of symbol replacement expressions to match that of symbols print(e) try: set0.get_replaced([d0, 1], [s0], 1, 1) except RuntimeError as e: # CHECK: Invalid expression when attempting to create an IntegerSet by replacing dimensions print(e) try: set0.get_replaced([d0, d1], [None], 1, 1) except RuntimeError as e: # CHECK: Invalid expression (None?) when attempting to create an IntegerSet by replacing symbols print(e) # CHECK-LABEL: TEST: testIntegerSetProperties @run def testIntegerSetProperties(): with Context(): d0 = AffineDimExpr.get(0) d1 = AffineDimExpr.get(1) s0 = AffineSymbolExpr.get(0) c42 = AffineConstantExpr.get(42) set0 = IntegerSet.get(2, 1, [d0 - d1, s0 - c42, s0 - d0], [True, False, False]) # CHECK: 2 print(set0.n_dims) # CHECK: 1 print(set0.n_symbols) # CHECK: 3 print(set0.n_inputs) # CHECK: 1 print(set0.n_equalities) # CHECK: 2 print(set0.n_inequalities) # CHECK: 3 print(len(set0.constraints)) # CHECK-DAG: d0 - d1 == 0 # CHECK-DAG: s0 - 42 >= 0 # CHECK-DAG: -d0 + s0 >= 0 for cstr in set0.constraints: print(cstr.expr, end="") print(" == 0" if cstr.is_eq else " >= 0") # TODO-LABEL: TEST: testHash @run def testHash(): with Context(): d0 = AffineDimExpr.get(0) d1 = AffineDimExpr.get(1) set = IntegerSet.get(2, 0, [d0 + d1], [True]) assert hash(set) == hash(IntegerSet.get(2, 0, [d0 + d1], [True])) dictionary = dict() dictionary[set] = 42 assert set in dictionary