From ac35d02a517e83647318406fbd39080e6793c667 Mon Sep 17 00:00:00 2001 From: John Wise Date: Thu, 9 Apr 2020 10:36:28 -0400 Subject: [PATCH 1/3] six and pytest aren't included with astropy anymore Replacing all imports with a try/except. Also added vscode config directory to gitignore. --- .gitignore | 1 + hyperion/conf/conf_files.py | 5 ++++- hyperion/densities/alpha_disk.py | 5 ++++- hyperion/densities/ambient_medium.py | 5 ++++- hyperion/densities/bipolar_cavity.py | 5 ++++- hyperion/densities/flared_disk.py | 5 ++++- hyperion/densities/power_law_envelope.py | 5 ++++- hyperion/densities/ulrich_envelope.py | 5 ++++- hyperion/dust/dust_type.py | 5 ++++- hyperion/filter/filter.py | 5 ++++- hyperion/grid/tests/test_io.py | 5 ++++- hyperion/grid/tests/test_views.py | 5 ++++- hyperion/grid/yt3_wrappers.py | 5 ++++- hyperion/importers/orion.py | 5 ++++- hyperion/model/image.py | 5 ++++- hyperion/model/model.py | 5 ++++- hyperion/model/model_output.py | 5 ++++- hyperion/model/sed.py | 5 ++++- hyperion/model/tests/test_bit_level.py | 11 ++++++++--- hyperion/model/tests/test_sed.py | 5 ++++- hyperion/util/tests/test_integrate.py | 5 ++++- hyperion/util/validator.py | 5 ++++- 22 files changed, 89 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 83afcb2d..26d5d05a 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ htmlcov *.rtin *.rtout build_cmake +.vscode diff --git a/hyperion/conf/conf_files.py b/hyperion/conf/conf_files.py index d5205a1e..2d794f76 100644 --- a/hyperion/conf/conf_files.py +++ b/hyperion/conf/conf_files.py @@ -3,7 +3,10 @@ import warnings import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..util.functions import FreezableClass, bool2str, str2bool, is_numpy_array from ..filter import Filter diff --git a/hyperion/densities/alpha_disk.py b/hyperion/densities/alpha_disk.py index 7898b359..8bc00302 100644 --- a/hyperion/densities/alpha_disk.py +++ b/hyperion/densities/alpha_disk.py @@ -2,7 +2,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..dust import SphericalDust from ..util.constants import pi, G diff --git a/hyperion/densities/ambient_medium.py b/hyperion/densities/ambient_medium.py index 5d0b893e..f415afeb 100644 --- a/hyperion/densities/ambient_medium.py +++ b/hyperion/densities/ambient_medium.py @@ -1,7 +1,10 @@ from __future__ import print_function, division import numpy as np -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..dust import SphericalDust from ..grid import SphericalPolarGrid diff --git a/hyperion/densities/bipolar_cavity.py b/hyperion/densities/bipolar_cavity.py index 47426e07..94487698 100644 --- a/hyperion/densities/bipolar_cavity.py +++ b/hyperion/densities/bipolar_cavity.py @@ -2,7 +2,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..util.functions import FreezableClass from ..dust import SphericalDust diff --git a/hyperion/densities/flared_disk.py b/hyperion/densities/flared_disk.py index 6ca464c4..385dfac1 100644 --- a/hyperion/densities/flared_disk.py +++ b/hyperion/densities/flared_disk.py @@ -2,7 +2,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..dust import SphericalDust from ..util.constants import pi diff --git a/hyperion/densities/power_law_envelope.py b/hyperion/densities/power_law_envelope.py index 6864ff78..f9aa5167 100644 --- a/hyperion/densities/power_law_envelope.py +++ b/hyperion/densities/power_law_envelope.py @@ -2,7 +2,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..dust import SphericalDust from ..grid import SphericalPolarGrid, CylindricalPolarGrid diff --git a/hyperion/densities/ulrich_envelope.py b/hyperion/densities/ulrich_envelope.py index a5b862e7..3064cbee 100644 --- a/hyperion/densities/ulrich_envelope.py +++ b/hyperion/densities/ulrich_envelope.py @@ -2,7 +2,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..dust import SphericalDust from ..grid import SphericalPolarGrid, CylindricalPolarGrid diff --git a/hyperion/dust/dust_type.py b/hyperion/dust/dust_type.py index a7953c20..6363d363 100644 --- a/hyperion/dust/dust_type.py +++ b/hyperion/dust/dust_type.py @@ -17,7 +17,10 @@ import h5py import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..version import __version__ diff --git a/hyperion/filter/filter.py b/hyperion/filter/filter.py index d97684d3..bdc7a301 100644 --- a/hyperion/filter/filter.py +++ b/hyperion/filter/filter.py @@ -2,7 +2,10 @@ import numpy as np -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from astropy import units as u from ..util.integrate import integrate diff --git a/hyperion/grid/tests/test_io.py b/hyperion/grid/tests/test_io.py index a08ae420..c24e445e 100644 --- a/hyperion/grid/tests/test_io.py +++ b/hyperion/grid/tests/test_io.py @@ -3,7 +3,10 @@ import h5py import numpy as np import pytest -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ...util.functions import random_id from .. import (CartesianGrid, diff --git a/hyperion/grid/tests/test_views.py b/hyperion/grid/tests/test_views.py index 42bf8bd5..93d390cc 100644 --- a/hyperion/grid/tests/test_views.py +++ b/hyperion/grid/tests/test_views.py @@ -2,7 +2,10 @@ import numpy as np import pytest -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from hyperion.grid import CartesianGrid, CylindricalPolarGrid, SphericalPolarGrid, AMRGrid, OctreeGrid diff --git a/hyperion/grid/yt3_wrappers.py b/hyperion/grid/yt3_wrappers.py index 3daa0a44..e9c48371 100644 --- a/hyperion/grid/yt3_wrappers.py +++ b/hyperion/grid/yt3_wrappers.py @@ -1,7 +1,10 @@ from __future__ import print_function, division import numpy as np -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from astropy import log as logger diff --git a/hyperion/importers/orion.py b/hyperion/importers/orion.py index 02de3625..37b04e4e 100644 --- a/hyperion/importers/orion.py +++ b/hyperion/importers/orion.py @@ -3,7 +3,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..grid.amr_grid import Grid, Level, AMRGrid diff --git a/hyperion/model/image.py b/hyperion/model/image.py index f99f0aa9..7087b74e 100644 --- a/hyperion/model/image.py +++ b/hyperion/model/image.py @@ -1,6 +1,9 @@ import numpy as np -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..util.functions import FreezableClass, is_numpy_array from ..util.constants import c diff --git a/hyperion/model/model.py b/hyperion/model/model.py index 6838ec99..68bc7e31 100644 --- a/hyperion/model/model.py +++ b/hyperion/model/model.py @@ -9,7 +9,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..version import __version__ from ..util.functions import delete_file diff --git a/hyperion/model/model_output.py b/hyperion/model/model_output.py index 0096cd38..715c7bc3 100644 --- a/hyperion/model/model_output.py +++ b/hyperion/model/model_output.py @@ -5,7 +5,10 @@ import numpy as np from astropy import log as logger -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..util.constants import c, pi from ..util.functions import FreezableClass diff --git a/hyperion/model/sed.py b/hyperion/model/sed.py index 9a486f20..bc89768b 100644 --- a/hyperion/model/sed.py +++ b/hyperion/model/sed.py @@ -1,6 +1,9 @@ import numpy as np -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..util.functions import FreezableClass from ..util.constants import c diff --git a/hyperion/model/tests/test_bit_level.py b/hyperion/model/tests/test_bit_level.py index 3ce8e66b..eaf4fdb4 100644 --- a/hyperion/model/tests/test_bit_level.py +++ b/hyperion/model/tests/test_bit_level.py @@ -9,10 +9,16 @@ import shutil import itertools -import pytest +try: + import pytest +except: + from astropy.tests.helper import pytest import numpy as np -from astropy.extern.six import StringIO +try: + from six import StringIO +except: + from astropy.extern.six import StringIO from .test_helpers import random_id, assert_identical_results from .. import Model, AnalyticalYSOModel from ...util.constants import pc, lsun, c, au, msun, pi, sigma, rsun @@ -25,7 +31,6 @@ bit_level = pytest.mark.skipif(str(not pytest.config.getoption('enable_bit_level_tests'))) - @pytest.fixture(scope="module") def generate(request): generate_reference = request.config.getvalue("generate_reference") diff --git a/hyperion/model/tests/test_sed.py b/hyperion/model/tests/test_sed.py index d5d980ff..6a11df99 100644 --- a/hyperion/model/tests/test_sed.py +++ b/hyperion/model/tests/test_sed.py @@ -8,7 +8,10 @@ from numpy.testing import assert_array_almost_equal_nulp import pytest -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from .. import Model from ..sed import SED diff --git a/hyperion/util/tests/test_integrate.py b/hyperion/util/tests/test_integrate.py index dd71f663..f05e825c 100644 --- a/hyperion/util/tests/test_integrate.py +++ b/hyperion/util/tests/test_integrate.py @@ -6,7 +6,10 @@ from numpy.testing import assert_array_almost_equal_nulp import pytest -from astropy.extern import six +try: + import six +except: + from astropy.extern import six from ..integrate import * diff --git a/hyperion/util/validator.py b/hyperion/util/validator.py index 4b00c138..9edbe3a5 100644 --- a/hyperion/util/validator.py +++ b/hyperion/util/validator.py @@ -1,7 +1,10 @@ import numpy as np from astropy import units as u -from astropy.extern import six +try: + import six +except: + from astropy.extern import six def validate_physical_type(name, value, physical_type): From fcf6ed04a006e4099a94d62606794f9cd8e30038 Mon Sep 17 00:00:00 2001 From: John Wise Date: Thu, 9 Apr 2020 12:00:39 -0400 Subject: [PATCH 2/3] Fixing a segfault with gfortran v9.2.1 and an formatting issue Segfault happened because an optional variable value wasn't defined. Adjusting value write format to be E instead of F. --- .gitignore | 3 +++ src/dust/dust_interact.f90 | 7 +++++-- src/grid/grid_physics_3d.f90 | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 26d5d05a..eb62bdaa 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ htmlcov *.rtout build_cmake .vscode +dist +Hyperion.egg-info + diff --git a/src/dust/dust_interact.f90 b/src/dust/dust_interact.f90 index ce002453..41dbaba0 100644 --- a/src/dust/dust_interact.f90 +++ b/src/dust/dust_interact.f90 @@ -28,7 +28,10 @@ subroutine interact(p, force_scatter) real(dp) :: xi,albedo real(dp) :: energy_scaling logical,optional :: force_scatter + logical :: force_scatter_val = .false. + if(present(force_scatter)) force_scatter_val = force_scatter + ! given the density and energy of each dust type, process a photon ! this means finding out whether to scatter or aborb the photon, and to do ! whatever needs doing @@ -43,7 +46,7 @@ subroutine interact(p, force_scatter) p%s_prev = p%s ! Decide whether to absorb or scatter - if(present(force_scatter) .and. force_scatter) then + if(force_scatter_val) then xi = 0._dp else call random(xi) @@ -69,7 +72,7 @@ subroutine interact(p, force_scatter) call angle3d_to_vector3d(p%a,p%v) - if(present(force_scatter) .and. force_scatter) then + if(force_scatter_val) then p%energy = p%energy * albedo end if diff --git a/src/grid/grid_physics_3d.f90 b/src/grid/grid_physics_3d.f90 index 0505f0de..90674116 100644 --- a/src/grid/grid_physics_3d.f90 +++ b/src/grid/grid_physics_3d.f90 @@ -453,7 +453,7 @@ logical function specific_energy_converged() result(converged) write(*,*) write(*,'(" -> Percentile: ",F7.2)') convergence_percentile - write(*,'(" -> Value @ Percentile: ",F10.2)') value + write(*,'(" -> Value @ Percentile: ",E10.3)') value if(value_prev < huge(1._dp)) then if(value == 0._dp) then write(*,'(" -> Exact convergence")') From 4b22fa7a6354f3a648ac4568a21362178a76b02e Mon Sep 17 00:00:00 2001 From: John Wise Date: Wed, 15 Apr 2020 07:29:04 -0400 Subject: [PATCH 3/3] Removing import six try/except for a direct import --- hyperion/conf/conf_files.py | 5 +---- hyperion/densities/alpha_disk.py | 5 +---- hyperion/densities/ambient_medium.py | 5 +---- hyperion/densities/bipolar_cavity.py | 5 +---- hyperion/densities/flared_disk.py | 5 +---- hyperion/densities/power_law_envelope.py | 5 +---- hyperion/densities/ulrich_envelope.py | 5 +---- hyperion/dust/dust_type.py | 5 +---- hyperion/filter/filter.py | 5 +---- hyperion/grid/tests/test_io.py | 5 +---- hyperion/grid/tests/test_views.py | 5 +---- hyperion/grid/yt3_wrappers.py | 5 +---- hyperion/importers/orion.py | 5 +---- hyperion/model/image.py | 5 +---- hyperion/model/model.py | 5 +---- hyperion/model/model_output.py | 5 +---- hyperion/model/sed.py | 5 +---- hyperion/model/tests/test_bit_level.py | 5 +---- hyperion/model/tests/test_sed.py | 5 +---- hyperion/util/tests/test_integrate.py | 5 +---- hyperion/util/validator.py | 5 +---- setup.py | 2 +- 22 files changed, 22 insertions(+), 85 deletions(-) diff --git a/hyperion/conf/conf_files.py b/hyperion/conf/conf_files.py index 2d794f76..6d4f86dc 100644 --- a/hyperion/conf/conf_files.py +++ b/hyperion/conf/conf_files.py @@ -3,10 +3,7 @@ import warnings import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..util.functions import FreezableClass, bool2str, str2bool, is_numpy_array from ..filter import Filter diff --git a/hyperion/densities/alpha_disk.py b/hyperion/densities/alpha_disk.py index 8bc00302..ba443d16 100644 --- a/hyperion/densities/alpha_disk.py +++ b/hyperion/densities/alpha_disk.py @@ -2,10 +2,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..dust import SphericalDust from ..util.constants import pi, G diff --git a/hyperion/densities/ambient_medium.py b/hyperion/densities/ambient_medium.py index f415afeb..fcec9a18 100644 --- a/hyperion/densities/ambient_medium.py +++ b/hyperion/densities/ambient_medium.py @@ -1,10 +1,7 @@ from __future__ import print_function, division import numpy as np -try: - import six -except: - from astropy.extern import six +import six from ..dust import SphericalDust from ..grid import SphericalPolarGrid diff --git a/hyperion/densities/bipolar_cavity.py b/hyperion/densities/bipolar_cavity.py index 94487698..12516411 100644 --- a/hyperion/densities/bipolar_cavity.py +++ b/hyperion/densities/bipolar_cavity.py @@ -2,10 +2,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..util.functions import FreezableClass from ..dust import SphericalDust diff --git a/hyperion/densities/flared_disk.py b/hyperion/densities/flared_disk.py index 385dfac1..6131a377 100644 --- a/hyperion/densities/flared_disk.py +++ b/hyperion/densities/flared_disk.py @@ -2,10 +2,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..dust import SphericalDust from ..util.constants import pi diff --git a/hyperion/densities/power_law_envelope.py b/hyperion/densities/power_law_envelope.py index f9aa5167..0f3e92e4 100644 --- a/hyperion/densities/power_law_envelope.py +++ b/hyperion/densities/power_law_envelope.py @@ -2,10 +2,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..dust import SphericalDust from ..grid import SphericalPolarGrid, CylindricalPolarGrid diff --git a/hyperion/densities/ulrich_envelope.py b/hyperion/densities/ulrich_envelope.py index 3064cbee..34858831 100644 --- a/hyperion/densities/ulrich_envelope.py +++ b/hyperion/densities/ulrich_envelope.py @@ -2,10 +2,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..dust import SphericalDust from ..grid import SphericalPolarGrid, CylindricalPolarGrid diff --git a/hyperion/dust/dust_type.py b/hyperion/dust/dust_type.py index 6363d363..4286ac46 100644 --- a/hyperion/dust/dust_type.py +++ b/hyperion/dust/dust_type.py @@ -17,10 +17,7 @@ import h5py import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..version import __version__ diff --git a/hyperion/filter/filter.py b/hyperion/filter/filter.py index bdc7a301..1f5ab182 100644 --- a/hyperion/filter/filter.py +++ b/hyperion/filter/filter.py @@ -2,10 +2,7 @@ import numpy as np -try: - import six -except: - from astropy.extern import six +import six from astropy import units as u from ..util.integrate import integrate diff --git a/hyperion/grid/tests/test_io.py b/hyperion/grid/tests/test_io.py index c24e445e..e8653dbf 100644 --- a/hyperion/grid/tests/test_io.py +++ b/hyperion/grid/tests/test_io.py @@ -3,10 +3,7 @@ import h5py import numpy as np import pytest -try: - import six -except: - from astropy.extern import six +import six from ...util.functions import random_id from .. import (CartesianGrid, diff --git a/hyperion/grid/tests/test_views.py b/hyperion/grid/tests/test_views.py index 93d390cc..64767007 100644 --- a/hyperion/grid/tests/test_views.py +++ b/hyperion/grid/tests/test_views.py @@ -2,10 +2,7 @@ import numpy as np import pytest -try: - import six -except: - from astropy.extern import six +import six from hyperion.grid import CartesianGrid, CylindricalPolarGrid, SphericalPolarGrid, AMRGrid, OctreeGrid diff --git a/hyperion/grid/yt3_wrappers.py b/hyperion/grid/yt3_wrappers.py index e9c48371..32c0beea 100644 --- a/hyperion/grid/yt3_wrappers.py +++ b/hyperion/grid/yt3_wrappers.py @@ -1,10 +1,7 @@ from __future__ import print_function, division import numpy as np -try: - import six -except: - from astropy.extern import six +import six from astropy import log as logger diff --git a/hyperion/importers/orion.py b/hyperion/importers/orion.py index 37b04e4e..8492217b 100644 --- a/hyperion/importers/orion.py +++ b/hyperion/importers/orion.py @@ -3,10 +3,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..grid.amr_grid import Grid, Level, AMRGrid diff --git a/hyperion/model/image.py b/hyperion/model/image.py index 7087b74e..232ea345 100644 --- a/hyperion/model/image.py +++ b/hyperion/model/image.py @@ -1,9 +1,6 @@ import numpy as np -try: - import six -except: - from astropy.extern import six +import six from ..util.functions import FreezableClass, is_numpy_array from ..util.constants import c diff --git a/hyperion/model/model.py b/hyperion/model/model.py index 68bc7e31..2a0ce3d4 100644 --- a/hyperion/model/model.py +++ b/hyperion/model/model.py @@ -9,10 +9,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..version import __version__ from ..util.functions import delete_file diff --git a/hyperion/model/model_output.py b/hyperion/model/model_output.py index 715c7bc3..54ad8008 100644 --- a/hyperion/model/model_output.py +++ b/hyperion/model/model_output.py @@ -5,10 +5,7 @@ import numpy as np from astropy import log as logger -try: - import six -except: - from astropy.extern import six +import six from ..util.constants import c, pi from ..util.functions import FreezableClass diff --git a/hyperion/model/sed.py b/hyperion/model/sed.py index bc89768b..12d2d3e4 100644 --- a/hyperion/model/sed.py +++ b/hyperion/model/sed.py @@ -1,9 +1,6 @@ import numpy as np -try: - import six -except: - from astropy.extern import six +import six from ..util.functions import FreezableClass from ..util.constants import c diff --git a/hyperion/model/tests/test_bit_level.py b/hyperion/model/tests/test_bit_level.py index eaf4fdb4..66af6b75 100644 --- a/hyperion/model/tests/test_bit_level.py +++ b/hyperion/model/tests/test_bit_level.py @@ -15,10 +15,7 @@ from astropy.tests.helper import pytest import numpy as np -try: - from six import StringIO -except: - from astropy.extern.six import StringIO +from six import StringIO from .test_helpers import random_id, assert_identical_results from .. import Model, AnalyticalYSOModel from ...util.constants import pc, lsun, c, au, msun, pi, sigma, rsun diff --git a/hyperion/model/tests/test_sed.py b/hyperion/model/tests/test_sed.py index 6a11df99..2a31f950 100644 --- a/hyperion/model/tests/test_sed.py +++ b/hyperion/model/tests/test_sed.py @@ -8,10 +8,7 @@ from numpy.testing import assert_array_almost_equal_nulp import pytest -try: - import six -except: - from astropy.extern import six +import six from .. import Model from ..sed import SED diff --git a/hyperion/util/tests/test_integrate.py b/hyperion/util/tests/test_integrate.py index f05e825c..b74622dd 100644 --- a/hyperion/util/tests/test_integrate.py +++ b/hyperion/util/tests/test_integrate.py @@ -6,10 +6,7 @@ from numpy.testing import assert_array_almost_equal_nulp import pytest -try: - import six -except: - from astropy.extern import six +import six from ..integrate import * diff --git a/hyperion/util/validator.py b/hyperion/util/validator.py index 9edbe3a5..307fc82c 100644 --- a/hyperion/util/validator.py +++ b/hyperion/util/validator.py @@ -1,10 +1,7 @@ import numpy as np from astropy import units as u -try: - import six -except: - from astropy.extern import six +import six def validate_physical_type(name, value, physical_type): diff --git a/setup.py b/setup.py index d7b2d12b..ea88c6a2 100755 --- a/setup.py +++ b/setup.py @@ -100,6 +100,6 @@ def run(self): cmdclass=cmdclass, ext_modules=ext_modules, setup_requires=['numpy>=1.11'], - install_requires=['numpy>=1.11', 'matplotlib>=1.5', 'astropy>=1.2', 'h5py>=2.4', 'yt>=3.2'], + install_requires=['numpy>=1.11', 'matplotlib>=1.5', 'astropy>=1.2', 'h5py>=2.4', 'yt>=3.2', 'six'], extras_require={'test': ['pytest'], 'docs': ['sphinx', 'numpydoc']})