def map_subscript(self, expr): from pymbolic.primitives import Variable assert isinstance(expr.aggregate, Variable) name = expr.aggregate.name dims = self.scope.dim_map.get(name) if dims is None: return IdentityMapper.map_subscript(self, expr) subscript = expr.index if not isinstance(subscript, tuple): subscript = (subscript,) subscript = list(subscript) if len(dims) != len(subscript): raise TranslationError("inconsistent number of indices " "to '%s'" % name) for i in range(len(dims)): if len(dims[i]) == 2: # has a base index subscript[i] -= dims[i][0] elif len(dims[i]) == 1: # base index is 1 implicitly subscript[i] -= 1 return expr.aggregate[self.rec(tuple(subscript))]
def map_subscript(self, expr): try: new_idx = self.var_to_new_inames[expr.aggregate.name] except KeyError: return IdentityMapper.map_subscript(self, expr) else: index = expr.index if not isinstance(index, tuple): index = (index,) index = tuple(self.rec(i) for i in index) return expr.aggregate.index(index + new_idx)
def map_subscript(self, expr): try: new_idx = self.var_to_new_inames[expr.aggregate.name] except KeyError: return IdentityMapper.map_subscript(self, expr) else: index = expr.index if not isinstance(index, tuple): index = (index, ) index = tuple(self.rec(i) for i in index) return expr.aggregate.index(index + new_idx)
def map_subscript(self, expr): try: new_idx = self.var_to_new_inames[expr.aggregate.name] except KeyError: return IdentityMapper.map_subscript(self, expr) else: index = expr.index if not isinstance(index, tuple): index = (index, ) index = tuple(self.rec(i) for i in index) self.seen_priv_axis_inames.update(v.name for v in new_idx) new_idx = tuple(v - self.iname_to_lbound[v.name] for v in new_idx) return expr.aggregate.index(index + new_idx)
def map_subscript(self, expr): from pymbolic.primitives import Variable assert isinstance(expr.aggregate, Variable) name = expr.aggregate.name dims = self.scope.dim_map.get(name) if dims is None: return IdentityMapper.map_subscript(self, expr) subscript = expr.index if not isinstance(subscript, tuple): subscript = (subscript, ) if len(dims) != len(subscript): raise TranslationError("inconsistent number of indices " "to '%s'" % name) new_subscript = [] for i in range(len(dims)): if len(dims[i]) == 2: # has an explicit base index base_index, end_index = dims[i] elif len(dims[i]) == 1: base_index = 1 end_index, = dims[i] sub_i = subscript[i] if isinstance(sub_i, Slice): start = sub_i.start if start is None: start = base_index step = sub_i.step if step is None: step = 1 stop = sub_i.stop if stop is None: stop = end_index if step == 1: sub_i = Slice(( start - base_index, # FIXME This is only correct for unit strides stop - base_index + 1, step)) elif step == -1: sub_i = Slice(( start - base_index, # FIXME This is only correct for unit strides stop - base_index - 1, step)) else: # FIXME raise NotImplementedError("Fortran slice processing for " "non-unit strides") else: sub_i = sub_i - base_index new_subscript.append(sub_i) return expr.aggregate[self.rec(tuple(new_subscript))]