prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Revisar los `:role:!key`
  Cuando hicimos la migración #27 aceptamos `:role:!key` como `:role:key`.
  
  La única diferencia entre ellos es que el que tiene `!` no hace un link a la referencia.
  
  Tenemos que revisar que queden consistentes nuevamente.
  
  </issue>
  <code>
  [start of conf.py]
  1 # Sphinx configuration file.
  2 #
  3 #  - import original configurations from cpython/Doc/conf.py
  4 #  - append the path considering the cpython submodule is at ./cpython
  5 #  - create the symbolic links under ./cpython/locale/es/LC_MESSAGES
  6 #  - make the build to work under Read the Docs
  7 #
  8 # The git submodule was created using this Stack Overflow answer
  9 # to fetch only the commit that I needed and avoid clonning the whole history
  10 # https://stackoverflow.com/a/27445058
  11 #
  12 # This can be built locally using `sphinx-build` by running
  13 #
  14 #   $ sphinx-build -b html -n -d _build/doctrees -D language=es . _build/html
  15 
  16 import sys, os, time
  17 sys.path.append(os.path.abspath('cpython/Doc/tools/extensions'))
  18 sys.path.append(os.path.abspath('cpython/Doc/includes'))
  19 
  20 # Import all the Sphinx settings from cpython
  21 sys.path.append(os.path.abspath('cpython/Doc'))
  22 from conf import *
  23 
  24 # Call patchlevel with the proper path to get the version from
  25 # instead of hardcoding it
  26 import patchlevel
  27 version, release = patchlevel.get_header_version_info(os.path.abspath('cpython/Doc'))
  28 
  29 project = 'Python en Español'
  30 copyright = '2001-%s, Python Software Foundation' % time.strftime('%Y')
  31 
  32 html_theme_path = ['cpython/Doc/tools']
  33 templates_path = ['cpython/Doc/tools/templates']
  34 html_static_path = ['cpython/Doc/tools/static']
  35 
  36 os.system('mkdir -p cpython/locales/es/')
  37 os.system('ln -nfs `pwd` cpython/locales/es/LC_MESSAGES')
  38 
  39 
  40 if not os.environ.get('SPHINX_GETTEXT') == 'True':
  41     # Override all the files from ``.overrides`` directory
  42     import glob
  43     for root, dirs, files in os.walk('.overrides'):
  44         for fname in files:
  45             if fname == 'README.rst' and root == '.overrides':
  46                 continue
  47             destroot = root.replace('.overrides', '').lstrip('/')
  48             outputdir = os.path.join(
  49                 'cpython',
  50                 'Doc',
  51                 destroot,
  52                 fname,
  53             )
  54             os.system(f'ln -nfs `pwd`/{root}/{fname} {outputdir}')
  55 
  56 gettext_compact = False
  57 locale_dirs = ['../locales', 'cpython/locales']  # relative to the sourcedir
  58 
  59 
  60 # NOTE: Read the Docs does not support "multi document output".
  61 # So, we put all the documentation as a single file for now.
  62 _stdauthor = r'Guido van Rossum\\and the Python development team'
  63 latex_documents = [
  64     ('contents', 'python-docs-es.tex', u'Documentación de Python en Español',
  65      _stdauthor, 'manual'),
  66 ]
  67 
  68 def setup(app):
  69 
  70     def add_contributing_banner(app, doctree):
  71         """
  72         Insert a banner at the top of the index.
  73 
  74         This way, we can easily communicate people to help with the translation,
  75         pointing them to different resources.
  76         """
  77 
  78         if app.builder.format != 'html':
  79             # Do not include the banner when building with other formats
  80             # (this is useful when using -b gettext)
  81             return
  82 
  83         from docutils import nodes, core
  84 
  85         message = '¡Ayúdanos a traducir la documentación oficial de Python al Español! ' \
  86         f'Puedes encontrar más información en `Como contribuir </es/{version}/CONTRIBUTING.html>`_.  ' \
  87         'Ayuda a acercar Python a más personas de habla hispana.'
  88 
  89         paragraph = core.publish_doctree(message)[0]
  90         banner = nodes.warning(ids=['contributing-banner'])
  91         banner.append(paragraph)
  92 
  93         for document in doctree.traverse(nodes.document):
  94             document.insert(0, banner)
  95 
  96     # Change the sourcedir programmatically because Read the Docs always call it with `.`
  97     app.srcdir = 'cpython/Doc'
  98 
  99     app.connect('doctree-read', add_contributing_banner)
  100
  [end of conf.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/conf.py b/conf.py
  --- a/conf.py
  +++ b/conf.py
  @@ -11,7 +11,7 @@
   #
   # This can be built locally using `sphinx-build` by running
   #
  -#   $ sphinx-build -b html -n -d _build/doctrees -D language=es . _build/html
  +#   $ sphinx-build -b html -d _build/doctrees -D language=es . _build/html
   
   import sys, os, time
   sys.path.append(os.path.abspath('cpython/Doc/tools/extensions'))
  @@ -37,6 +37,12 @@
   os.system('ln -nfs `pwd` cpython/locales/es/LC_MESSAGES')
   
   
  +exclude_patterns = [
  +    # This file is not included and it not marked as :orphan:
  +    'distutils/_setuptools_disclaimer.rst',
  +    'README.rst',
  +]
  +
   if not os.environ.get('SPHINX_GETTEXT') == 'True':
       # Override all the files from ``.overrides`` directory
       import glob
  
verification_info: {"golden_diff": "diff --git a/conf.py b/conf.py\n--- a/conf.py\n+++ b/conf.py\n@@ -11,7 +11,7 @@\n #\n # This can be built locally using `sphinx-build` by running\n #\n-#   $ sphinx-build -b html -n -d _build/doctrees -D language=es . _build/html\n+#   $ sphinx-build -b html -d _build/doctrees -D language=es . _build/html\n \n import sys, os, time\n sys.path.append(os.path.abspath('cpython/Doc/tools/extensions'))\n@@ -37,6 +37,12 @@\n os.system('ln -nfs `pwd` cpython/locales/es/LC_MESSAGES')\n \n \n+exclude_patterns = [\n+    # This file is not included and it not marked as :orphan:\n+    'distutils/_setuptools_disclaimer.rst',\n+    'README.rst',\n+]\n+\n if not os.environ.get('SPHINX_GETTEXT') == 'True':\n     # Override all the files from ``.overrides`` directory\n     import glob\n", "issue": "Revisar los `:role:!key`\nCuando hicimos la migraci\u00f3n #27 aceptamos `:role:!key` como `:role:key`.\r\n\r\nLa \u00fanica diferencia entre ellos es que el que tiene `!` no hace un link a la referencia.\r\n\r\nTenemos que revisar que queden consistentes nuevamente.\n", "before_files": [{"content": "# Sphinx configuration file.\n#\n#  - import original configurations from cpython/Doc/conf.py\n#  - append the path considering the cpython submodule is at ./cpython\n#  - create the symbolic links under ./cpython/locale/es/LC_MESSAGES\n#  - make the build to work under Read the Docs\n#\n# The git submodule was created using this Stack Overflow answer\n# to fetch only the commit that I needed and avoid clonning the whole history\n# https://stackoverflow.com/a/27445058\n#\n# This can be built locally using `sphinx-build` by running\n#\n#   $ sphinx-build -b html -n -d _build/doctrees -D language=es . _build/html\n\nimport sys, os, time\nsys.path.append(os.path.abspath('cpython/Doc/tools/extensions'))\nsys.path.append(os.path.abspath('cpython/Doc/includes'))\n\n# Import all the Sphinx settings from cpython\nsys.path.append(os.path.abspath('cpython/Doc'))\nfrom conf import *\n\n# Call patchlevel with the proper path to get the version from\n# instead of hardcoding it\nimport patchlevel\nversion, release = patchlevel.get_header_version_info(os.path.abspath('cpython/Doc'))\n\nproject = 'Python en Espa\u00f1ol'\ncopyright = '2001-%s, Python Software Foundation' % time.strftime('%Y')\n\nhtml_theme_path = ['cpython/Doc/tools']\ntemplates_path = ['cpython/Doc/tools/templates']\nhtml_static_path = ['cpython/Doc/tools/static']\n\nos.system('mkdir -p cpython/locales/es/')\nos.system('ln -nfs `pwd` cpython/locales/es/LC_MESSAGES')\n\n\nif not os.environ.get('SPHINX_GETTEXT') == 'True':\n    # Override all the files from ``.overrides`` directory\n    import glob\n    for root, dirs, files in os.walk('.overrides'):\n        for fname in files:\n            if fname == 'README.rst' and root == '.overrides':\n                continue\n            destroot = root.replace('.overrides', '').lstrip('/')\n            outputdir = os.path.join(\n                'cpython',\n                'Doc',\n                destroot,\n                fname,\n            )\n            os.system(f'ln -nfs `pwd`/{root}/{fname} {outputdir}')\n\ngettext_compact = False\nlocale_dirs = ['../locales', 'cpython/locales']  # relative to the sourcedir\n\n\n# NOTE: Read the Docs does not support \"multi document output\".\n# So, we put all the documentation as a single file for now.\n_stdauthor = r'Guido van Rossum\\\\and the Python development team'\nlatex_documents = [\n    ('contents', 'python-docs-es.tex', u'Documentaci\u00f3n de Python en Espa\u00f1ol',\n     _stdauthor, 'manual'),\n]\n\ndef setup(app):\n\n    def add_contributing_banner(app, doctree):\n        \"\"\"\n        Insert a banner at the top of the index.\n\n        This way, we can easily communicate people to help with the translation,\n        pointing them to different resources.\n        \"\"\"\n\n        if app.builder.format != 'html':\n            # Do not include the banner when building with other formats\n            # (this is useful when using -b gettext)\n            return\n\n        from docutils import nodes, core\n\n        message = '\u00a1Ay\u00fadanos a traducir la documentaci\u00f3n oficial de Python al Espa\u00f1ol! ' \\\n        f'Puedes encontrar m\u00e1s informaci\u00f3n en `Como contribuir </es/{version}/CONTRIBUTING.html>`_.  ' \\\n        'Ayuda a acercar Python a m\u00e1s personas de habla hispana.'\n\n        paragraph = core.publish_doctree(message)[0]\n        banner = nodes.warning(ids=['contributing-banner'])\n        banner.append(paragraph)\n\n        for document in doctree.traverse(nodes.document):\n            document.insert(0, banner)\n\n    # Change the sourcedir programmatically because Read the Docs always call it with `.`\n    app.srcdir = 'cpython/Doc'\n\n    app.connect('doctree-read', add_contributing_banner)\n", "path": "conf.py"}]}