示例#1
0
 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
示例#2
0
    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
示例#3
0
 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
示例#4
0
 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