prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Add pyhf.writexml and pyhf.readxml to public API docs
  # Description
  
  As first brought up in PR #1125, `pyhf.writexml` and `pyhf.readxml` are not currently documented in the public Python API docs. This should get fixed.
  
  </issue>
  <code>
  [start of setup.py]
  1 from setuptools import setup
  2 
  3 extras_require = {
  4     'shellcomplete': ['click_completion'],
  5     'tensorflow': [
  6         'tensorflow~=2.2.0',  # TensorFlow minor releases are as volatile as major
  7         'tensorflow-probability~=0.10.0',
  8     ],
  9     'torch': ['torch~=1.2'],
  10     'jax': ['jax~=0.2.4', 'jaxlib~=0.1.56'],
  11     'xmlio': [
  12         'uproot3~=3.14',
  13         'uproot~=4.0',
  14     ],  # uproot3 required until writing to ROOT supported in uproot4
  15     'minuit': ['iminuit~=2.1'],
  16 }
  17 extras_require['backends'] = sorted(
  18     set(
  19         extras_require['tensorflow']
  20         + extras_require['torch']
  21         + extras_require['jax']
  22         + extras_require['minuit']
  23     )
  24 )
  25 extras_require['contrib'] = sorted({'matplotlib', 'requests'})
  26 extras_require['lint'] = sorted({'flake8', 'black'})
  27 
  28 extras_require['test'] = sorted(
  29     set(
  30         extras_require['backends']
  31         + extras_require['xmlio']
  32         + extras_require['contrib']
  33         + extras_require['shellcomplete']
  34         + [
  35             'pytest~=6.0',
  36             'pytest-cov>=2.5.1',
  37             'pytest-mock',
  38             'pytest-benchmark[histogram]',
  39             'pytest-console-scripts',
  40             'pytest-mpl',
  41             'pydocstyle',
  42             'coverage>=4.0',  # coveralls
  43             'papermill~=2.0',
  44             'nteract-scrapbook~=0.2',
  45             'jupyter',
  46             'graphviz',
  47             'jsonpatch',
  48         ]
  49     )
  50 )
  51 extras_require['docs'] = sorted(
  52     {
  53         'sphinx>=3.1.2',
  54         'sphinxcontrib-bibtex~=1.0',
  55         'sphinx-click',
  56         'sphinx_rtd_theme',
  57         'nbsphinx',
  58         'ipywidgets',
  59         'sphinx-issues',
  60         'sphinx-copybutton>0.2.9',
  61     }
  62 )
  63 extras_require['develop'] = sorted(
  64     set(
  65         extras_require['docs']
  66         + extras_require['lint']
  67         + extras_require['test']
  68         + [
  69             'nbdime',
  70             'bump2version',
  71             'ipython',
  72             'pre-commit',
  73             'check-manifest',
  74             'codemetapy>=0.3.4',
  75             'twine',
  76         ]
  77     )
  78 )
  79 extras_require['complete'] = sorted(set(sum(extras_require.values(), [])))
  80 
  81 
  82 setup(
  83     extras_require=extras_require,
  84     use_scm_version=lambda: {'local_scheme': lambda version: ''},
  85 )
  86
  [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
  @@ -49,16 +49,19 @@
       )
   )
   extras_require['docs'] = sorted(
  -    {
  -        'sphinx>=3.1.2',
  -        'sphinxcontrib-bibtex~=1.0',
  -        'sphinx-click',
  -        'sphinx_rtd_theme',
  -        'nbsphinx',
  -        'ipywidgets',
  -        'sphinx-issues',
  -        'sphinx-copybutton>0.2.9',
  -    }
  +    set(
  +        extras_require['xmlio']
  +        + [
  +            'sphinx>=3.1.2',
  +            'sphinxcontrib-bibtex~=1.0',
  +            'sphinx-click',
  +            'sphinx_rtd_theme',
  +            'nbsphinx',
  +            'ipywidgets',
  +            'sphinx-issues',
  +            'sphinx-copybutton>0.2.9',
  +        ]
  +    )
   )
   extras_require['develop'] = sorted(
       set(
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -49,16 +49,19 @@\n     )\n )\n extras_require['docs'] = sorted(\n-    {\n-        'sphinx>=3.1.2',\n-        'sphinxcontrib-bibtex~=1.0',\n-        'sphinx-click',\n-        'sphinx_rtd_theme',\n-        'nbsphinx',\n-        'ipywidgets',\n-        'sphinx-issues',\n-        'sphinx-copybutton>0.2.9',\n-    }\n+    set(\n+        extras_require['xmlio']\n+        + [\n+            'sphinx>=3.1.2',\n+            'sphinxcontrib-bibtex~=1.0',\n+            'sphinx-click',\n+            'sphinx_rtd_theme',\n+            'nbsphinx',\n+            'ipywidgets',\n+            'sphinx-issues',\n+            'sphinx-copybutton>0.2.9',\n+        ]\n+    )\n )\n extras_require['develop'] = sorted(\n     set(\n", "issue": "Add pyhf.writexml and pyhf.readxml to public API docs\n# Description\r\n\r\nAs first brought up in PR #1125, `pyhf.writexml` and `pyhf.readxml` are not currently documented in the public Python API docs. This should get fixed.\n", "before_files": [{"content": "from setuptools import setup\n\nextras_require = {\n    'shellcomplete': ['click_completion'],\n    'tensorflow': [\n        'tensorflow~=2.2.0',  # TensorFlow minor releases are as volatile as major\n        'tensorflow-probability~=0.10.0',\n    ],\n    'torch': ['torch~=1.2'],\n    'jax': ['jax~=0.2.4', 'jaxlib~=0.1.56'],\n    'xmlio': [\n        'uproot3~=3.14',\n        'uproot~=4.0',\n    ],  # uproot3 required until writing to ROOT supported in uproot4\n    'minuit': ['iminuit~=2.1'],\n}\nextras_require['backends'] = sorted(\n    set(\n        extras_require['tensorflow']\n        + extras_require['torch']\n        + extras_require['jax']\n        + extras_require['minuit']\n    )\n)\nextras_require['contrib'] = sorted({'matplotlib', 'requests'})\nextras_require['lint'] = sorted({'flake8', 'black'})\n\nextras_require['test'] = sorted(\n    set(\n        extras_require['backends']\n        + extras_require['xmlio']\n        + extras_require['contrib']\n        + extras_require['shellcomplete']\n        + [\n            'pytest~=6.0',\n            'pytest-cov>=2.5.1',\n            'pytest-mock',\n            'pytest-benchmark[histogram]',\n            'pytest-console-scripts',\n            'pytest-mpl',\n            'pydocstyle',\n            'coverage>=4.0',  # coveralls\n            'papermill~=2.0',\n            'nteract-scrapbook~=0.2',\n            'jupyter',\n            'graphviz',\n            'jsonpatch',\n        ]\n    )\n)\nextras_require['docs'] = sorted(\n    {\n        'sphinx>=3.1.2',\n        'sphinxcontrib-bibtex~=1.0',\n        'sphinx-click',\n        'sphinx_rtd_theme',\n        'nbsphinx',\n        'ipywidgets',\n        'sphinx-issues',\n        'sphinx-copybutton>0.2.9',\n    }\n)\nextras_require['develop'] = sorted(\n    set(\n        extras_require['docs']\n        + extras_require['lint']\n        + extras_require['test']\n        + [\n            'nbdime',\n            'bump2version',\n            'ipython',\n            'pre-commit',\n            'check-manifest',\n            'codemetapy>=0.3.4',\n            'twine',\n        ]\n    )\n)\nextras_require['complete'] = sorted(set(sum(extras_require.values(), [])))\n\n\nsetup(\n    extras_require=extras_require,\n    use_scm_version=lambda: {'local_scheme': lambda version: ''},\n)\n", "path": "setup.py"}]}