prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  [FR] update opencv-python-headless
  ### Proposal Summary
  Currently this repo requires opencv-python-headless<=4.4.0.46. To cut a long story short there are no wheels available for python3.9 and I am unable to install fiftyone (I am using docker `image: jupyter/scipy-notebook:latest`). However version `4.5.3.56` is available for install without issue, and I propose updating the requirement for this dependency.
  
  </issue>
  <code>
  [start of setup.py]
  1 #!/usr/bin/env python
  2 """
  3 Installs FiftyOne.
  4 
  5 | Copyright 2017-2021, Voxel51, Inc.
  6 | `voxel51.com <https://voxel51.com/>`_
  7 |
  8 """
  9 import os
  10 from setuptools import setup, find_packages
  11 from wheel.bdist_wheel import bdist_wheel
  12 
  13 
  14 class BdistWheelCustom(bdist_wheel):
  15     def finalize_options(self):
  16         bdist_wheel.finalize_options(self)
  17         # make just the wheel require these packages, since they aren't needed
  18         # for a development installation
  19         self.distribution.install_requires += [
  20             "fiftyone-brain>=0.7,<0.8",
  21             "fiftyone-db>=0.3,<0.4",
  22         ]
  23 
  24 
  25 VERSION = "0.13.2"
  26 
  27 
  28 def get_version():
  29     if "RELEASE_VERSION" in os.environ:
  30         version = os.environ["RELEASE_VERSION"]
  31         if not version.startswith(VERSION):
  32             raise ValueError(
  33                 "Release version does not match version: %s and %s"
  34                 % (version, VERSION)
  35             )
  36         return version
  37 
  38     return VERSION
  39 
  40 
  41 EXTRAS_REQUIREMENTS = {"desktop": ["fiftyone-desktop>=0.16,<0.17"]}
  42 
  43 
  44 with open("README.md", "r") as fh:
  45     long_description = fh.read()
  46 
  47 
  48 setup(
  49     name="fiftyone",
  50     version=get_version(),
  51     description=(
  52         "FiftyOne: the open-source tool for building high-quality datasets "
  53         "and computer vision models"
  54     ),
  55     author="Voxel51, Inc.",
  56     author_email="info@voxel51.com",
  57     url="https://github.com/voxel51/fiftyone",
  58     extras_require=EXTRAS_REQUIREMENTS,
  59     license="Apache",
  60     long_description=long_description,
  61     long_description_content_type="text/markdown",
  62     packages=find_packages() + ["fiftyone.recipes", "fiftyone.tutorials"],
  63     package_dir={
  64         "fiftyone.recipes": "docs/source/recipes",
  65         "fiftyone.tutorials": "docs/source/tutorials",
  66     },
  67     include_package_data=True,
  68     install_requires=[
  69         # third-party packages
  70         "argcomplete",
  71         "boto3",
  72         "Deprecated",
  73         "eventlet",
  74         "future",
  75         "Jinja2",
  76         "kaleido",
  77         "matplotlib",
  78         "mongoengine==0.20.0",
  79         "motor>=2.3,<3",
  80         "numpy",
  81         "packaging",
  82         "pandas",
  83         "Pillow>=6.2",
  84         "plotly>=4.14,<5",
  85         "pprintpp",
  86         "psutil",
  87         "pymongo>=3.11,<4",
  88         "PyYAML",
  89         "retrying",
  90         "scikit-learn",
  91         "scikit-image",
  92         "setuptools",
  93         "tabulate",
  94         "tornado>=5.1.1,<7",
  95         "xmltodict",
  96         "universal-analytics-python3>=1.0.1,<2",
  97         # internal packages
  98         "voxel51-eta>=0.5.2,<0.6",
  99         # ETA dependency - restricted to a maximum version known to provide
  100         # wheels here because it tends to publish sdists several hours before
  101         # wheels. When users install FiftyOne in this window, they will need to
  102         # compile OpenCV from source, leading to either errors or a
  103         # time-consuming installation.
  104         "opencv-python-headless<=4.4.0.46",
  105     ],
  106     classifiers=[
  107         "Development Status :: 4 - Beta",
  108         "Intended Audience :: Developers",
  109         "Intended Audience :: Science/Research",
  110         "License :: OSI Approved :: Apache Software License",
  111         "Topic :: Scientific/Engineering :: Artificial Intelligence",
  112         "Topic :: Scientific/Engineering :: Image Processing",
  113         "Topic :: Scientific/Engineering :: Image Recognition",
  114         "Topic :: Scientific/Engineering :: Information Analysis",
  115         "Topic :: Scientific/Engineering :: Visualization",
  116         "Operating System :: MacOS :: MacOS X",
  117         "Operating System :: POSIX :: Linux",
  118         "Operating System :: Microsoft :: Windows",
  119         "Programming Language :: Python :: 3",
  120         "Programming Language :: Python :: 3.6",
  121         "Programming Language :: Python :: 3.7",
  122         "Programming Language :: Python :: 3.8",
  123         "Programming Language :: Python :: 3.9",
  124     ],
  125     entry_points={"console_scripts": ["fiftyone=fiftyone.core.cli:main"]},
  126     python_requires=">=3.6",
  127     cmdclass={"bdist_wheel": BdistWheelCustom},
  128 )
  129
  [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
  @@ -78,6 +78,7 @@
           "mongoengine==0.20.0",
           "motor>=2.3,<3",
           "numpy",
  +        "opencv-python-headless",
           "packaging",
           "pandas",
           "Pillow>=6.2",
  @@ -96,12 +97,6 @@
           "universal-analytics-python3>=1.0.1,<2",
           # internal packages
           "voxel51-eta>=0.5.2,<0.6",
  -        # ETA dependency - restricted to a maximum version known to provide
  -        # wheels here because it tends to publish sdists several hours before
  -        # wheels. When users install FiftyOne in this window, they will need to
  -        # compile OpenCV from source, leading to either errors or a
  -        # time-consuming installation.
  -        "opencv-python-headless<=4.4.0.46",
       ],
       classifiers=[
           "Development Status :: 4 - Beta",
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -78,6 +78,7 @@\n         \"mongoengine==0.20.0\",\n         \"motor>=2.3,<3\",\n         \"numpy\",\n+        \"opencv-python-headless\",\n         \"packaging\",\n         \"pandas\",\n         \"Pillow>=6.2\",\n@@ -96,12 +97,6 @@\n         \"universal-analytics-python3>=1.0.1,<2\",\n         # internal packages\n         \"voxel51-eta>=0.5.2,<0.6\",\n-        # ETA dependency - restricted to a maximum version known to provide\n-        # wheels here because it tends to publish sdists several hours before\n-        # wheels. When users install FiftyOne in this window, they will need to\n-        # compile OpenCV from source, leading to either errors or a\n-        # time-consuming installation.\n-        \"opencv-python-headless<=4.4.0.46\",\n     ],\n     classifiers=[\n         \"Development Status :: 4 - Beta\",\n", "issue": "[FR] update opencv-python-headless\n### Proposal Summary\r\nCurrently this repo requires opencv-python-headless<=4.4.0.46. To cut a long story short there are no wheels available for python3.9 and I am unable to install fiftyone (I am using docker `image: jupyter/scipy-notebook:latest`). However version `4.5.3.56` is available for install without issue, and I propose updating the requirement for this dependency.\n", "before_files": [{"content": "#!/usr/bin/env python\n\"\"\"\nInstalls FiftyOne.\n\n| Copyright 2017-2021, Voxel51, Inc.\n| `voxel51.com <https://voxel51.com/>`_\n|\n\"\"\"\nimport os\nfrom setuptools import setup, find_packages\nfrom wheel.bdist_wheel import bdist_wheel\n\n\nclass BdistWheelCustom(bdist_wheel):\n    def finalize_options(self):\n        bdist_wheel.finalize_options(self)\n        # make just the wheel require these packages, since they aren't needed\n        # for a development installation\n        self.distribution.install_requires += [\n            \"fiftyone-brain>=0.7,<0.8\",\n            \"fiftyone-db>=0.3,<0.4\",\n        ]\n\n\nVERSION = \"0.13.2\"\n\n\ndef get_version():\n    if \"RELEASE_VERSION\" in os.environ:\n        version = os.environ[\"RELEASE_VERSION\"]\n        if not version.startswith(VERSION):\n            raise ValueError(\n                \"Release version does not match version: %s and %s\"\n                % (version, VERSION)\n            )\n        return version\n\n    return VERSION\n\n\nEXTRAS_REQUIREMENTS = {\"desktop\": [\"fiftyone-desktop>=0.16,<0.17\"]}\n\n\nwith open(\"README.md\", \"r\") as fh:\n    long_description = fh.read()\n\n\nsetup(\n    name=\"fiftyone\",\n    version=get_version(),\n    description=(\n        \"FiftyOne: the open-source tool for building high-quality datasets \"\n        \"and computer vision models\"\n    ),\n    author=\"Voxel51, Inc.\",\n    author_email=\"info@voxel51.com\",\n    url=\"https://github.com/voxel51/fiftyone\",\n    extras_require=EXTRAS_REQUIREMENTS,\n    license=\"Apache\",\n    long_description=long_description,\n    long_description_content_type=\"text/markdown\",\n    packages=find_packages() + [\"fiftyone.recipes\", \"fiftyone.tutorials\"],\n    package_dir={\n        \"fiftyone.recipes\": \"docs/source/recipes\",\n        \"fiftyone.tutorials\": \"docs/source/tutorials\",\n    },\n    include_package_data=True,\n    install_requires=[\n        # third-party packages\n        \"argcomplete\",\n        \"boto3\",\n        \"Deprecated\",\n        \"eventlet\",\n        \"future\",\n        \"Jinja2\",\n        \"kaleido\",\n        \"matplotlib\",\n        \"mongoengine==0.20.0\",\n        \"motor>=2.3,<3\",\n        \"numpy\",\n        \"packaging\",\n        \"pandas\",\n        \"Pillow>=6.2\",\n        \"plotly>=4.14,<5\",\n        \"pprintpp\",\n        \"psutil\",\n        \"pymongo>=3.11,<4\",\n        \"PyYAML\",\n        \"retrying\",\n        \"scikit-learn\",\n        \"scikit-image\",\n        \"setuptools\",\n        \"tabulate\",\n        \"tornado>=5.1.1,<7\",\n        \"xmltodict\",\n        \"universal-analytics-python3>=1.0.1,<2\",\n        # internal packages\n        \"voxel51-eta>=0.5.2,<0.6\",\n        # ETA dependency - restricted to a maximum version known to provide\n        # wheels here because it tends to publish sdists several hours before\n        # wheels. When users install FiftyOne in this window, they will need to\n        # compile OpenCV from source, leading to either errors or a\n        # time-consuming installation.\n        \"opencv-python-headless<=4.4.0.46\",\n    ],\n    classifiers=[\n        \"Development Status :: 4 - Beta\",\n        \"Intended Audience :: Developers\",\n        \"Intended Audience :: Science/Research\",\n        \"License :: OSI Approved :: Apache Software License\",\n        \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n        \"Topic :: Scientific/Engineering :: Image Processing\",\n        \"Topic :: Scientific/Engineering :: Image Recognition\",\n        \"Topic :: Scientific/Engineering :: Information Analysis\",\n        \"Topic :: Scientific/Engineering :: Visualization\",\n        \"Operating System :: MacOS :: MacOS X\",\n        \"Operating System :: POSIX :: Linux\",\n        \"Operating System :: Microsoft :: Windows\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Programming Language :: Python :: 3.9\",\n    ],\n    entry_points={\"console_scripts\": [\"fiftyone=fiftyone.core.cli:main\"]},\n    python_requires=\">=3.6\",\n    cmdclass={\"bdist_wheel\": BdistWheelCustom},\n)\n", "path": "setup.py"}]}