We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Fix formatting of PyPI package description.
See https://pypi.org/project/ray/.

Note that we can test this out first at https://test.pypi.org/project/ray/.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `python/setup.py`
Content:
```
1 from __future__ import absolute_import
2 from __future__ import division
3 from __future__ import print_function
4 
5 import os
6 import re
7 import shutil
8 import subprocess
9 import sys
10 
11 from setuptools import setup, find_packages, Distribution
12 import setuptools.command.build_ext as _build_ext
13 
14 # Ideally, we could include these files by putting them in a
15 # MANIFEST.in or using the package_data argument to setup, but the
16 # MANIFEST.in gets applied at the very beginning when setup.py runs
17 # before these files have been created, so we have to move the files
18 # manually.
19 
20 # NOTE: The lists below must be kept in sync with ray/CMakeLists.txt.
21 
22 ray_files = [
23     "ray/core/src/ray/thirdparty/redis/src/redis-server",
24     "ray/core/src/ray/gcs/redis_module/libray_redis_module.so",
25     "ray/core/src/plasma/plasma_store_server",
26     "ray/core/src/ray/raylet/libraylet_library_python.so",
27     "ray/core/src/ray/raylet/raylet_monitor", "ray/core/src/ray/raylet/raylet",
28     "ray/WebUI.ipynb"
29 ]
30 
31 # These are the directories where automatically generated Python flatbuffer
32 # bindings are created.
33 generated_python_directories = [
34     "ray/core/generated", "ray/core/generated/ray",
35     "ray/core/generated/ray/protocol"
36 ]
37 
38 optional_ray_files = []
39 
40 ray_ui_files = [
41     "ray/core/src/catapult_files/index.html",
42     "ray/core/src/catapult_files/trace_viewer_full.html"
43 ]
44 
45 ray_autoscaler_files = [
46     "ray/autoscaler/aws/example-full.yaml",
47     "ray/autoscaler/gcp/example-full.yaml",
48     "ray/autoscaler/local/example-full.yaml",
49 ]
50 
51 if "RAY_USE_NEW_GCS" in os.environ and os.environ["RAY_USE_NEW_GCS"] == "on":
52     ray_files += [
53         "ray/core/src/credis/build/src/libmember.so",
54         "ray/core/src/credis/build/src/libmaster.so",
55         "ray/core/src/credis/redis/src/redis-server"
56     ]
57 
58 # The UI files are mandatory if the INCLUDE_UI environment variable equals 1.
59 # Otherwise, they are optional.
60 if "INCLUDE_UI" in os.environ and os.environ["INCLUDE_UI"] == "1":
61     ray_files += ray_ui_files
62 else:
63     optional_ray_files += ray_ui_files
64 
65 optional_ray_files += ray_autoscaler_files
66 
67 extras = {
68     "rllib": ["pyyaml", "gym[atari]", "opencv-python", "lz4", "scipy"],
69     "debug": ["psutil", "setproctitle", "py-spy"],
70 }
71 
72 
73 class build_ext(_build_ext.build_ext):
74     def run(self):
75         # Note: We are passing in sys.executable so that we use the same
76         # version of Python to build pyarrow inside the build.sh script. Note
77         # that certain flags will not be passed along such as --user or sudo.
78         # TODO(rkn): Fix this.
79         subprocess.check_call(["../build.sh", "-p", sys.executable])
80 
81         # We also need to install pyarrow along with Ray, so make sure that the
82         # relevant non-Python pyarrow files get copied.
83         pyarrow_files = []
84         for (root, dirs, filenames) in os.walk("./ray/pyarrow_files/pyarrow"):
85             for name in filenames:
86                 pyarrow_files.append(os.path.join(root, name))
87 
88         files_to_include = ray_files + pyarrow_files
89 
90         # Copy over the autogenerated flatbuffer Python bindings.
91         for directory in generated_python_directories:
92             for filename in os.listdir(directory):
93                 if filename[-3:] == ".py":
94                     files_to_include.append(os.path.join(directory, filename))
95 
96         for filename in files_to_include:
97             self.move_file(filename)
98 
99         # Try to copy over the optional files.
100         for filename in optional_ray_files:
101             try:
102                 self.move_file(filename)
103             except Exception:
104                 print("Failed to copy optional file {}. This is ok."
105                       .format(filename))
106 
107     def move_file(self, filename):
108         # TODO(rkn): This feels very brittle. It may not handle all cases. See
109         # https://github.com/apache/arrow/blob/master/python/setup.py for an
110         # example.
111         source = filename
112         destination = os.path.join(self.build_lib, filename)
113         # Create the target directory if it doesn't already exist.
114         parent_directory = os.path.dirname(destination)
115         if not os.path.exists(parent_directory):
116             os.makedirs(parent_directory)
117         print("Copying {} to {}.".format(source, destination))
118         shutil.copy(source, destination)
119 
120 
121 class BinaryDistribution(Distribution):
122     def has_ext_modules(self):
123         return True
124 
125 
126 def find_version(*filepath):
127     # Extract version information from filepath
128     here = os.path.abspath(os.path.dirname(__file__))
129     with open(os.path.join(here, *filepath)) as fp:
130         version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]",
131                                   fp.read(), re.M)
132         if version_match:
133             return version_match.group(1)
134         raise RuntimeError("Unable to find version string.")
135 
136 
137 requires = [
138     "numpy",
139     "filelock",
140     "funcsigs",
141     "click",
142     "colorama",
143     "pytest",
144     "pyyaml",
145     "redis",
146     # The six module is required by pyarrow.
147     "six >= 1.0.0",
148     "flatbuffers",
149 ]
150 
151 if sys.version_info < (3, 0):
152     requires.append("faulthandler")
153 
154 setup(
155     name="ray",
156     version=find_version("ray", "__init__.py"),
157     description=("A system for parallel and distributed Python that unifies "
158                  "the ML ecosystem."),
159     long_description=open("../README.rst").read(),
160     url="https://github.com/ray-project/ray",
161     keywords=("ray distributed parallel machine-learning "
162               "reinforcement-learning deep-learning python"),
163     packages=find_packages(),
164     cmdclass={"build_ext": build_ext},
165     # The BinaryDistribution argument triggers build_ext.
166     distclass=BinaryDistribution,
167     install_requires=requires,
168     setup_requires=["cython >= 0.29"],
169     extras_require=extras,
170     entry_points={
171         "console_scripts": [
172             "ray=ray.scripts.scripts:main",
173             "rllib=ray.rllib.scripts:cli [rllib]"
174         ]
175     },
176     include_package_data=True,
177     zip_safe=False,
178     license="Apache 2.0")
179
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/python/setup.py b/python/setup.py
--- a/python/setup.py
+++ b/python/setup.py
@@ -154,6 +154,8 @@
 setup(
     name="ray",
     version=find_version("ray", "__init__.py"),
+    author="Ray Team",
+    author_email="ray-dev@googlegroups.com",
     description=("A system for parallel and distributed Python that unifies "
                  "the ML ecosystem."),
     long_description=open("../README.rst").read(),

{"golden_diff": "diff --git a/python/setup.py b/python/setup.py\n--- a/python/setup.py\n+++ b/python/setup.py\n@@ -154,6 +154,8 @@\n setup(\n     name=\"ray\",\n     version=find_version(\"ray\", \"__init__.py\"),\n+    author=\"Ray Team\",\n+    author_email=\"ray-dev@googlegroups.com\",\n     description=(\"A system for parallel and distributed Python that unifies \"\n                  \"the ML ecosystem.\"),\n     long_description=open(\"../README.rst\").read(),\n", "issue": "Fix formatting of PyPI package description.\nSee https://pypi.org/project/ray/.\r\n\r\nNote that we can test this out first at https://test.pypi.org/project/ray/.\n", "before_files": [{"content": "from __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport re\nimport shutil\nimport subprocess\nimport sys\n\nfrom setuptools import setup, find_packages, Distribution\nimport setuptools.command.build_ext as _build_ext\n\n# Ideally, we could include these files by putting them in a\n# MANIFEST.in or using the package_data argument to setup, but the\n# MANIFEST.in gets applied at the very beginning when setup.py runs\n# before these files have been created, so we have to move the files\n# manually.\n\n# NOTE: The lists below must be kept in sync with ray/CMakeLists.txt.\n\nray_files = [\n    \"ray/core/src/ray/thirdparty/redis/src/redis-server\",\n    \"ray/core/src/ray/gcs/redis_module/libray_redis_module.so\",\n    \"ray/core/src/plasma/plasma_store_server\",\n    \"ray/core/src/ray/raylet/libraylet_library_python.so\",\n    \"ray/core/src/ray/raylet/raylet_monitor\", \"ray/core/src/ray/raylet/raylet\",\n    \"ray/WebUI.ipynb\"\n]\n\n# These are the directories where automatically generated Python flatbuffer\n# bindings are created.\ngenerated_python_directories = [\n    \"ray/core/generated\", \"ray/core/generated/ray\",\n    \"ray/core/generated/ray/protocol\"\n]\n\noptional_ray_files = []\n\nray_ui_files = [\n    \"ray/core/src/catapult_files/index.html\",\n    \"ray/core/src/catapult_files/trace_viewer_full.html\"\n]\n\nray_autoscaler_files = [\n    \"ray/autoscaler/aws/example-full.yaml\",\n    \"ray/autoscaler/gcp/example-full.yaml\",\n    \"ray/autoscaler/local/example-full.yaml\",\n]\n\nif \"RAY_USE_NEW_GCS\" in os.environ and os.environ[\"RAY_USE_NEW_GCS\"] == \"on\":\n    ray_files += [\n        \"ray/core/src/credis/build/src/libmember.so\",\n        \"ray/core/src/credis/build/src/libmaster.so\",\n        \"ray/core/src/credis/redis/src/redis-server\"\n    ]\n\n# The UI files are mandatory if the INCLUDE_UI environment variable equals 1.\n# Otherwise, they are optional.\nif \"INCLUDE_UI\" in os.environ and os.environ[\"INCLUDE_UI\"] == \"1\":\n    ray_files += ray_ui_files\nelse:\n    optional_ray_files += ray_ui_files\n\noptional_ray_files += ray_autoscaler_files\n\nextras = {\n    \"rllib\": [\"pyyaml\", \"gym[atari]\", \"opencv-python\", \"lz4\", \"scipy\"],\n    \"debug\": [\"psutil\", \"setproctitle\", \"py-spy\"],\n}\n\n\nclass build_ext(_build_ext.build_ext):\n    def run(self):\n        # Note: We are passing in sys.executable so that we use the same\n        # version of Python to build pyarrow inside the build.sh script. Note\n        # that certain flags will not be passed along such as --user or sudo.\n        # TODO(rkn): Fix this.\n        subprocess.check_call([\"../build.sh\", \"-p\", sys.executable])\n\n        # We also need to install pyarrow along with Ray, so make sure that the\n        # relevant non-Python pyarrow files get copied.\n        pyarrow_files = []\n        for (root, dirs, filenames) in os.walk(\"./ray/pyarrow_files/pyarrow\"):\n            for name in filenames:\n                pyarrow_files.append(os.path.join(root, name))\n\n        files_to_include = ray_files + pyarrow_files\n\n        # Copy over the autogenerated flatbuffer Python bindings.\n        for directory in generated_python_directories:\n            for filename in os.listdir(directory):\n                if filename[-3:] == \".py\":\n                    files_to_include.append(os.path.join(directory, filename))\n\n        for filename in files_to_include:\n            self.move_file(filename)\n\n        # Try to copy over the optional files.\n        for filename in optional_ray_files:\n            try:\n                self.move_file(filename)\n            except Exception:\n                print(\"Failed to copy optional file {}. This is ok.\"\n                      .format(filename))\n\n    def move_file(self, filename):\n        # TODO(rkn): This feels very brittle. It may not handle all cases. See\n        # https://github.com/apache/arrow/blob/master/python/setup.py for an\n        # example.\n        source = filename\n        destination = os.path.join(self.build_lib, filename)\n        # Create the target directory if it doesn't already exist.\n        parent_directory = os.path.dirname(destination)\n        if not os.path.exists(parent_directory):\n            os.makedirs(parent_directory)\n        print(\"Copying {} to {}.\".format(source, destination))\n        shutil.copy(source, destination)\n\n\nclass BinaryDistribution(Distribution):\n    def has_ext_modules(self):\n        return True\n\n\ndef find_version(*filepath):\n    # Extract version information from filepath\n    here = os.path.abspath(os.path.dirname(__file__))\n    with open(os.path.join(here, *filepath)) as fp:\n        version_match = re.search(r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\",\n                                  fp.read(), re.M)\n        if version_match:\n            return version_match.group(1)\n        raise RuntimeError(\"Unable to find version string.\")\n\n\nrequires = [\n    \"numpy\",\n    \"filelock\",\n    \"funcsigs\",\n    \"click\",\n    \"colorama\",\n    \"pytest\",\n    \"pyyaml\",\n    \"redis\",\n    # The six module is required by pyarrow.\n    \"six >= 1.0.0\",\n    \"flatbuffers\",\n]\n\nif sys.version_info < (3, 0):\n    requires.append(\"faulthandler\")\n\nsetup(\n    name=\"ray\",\n    version=find_version(\"ray\", \"__init__.py\"),\n    description=(\"A system for parallel and distributed Python that unifies \"\n                 \"the ML ecosystem.\"),\n    long_description=open(\"../README.rst\").read(),\n    url=\"https://github.com/ray-project/ray\",\n    keywords=(\"ray distributed parallel machine-learning \"\n              \"reinforcement-learning deep-learning python\"),\n    packages=find_packages(),\n    cmdclass={\"build_ext\": build_ext},\n    # The BinaryDistribution argument triggers build_ext.\n    distclass=BinaryDistribution,\n    install_requires=requires,\n    setup_requires=[\"cython >= 0.29\"],\n    extras_require=extras,\n    entry_points={\n        \"console_scripts\": [\n            \"ray=ray.scripts.scripts:main\",\n            \"rllib=ray.rllib.scripts:cli [rllib]\"\n        ]\n    },\n    include_package_data=True,\n    zip_safe=False,\n    license=\"Apache 2.0\")\n", "path": "python/setup.py"}], "after_files": [{"content": "from __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport re\nimport shutil\nimport subprocess\nimport sys\n\nfrom setuptools import setup, find_packages, Distribution\nimport setuptools.command.build_ext as _build_ext\n\n# Ideally, we could include these files by putting them in a\n# MANIFEST.in or using the package_data argument to setup, but the\n# MANIFEST.in gets applied at the very beginning when setup.py runs\n# before these files have been created, so we have to move the files\n# manually.\n\n# NOTE: The lists below must be kept in sync with ray/CMakeLists.txt.\n\nray_files = [\n    \"ray/core/src/ray/thirdparty/redis/src/redis-server\",\n    \"ray/core/src/ray/gcs/redis_module/libray_redis_module.so\",\n    \"ray/core/src/plasma/plasma_store_server\",\n    \"ray/core/src/ray/raylet/libraylet_library_python.so\",\n    \"ray/core/src/ray/raylet/raylet_monitor\", \"ray/core/src/ray/raylet/raylet\",\n    \"ray/WebUI.ipynb\"\n]\n\n# These are the directories where automatically generated Python flatbuffer\n# bindings are created.\ngenerated_python_directories = [\n    \"ray/core/generated\", \"ray/core/generated/ray\",\n    \"ray/core/generated/ray/protocol\"\n]\n\noptional_ray_files = []\n\nray_ui_files = [\n    \"ray/core/src/catapult_files/index.html\",\n    \"ray/core/src/catapult_files/trace_viewer_full.html\"\n]\n\nray_autoscaler_files = [\n    \"ray/autoscaler/aws/example-full.yaml\",\n    \"ray/autoscaler/gcp/example-full.yaml\",\n    \"ray/autoscaler/local/example-full.yaml\",\n]\n\nif \"RAY_USE_NEW_GCS\" in os.environ and os.environ[\"RAY_USE_NEW_GCS\"] == \"on\":\n    ray_files += [\n        \"ray/core/src/credis/build/src/libmember.so\",\n        \"ray/core/src/credis/build/src/libmaster.so\",\n        \"ray/core/src/credis/redis/src/redis-server\"\n    ]\n\n# The UI files are mandatory if the INCLUDE_UI environment variable equals 1.\n# Otherwise, they are optional.\nif \"INCLUDE_UI\" in os.environ and os.environ[\"INCLUDE_UI\"] == \"1\":\n    ray_files += ray_ui_files\nelse:\n    optional_ray_files += ray_ui_files\n\noptional_ray_files += ray_autoscaler_files\n\nextras = {\n    \"rllib\": [\"pyyaml\", \"gym[atari]\", \"opencv-python\", \"lz4\", \"scipy\"],\n    \"debug\": [\"psutil\", \"setproctitle\", \"py-spy\"],\n}\n\n\nclass build_ext(_build_ext.build_ext):\n    def run(self):\n        # Note: We are passing in sys.executable so that we use the same\n        # version of Python to build pyarrow inside the build.sh script. Note\n        # that certain flags will not be passed along such as --user or sudo.\n        # TODO(rkn): Fix this.\n        subprocess.check_call([\"../build.sh\", \"-p\", sys.executable])\n\n        # We also need to install pyarrow along with Ray, so make sure that the\n        # relevant non-Python pyarrow files get copied.\n        pyarrow_files = []\n        for (root, dirs, filenames) in os.walk(\"./ray/pyarrow_files/pyarrow\"):\n            for name in filenames:\n                pyarrow_files.append(os.path.join(root, name))\n\n        files_to_include = ray_files + pyarrow_files\n\n        # Copy over the autogenerated flatbuffer Python bindings.\n        for directory in generated_python_directories:\n            for filename in os.listdir(directory):\n                if filename[-3:] == \".py\":\n                    files_to_include.append(os.path.join(directory, filename))\n\n        for filename in files_to_include:\n            self.move_file(filename)\n\n        # Try to copy over the optional files.\n        for filename in optional_ray_files:\n            try:\n                self.move_file(filename)\n            except Exception:\n                print(\"Failed to copy optional file {}. This is ok.\"\n                      .format(filename))\n\n    def move_file(self, filename):\n        # TODO(rkn): This feels very brittle. It may not handle all cases. See\n        # https://github.com/apache/arrow/blob/master/python/setup.py for an\n        # example.\n        source = filename\n        destination = os.path.join(self.build_lib, filename)\n        # Create the target directory if it doesn't already exist.\n        parent_directory = os.path.dirname(destination)\n        if not os.path.exists(parent_directory):\n            os.makedirs(parent_directory)\n        print(\"Copying {} to {}.\".format(source, destination))\n        shutil.copy(source, destination)\n\n\nclass BinaryDistribution(Distribution):\n    def has_ext_modules(self):\n        return True\n\n\ndef find_version(*filepath):\n    # Extract version information from filepath\n    here = os.path.abspath(os.path.dirname(__file__))\n    with open(os.path.join(here, *filepath)) as fp:\n        version_match = re.search(r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\",\n                                  fp.read(), re.M)\n        if version_match:\n            return version_match.group(1)\n        raise RuntimeError(\"Unable to find version string.\")\n\n\nrequires = [\n    \"numpy\",\n    \"filelock\",\n    \"funcsigs\",\n    \"click\",\n    \"colorama\",\n    \"pytest\",\n    \"pyyaml\",\n    \"redis\",\n    # The six module is required by pyarrow.\n    \"six >= 1.0.0\",\n    \"flatbuffers\",\n]\n\nif sys.version_info < (3, 0):\n    requires.append(\"faulthandler\")\n\nsetup(\n    name=\"ray\",\n    version=find_version(\"ray\", \"__init__.py\"),\n    author=\"Ray Team\",\n    author_email=\"ray-dev@googlegroups.com\",\n    description=(\"A system for parallel and distributed Python that unifies \"\n                 \"the ML ecosystem.\"),\n    long_description=open(\"../README.rst\").read(),\n    url=\"https://github.com/ray-project/ray\",\n    keywords=(\"ray distributed parallel machine-learning \"\n              \"reinforcement-learning deep-learning python\"),\n    packages=find_packages(),\n    cmdclass={\"build_ext\": build_ext},\n    # The BinaryDistribution argument triggers build_ext.\n    distclass=BinaryDistribution,\n    install_requires=requires,\n    setup_requires=[\"cython >= 0.29\"],\n    extras_require=extras,\n    entry_points={\n        \"console_scripts\": [\n            \"ray=ray.scripts.scripts:main\",\n            \"rllib=ray.rllib.scripts:cli [rllib]\"\n        ]\n    },\n    include_package_data=True,\n    zip_safe=False,\n    license=\"Apache 2.0\")\n", "path": "python/setup.py"}]}