<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def remove_column(self, column_name, inplace=False):
 """ Removes the column with the given name from the SFrame. If inplace == False (default) this operation does not modify the current SFrame, returning a new SFrame. If inplace == True, this operation modifies the current SFrame, returning self. Parameters column_name : string The name of the column to remove. inplace : bool, optional. Defaults to False. Whether the SFrame is modified in place. """

        if column_name not in self.column_names():
            raise KeyError('Cannot find column %s' % column_name)
        if inplace:
            self.__is_dirty__ = True
            try:
                with cython_context():
                    if self._is_vertex_frame():
                        assert column_name != '__id', 'Cannot remove \"__id\" column'
                        graph_proxy = self.__graph__.__proxy__.delete_vertex_field(column_name)
                        self.__graph__.__proxy__ = graph_proxy
                    elif self._is_edge_frame():
                        assert column_name != '__src_id', 'Cannot remove \"__src_id\" column'
                        assert column_name != '__dst_id', 'Cannot remove \"__dst_id\" column'
                        graph_proxy = self.__graph__.__proxy__.delete_edge_field(column_name)
                        self.__graph__.__proxy__ = graph_proxy
                return self
            except:
                self.__is_dirty__ = False
                raise
        else:
            return super(GFrame, self).remove_column(column_name, inplace=inplace)