def _mutate_index_dim(self, gid, ctype, node, axis=0): info = cast.CName('cly_%s_info' % gid, ast.Load(), ctype.array_info) right = cast.CAttribute(info, 's%s' % hex(axis + 4)[2:], ast.Load(), derefrence(ctype.array_info)) index = cast.CBinOp(node, ast.Mult(), right, node.ctype) #FIXME: cast type return index
def _mutate_index(self, gid, ctype, node): info = cast.CName('cly_%s_info' % gid, ast.Load(), ctype.array_info) left = cast.CAttribute(info, 's7', ast.Load(), derefrence(ctype.array_info)) if isinstance(node.value, cast.CList): if len(node.value.elts) > ctype.ndim: raise cast.CError( node, IndexError, "invalid index. Array is an %i dimentional array (got %i indices)" % (ctype.ndim, len(node.value.elts))) elif len(node.value.elts) < ctype.ndim: raise cast.CError( node, NotImplementedError, "Slicing not supported yet. Array is an %i dimentional array (got %i indices)" % (ctype.ndim, len(node.value.elts))) for axis, elt in enumerate(node.value.elts): index = self._mutate_index_dim(gid, ctype, elt, axis) left = cast.CBinOp(left, ast.Add(), index, node.value.ctype) #FIXME: cast type else: if ctype.ndim not in [1, None]: if ctype.ndim is None: raise cast.CError(node, NotImplementedError, "Can not slice a flat array") raise cast.CError( node, NotImplementedError, "Slicing not supported yet. Array is an %i dimentional array (got 1 index)" % (ctype.ndim, )) index = self._mutate_index_dim(gid, ctype, node.value, 0) left = cast.CBinOp(left, ast.Add(), index, node.value.ctype) #FIXME: cast type return left
def _mutate_index(self, gid, ctype, node): info = cast.CName('cly_%s_info' % gid, ast.Load(), ctype.array_info) left = cast.CAttribute(info, 's7', ast.Load(), derefrence(ctype.array_info)) if isinstance(node.value, cast.CList): if len(node.value.elts) > ctype.ndim: raise cast.CError(node, IndexError, "invalid index. Array is an %i dimentional array (got %i indices)" % (ctype.ndim, len(node.value.elts))) elif len(node.value.elts) < ctype.ndim: raise cast.CError(node, NotImplementedError, "Slicing not supported yet. Array is an %i dimentional array (got %i indices)" % (ctype.ndim, len(node.value.elts))) for axis, elt in enumerate(node.value.elts): index = self._mutate_index_dim(gid, ctype, elt, axis) left = cast.CBinOp(left, ast.Add(), index, node.value.ctype) #FIXME: cast type else: if ctype.ndim not in [1, None]: if ctype.ndim is None: raise cast.CError(node, NotImplementedError, "Can not slice a flat array") raise cast.CError(node, NotImplementedError, "Slicing not supported yet. Array is an %i dimentional array (got 1 index)" % (ctype.ndim,)) index = self._mutate_index_dim(gid, ctype, node.value, 0) left = cast.CBinOp(left, ast.Add(), index, node.value.ctype) #FIXME: cast type return left