<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def reset(self, commit='HEAD', index=True, working_tree=False, paths=None, **kwargs):
 """Reset our HEAD to the given commit optionally synchronizing the index and working tree. The reference we refer to will be set to commit as well. :param commit: Commit object, Reference Object or string identifying a revision we should reset HEAD to. :param index: If True, the index will be set to match the given commit. Otherwise it will not be touched. :param working_tree: If True, the working tree will be forcefully adjusted to match the given commit, possibly overwriting uncommitted changes without warning. If working_tree is True, index must be true as well :param paths: Single path or list of paths relative to the git root directory that are to be reset. This allows to partially reset individual files. :param kwargs: Additional arguments passed to git-reset. :return: self"""

        mode = "--soft"
        if index:
            mode = "--mixed"

            # it appears, some git-versions declare mixed and paths deprecated
            # see http://github.com/Byron/GitPython/issues#issue/2
            if paths:
                mode = None
            # END special case
        # END handle index

        if working_tree:
            mode = "--hard"
            if not index:
                raise ValueError("Cannot reset the working tree if the index is not reset as well")

        # END working tree handling

        try:
            self.repo.git.reset(mode, commit, '--', paths, **kwargs)
        except GitCommandError as e:
            # git nowadays may use 1 as status to indicate there are still unstaged
            # modifications after the reset
            if e.status != 1:
                raise
        # END handle exception

        return self