prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  [Docs] Example may accidentally be encouraging users to write invalid `pyproject.toml` files
  ### Description
  
  Hi guys, first of all thank you for the amazing project (always good to remember).
  
  While I was working on adding support for PEP 621 to setuptools, I noticed a series of users having problems with invalid `pyproject.toml` files. The common pattern seem to be a almost empty `[project]` table with only a `requires-python` field set, which is invalid according to PEP 621.
  
  It took me some time to find the reason for this behaviour but I think it comes from:
  https://cibuildwheel.readthedocs.io/en/stable/options/#requires-python
  
  I suspect that the example and notes about the preferred way of setting the config has been encouraging users that are unaware of PEP 621 to write technically invalid `pyproject.toml` files.
  
  Please note that this issue is not necessarily related to setuptools itself.
  The existence of the `[project]` table in the `pyproject.toml` allows (according to the standard) the installer/builder/consumer program to treat the package differently (specially regarding `dynamic`).
  
  I think it would be nice to at least add a note about this so users became aware of the implications of adding a `[project]` table.
  
  ### Build log
  
  _No response_
  
  ### CI config
  
  _No response_
  
  </issue>
  <code>
  [start of setup.py]
  1 from setuptools import setup
  2 
  3 extras = {
  4     "docs": [
  5         "mkdocs-include-markdown-plugin==2.8.0",
  6         "mkdocs==1.0.4",
  7         "pymdown-extensions",
  8         "mkdocs-macros-plugin",
  9     ],
  10     "test": [
  11         "jinja2",
  12         "pytest>=6",
  13         "pytest-timeout",
  14         "pytest-xdist",
  15     ],
  16     "bin": [
  17         "click",
  18         "ghapi",
  19         "pip-tools",
  20         "pygithub",
  21         "pyyaml",
  22         "requests",
  23         "rich>=9.6",
  24         "packaging>=21.0",
  25     ],
  26     "mypy": [
  27         "mypy>=0.901",
  28         "types-jinja2",
  29         "types-certifi",
  30         "types-toml",
  31         "types-jinja2",
  32         "types-pyyaml",
  33         "types-click",
  34         "types-requests",
  35     ],
  36 }
  37 
  38 extras["dev"] = [
  39     *extras["mypy"],
  40     *extras["test"],
  41     *extras["bin"],
  42 ]
  43 
  44 extras["all"] = sum(extras.values(), [])
  45 
  46 setup(extras_require=extras)
  47
  [end of setup.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/setup.py b/setup.py
  --- a/setup.py
  +++ b/setup.py
  @@ -4,6 +4,7 @@
       "docs": [
           "mkdocs-include-markdown-plugin==2.8.0",
           "mkdocs==1.0.4",
  +        "jinja2==3.0.3",
           "pymdown-extensions",
           "mkdocs-macros-plugin",
       ],
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -4,6 +4,7 @@\n     \"docs\": [\n         \"mkdocs-include-markdown-plugin==2.8.0\",\n         \"mkdocs==1.0.4\",\n+        \"jinja2==3.0.3\",\n         \"pymdown-extensions\",\n         \"mkdocs-macros-plugin\",\n     ],\n", "issue": "[Docs] Example may accidentally be encouraging users to write invalid `pyproject.toml` files\n### Description\r\n\r\nHi guys, first of all thank you for the amazing project (always good to remember).\r\n\r\nWhile I was working on adding support for PEP 621 to setuptools, I noticed a series of users having problems with invalid `pyproject.toml` files. The common pattern seem to be a almost empty `[project]` table with only a `requires-python` field set, which is invalid according to PEP 621.\r\n\r\nIt took me some time to find the reason for this behaviour but I think it comes from:\r\nhttps://cibuildwheel.readthedocs.io/en/stable/options/#requires-python\r\n\r\nI suspect that the example and notes about the preferred way of setting the config has been encouraging users that are unaware of PEP 621 to write technically invalid `pyproject.toml` files.\r\n\r\nPlease note that this issue is not necessarily related to setuptools itself.\r\nThe existence of the `[project]` table in the `pyproject.toml` allows (according to the standard) the installer/builder/consumer program to treat the package differently (specially regarding `dynamic`).\r\n\r\nI think it would be nice to at least add a note about this so users became aware of the implications of adding a `[project]` table.\r\n\r\n### Build log\r\n\r\n_No response_\r\n\r\n### CI config\r\n\r\n_No response_\n", "before_files": [{"content": "from setuptools import setup\n\nextras = {\n    \"docs\": [\n        \"mkdocs-include-markdown-plugin==2.8.0\",\n        \"mkdocs==1.0.4\",\n        \"pymdown-extensions\",\n        \"mkdocs-macros-plugin\",\n    ],\n    \"test\": [\n        \"jinja2\",\n        \"pytest>=6\",\n        \"pytest-timeout\",\n        \"pytest-xdist\",\n    ],\n    \"bin\": [\n        \"click\",\n        \"ghapi\",\n        \"pip-tools\",\n        \"pygithub\",\n        \"pyyaml\",\n        \"requests\",\n        \"rich>=9.6\",\n        \"packaging>=21.0\",\n    ],\n    \"mypy\": [\n        \"mypy>=0.901\",\n        \"types-jinja2\",\n        \"types-certifi\",\n        \"types-toml\",\n        \"types-jinja2\",\n        \"types-pyyaml\",\n        \"types-click\",\n        \"types-requests\",\n    ],\n}\n\nextras[\"dev\"] = [\n    *extras[\"mypy\"],\n    *extras[\"test\"],\n    *extras[\"bin\"],\n]\n\nextras[\"all\"] = sum(extras.values(), [])\n\nsetup(extras_require=extras)\n", "path": "setup.py"}]}