prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Fix `ModuleNotFoundError: No module named 'monitoring'`
  Looks like this bug was introduced with the recent merge of monitoring back into the parsl repo.
  
  ```
  Traceback (most recent call last):
    File "/Users/awoodard/software/miniconda3/bin/parsl-visualize", line 11, in <module>
      load_entry_point('parsl==0.7.2', 'console_scripts', 'parsl-visualize')()
    File "/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 484, in load_entry_point
      return get_distribution(dist).load_entry_point(group, name)
    File "/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2707, in load_entry_point
      return ep.load()
    File "/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2325, in load
      return self.resolve()
    File "/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2331, in resolve
      module = __import__(self.module_name, fromlist=['__name__'], level=0)
  ModuleNotFoundError: No module named 'monitoring'
  ```
  
  </issue>
  <code>
  [start of setup.py]
  1 from setuptools import setup, find_packages
  2 
  3 with open('parsl/version.py') as f:
  4     exec(f.read())
  5 
  6 with open('requirements.txt') as f:
  7     install_requires = f.readlines()
  8 
  9 extras_require = {
  10     'monitoring' : [
  11         'psutil',
  12         'sqlalchemy',
  13         'sqlalchemy_utils',
  14         'pydot',
  15         'networkx',
  16         'Flask',
  17         'flask_sqlalchemy',
  18         'pandas',
  19         'plotly',
  20         'python-daemon'
  21     ],
  22     'aws' : ['boto3'],
  23     'kubernetes' : ['kubernetes'],
  24     'extreme_scale' : ['mpi4py'],
  25     'docs' : ['nbsphinx', 'sphinx_rtd_theme'],
  26     'google_cloud' : ['google-auth', 'google-api-python-client'],
  27     'gssapi' : ['python-gssapi'],
  28 }
  29 extras_require['all'] = sum(extras_require.values(), [])
  30 
  31 setup(
  32     name='parsl',
  33     version=VERSION,
  34     description='Simple data dependent workflows in Python',
  35     long_description='Simple parallel workflows system for Python',
  36     url='https://github.com/Parsl/parsl',
  37     author='The Parsl Team',
  38     author_email='parsl@googlegroups.com',
  39     license='Apache 2.0',
  40     download_url='https://github.com/Parsl/parsl/archive/{}.tar.gz'.format(VERSION),
  41     include_package_data=True,
  42     packages=find_packages(),
  43     install_requires=install_requires,
  44     scripts = ['parsl/executors/high_throughput/process_worker_pool.py',
  45                'parsl/executors/extreme_scale/mpi_worker_pool.py',
  46                'parsl/executors/low_latency/lowlatency_worker.py',
  47     ],
  48     extras_require=extras_require,
  49     classifiers=[
  50         # Maturity
  51         'Development Status :: 3 - Alpha',
  52         # Intended audience
  53         'Intended Audience :: Developers',
  54         # Licence, must match with licence above
  55         'License :: OSI Approved :: Apache Software License',
  56         # Python versions supported
  57         'Programming Language :: Python :: 3.5',
  58         'Programming Language :: Python :: 3.6',
  59     ],
  60     keywords=['Workflows', 'Scientific computing'],
  61     entry_points={'console_scripts':
  62       [
  63        'parsl-globus-auth=parsl.data_provider.globus:cli_run',
  64        'parsl-visualize=monitoring.visualization.app:cli_run',
  65       ]}
  66 )
  67
  [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,6 @@
       entry_points={'console_scripts':
         [
          'parsl-globus-auth=parsl.data_provider.globus:cli_run',
  -       'parsl-visualize=monitoring.visualization.app:cli_run',
  +       'parsl-visualize=parsl.monitoring.visualization.app:cli_run',
         ]}
   )
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -61,6 +61,6 @@\n     entry_points={'console_scripts':\n       [\n        'parsl-globus-auth=parsl.data_provider.globus:cli_run',\n-       'parsl-visualize=monitoring.visualization.app:cli_run',\n+       'parsl-visualize=parsl.monitoring.visualization.app:cli_run',\n       ]}\n )\n", "issue": "Fix `ModuleNotFoundError: No module named 'monitoring'`\nLooks like this bug was introduced with the recent merge of monitoring back into the parsl repo.\r\n\r\n```\r\nTraceback (most recent call last):\r\n  File \"/Users/awoodard/software/miniconda3/bin/parsl-visualize\", line 11, in <module>\r\n    load_entry_point('parsl==0.7.2', 'console_scripts', 'parsl-visualize')()\r\n  File \"/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py\", line 484, in load_entry_point\r\n    return get_distribution(dist).load_entry_point(group, name)\r\n  File \"/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py\", line 2707, in load_entry_point\r\n    return ep.load()\r\n  File \"/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py\", line 2325, in load\r\n    return self.resolve()\r\n  File \"/Users/awoodard/software/miniconda3/lib/python3.7/site-packages/pkg_resources/__init__.py\", line 2331, in resolve\r\n    module = __import__(self.module_name, fromlist=['__name__'], level=0)\r\nModuleNotFoundError: No module named 'monitoring'\r\n```\n", "before_files": [{"content": "from setuptools import setup, find_packages\n\nwith open('parsl/version.py') as f:\n    exec(f.read())\n\nwith open('requirements.txt') as f:\n    install_requires = f.readlines()\n\nextras_require = {\n    'monitoring' : [\n        'psutil',\n        'sqlalchemy',\n        'sqlalchemy_utils',\n        'pydot',\n        'networkx',\n        'Flask',\n        'flask_sqlalchemy',\n        'pandas',\n        'plotly',\n        'python-daemon'\n    ],\n    'aws' : ['boto3'],\n    'kubernetes' : ['kubernetes'],\n    'extreme_scale' : ['mpi4py'],\n    'docs' : ['nbsphinx', 'sphinx_rtd_theme'],\n    'google_cloud' : ['google-auth', 'google-api-python-client'],\n    'gssapi' : ['python-gssapi'],\n}\nextras_require['all'] = sum(extras_require.values(), [])\n\nsetup(\n    name='parsl',\n    version=VERSION,\n    description='Simple data dependent workflows in Python',\n    long_description='Simple parallel workflows system for Python',\n    url='https://github.com/Parsl/parsl',\n    author='The Parsl Team',\n    author_email='parsl@googlegroups.com',\n    license='Apache 2.0',\n    download_url='https://github.com/Parsl/parsl/archive/{}.tar.gz'.format(VERSION),\n    include_package_data=True,\n    packages=find_packages(),\n    install_requires=install_requires,\n    scripts = ['parsl/executors/high_throughput/process_worker_pool.py',\n               'parsl/executors/extreme_scale/mpi_worker_pool.py',\n               'parsl/executors/low_latency/lowlatency_worker.py',\n    ],\n    extras_require=extras_require,\n    classifiers=[\n        # Maturity\n        'Development Status :: 3 - Alpha',\n        # Intended audience\n        'Intended Audience :: Developers',\n        # Licence, must match with licence above\n        'License :: OSI Approved :: Apache Software License',\n        # Python versions supported\n        'Programming Language :: Python :: 3.5',\n        'Programming Language :: Python :: 3.6',\n    ],\n    keywords=['Workflows', 'Scientific computing'],\n    entry_points={'console_scripts':\n      [\n       'parsl-globus-auth=parsl.data_provider.globus:cli_run',\n       'parsl-visualize=monitoring.visualization.app:cli_run',\n      ]}\n)\n", "path": "setup.py"}]}