code: def index(self, row, column, parent=None):
          
          if parent is None:
              parent = QtCore.QModelIndex()
          if not self.hasIndex(row, column, parent):
              return QtCore.QModelIndex()
  
          if parent.isValid():
              parentItem = parent.internalPointer()
          else:
              parentItem = self._root
  
          try:
              childItem = parentItem.child(row)
              return self.createIndex(row, column, childItem)
          except IndexError:
              return QtCore.QModelIndex()
docs: Return the index of the item in the model specified by the given row,
          column and parent index.
  
          :param row: the row of the item
          :type row: int
          :param column: the column for the item
          :type column: int
          :param parent: the parent index
          :type parent: :class:`QtCore.QModelIndex`:
          :returns: the index of the item
          :rtype: :class:`QtCore.QModelIndex`
          :raises: None