We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Pin optional dependencies at the minor release level
# Description

To avoid having our prior releases break like `v0.0.15` did in Issue #396 it would be good to pin our optional dependencies at the minor release level for each release. This should safeguard us from old releases getting broken by API changes in the dependencies that we use as applications.

To be clear, I don't think we should limit the dependencies in `install_requires` beyond placing _lower_ bounds, but I do think that we should now be placing upper bounds on all of the optional dependencies as we are really more using those as **applications** in our library.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `setup.py`
Content:
```
1 #!/usr/bin/env python
2 
3 from setuptools import setup, find_packages
4 from os import path
5 import sys
6 
7 this_directory = path.abspath(path.dirname(__file__))
8 if sys.version_info.major < 3:
9     from io import open
10 with open(path.join(this_directory, 'README.md'), encoding='utf-8') as readme_md:
11     long_description = readme_md.read()
12 
13 extras_require = {
14     'tensorflow': [
15         'tensorflow>=1.12.0',
16         'tensorflow-probability>=0.5.0',
17         'numpy<=1.14.5,>=1.14.0',  # Lower of 1.14.0 instead of 1.13.3 to ensure doctest pass
18         'setuptools<=39.1.0',
19     ],
20     'torch': ['torch>=1.0.0'],
21     'mxnet': [
22         'mxnet>=1.0.0',
23         'requests<2.19.0,>=2.18.4',
24         'numpy<1.15.0,>=1.8.2',
25         'requests<2.19.0,>=2.18.4',
26     ],
27     # 'dask': [
28     #     'dask[array]'
29     # ],
30     'xmlimport': ['uproot'],
31     'minuit': ['iminuit'],
32     'develop': [
33         'pyflakes',
34         'pytest<4.0.0,>=3.5.1',
35         'pytest-cov>=2.5.1',
36         'pytest-mock',
37         'pytest-benchmark[histogram]',
38         'pytest-console-scripts',
39         'python-coveralls',
40         'coverage>=4.0',  # coveralls
41         'matplotlib',
42         'jupyter',
43         'nbdime',
44         'uproot>=3.3.0',
45         'papermill>=0.16.0',
46         'graphviz',
47         'bumpversion',
48         'sphinx',
49         'sphinxcontrib-bibtex',
50         'sphinxcontrib-napoleon',
51         'sphinx_rtd_theme',
52         'nbsphinx',
53         'sphinx-issues',
54         'm2r',
55         'jsonpatch',
56         'ipython<7',  # jupyter_console and ipython clash in dependency requirement -- downgrade ipython for now
57         'pre-commit',
58         'black;python_version>="3.6"',  # Black is Python3 only
59         'twine',
60     ],
61 }
62 extras_require['complete'] = sorted(set(sum(extras_require.values(), [])))
63 
64 setup(
65     name='pyhf',
66     version='0.0.16',
67     description='(partial) pure python histfactory implementation',
68     long_description=long_description,
69     long_description_content_type='text/markdown',
70     url='https://github.com/diana-hep/pyhf',
71     author='Lukas Heinrich',
72     author_email='lukas.heinrich@cern.ch',
73     license='Apache',
74     keywords='physics fitting numpy scipy tensorflow pytorch mxnet dask',
75     classifiers=[
76         "Programming Language :: Python :: 2",
77         "Programming Language :: Python :: 2.7",
78         "Programming Language :: Python :: 3",
79         "Programming Language :: Python :: 3.6",
80         "Programming Language :: Python :: 3.7",
81     ],
82     packages=find_packages(),
83     include_package_data=True,
84     python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*",
85     install_requires=[
86         'scipy',  # requires numpy, which is required by pyhf, tensorflow, and mxnet
87         'click>=6.0',  # for console scripts,
88         'tqdm',  # for readxml
89         'six',  # for modifiers
90         'jsonschema>=v3.0.0a2',  # for utils, alpha-release for draft 6
91         'jsonpatch',
92     ],
93     extras_require=extras_require,
94     entry_points={'console_scripts': ['pyhf=pyhf.commandline:pyhf']},
95     dependency_links=[],
96 )
97
```
--- 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/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -12,18 +12,13 @@
 
 extras_require = {
     'tensorflow': [
-        'tensorflow>=1.12.0',
-        'tensorflow-probability>=0.5.0',
+        'tensorflow~=1.13',
+        'tensorflow-probability~=0.5',
         'numpy<=1.14.5,>=1.14.0',  # Lower of 1.14.0 instead of 1.13.3 to ensure doctest pass
         'setuptools<=39.1.0',
     ],
-    'torch': ['torch>=1.0.0'],
-    'mxnet': [
-        'mxnet>=1.0.0',
-        'requests<2.19.0,>=2.18.4',
-        'numpy<1.15.0,>=1.8.2',
-        'requests<2.19.0,>=2.18.4',
-    ],
+    'torch': ['torch~=1.0'],
+    'mxnet': ['mxnet~=1.0', 'requests~=2.18.4', 'numpy<1.15.0,>=1.8.2'],
     # 'dask': [
     #     'dask[array]'
     # ],
@@ -31,7 +26,7 @@
     'minuit': ['iminuit'],
     'develop': [
         'pyflakes',
-        'pytest<4.0.0,>=3.5.1',
+        'pytest~=3.5',
         'pytest-cov>=2.5.1',
         'pytest-mock',
         'pytest-benchmark[histogram]',
@@ -41,8 +36,8 @@
         'matplotlib',
         'jupyter',
         'nbdime',
-        'uproot>=3.3.0',
-        'papermill>=0.16.0',
+        'uproot~=3.3',
+        'papermill~=0.16',
         'graphviz',
         'bumpversion',
         'sphinx',

{"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -12,18 +12,13 @@\n \n extras_require = {\n     'tensorflow': [\n-        'tensorflow>=1.12.0',\n-        'tensorflow-probability>=0.5.0',\n+        'tensorflow~=1.13',\n+        'tensorflow-probability~=0.5',\n         'numpy<=1.14.5,>=1.14.0',  # Lower of 1.14.0 instead of 1.13.3 to ensure doctest pass\n         'setuptools<=39.1.0',\n     ],\n-    'torch': ['torch>=1.0.0'],\n-    'mxnet': [\n-        'mxnet>=1.0.0',\n-        'requests<2.19.0,>=2.18.4',\n-        'numpy<1.15.0,>=1.8.2',\n-        'requests<2.19.0,>=2.18.4',\n-    ],\n+    'torch': ['torch~=1.0'],\n+    'mxnet': ['mxnet~=1.0', 'requests~=2.18.4', 'numpy<1.15.0,>=1.8.2'],\n     # 'dask': [\n     #     'dask[array]'\n     # ],\n@@ -31,7 +26,7 @@\n     'minuit': ['iminuit'],\n     'develop': [\n         'pyflakes',\n-        'pytest<4.0.0,>=3.5.1',\n+        'pytest~=3.5',\n         'pytest-cov>=2.5.1',\n         'pytest-mock',\n         'pytest-benchmark[histogram]',\n@@ -41,8 +36,8 @@\n         'matplotlib',\n         'jupyter',\n         'nbdime',\n-        'uproot>=3.3.0',\n-        'papermill>=0.16.0',\n+        'uproot~=3.3',\n+        'papermill~=0.16',\n         'graphviz',\n         'bumpversion',\n         'sphinx',\n", "issue": "Pin optional dependencies at the minor release level\n# Description\r\n\r\nTo avoid having our prior releases break like `v0.0.15` did in Issue #396 it would be good to pin our optional dependencies at the minor release level for each release. This should safeguard us from old releases getting broken by API changes in the dependencies that we use as applications.\r\n\r\nTo be clear, I don't think we should limit the dependencies in `install_requires` beyond placing _lower_ bounds, but I do think that we should now be placing upper bounds on all of the optional dependencies as we are really more using those as **applications** in our library.\n", "before_files": [{"content": "#!/usr/bin/env python\n\nfrom setuptools import setup, find_packages\nfrom os import path\nimport sys\n\nthis_directory = path.abspath(path.dirname(__file__))\nif sys.version_info.major < 3:\n    from io import open\nwith open(path.join(this_directory, 'README.md'), encoding='utf-8') as readme_md:\n    long_description = readme_md.read()\n\nextras_require = {\n    'tensorflow': [\n        'tensorflow>=1.12.0',\n        'tensorflow-probability>=0.5.0',\n        'numpy<=1.14.5,>=1.14.0',  # Lower of 1.14.0 instead of 1.13.3 to ensure doctest pass\n        'setuptools<=39.1.0',\n    ],\n    'torch': ['torch>=1.0.0'],\n    'mxnet': [\n        'mxnet>=1.0.0',\n        'requests<2.19.0,>=2.18.4',\n        'numpy<1.15.0,>=1.8.2',\n        'requests<2.19.0,>=2.18.4',\n    ],\n    # 'dask': [\n    #     'dask[array]'\n    # ],\n    'xmlimport': ['uproot'],\n    'minuit': ['iminuit'],\n    'develop': [\n        'pyflakes',\n        'pytest<4.0.0,>=3.5.1',\n        'pytest-cov>=2.5.1',\n        'pytest-mock',\n        'pytest-benchmark[histogram]',\n        'pytest-console-scripts',\n        'python-coveralls',\n        'coverage>=4.0',  # coveralls\n        'matplotlib',\n        'jupyter',\n        'nbdime',\n        'uproot>=3.3.0',\n        'papermill>=0.16.0',\n        'graphviz',\n        'bumpversion',\n        'sphinx',\n        'sphinxcontrib-bibtex',\n        'sphinxcontrib-napoleon',\n        'sphinx_rtd_theme',\n        'nbsphinx',\n        'sphinx-issues',\n        'm2r',\n        'jsonpatch',\n        'ipython<7',  # jupyter_console and ipython clash in dependency requirement -- downgrade ipython for now\n        'pre-commit',\n        'black;python_version>=\"3.6\"',  # Black is Python3 only\n        'twine',\n    ],\n}\nextras_require['complete'] = sorted(set(sum(extras_require.values(), [])))\n\nsetup(\n    name='pyhf',\n    version='0.0.16',\n    description='(partial) pure python histfactory implementation',\n    long_description=long_description,\n    long_description_content_type='text/markdown',\n    url='https://github.com/diana-hep/pyhf',\n    author='Lukas Heinrich',\n    author_email='lukas.heinrich@cern.ch',\n    license='Apache',\n    keywords='physics fitting numpy scipy tensorflow pytorch mxnet dask',\n    classifiers=[\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n    ],\n    packages=find_packages(),\n    include_package_data=True,\n    python_requires=\">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*\",\n    install_requires=[\n        'scipy',  # requires numpy, which is required by pyhf, tensorflow, and mxnet\n        'click>=6.0',  # for console scripts,\n        'tqdm',  # for readxml\n        'six',  # for modifiers\n        'jsonschema>=v3.0.0a2',  # for utils, alpha-release for draft 6\n        'jsonpatch',\n    ],\n    extras_require=extras_require,\n    entry_points={'console_scripts': ['pyhf=pyhf.commandline:pyhf']},\n    dependency_links=[],\n)\n", "path": "setup.py"}], "after_files": [{"content": "#!/usr/bin/env python\n\nfrom setuptools import setup, find_packages\nfrom os import path\nimport sys\n\nthis_directory = path.abspath(path.dirname(__file__))\nif sys.version_info.major < 3:\n    from io import open\nwith open(path.join(this_directory, 'README.md'), encoding='utf-8') as readme_md:\n    long_description = readme_md.read()\n\nextras_require = {\n    'tensorflow': [\n        'tensorflow~=1.13',\n        'tensorflow-probability~=0.5',\n        'numpy<=1.14.5,>=1.14.0',  # Lower of 1.14.0 instead of 1.13.3 to ensure doctest pass\n        'setuptools<=39.1.0',\n    ],\n    'torch': ['torch~=1.0'],\n    'mxnet': ['mxnet~=1.0', 'requests~=2.18.4', 'numpy<1.15.0,>=1.8.2'],\n    # 'dask': [\n    #     'dask[array]'\n    # ],\n    'xmlimport': ['uproot'],\n    'minuit': ['iminuit'],\n    'develop': [\n        'pyflakes',\n        'pytest~=3.5',\n        'pytest-cov>=2.5.1',\n        'pytest-mock',\n        'pytest-benchmark[histogram]',\n        'pytest-console-scripts',\n        'python-coveralls',\n        'coverage>=4.0',  # coveralls\n        'matplotlib',\n        'jupyter',\n        'nbdime',\n        'uproot~=3.3',\n        'papermill~=0.16',\n        'graphviz',\n        'bumpversion',\n        'sphinx',\n        'sphinxcontrib-bibtex',\n        'sphinxcontrib-napoleon',\n        'sphinx_rtd_theme',\n        'nbsphinx',\n        'sphinx-issues',\n        'm2r',\n        'jsonpatch',\n        'ipython<7',  # jupyter_console and ipython clash in dependency requirement -- downgrade ipython for now\n        'pre-commit',\n        'black;python_version>=\"3.6\"',  # Black is Python3 only\n        'twine',\n    ],\n}\nextras_require['complete'] = sorted(set(sum(extras_require.values(), [])))\n\nsetup(\n    name='pyhf',\n    version='0.0.16',\n    description='(partial) pure python histfactory implementation',\n    long_description=long_description,\n    long_description_content_type='text/markdown',\n    url='https://github.com/diana-hep/pyhf',\n    author='Lukas Heinrich',\n    author_email='lukas.heinrich@cern.ch',\n    license='Apache',\n    keywords='physics fitting numpy scipy tensorflow pytorch mxnet dask',\n    classifiers=[\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n    ],\n    packages=find_packages(),\n    include_package_data=True,\n    python_requires=\">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*\",\n    install_requires=[\n        'scipy',  # requires numpy, which is required by pyhf, tensorflow, and mxnet\n        'click>=6.0',  # for console scripts,\n        'tqdm',  # for readxml\n        'six',  # for modifiers\n        'jsonschema>=v3.0.0a2',  # for utils, alpha-release for draft 6\n        'jsonpatch',\n    ],\n    extras_require=extras_require,\n    entry_points={'console_scripts': ['pyhf=pyhf.commandline:pyhf']},\n    dependency_links=[],\n)\n", "path": "setup.py"}]}