prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Replace typing.Dict with dict
  It is now possible to use `dict` directly instead of `typing.Dict` in type definitions.
  
  </issue>
  <code>
  [start of setup.py]
  1 # -*- coding: utf-8 -*-
  2 # This Source Code Form is subject to the terms of the Mozilla Public
  3 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
  4 # You can obtain one at http://mozilla.org/MPL/2.0/.
  5 
  6 import os
  7 
  8 from setuptools import find_packages, setup
  9 
  10 here = os.path.dirname(__file__)
  11 
  12 
  13 def read_requirements(file_):
  14     with open(os.path.join(here, file_)) as f:
  15         return sorted(list(set(line.split("#")[0].strip() for line in f)))
  16 
  17 
  18 install_requires = read_requirements("requirements.txt")
  19 
  20 
  21 with open(os.path.join(here, "VERSION")) as f:
  22     version = f.read().strip()
  23 
  24 # Read the extra requirements
  25 extras = ["nlp", "nn"]
  26 
  27 extras_require = {}
  28 
  29 for extra in extras:
  30     extras_require[extra] = read_requirements("extra-%s-requirements.txt" % extra)
  31 
  32 
  33 setup(
  34     name="bugbug",
  35     version=version,
  36     description="ML tools for Mozilla projects",
  37     author="Marco Castelluccio",
  38     author_email="mcastelluccio@mozilla.com",
  39     install_requires=install_requires,
  40     extras_require=extras_require,
  41     packages=find_packages(exclude=["contrib", "docs", "tests"]),
  42     include_package_data=True,
  43     license="MPL2",
  44     entry_points={
  45         "console_scripts": [
  46             "bugbug-data-commits = scripts.commit_retriever:main",
  47             "bugbug-data-bugzilla = scripts.bug_retriever:main",
  48             "bugbug-data-test-scheduling-history = scripts.test_scheduling_history_retriever:main",
  49             "bugbug-data-revisions = scripts.revision_retriever:main",
  50             "bugbug-train = scripts.trainer:main",
  51             "bugbug-train-similarity = scripts.similarity_trainer:main",
  52             "bugbug-check = scripts.check:main",
  53             "bugbug-microannotate-generate = scripts.microannotate_generator:main",
  54             "bugbug-classify-commit = scripts.commit_classifier:main",
  55             "bugbug-classify-bug = scripts.bug_classifier:main",
  56             "bugbug-regressor-finder = scripts.regressor_finder:main",
  57             "bugbug-retrieve-training-metrics = scripts.retrieve_training_metrics:main",
  58             "bugbug-analyze-training-metrics = scripts.analyze_training_metrics:main",
  59             "bugbug-check-all-metrics = scripts.check_all_metrics:main",
  60             "bugbug-past-bugs-by-unit = scripts.past_bugs_by_unit:main",
  61             "bugbug-testing-policy-stats = scripts.testing_policy_stats:main",
  62             "bugbug-generate-landings-risk-report = scripts.generate_landings_risk_report:main",
  63             "bugbug-shadow-scheduler-stats = scripts.shadow_scheduler_stats:main",
  64             "bugbug-data-github = scripts.github_issue_retriever:main",
  65         ]
  66     },
  67     classifiers=[
  68         "Programming Language :: Python :: 3.7",
  69         "Programming Language :: Python :: 3.8",
  70         "Programming Language :: Python :: 3.9",
  71         "Programming Language :: Python :: 3 :: Only",
  72         "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
  73     ],
  74 )
  75
  [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
  @@ -65,8 +65,6 @@
           ]
       },
       classifiers=[
  -        "Programming Language :: Python :: 3.7",
  -        "Programming Language :: Python :: 3.8",
           "Programming Language :: Python :: 3.9",
           "Programming Language :: Python :: 3 :: Only",
           "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -65,8 +65,6 @@\n         ]\n     },\n     classifiers=[\n-        \"Programming Language :: Python :: 3.7\",\n-        \"Programming Language :: Python :: 3.8\",\n         \"Programming Language :: Python :: 3.9\",\n         \"Programming Language :: Python :: 3 :: Only\",\n         \"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)\",\n", "issue": "Replace typing.Dict with dict\nIt is now possible to use `dict` directly instead of `typing.Dict` in type definitions.\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this file,\n# You can obtain one at http://mozilla.org/MPL/2.0/.\n\nimport os\n\nfrom setuptools import find_packages, setup\n\nhere = os.path.dirname(__file__)\n\n\ndef read_requirements(file_):\n    with open(os.path.join(here, file_)) as f:\n        return sorted(list(set(line.split(\"#\")[0].strip() for line in f)))\n\n\ninstall_requires = read_requirements(\"requirements.txt\")\n\n\nwith open(os.path.join(here, \"VERSION\")) as f:\n    version = f.read().strip()\n\n# Read the extra requirements\nextras = [\"nlp\", \"nn\"]\n\nextras_require = {}\n\nfor extra in extras:\n    extras_require[extra] = read_requirements(\"extra-%s-requirements.txt\" % extra)\n\n\nsetup(\n    name=\"bugbug\",\n    version=version,\n    description=\"ML tools for Mozilla projects\",\n    author=\"Marco Castelluccio\",\n    author_email=\"mcastelluccio@mozilla.com\",\n    install_requires=install_requires,\n    extras_require=extras_require,\n    packages=find_packages(exclude=[\"contrib\", \"docs\", \"tests\"]),\n    include_package_data=True,\n    license=\"MPL2\",\n    entry_points={\n        \"console_scripts\": [\n            \"bugbug-data-commits = scripts.commit_retriever:main\",\n            \"bugbug-data-bugzilla = scripts.bug_retriever:main\",\n            \"bugbug-data-test-scheduling-history = scripts.test_scheduling_history_retriever:main\",\n            \"bugbug-data-revisions = scripts.revision_retriever:main\",\n            \"bugbug-train = scripts.trainer:main\",\n            \"bugbug-train-similarity = scripts.similarity_trainer:main\",\n            \"bugbug-check = scripts.check:main\",\n            \"bugbug-microannotate-generate = scripts.microannotate_generator:main\",\n            \"bugbug-classify-commit = scripts.commit_classifier:main\",\n            \"bugbug-classify-bug = scripts.bug_classifier:main\",\n            \"bugbug-regressor-finder = scripts.regressor_finder:main\",\n            \"bugbug-retrieve-training-metrics = scripts.retrieve_training_metrics:main\",\n            \"bugbug-analyze-training-metrics = scripts.analyze_training_metrics:main\",\n            \"bugbug-check-all-metrics = scripts.check_all_metrics:main\",\n            \"bugbug-past-bugs-by-unit = scripts.past_bugs_by_unit:main\",\n            \"bugbug-testing-policy-stats = scripts.testing_policy_stats:main\",\n            \"bugbug-generate-landings-risk-report = scripts.generate_landings_risk_report:main\",\n            \"bugbug-shadow-scheduler-stats = scripts.shadow_scheduler_stats:main\",\n            \"bugbug-data-github = scripts.github_issue_retriever:main\",\n        ]\n    },\n    classifiers=[\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Programming Language :: Python :: 3.9\",\n        \"Programming Language :: Python :: 3 :: Only\",\n        \"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)\",\n    ],\n)\n", "path": "setup.py"}]}