prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Keep tighter version constraints on TensorFlow releases
  # Description
  
  As Issue #997 makes it clear that minor releases might as well be major releases for TensorFlow, then it is probably worth keeping tighter version constraints on them and just watching the releases of TensorFlow and TensorFlow Probability to see when we can relax these.
  
  </issue>
  <code>
  [start of setup.py]
  1 from setuptools import setup
  2 
  3 extras_require = {
  4     'shellcomplete': ['click_completion'],
  5     'tensorflow': [
  6         'tensorflow~=2.0',
  7         'tensorflow-probability~=0.10',  # TODO: Temp patch until tfp v0.11
  8     ],
  9     'torch': ['torch~=1.2'],
  10     'jax': ['jax~=0.1,>0.1.51', 'jaxlib~=0.1,>0.1.33'],
  11     'xmlio': ['uproot~=3.6'],  # Future proof against uproot4 API changes
  12     'minuit': ['iminuit~=1.4,>=1.4.3'],  # Use "name" keyword in MINUIT optimizer
  13 }
  14 extras_require['backends'] = sorted(
  15     set(
  16         extras_require['tensorflow']
  17         + extras_require['torch']
  18         + extras_require['jax']
  19         + extras_require['minuit']
  20     )
  21 )
  22 extras_require['contrib'] = sorted(set(['matplotlib']))
  23 extras_require['lint'] = sorted(set(['pyflakes', 'black']))
  24 
  25 extras_require['test'] = sorted(
  26     set(
  27         extras_require['backends']
  28         + extras_require['xmlio']
  29         + extras_require['contrib']
  30         + extras_require['shellcomplete']
  31         + [
  32             'pytest~=3.5',
  33             'pytest-cov>=2.5.1',
  34             'pytest-mock',
  35             'pytest-benchmark[histogram]',
  36             'pytest-console-scripts',
  37             'pytest-mpl',
  38             'pydocstyle',
  39             'coverage>=4.0',  # coveralls
  40             'papermill~=2.0',
  41             'nteract-scrapbook~=0.2',
  42             'jupyter',
  43             'uproot~=3.3',
  44             'graphviz',
  45             'jsonpatch',
  46         ]
  47     )
  48 )
  49 extras_require['docs'] = sorted(
  50     set(
  51         [
  52             'sphinx>=3.1.2',
  53             'sphinxcontrib-bibtex',
  54             'sphinx-click',
  55             'sphinx_rtd_theme',
  56             'nbsphinx',
  57             'ipywidgets',
  58             'sphinx-issues',
  59             'sphinx-copybutton>0.2.9',
  60         ]
  61     )
  62 )
  63 extras_require['develop'] = sorted(
  64     set(
  65         extras_require['docs']
  66         + extras_require['lint']
  67         + extras_require['test']
  68         + ['nbdime', 'bumpversion', 'ipython', 'pre-commit', 'check-manifest', 'twine']
  69     )
  70 )
  71 extras_require['complete'] = sorted(set(sum(extras_require.values(), [])))
  72 
  73 
  74 setup(
  75     extras_require=extras_require,
  76     use_scm_version=lambda: {'local_scheme': lambda version: ''},
  77 )
  78
  [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
  @@ -3,8 +3,8 @@
   extras_require = {
       'shellcomplete': ['click_completion'],
       'tensorflow': [
  -        'tensorflow~=2.0',
  -        'tensorflow-probability~=0.10',  # TODO: Temp patch until tfp v0.11
  +        'tensorflow~=2.2.0',  # TensorFlow minor releases are as volatile as major
  +        'tensorflow-probability~=0.10.0',
       ],
       'torch': ['torch~=1.2'],
       'jax': ['jax~=0.1,>0.1.51', 'jaxlib~=0.1,>0.1.33'],
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -3,8 +3,8 @@\n extras_require = {\n     'shellcomplete': ['click_completion'],\n     'tensorflow': [\n-        'tensorflow~=2.0',\n-        'tensorflow-probability~=0.10',  # TODO: Temp patch until tfp v0.11\n+        'tensorflow~=2.2.0',  # TensorFlow minor releases are as volatile as major\n+        'tensorflow-probability~=0.10.0',\n     ],\n     'torch': ['torch~=1.2'],\n     'jax': ['jax~=0.1,>0.1.51', 'jaxlib~=0.1,>0.1.33'],\n", "issue": "Keep tighter version constraints on TensorFlow releases\n# Description\r\n\r\nAs Issue #997 makes it clear that minor releases might as well be major releases for TensorFlow, then it is probably worth keeping tighter version constraints on them and just watching the releases of TensorFlow and TensorFlow Probability to see when we can relax these.\n", "before_files": [{"content": "from setuptools import setup\n\nextras_require = {\n    'shellcomplete': ['click_completion'],\n    'tensorflow': [\n        'tensorflow~=2.0',\n        'tensorflow-probability~=0.10',  # TODO: Temp patch until tfp v0.11\n    ],\n    'torch': ['torch~=1.2'],\n    'jax': ['jax~=0.1,>0.1.51', 'jaxlib~=0.1,>0.1.33'],\n    'xmlio': ['uproot~=3.6'],  # Future proof against uproot4 API changes\n    'minuit': ['iminuit~=1.4,>=1.4.3'],  # Use \"name\" keyword in MINUIT optimizer\n}\nextras_require['backends'] = sorted(\n    set(\n        extras_require['tensorflow']\n        + extras_require['torch']\n        + extras_require['jax']\n        + extras_require['minuit']\n    )\n)\nextras_require['contrib'] = sorted(set(['matplotlib']))\nextras_require['lint'] = sorted(set(['pyflakes', 'black']))\n\nextras_require['test'] = sorted(\n    set(\n        extras_require['backends']\n        + extras_require['xmlio']\n        + extras_require['contrib']\n        + extras_require['shellcomplete']\n        + [\n            'pytest~=3.5',\n            'pytest-cov>=2.5.1',\n            'pytest-mock',\n            'pytest-benchmark[histogram]',\n            'pytest-console-scripts',\n            'pytest-mpl',\n            'pydocstyle',\n            'coverage>=4.0',  # coveralls\n            'papermill~=2.0',\n            'nteract-scrapbook~=0.2',\n            'jupyter',\n            'uproot~=3.3',\n            'graphviz',\n            'jsonpatch',\n        ]\n    )\n)\nextras_require['docs'] = sorted(\n    set(\n        [\n            'sphinx>=3.1.2',\n            'sphinxcontrib-bibtex',\n            'sphinx-click',\n            'sphinx_rtd_theme',\n            'nbsphinx',\n            'ipywidgets',\n            'sphinx-issues',\n            'sphinx-copybutton>0.2.9',\n        ]\n    )\n)\nextras_require['develop'] = sorted(\n    set(\n        extras_require['docs']\n        + extras_require['lint']\n        + extras_require['test']\n        + ['nbdime', 'bumpversion', 'ipython', 'pre-commit', 'check-manifest', 'twine']\n    )\n)\nextras_require['complete'] = sorted(set(sum(extras_require.values(), [])))\n\n\nsetup(\n    extras_require=extras_require,\n    use_scm_version=lambda: {'local_scheme': lambda version: ''},\n)\n", "path": "setup.py"}]}