prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Missing dependencies: xlswriter, xlrd, cryptography
  Hi,
  
  I am currently following the instructions for the installation of the development version, as shown here: https://www.pandapower.org/start/#develop
  
  I have a brand new virtual environment on Python 3.8.3 (Windows 10, 64 bits), and the tests failed because of the following missing dependencies:
  
  > Edit: Same result on Python 3.7.8.
  
  1. xlsxwriter: `FAILED pandapower\test\api\test_file_io.py::test_excel[1] - ModuleNotFoundError: No module named 'xlsxwriter'`
  2. xlrd: `FAILED pandapower\test\api\test_file_io.py::test_excel[1] - ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.`
  3. cryptography: `FAILED pandapower\test\api\test_file_io.py::test_encrypted_json[1] - ModuleNotFoundError: No module named 'cryptography'`
  
  The permanent solution would most likely be to add those to setup.py and mention them in the documentation, but you might want to check if you should restrict the version.
  
  P.S.: The tests still ended up failing, but that's a seperate issue (see issue #876 ).
  
  </issue>
  <code>
  [start of setup.py]
  1 # -*- coding: utf-8 -*-
  2 
  3 # Copyright (c) 2016-2020 by University of Kassel and Fraunhofer Institute for Energy Economics
  4 # and Energy System Technology (IEE), Kassel. All rights reserved.
  5 
  6 from setuptools import setup, find_packages
  7 import re
  8 
  9 with open('README.rst', 'rb') as f:
  10     install = f.read().decode('utf-8')
  11 
  12 with open('CHANGELOG.rst', 'rb') as f:
  13     changelog = f.read().decode('utf-8')
  14 
  15 classifiers = [
  16     'Development Status :: 5 - Production/Stable',
  17     'Environment :: Console',
  18     'Intended Audience :: Developers',
  19     'Intended Audience :: Education',
  20     'Intended Audience :: Science/Research',
  21     'License :: OSI Approved :: BSD License',
  22     'Natural Language :: English',
  23     'Operating System :: OS Independent',
  24     'Programming Language :: Python',
  25     'Programming Language :: Python :: 3']
  26 
  27 with open('.travis.yml', 'rb') as f:
  28     lines = f.read().decode('utf-8')
  29     for version in re.findall('python: 3.[0-9]', lines):
  30         classifiers.append('Programming Language :: Python :: 3.%s' % version[-1])
  31 
  32 long_description = '\n\n'.join((install, changelog))
  33 
  34 setup(
  35     name='pandapower',
  36     version='2.3.0',
  37     author='Leon Thurner, Alexander Scheidler',
  38     author_email='leon.thurner@iee.fraunhofer.de, alexander.scheidler@iee.fraunhofer.de',
  39     description='Convenient Power System Modelling and Analysis based on PYPOWER and pandas',
  40     long_description=long_description,
  41 	long_description_content_type='text/x-rst',
  42     url='http://www.pandapower.org',
  43     license='BSD',
  44     install_requires=["pandas>=0.17",
  45                       "networkx",
  46                       "scipy",
  47                       "numpy>=0.11",
  48                       "packaging"],
  49     extras_require={":python_version<'3.0'": ["future"],
  50                     "docs": ["numpydoc", "sphinx", "sphinx_rtd_theme"],
  51                     "plotting": ["plotly", "matplotlib", "python-igraph"],
  52                     "test": ["pytest", "pytest-xdist"]},
  53     packages=find_packages(),
  54     include_package_data=True,
  55     classifiers=classifiers
  56 )
  57
  [end of setup.py]
  [start of pandapower/__init__.py]
  1 __version__ = "2.3.0"
  2 
  3 import os
  4 pp_dir = os.path.dirname(os.path.realpath(__file__))
  5 
  6 from pandapower.auxiliary import *
  7 from pandapower.convert_format import *
  8 from pandapower.create import *
  9 from pandapower.diagnostic import *
  10 from pandapower.file_io import *
  11 from pandapower.run import *
  12 from pandapower.runpm import *
  13 from pandapower.std_types import *
  14 from pandapower.toolbox import *
  15 from pandapower.powerflow import *
  16 from pandapower.opf import *
  17 from pandapower.optimal_powerflow import OPFNotConverged
  18 from pandapower.pf.runpp_3ph import runpp_3ph
  19 import pandas as pd
  20 pd.options.mode.chained_assignment = None  # default='warn'
  21
  [end of pandapower/__init__.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/pandapower/__init__.py b/pandapower/__init__.py
  --- a/pandapower/__init__.py
  +++ b/pandapower/__init__.py
  @@ -1,4 +1,4 @@
  -__version__ = "2.3.0"
  +__version__ = "2.3.1"
   
   import os
   pp_dir = os.path.dirname(os.path.realpath(__file__))
  diff --git a/setup.py b/setup.py
  --- a/setup.py
  +++ b/setup.py
  @@ -33,10 +33,10 @@
   
   setup(
       name='pandapower',
  -    version='2.3.0',
  +    version='2.3.1',
       author='Leon Thurner, Alexander Scheidler',
       author_email='leon.thurner@iee.fraunhofer.de, alexander.scheidler@iee.fraunhofer.de',
  -    description='Convenient Power System Modelling and Analysis based on PYPOWER and pandas',
  +    description='An easy to use open source tool for power system modeling, analysis and optimization with a high degree of automation.',
       long_description=long_description,
   	long_description_content_type='text/x-rst',
       url='http://www.pandapower.org',
  @@ -45,11 +45,14 @@
                         "networkx",
                         "scipy",
                         "numpy>=0.11",
  -                      "packaging"],
  -    extras_require={":python_version<'3.0'": ["future"],
  -                    "docs": ["numpydoc", "sphinx", "sphinx_rtd_theme"],
  -                    "plotting": ["plotly", "matplotlib", "python-igraph"],
  -                    "test": ["pytest", "pytest-xdist"]},
  +                      "packaging",
  +					  "xlsxwriter",
  +					  "xlrd",
  +					  "cryptography"],
  +    extras_require={
  +		"docs": ["numpydoc", "sphinx", "sphinx_rtd_theme"],
  +		"plotting": ["plotly", "matplotlib", "python-igraph"],
  +		"test": ["pytest", "pytest-xdist"]},
       packages=find_packages(),
       include_package_data=True,
       classifiers=classifiers
  
verification_info: {"golden_diff": "diff --git a/pandapower/__init__.py b/pandapower/__init__.py\n--- a/pandapower/__init__.py\n+++ b/pandapower/__init__.py\n@@ -1,4 +1,4 @@\n-__version__ = \"2.3.0\"\n+__version__ = \"2.3.1\"\n \n import os\n pp_dir = os.path.dirname(os.path.realpath(__file__))\ndiff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -33,10 +33,10 @@\n \n setup(\n     name='pandapower',\n-    version='2.3.0',\n+    version='2.3.1',\n     author='Leon Thurner, Alexander Scheidler',\n     author_email='leon.thurner@iee.fraunhofer.de, alexander.scheidler@iee.fraunhofer.de',\n-    description='Convenient Power System Modelling and Analysis based on PYPOWER and pandas',\n+    description='An easy to use open source tool for power system modeling, analysis and optimization with a high degree of automation.',\n     long_description=long_description,\n \tlong_description_content_type='text/x-rst',\n     url='http://www.pandapower.org',\n@@ -45,11 +45,14 @@\n                       \"networkx\",\n                       \"scipy\",\n                       \"numpy>=0.11\",\n-                      \"packaging\"],\n-    extras_require={\":python_version<'3.0'\": [\"future\"],\n-                    \"docs\": [\"numpydoc\", \"sphinx\", \"sphinx_rtd_theme\"],\n-                    \"plotting\": [\"plotly\", \"matplotlib\", \"python-igraph\"],\n-                    \"test\": [\"pytest\", \"pytest-xdist\"]},\n+                      \"packaging\",\n+\t\t\t\t\t  \"xlsxwriter\",\n+\t\t\t\t\t  \"xlrd\",\n+\t\t\t\t\t  \"cryptography\"],\n+    extras_require={\n+\t\t\"docs\": [\"numpydoc\", \"sphinx\", \"sphinx_rtd_theme\"],\n+\t\t\"plotting\": [\"plotly\", \"matplotlib\", \"python-igraph\"],\n+\t\t\"test\": [\"pytest\", \"pytest-xdist\"]},\n     packages=find_packages(),\n     include_package_data=True,\n     classifiers=classifiers\n", "issue": "Missing dependencies: xlswriter, xlrd, cryptography\nHi,\r\n\r\nI am currently following the instructions for the installation of the development version, as shown here: https://www.pandapower.org/start/#develop\r\n\r\nI have a brand new virtual environment on Python 3.8.3 (Windows 10, 64 bits), and the tests failed because of the following missing dependencies:\r\n\r\n> Edit: Same result on Python 3.7.8.\r\n\r\n1. xlsxwriter: `FAILED pandapower\\test\\api\\test_file_io.py::test_excel[1] - ModuleNotFoundError: No module named 'xlsxwriter'`\r\n2. xlrd: `FAILED pandapower\\test\\api\\test_file_io.py::test_excel[1] - ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.`\r\n3. cryptography: `FAILED pandapower\\test\\api\\test_file_io.py::test_encrypted_json[1] - ModuleNotFoundError: No module named 'cryptography'`\r\n\r\nThe permanent solution would most likely be to add those to setup.py and mention them in the documentation, but you might want to check if you should restrict the version.\r\n\r\nP.S.: The tests still ended up failing, but that's a seperate issue (see issue #876 ).\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\n# Copyright (c) 2016-2020 by University of Kassel and Fraunhofer Institute for Energy Economics\n# and Energy System Technology (IEE), Kassel. All rights reserved.\n\nfrom setuptools import setup, find_packages\nimport re\n\nwith open('README.rst', 'rb') as f:\n    install = f.read().decode('utf-8')\n\nwith open('CHANGELOG.rst', 'rb') as f:\n    changelog = f.read().decode('utf-8')\n\nclassifiers = [\n    'Development Status :: 5 - Production/Stable',\n    'Environment :: Console',\n    'Intended Audience :: Developers',\n    'Intended Audience :: Education',\n    'Intended Audience :: Science/Research',\n    'License :: OSI Approved :: BSD License',\n    'Natural Language :: English',\n    'Operating System :: OS Independent',\n    'Programming Language :: Python',\n    'Programming Language :: Python :: 3']\n\nwith open('.travis.yml', 'rb') as f:\n    lines = f.read().decode('utf-8')\n    for version in re.findall('python: 3.[0-9]', lines):\n        classifiers.append('Programming Language :: Python :: 3.%s' % version[-1])\n\nlong_description = '\\n\\n'.join((install, changelog))\n\nsetup(\n    name='pandapower',\n    version='2.3.0',\n    author='Leon Thurner, Alexander Scheidler',\n    author_email='leon.thurner@iee.fraunhofer.de, alexander.scheidler@iee.fraunhofer.de',\n    description='Convenient Power System Modelling and Analysis based on PYPOWER and pandas',\n    long_description=long_description,\n\tlong_description_content_type='text/x-rst',\n    url='http://www.pandapower.org',\n    license='BSD',\n    install_requires=[\"pandas>=0.17\",\n                      \"networkx\",\n                      \"scipy\",\n                      \"numpy>=0.11\",\n                      \"packaging\"],\n    extras_require={\":python_version<'3.0'\": [\"future\"],\n                    \"docs\": [\"numpydoc\", \"sphinx\", \"sphinx_rtd_theme\"],\n                    \"plotting\": [\"plotly\", \"matplotlib\", \"python-igraph\"],\n                    \"test\": [\"pytest\", \"pytest-xdist\"]},\n    packages=find_packages(),\n    include_package_data=True,\n    classifiers=classifiers\n)\n", "path": "setup.py"}, {"content": "__version__ = \"2.3.0\"\n\nimport os\npp_dir = os.path.dirname(os.path.realpath(__file__))\n\nfrom pandapower.auxiliary import *\nfrom pandapower.convert_format import *\nfrom pandapower.create import *\nfrom pandapower.diagnostic import *\nfrom pandapower.file_io import *\nfrom pandapower.run import *\nfrom pandapower.runpm import *\nfrom pandapower.std_types import *\nfrom pandapower.toolbox import *\nfrom pandapower.powerflow import *\nfrom pandapower.opf import *\nfrom pandapower.optimal_powerflow import OPFNotConverged\nfrom pandapower.pf.runpp_3ph import runpp_3ph\nimport pandas as pd\npd.options.mode.chained_assignment = None  # default='warn'\n", "path": "pandapower/__init__.py"}]}