def map_subscript(self, expr, *args): dc = self.diff_context if expr.aggregate.name == dc.by_name: index = expr.index if not isinstance(expr.index, tuple): index = (expr.index, ) assert len(self.diff_inames) == len(index) conds = [ p.Comparison(var(ti), "==", ei) for ti, ei in zip(self.diff_inames, index) ] if len(conds) == 1: and_conds, = conds elif len(conds) > 1: and_conds = p.LogicalAnd(tuple(conds)) else: assert False return p.If(and_conds, 1, 0) else: dvar_dby = dc.get_diff_var(expr.aggregate.name) if dvar_dby is None: return 0 idx = expr.index if not isinstance(idx, tuple): idx = (idx, ) return type(expr)(var(dvar_dby), expr.index + self.diff_inames)
def basic_set_to_cond_expr(isl_basicset): constrs = [] for constr in isl_basicset.get_constraints(): constrs.append(constraint_to_cond_expr(constr)) if len(constrs) == 0: raise ValueError("may not be called on universe") elif len(constrs) == 1: constr, = constrs return constr else: return p.LogicalAnd(tuple(constrs))
def _expression_logicaland(expr, ctx): return p.LogicalAnd(tuple([expression(c, ctx) for c in expr.children]))