prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Add Markdown as an (optional) dependency
  Since its inception, this project has taken the collective position that since not everyone uses Markdown, the `markdown` package should not be a dependency of the project and should instead be manually installed by users who want to use Markdown.
  
  On the other hand, the `docutils` package that parses reStructuredText markup has always been a dependency. Particularly given Markdown's widespread popularity, I cannot come up with a compelling argument to support the continuation of this discrepancy.
  
  This project is littered with issues caused by environments with missing `markdown` packages. Many folks have encountered frustration when trying to build their Markdown-content sites, only to be met with an (often inscrutable) error message. And that's just the folks who have taken the time to file issues! Imagine how many threw up their hands and just moved on to another solution…
  
  Adding Markdown as a dependency would have significant benefits, including simplifying installation instructions, reducing frustration, and minimizing support request load. So to take another approach at this topic… What are the reasons for *not* adding Markdown as a dependency, and do you think they are sufficiently important to out-weigh the concerns raised above?
  
  </issue>
  <code>
  [start of setup.py]
  1 #!/usr/bin/env python
  2 import sys
  3 from io import open
  4 from os import walk
  5 from os.path import join, relpath
  6 
  7 from setuptools import setup
  8 
  9 
  10 version = "4.1.2"
  11 
  12 requires = ['feedgenerator >= 1.9', 'jinja2 >= 2.7', 'pygments', 'docutils',
  13             'pytz >= 0a', 'blinker', 'unidecode', 'six >= 1.4',
  14             'python-dateutil']
  15 
  16 entry_points = {
  17     'console_scripts': [
  18         'pelican = pelican.__main__:main',
  19         'pelican-import = pelican.tools.pelican_import:main',
  20         'pelican-quickstart = pelican.tools.pelican_quickstart:main',
  21         'pelican-themes = pelican.tools.pelican_themes:main'
  22     ]
  23 }
  24 
  25 README = open('README.rst', encoding='utf-8').read()
  26 CHANGELOG = open('docs/changelog.rst', encoding='utf-8').read()
  27 
  28 description = u'\n'.join([README, CHANGELOG])
  29 if sys.version_info.major < 3:
  30     description = description.encode('utf-8')
  31 
  32 setup(
  33     name='pelican',
  34     version=version,
  35     url='https://getpelican.com/',
  36     author='Justin Mayer',
  37     author_email='authors@getpelican.com',
  38     description="Static site generator supporting reStructuredText and "
  39                 "Markdown source content.",
  40     project_urls={
  41         'Documentation': 'https://docs.getpelican.com/',
  42         'Funding': 'https://donate.getpelican.com/',
  43         'Source': 'https://github.com/getpelican/pelican',
  44         'Tracker': 'https://github.com/getpelican/pelican/issues',
  45     },
  46     keywords='static web site generator SSG reStructuredText Markdown',
  47     license='AGPLv3',
  48     long_description=description,
  49     packages=['pelican', 'pelican.tools'],
  50     package_data={
  51         # we manually collect the package data, as opposed to using,
  52         # include_package_data=True because we don't want the tests to be
  53         # included automatically as package data (MANIFEST.in is too greedy)
  54         'pelican': [relpath(join(root, name), 'pelican')
  55                     for root, _, names in walk(join('pelican', 'themes'))
  56                     for name in names],
  57         'pelican.tools': [relpath(join(root, name), join('pelican', 'tools'))
  58                           for root, _, names in walk(join('pelican',
  59                                                           'tools',
  60                                                           'templates'))
  61                           for name in names],
  62     },
  63     install_requires=requires,
  64     entry_points=entry_points,
  65     classifiers=[
  66         'Development Status :: 5 - Production/Stable',
  67         'Environment :: Console',
  68         'Framework :: Pelican',
  69         'License :: OSI Approved :: GNU Affero General Public License v3',
  70         'Operating System :: OS Independent',
  71         'Programming Language :: Python :: 2',
  72         'Programming Language :: Python :: 2.7',
  73         'Programming Language :: Python :: 3',
  74         'Programming Language :: Python :: 3.5',
  75         'Programming Language :: Python :: 3.6',
  76         'Programming Language :: Python :: 3.7',
  77         'Programming Language :: Python :: Implementation :: CPython',
  78         'Topic :: Internet :: WWW/HTTP',
  79         'Topic :: Software Development :: Libraries :: Python Modules',
  80     ],
  81     test_suite='pelican.tests',
  82 )
  83
  [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
  @@ -61,6 +61,9 @@
                             for name in names],
       },
       install_requires=requires,
  +    extras_require={
  +        'Markdown': ['markdown~=3.1.1']
  +    },
       entry_points=entry_points,
       classifiers=[
           'Development Status :: 5 - Production/Stable',
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -61,6 +61,9 @@\n                           for name in names],\n     },\n     install_requires=requires,\n+    extras_require={\n+        'Markdown': ['markdown~=3.1.1']\n+    },\n     entry_points=entry_points,\n     classifiers=[\n         'Development Status :: 5 - Production/Stable',\n", "issue": "Add Markdown as an (optional) dependency\nSince its inception, this project has taken the collective position that since not everyone uses Markdown, the `markdown` package should not be a dependency of the project and should instead be manually installed by users who want to use Markdown.\r\n\r\nOn the other hand, the `docutils` package that parses reStructuredText markup has always been a dependency. Particularly given Markdown's widespread popularity, I cannot come up with a compelling argument to support the continuation of this discrepancy.\r\n\r\nThis project is littered with issues caused by environments with missing `markdown` packages. Many folks have encountered frustration when trying to build their Markdown-content sites, only to be met with an (often inscrutable) error message. And that's just the folks who have taken the time to file issues! Imagine how many threw up their hands and just moved on to another solution\u2026\r\n\r\nAdding Markdown as a dependency would have significant benefits, including simplifying installation instructions, reducing frustration, and minimizing support request load. So to take another approach at this topic\u2026\u00a0What are the reasons for *not* adding Markdown as a dependency, and do you think they are sufficiently important to out-weigh the concerns raised above?\n", "before_files": [{"content": "#!/usr/bin/env python\nimport sys\nfrom io import open\nfrom os import walk\nfrom os.path import join, relpath\n\nfrom setuptools import setup\n\n\nversion = \"4.1.2\"\n\nrequires = ['feedgenerator >= 1.9', 'jinja2 >= 2.7', 'pygments', 'docutils',\n            'pytz >= 0a', 'blinker', 'unidecode', 'six >= 1.4',\n            'python-dateutil']\n\nentry_points = {\n    'console_scripts': [\n        'pelican = pelican.__main__:main',\n        'pelican-import = pelican.tools.pelican_import:main',\n        'pelican-quickstart = pelican.tools.pelican_quickstart:main',\n        'pelican-themes = pelican.tools.pelican_themes:main'\n    ]\n}\n\nREADME = open('README.rst', encoding='utf-8').read()\nCHANGELOG = open('docs/changelog.rst', encoding='utf-8').read()\n\ndescription = u'\\n'.join([README, CHANGELOG])\nif sys.version_info.major < 3:\n    description = description.encode('utf-8')\n\nsetup(\n    name='pelican',\n    version=version,\n    url='https://getpelican.com/',\n    author='Justin Mayer',\n    author_email='authors@getpelican.com',\n    description=\"Static site generator supporting reStructuredText and \"\n                \"Markdown source content.\",\n    project_urls={\n        'Documentation': 'https://docs.getpelican.com/',\n        'Funding': 'https://donate.getpelican.com/',\n        'Source': 'https://github.com/getpelican/pelican',\n        'Tracker': 'https://github.com/getpelican/pelican/issues',\n    },\n    keywords='static web site generator SSG reStructuredText Markdown',\n    license='AGPLv3',\n    long_description=description,\n    packages=['pelican', 'pelican.tools'],\n    package_data={\n        # we manually collect the package data, as opposed to using,\n        # include_package_data=True because we don't want the tests to be\n        # included automatically as package data (MANIFEST.in is too greedy)\n        'pelican': [relpath(join(root, name), 'pelican')\n                    for root, _, names in walk(join('pelican', 'themes'))\n                    for name in names],\n        'pelican.tools': [relpath(join(root, name), join('pelican', 'tools'))\n                          for root, _, names in walk(join('pelican',\n                                                          'tools',\n                                                          'templates'))\n                          for name in names],\n    },\n    install_requires=requires,\n    entry_points=entry_points,\n    classifiers=[\n        'Development Status :: 5 - Production/Stable',\n        'Environment :: Console',\n        'Framework :: Pelican',\n        'License :: OSI Approved :: GNU Affero General Public License v3',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python :: 2',\n        'Programming Language :: Python :: 2.7',\n        'Programming Language :: Python :: 3',\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        'Topic :: Internet :: WWW/HTTP',\n        'Topic :: Software Development :: Libraries :: Python Modules',\n    ],\n    test_suite='pelican.tests',\n)\n", "path": "setup.py"}]}