prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Add an 'extras_require' entry to setup.py for watchdog
  The reloader feature has an optional dependency on the watchdog package:
  http://werkzeug.pocoo.org/docs/0.11/serving/#reloader
  
  Whilst people can just add 'watchdog' to their requirements files, it's clearer to specifically add an `extras_require` entry for it to setup.py, which allows people to instead add eg `Werkzeug[watchdog]` to their requirements file, which more clearly shows why the dependency is required.
  
  In addition, should Werkzeug ever need a specific version of watchdog in the future (eg due to backwards incompatibilities), then the `extras_require` entry could be updated with a version range, causing zero breakage for people who'd used the `Werkzeug[watchdog]` form in their requirements file.
  
  I'll open a PR for this shortly :-)
  
  
  </issue>
  <code>
  [start of setup.py]
  1 # -*- coding: utf-8 -*-
  2 """
  3 Werkzeug
  4 ========
  5 
  6 Werkzeug started as simple collection of various utilities for WSGI
  7 applications and has become one of the most advanced WSGI utility
  8 modules.  It includes a powerful debugger, full featured request and
  9 response objects, HTTP utilities to handle entity tags, cache control
  10 headers, HTTP dates, cookie handling, file uploads, a powerful URL
  11 routing system and a bunch of community contributed addon modules.
  12 
  13 Werkzeug is unicode aware and doesn't enforce a specific template
  14 engine, database adapter or anything else.  It doesn't even enforce
  15 a specific way of handling requests and leaves all that up to the
  16 developer. It's most useful for end user applications which should work
  17 on as many server environments as possible (such as blogs, wikis,
  18 bulletin boards, etc.).
  19 
  20 Details and example applications are available on the
  21 `Werkzeug website <http://werkzeug.pocoo.org/>`_.
  22 
  23 
  24 Features
  25 --------
  26 
  27 -   unicode awareness
  28 
  29 -   request and response objects
  30 
  31 -   various utility functions for dealing with HTTP headers such as
  32     `Accept` and `Cache-Control` headers.
  33 
  34 -   thread local objects with proper cleanup at request end
  35 
  36 -   an interactive debugger
  37 
  38 -   A simple WSGI server with support for threading and forking
  39     with an automatic reloader.
  40 
  41 -   a flexible URL routing system with REST support.
  42 
  43 -   fully WSGI compatible
  44 
  45 
  46 Development Version
  47 -------------------
  48 
  49 The Werkzeug development version can be installed by cloning the git
  50 repository from `github`_::
  51 
  52     git clone git@github.com:pallets/werkzeug.git
  53 
  54 .. _github: http://github.com/pallets/werkzeug
  55 """
  56 import ast
  57 import re
  58 try:
  59     from setuptools import setup, Command
  60 except ImportError:
  61     from distutils.core import setup, Command
  62 
  63 
  64 _version_re = re.compile(r'__version__\s+=\s+(.*)')
  65 
  66 with open('werkzeug/__init__.py', 'rb') as f:
  67     version = str(ast.literal_eval(_version_re.search(
  68         f.read().decode('utf-8')).group(1)))
  69 
  70 
  71 class TestCommand(Command):
  72     user_options = []
  73 
  74     def initialize_options(self):
  75         pass
  76 
  77     def finalize_options(self):
  78         pass
  79 
  80     def run(self):
  81         import pytest
  82         pytest.cmdline.main(args=[])
  83 
  84 
  85 setup(
  86     name='Werkzeug',
  87     version=version,
  88     url='http://werkzeug.pocoo.org/',
  89     license='BSD',
  90     author='Armin Ronacher',
  91     author_email='armin.ronacher@active-4.com',
  92     description='The Swiss Army knife of Python web development',
  93     long_description=__doc__,
  94     classifiers=[
  95         'Development Status :: 5 - Production/Stable',
  96         'Environment :: Web Environment',
  97         'Intended Audience :: Developers',
  98         'License :: OSI Approved :: BSD License',
  99         'Operating System :: OS Independent',
  100         'Programming Language :: Python',
  101         'Programming Language :: Python :: 2',
  102         'Programming Language :: Python :: 2.6',
  103         'Programming Language :: Python :: 2.7',
  104         'Programming Language :: Python :: 3',
  105         'Programming Language :: Python :: 3.3',
  106         'Programming Language :: Python :: 3.4',
  107         'Programming Language :: Python :: 3.5',
  108         'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
  109         'Topic :: Software Development :: Libraries :: Python Modules'
  110     ],
  111     packages=['werkzeug', 'werkzeug.debug', 'werkzeug.contrib'],
  112     cmdclass=dict(test=TestCommand),
  113     include_package_data=True,
  114     zip_safe=False,
  115     platforms='any'
  116 )
  117
  [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
  @@ -109,6 +109,9 @@
           'Topic :: Software Development :: Libraries :: Python Modules'
       ],
       packages=['werkzeug', 'werkzeug.debug', 'werkzeug.contrib'],
  +    extras_require={
  +        'watchdog': ['watchdog'],
  +    },
       cmdclass=dict(test=TestCommand),
       include_package_data=True,
       zip_safe=False,
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -109,6 +109,9 @@\n         'Topic :: Software Development :: Libraries :: Python Modules'\n     ],\n     packages=['werkzeug', 'werkzeug.debug', 'werkzeug.contrib'],\n+    extras_require={\n+        'watchdog': ['watchdog'],\n+    },\n     cmdclass=dict(test=TestCommand),\n     include_package_data=True,\n     zip_safe=False,\n", "issue": "Add an 'extras_require' entry to setup.py for watchdog\nThe reloader feature has an optional dependency on the watchdog package:\nhttp://werkzeug.pocoo.org/docs/0.11/serving/#reloader\n\nWhilst people can just add 'watchdog' to their requirements files, it's clearer to specifically add an `extras_require` entry for it to setup.py, which allows people to instead add eg `Werkzeug[watchdog]` to their requirements file, which more clearly shows why the dependency is required.\n\nIn addition, should Werkzeug ever need a specific version of watchdog in the future (eg due to backwards incompatibilities), then the `extras_require` entry could be updated with a version range, causing zero breakage for people who'd used the `Werkzeug[watchdog]` form in their requirements file.\n\nI'll open a PR for this shortly :-)\n\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\"\"\"\nWerkzeug\n========\n\nWerkzeug started as simple collection of various utilities for WSGI\napplications and has become one of the most advanced WSGI utility\nmodules.  It includes a powerful debugger, full featured request and\nresponse objects, HTTP utilities to handle entity tags, cache control\nheaders, HTTP dates, cookie handling, file uploads, a powerful URL\nrouting system and a bunch of community contributed addon modules.\n\nWerkzeug is unicode aware and doesn't enforce a specific template\nengine, database adapter or anything else.  It doesn't even enforce\na specific way of handling requests and leaves all that up to the\ndeveloper. It's most useful for end user applications which should work\non as many server environments as possible (such as blogs, wikis,\nbulletin boards, etc.).\n\nDetails and example applications are available on the\n`Werkzeug website <http://werkzeug.pocoo.org/>`_.\n\n\nFeatures\n--------\n\n-   unicode awareness\n\n-   request and response objects\n\n-   various utility functions for dealing with HTTP headers such as\n    `Accept` and `Cache-Control` headers.\n\n-   thread local objects with proper cleanup at request end\n\n-   an interactive debugger\n\n-   A simple WSGI server with support for threading and forking\n    with an automatic reloader.\n\n-   a flexible URL routing system with REST support.\n\n-   fully WSGI compatible\n\n\nDevelopment Version\n-------------------\n\nThe Werkzeug development version can be installed by cloning the git\nrepository from `github`_::\n\n    git clone git@github.com:pallets/werkzeug.git\n\n.. _github: http://github.com/pallets/werkzeug\n\"\"\"\nimport ast\nimport re\ntry:\n    from setuptools import setup, Command\nexcept ImportError:\n    from distutils.core import setup, Command\n\n\n_version_re = re.compile(r'__version__\\s+=\\s+(.*)')\n\nwith open('werkzeug/__init__.py', 'rb') as f:\n    version = str(ast.literal_eval(_version_re.search(\n        f.read().decode('utf-8')).group(1)))\n\n\nclass TestCommand(Command):\n    user_options = []\n\n    def initialize_options(self):\n        pass\n\n    def finalize_options(self):\n        pass\n\n    def run(self):\n        import pytest\n        pytest.cmdline.main(args=[])\n\n\nsetup(\n    name='Werkzeug',\n    version=version,\n    url='http://werkzeug.pocoo.org/',\n    license='BSD',\n    author='Armin Ronacher',\n    author_email='armin.ronacher@active-4.com',\n    description='The Swiss Army knife of Python web development',\n    long_description=__doc__,\n    classifiers=[\n        'Development Status :: 5 - Production/Stable',\n        'Environment :: Web Environment',\n        'Intended Audience :: Developers',\n        'License :: OSI Approved :: BSD License',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 2',\n        'Programming Language :: Python :: 2.6',\n        'Programming Language :: Python :: 2.7',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.3',\n        'Programming Language :: Python :: 3.4',\n        'Programming Language :: Python :: 3.5',\n        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',\n        'Topic :: Software Development :: Libraries :: Python Modules'\n    ],\n    packages=['werkzeug', 'werkzeug.debug', 'werkzeug.contrib'],\n    cmdclass=dict(test=TestCommand),\n    include_package_data=True,\n    zip_safe=False,\n    platforms='any'\n)\n", "path": "setup.py"}]}