environment/lib/python2.7/site-packages/IPython/frontend/qt/console/completion_html.py
def _select_index(self, row, col):
        """Change the selection index, and make sure it stays in the right range

        A little more complicated than just dooing modulo the number of row columns
        to be sure to cycle through all element.

        horizontaly, the element are maped like this :
        to r <-- a b c d e f --> to g
        to f <-- g h i j k l --> to m
        to l <-- m n o p q r --> to a

        and vertically
        a d g j m p
        b e h k n q
        c f i l o r
        """

        nr, nc = self._size
        nr = nr-1
        nc = nc-1

        # case 1
        if (row > nr and col >= nc) or (row >= nr and col > nc):
            self._select_index(0, 0)
        # case 2
        elif (row <= 0 and col < 0) or  (row < 0 and col <= 0):
            self._select_index(nr, nc)
        # case 3
        elif row > nr :
            self._select_index(0, col+1)
        # case 4
        elif row < 0 :
            self._select_index(nr, col-1)
        # case 5
        elif col > nc :
            self._select_index(row+1, 0)
        # case 6
        elif col < 0 :
            self._select_index(row-1, nc)
        elif 0 <= row and row <= nr and 0 <= col and col <= nc :
            self._index = (row, col)
        else :
            raise NotImplementedError("you'r trying to go where no completion\
                           have gone before : %d:%d (%d:%d)"%(row, col, nr, nc) )
def _select_index(self, row, col):
        nr, nc = self._size
        nr = nr-1
        nc = nc-1

        # case 1
        if (row > nr and col >= nc) or (row >= nr and col > nc):
            self._select_index(0, 0)
        # case 2
        elif (row <= 0 and col < 0) or  (row < 0 and col <= 0):
            self._select_index(nr, nc)
        # case 3
        elif row > nr :
            self._select_index(0, col+1)
        # case 4
        elif row < 0 :
            self._select_index(nr, col-1)
        # case 5
        elif col > nc :
            self._select_index(row+1, 0)
        # case 6
        elif col < 0 :
            self._select_index(row-1, nc)
        elif 0 <= row and row <= nr and 0 <= col and col <= nc :
            self._index = (row, col)
        else :
            raise NotImplementedError("you'r trying to go where no completion\
                           have gone before : %d:%d (%d:%d)"%(row, col, nr, nc) )
def _select_index ( self , row , col ) : nr , nc = self . _size nr = nr - 1 nc = nc - 1 # case 1 if ( row > nr and col >= nc ) or ( row >= nr and col > nc ) : self . _select_index ( 0 , 0 ) # case 2 elif ( row <= 0 and col < 0 ) or ( row < 0 and col <= 0 ) : self . _select_index ( nr , nc ) # case 3 elif row > nr : self . _select_index ( 0 , col + 1 ) # case 4 elif row < 0 : self . _select_index ( nr , col - 1 ) # case 5 elif col > nc : self . _select_index ( row + 1 , 0 ) # case 6 elif col < 0 : self . _select_index ( row - 1 , nc ) elif 0 <= row and row <= nr and 0 <= col and col <= nc : self . _index = ( row , col ) else : raise NotImplementedError ( "you'r trying to go where no completion\
                           have gone before : %d:%d (%d:%d)" % ( row , col , nr , nc ) )
Change the selection index, and make sure it stays in the right range

        A little more complicated than just dooing modulo the number of row columns
        to be sure to cycle through all element.

        horizontaly, the element are maped like this :
        to r <-- a b c d e f --> to g
        to f <-- g h i j k l --> to m
        to l <-- m n o p q r --> to a

        and vertically
        a d g j m p
        b e h k n q
        c f i l o r
Change the selection index and make sure it stays in the right range