prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  License file in pypi archive
  The pypi source archive isn't including the `LICENSE.txt` file. Would it be possible to add it? It is very helpful when packaging this for Linux distributions. The official python packaging guidelines also say [each package should have one](https://packaging.python.org/guides/distributing-packages-using-setuptools/#license-txt). Thank you!
  Add keywords to setup.py
  Testing with pyroma package showed keywords are missing from setup.py
  
  ```
  willo@macbook ~/g/m/h/hypothesis-python> pyroma .
  ------------------------------
  Checking .
  Found hypothesis
  ------------------------------
  Your package does not have keywords data.
  ------------------------------
  Final rating: 9/10
  Cottage Cheese
  ------------------------------
  ```
  Discussed with @Zac-HD and keywords from the github repo below would be good to use.
  
  python testing fuzzing property-based-testing
  
  </issue>
  <code>
  [start of hypothesis-python/setup.py]
  1 # coding=utf-8
  2 #
  3 # This file is part of Hypothesis, which may be found at
  4 # https://github.com/HypothesisWorks/hypothesis-python
  5 #
  6 # Most of this work is copyright (C) 2013-2018 David R. MacIver
  7 # (david@drmaciver.com), but it contains contributions by others. See
  8 # CONTRIBUTING.rst for a full list of people who may hold copyright, and
  9 # consult the git log if you need to determine who owns an individual
  10 # contribution.
  11 #
  12 # This Source Code Form is subject to the terms of the Mozilla Public License,
  13 # v. 2.0. If a copy of the MPL was not distributed with this file, You can
  14 # obtain one at http://mozilla.org/MPL/2.0/.
  15 #
  16 # END HEADER
  17 
  18 from __future__ import division, print_function, absolute_import
  19 
  20 import os
  21 import sys
  22 import warnings
  23 
  24 import setuptools
  25 
  26 
  27 def local_file(name):
  28     return os.path.relpath(os.path.join(os.path.dirname(__file__), name))
  29 
  30 
  31 SOURCE = local_file('src')
  32 README = local_file('README.rst')
  33 
  34 setuptools_version = tuple(map(int, setuptools.__version__.split('.')[:2]))
  35 
  36 if setuptools_version < (36, 2):
  37     # Warning only - very bad if uploading bdist but fine if installing sdist.
  38     warnings.warn(
  39         'This version of setuptools is too old to correctly store '
  40         'conditional dependencies in binary wheels.  For more info, see:  '
  41         'https://hynek.me/articles/conditional-python-dependencies/'
  42     )
  43 
  44 
  45 # Assignment to placate pyflakes. The actual version is from the exec that
  46 # follows.
  47 __version__ = None
  48 
  49 with open(local_file('src/hypothesis/version.py')) as o:
  50     exec(o.read())
  51 
  52 assert __version__ is not None
  53 
  54 
  55 extras = {
  56     'datetime': ['pytz'],
  57     'pytz': ['pytz'],
  58     'dateutil': ['python-dateutil'],
  59     'fakefactory': ['Faker>=0.7'],
  60     'numpy': ['numpy>=1.9.0'],
  61     'pytest': ['pytest>=3.0'],
  62     # We only support Django versions with upstream support - see
  63     # https://www.djangoproject.com/download/#supported-versions
  64     'django': ['pytz', 'django>=1.11'],
  65 }
  66 
  67 extras['faker'] = extras['fakefactory']
  68 extras['all'] = sorted(sum(extras.values(), []))
  69 
  70 
  71 install_requires = ['attrs>=16.0.0', 'coverage>=4.0']
  72 # Using an environment marker on enum34 makes the dependency condition
  73 # independent of the build environemnt, which is important for wheels.
  74 # https://www.python.org/dev/peps/pep-0345/#environment-markers
  75 if sys.version_info[0] < 3 and setuptools_version < (8, 0):
  76     # Except really old systems, where we give up and install unconditionally
  77     install_requires.append('enum34')
  78 else:
  79     install_requires.append('enum34; python_version=="2.7"')
  80 
  81 
  82 setuptools.setup(
  83     name='hypothesis',
  84     version=__version__,
  85     author='David R. MacIver',
  86     author_email='david@drmaciver.com',
  87     packages=setuptools.find_packages(SOURCE),
  88     package_dir={'': SOURCE},
  89     package_data={'hypothesis': ['py.typed']},
  90     url=(
  91         'https://github.com/HypothesisWorks/hypothesis/'
  92         'tree/master/hypothesis-python'
  93     ),
  94     license='MPL v2',
  95     description='A library for property based testing',
  96     zip_safe=False,
  97     extras_require=extras,
  98     install_requires=install_requires,
  99     python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
  100     classifiers=[
  101         'Development Status :: 5 - Production/Stable',
  102         'Intended Audience :: Developers',
  103         'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)',
  104         'Operating System :: Unix',
  105         'Operating System :: POSIX',
  106         'Operating System :: Microsoft :: Windows',
  107         'Programming Language :: Python',
  108         'Programming Language :: Python :: 2.7',
  109         'Programming Language :: Python :: 3',
  110         'Programming Language :: Python :: 3.4',
  111         'Programming Language :: Python :: 3.5',
  112         'Programming Language :: Python :: 3.6',
  113         'Programming Language :: Python :: 3.7',
  114         'Programming Language :: Python :: Implementation :: CPython',
  115         'Programming Language :: Python :: Implementation :: PyPy',
  116         'Topic :: Software Development :: Testing',
  117         'Framework :: Pytest',
  118     ],
  119     entry_points={
  120         'pytest11': ['hypothesispytest = hypothesis.extra.pytestplugin'],
  121     },
  122     long_description=open(README).read(),
  123 )
  124
  [end of hypothesis-python/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/hypothesis-python/setup.py b/hypothesis-python/setup.py
  --- a/hypothesis-python/setup.py
  +++ b/hypothesis-python/setup.py
  @@ -53,9 +53,9 @@
   
   
   extras = {
  -    'datetime': ['pytz'],
  -    'pytz': ['pytz'],
  -    'dateutil': ['python-dateutil'],
  +    'datetime': ['pytz>=2014.1'],
  +    'pytz': ['pytz>=2014.1'],
  +    'dateutil': ['python-dateutil>=1.4'],
       'fakefactory': ['Faker>=0.7'],
       'numpy': ['numpy>=1.9.0'],
       'pytest': ['pytest>=3.0'],
  @@ -120,4 +120,5 @@
           'pytest11': ['hypothesispytest = hypothesis.extra.pytestplugin'],
       },
       long_description=open(README).read(),
  +    keywords='python testing fuzzing property-based-testing',
   )
  
verification_info: {"golden_diff": "diff --git a/hypothesis-python/setup.py b/hypothesis-python/setup.py\n--- a/hypothesis-python/setup.py\n+++ b/hypothesis-python/setup.py\n@@ -53,9 +53,9 @@\n \n \n extras = {\n-    'datetime': ['pytz'],\n-    'pytz': ['pytz'],\n-    'dateutil': ['python-dateutil'],\n+    'datetime': ['pytz>=2014.1'],\n+    'pytz': ['pytz>=2014.1'],\n+    'dateutil': ['python-dateutil>=1.4'],\n     'fakefactory': ['Faker>=0.7'],\n     'numpy': ['numpy>=1.9.0'],\n     'pytest': ['pytest>=3.0'],\n@@ -120,4 +120,5 @@\n         'pytest11': ['hypothesispytest = hypothesis.extra.pytestplugin'],\n     },\n     long_description=open(README).read(),\n+    keywords='python testing fuzzing property-based-testing',\n )\n", "issue": "License file in pypi archive\nThe pypi source archive isn't including the `LICENSE.txt` file. Would it be possible to add it? It is very helpful when packaging this for Linux distributions. The official python packaging guidelines also say [each package should have one](https://packaging.python.org/guides/distributing-packages-using-setuptools/#license-txt). Thank you!\nAdd keywords to setup.py\nTesting with pyroma package showed keywords are missing from setup.py\r\n\r\n```\r\nwillo@macbook ~/g/m/h/hypothesis-python> pyroma .\r\n------------------------------\r\nChecking .\r\nFound hypothesis\r\n------------------------------\r\nYour package does not have keywords data.\r\n------------------------------\r\nFinal rating: 9/10\r\nCottage Cheese\r\n------------------------------\r\n```\r\nDiscussed with @Zac-HD and keywords from the github repo below would be good to use.\r\n\r\npython testing fuzzing property-based-testing\n", "before_files": [{"content": "# coding=utf-8\n#\n# This file is part of Hypothesis, which may be found at\n# https://github.com/HypothesisWorks/hypothesis-python\n#\n# Most of this work is copyright (C) 2013-2018 David R. MacIver\n# (david@drmaciver.com), but it contains contributions by others. See\n# CONTRIBUTING.rst for a full list of people who may hold copyright, and\n# consult the git log if you need to determine who owns an individual\n# contribution.\n#\n# This Source Code Form is subject to the terms of the Mozilla Public License,\n# v. 2.0. If a copy of the MPL was not distributed with this file, You can\n# obtain one at http://mozilla.org/MPL/2.0/.\n#\n# END HEADER\n\nfrom __future__ import division, print_function, absolute_import\n\nimport os\nimport sys\nimport warnings\n\nimport setuptools\n\n\ndef local_file(name):\n    return os.path.relpath(os.path.join(os.path.dirname(__file__), name))\n\n\nSOURCE = local_file('src')\nREADME = local_file('README.rst')\n\nsetuptools_version = tuple(map(int, setuptools.__version__.split('.')[:2]))\n\nif setuptools_version < (36, 2):\n    # Warning only - very bad if uploading bdist but fine if installing sdist.\n    warnings.warn(\n        'This version of setuptools is too old to correctly store '\n        'conditional dependencies in binary wheels.  For more info, see:  '\n        'https://hynek.me/articles/conditional-python-dependencies/'\n    )\n\n\n# Assignment to placate pyflakes. The actual version is from the exec that\n# follows.\n__version__ = None\n\nwith open(local_file('src/hypothesis/version.py')) as o:\n    exec(o.read())\n\nassert __version__ is not None\n\n\nextras = {\n    'datetime': ['pytz'],\n    'pytz': ['pytz'],\n    'dateutil': ['python-dateutil'],\n    'fakefactory': ['Faker>=0.7'],\n    'numpy': ['numpy>=1.9.0'],\n    'pytest': ['pytest>=3.0'],\n    # We only support Django versions with upstream support - see\n    # https://www.djangoproject.com/download/#supported-versions\n    'django': ['pytz', 'django>=1.11'],\n}\n\nextras['faker'] = extras['fakefactory']\nextras['all'] = sorted(sum(extras.values(), []))\n\n\ninstall_requires = ['attrs>=16.0.0', 'coverage>=4.0']\n# Using an environment marker on enum34 makes the dependency condition\n# independent of the build environemnt, which is important for wheels.\n# https://www.python.org/dev/peps/pep-0345/#environment-markers\nif sys.version_info[0] < 3 and setuptools_version < (8, 0):\n    # Except really old systems, where we give up and install unconditionally\n    install_requires.append('enum34')\nelse:\n    install_requires.append('enum34; python_version==\"2.7\"')\n\n\nsetuptools.setup(\n    name='hypothesis',\n    version=__version__,\n    author='David R. MacIver',\n    author_email='david@drmaciver.com',\n    packages=setuptools.find_packages(SOURCE),\n    package_dir={'': SOURCE},\n    package_data={'hypothesis': ['py.typed']},\n    url=(\n        'https://github.com/HypothesisWorks/hypothesis/'\n        'tree/master/hypothesis-python'\n    ),\n    license='MPL v2',\n    description='A library for property based testing',\n    zip_safe=False,\n    extras_require=extras,\n    install_requires=install_requires,\n    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',\n    classifiers=[\n        'Development Status :: 5 - Production/Stable',\n        'Intended Audience :: Developers',\n        'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)',\n        'Operating System :: Unix',\n        'Operating System :: POSIX',\n        'Operating System :: Microsoft :: Windows',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 2.7',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.4',\n        'Programming Language :: Python :: 3.5',\n        'Programming Language :: Python :: 3.6',\n        'Programming Language :: Python :: 3.7',\n        'Programming Language :: Python :: Implementation :: CPython',\n        'Programming Language :: Python :: Implementation :: PyPy',\n        'Topic :: Software Development :: Testing',\n        'Framework :: Pytest',\n    ],\n    entry_points={\n        'pytest11': ['hypothesispytest = hypothesis.extra.pytestplugin'],\n    },\n    long_description=open(README).read(),\n)\n", "path": "hypothesis-python/setup.py"}]}