CLIMADA-project / climada_python

Python (3.8+) version of CLIMADA
GNU General Public License v3.0
299 stars 118 forks source link

dependency upgrade made tests significantly slower #695

Closed emanuel-schmid closed 2 months ago

emanuel-schmid commented 1 year ago

since the dependency upgrade (#693) unit and integration tests seem to be dramatically slowed down:

Time consumed in ci-night: range 425 - 430, last 6 tests before the upgrade: 8:13 - 9:59 range 431 - 434, first 4 tests after the upgrade: 14:55 - 15:21

This may be a coincidence but I doubt it.

peanutfun commented 1 year ago

I dug into this a bit and ran the tests on my machine from the latest develop with two different environments.

TLDR

Details

First, I built a fresh environment from the current dependency set.

Current Environment
(climada_test) ➜  climada_python git:(develop) ✗ mamba env export
name: climada_test
channels:
  - conda-forge
  - defaults
dependencies:
  - affine=2.4.0=pyhd8ed1ab_0
  - attrs=23.1.0=pyh71513ae_1
  - aws-c-auth=0.6.28=h826ccd7_5
  - aws-c-cal=0.5.27=h92f41cd_0
  - aws-c-common=0.8.20=hb547adb_0
  - aws-c-compression=0.2.17=h28992cd_0
  - aws-c-event-stream=0.3.0=h7f691c3_6
  - aws-c-http=0.7.8=he2e4218_4
  - aws-c-io=0.13.26=h379bc4c_0
  - aws-c-mqtt=0.8.13=hdb3a981_2
  - aws-c-s3=0.3.4=h02343f9_5
  - aws-c-sdkutils=0.1.10=h28992cd_0
  - aws-checksums=0.1.16=h28992cd_0
  - aws-crt-cpp=0.20.2=h37dd33e_9
  - aws-sdk-cpp=1.10.57=h9b90b14_14
  - blosc=1.21.4=hc338f07_0
  - bokeh=3.1.1=pyhd8ed1ab_0
  - boost-cpp=1.78.0=hf1d6563_2
  - bottleneck=1.3.7=py39h4d8bf0d_0
  - branca=0.6.0=pyhd8ed1ab_0
  - brotli=1.0.9=h1a8c8d9_8
  - brotli-bin=1.0.9=h1a8c8d9_8
  - bzip2=1.0.8=h3422bc3_4
  - c-ares=1.19.1=hb547adb_0
  - ca-certificates=2023.5.7=hf0a4a13_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cairo=1.16.0=h73a0509_1014
  - cartopy=0.21.1=py39hda17d7f_0
  - certifi=2023.5.7=pyhd8ed1ab_0
  - cffi=1.15.1=py39h7e6b969_3
  - cfgrib=0.9.9.1=pyhd8ed1ab_2
  - cfitsio=4.2.0=h2f961c4_0
  - cftime=1.6.2=py39h4d8bf0d_1
  - charset-normalizer=3.1.0=pyhd8ed1ab_0
  - click=8.1.3=unix_pyhd8ed1ab_2
  - click-plugins=1.1.1=py_0
  - cligj=0.7.2=pyhd8ed1ab_1
  - cloudpickle=2.2.1=pyhd8ed1ab_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - contextily=1.3.0=pyhd8ed1ab_0
  - contourpy=1.1.0=py39hbd775c9_0
  - curl=8.1.2=h912dcd9_0
  - cycler=0.11.0=pyhd8ed1ab_0
  - cytoolz=0.12.0=py39h02fc5c5_1
  - dask=2023.6.0=pyhd8ed1ab_0
  - dask-core=2023.6.0=pyhd8ed1ab_0
  - dill=0.3.6=pyhd8ed1ab_1
  - distributed=2023.6.0=pyhd8ed1ab_0
  - eccodes=2.27.1=hcbf30ee_0
  - et_xmlfile=1.1.0=pyhd8ed1ab_0
  - expat=2.5.0=hb7217d7_1
  - findlibs=0.0.5=pyhd8ed1ab_0
  - fiona=1.9.1=py39h9e5269e_0
  - folium=0.14.0=pyhd8ed1ab_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=hab24e00_0
  - fontconfig=2.14.2=h82840c6_0
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - fonttools=4.40.0=py39h0f82c59_0
  - freetype=2.12.1=hd633e50_1
  - freexl=1.0.6=h1a8c8d9_1
  - fsspec=2023.6.0=pyh1a96a4e_0
  - gdal=3.6.2=py39h766d3fc_6
  - geographiclib=1.52=pyhd8ed1ab_0
  - geopandas=0.13.2=pyhd8ed1ab_1
  - geopandas-base=0.13.2=pyha770c72_1
  - geopy=2.3.0=pyhd8ed1ab_0
  - geos=3.11.1=hb7217d7_0
  - geotiff=1.7.1=hdcdc974_6
  - gettext=0.21.1=h0186832_0
  - gflags=2.2.2=hc88da5d_1004
  - giflib=5.2.1=h1a8c8d9_3
  - glog=0.6.0=h6da1cb0_0
  - h5py=3.8.0=nompi_py39hc9149d8_100
  - haversine=2.8.0=pyhd8ed1ab_0
  - hdf4=4.2.15=h1a38d6a_5
  - hdf5=1.12.2=nompi_ha7af310_101
  - icu=70.1=h6b3803e_0
  - idna=3.4=pyhd8ed1ab_0
  - importlib-metadata=6.7.0=pyha770c72_0
  - importlib-resources=5.12.0=pyhd8ed1ab_0
  - importlib_metadata=6.7.0=hd8ed1ab_0
  - importlib_resources=5.12.0=pyhd8ed1ab_0
  - jasper=2.0.33=hc3cd1e9_1
  - jinja2=3.1.2=pyhd8ed1ab_1
  - joblib=1.2.0=pyhd8ed1ab_0
  - jpeg=9e=h1a8c8d9_3
  - json-c=0.16=hc449e50_0
  - kealib=1.5.0=hfd766a6_0
  - kiwisolver=1.4.4=py39haaf3ac1_1
  - krb5=1.20.1=h69eda48_0
  - lcms2=2.15=h481adae_0
  - lerc=4.0.0=h9a09cb3_0
  - libabseil=20230125.2=cxx17_h13dd4ca_2
  - libaec=1.0.6=hb7217d7_1
  - libarrow=12.0.0=hbfb5349_8_cpu
  - libblas=3.9.0=17_osxarm64_openblas
  - libbrotlicommon=1.0.9=h1a8c8d9_8
  - libbrotlidec=1.0.9=h1a8c8d9_8
  - libbrotlienc=1.0.9=h1a8c8d9_8
  - libcblas=3.9.0=17_osxarm64_openblas
  - libcrc32c=1.1.2=hbdafb3b_0
  - libcurl=8.1.2=h912dcd9_0
  - libcxx=16.0.6=h4653b0c_0
  - libdeflate=1.17=h1a8c8d9_0
  - libedit=3.1.20191231=hc8eb9b7_2
  - libev=4.33=h642e427_1
  - libevent=2.1.12=h2757513_1
  - libexpat=2.5.0=hb7217d7_1
  - libffi=3.4.2=h3422bc3_5
  - libgdal=3.6.2=h90a2855_6
  - libgfortran=5.0.0=12_2_0_hd922786_31
  - libgfortran5=12.2.0=h0eea778_31
  - libglib=2.76.3=h24e9cb9_0
  - libgoogle-cloud=2.11.0=h5263b79_1
  - libgrpc=1.55.1=hc384137_1
  - libiconv=1.17=he4db4b2_0
  - libkml=1.3.0=h41464e4_1015
  - liblapack=3.9.0=17_osxarm64_openblas
  - libllvm14=14.0.6=hd1a9a77_3
  - libnetcdf=4.8.1=nompi_h2510be2_106
  - libnghttp2=1.52.0=hae82a92_0
  - libopenblas=0.3.23=openmp_hc731615_0
  - libpng=1.6.39=h76d750c_0
  - libpq=15.2=h1a28acd_0
  - libprotobuf=4.23.2=hf32f9b9_5
  - librttopo=1.1.0=h844f84d_12
  - libspatialindex=1.9.3=hbdafb3b_4
  - libspatialite=5.0.1=h14115fc_23
  - libsqlite=3.42.0=hb31c410_0
  - libssh2=1.11.0=h7a5bd25_0
  - libthrift=0.18.1=ha061701_2
  - libtiff=4.5.0=h5dffbdd_2
  - libutf8proc=2.8.0=h1a8c8d9_0
  - libwebp-base=1.3.0=h1a8c8d9_0
  - libxcb=1.13=h9b22ae9_1004
  - libxml2=2.10.3=h67585b2_4
  - libxslt=1.1.37=h1bd8bc4_0
  - libzip=1.9.2=h76ab92c_1
  - libzlib=1.2.13=h53f4e23_5
  - llvm-openmp=16.0.6=h1c12783_0
  - llvmlite=0.40.0=py39hbad4f83_0
  - locket=1.0.0=pyhd8ed1ab_0
  - lxml=4.9.2=py39h0520ce3_0
  - lz4=4.3.2=py39hb35ce34_0
  - lz4-c=1.9.4=hb7217d7_0
  - mapclassify=2.5.0=pyhd8ed1ab_1
  - markupsafe=2.1.3=py39h0f82c59_0
  - matplotlib=3.7.1=py39hdf13c20_0
  - matplotlib-base=3.7.1=py39h35e9e80_0
  - mercantile=1.2.1=pyhd8ed1ab_0
  - msgpack-python=1.0.5=py39haaf3ac1_0
  - multiprocess=0.70.14=py39h02fc5c5_3
  - munch=3.0.0=pyhd8ed1ab_0
  - munkres=1.1.4=pyh9f0ad1d_0
  - ncurses=6.4=h7ea286d_0
  - netcdf4=1.6.2=nompi_py39h8ded8ba_100
  - networkx=3.1=pyhd8ed1ab_0
  - nspr=4.35=hb7217d7_0
  - nss=3.89=h789eff7_0
  - numba=0.57.0=py39he8ed757_2
  - numexpr=2.8.4=py39hd28f0be_0
  - numpy=1.24.3=py39h485cf63_0
  - openjpeg=2.5.0=hbc2ba62_2
  - openpyxl=3.1.2=py39h0f82c59_0
  - openssl=3.1.1=h53f4e23_1
  - orc=1.8.4=h13b7ede_0
  - packaging=23.1=pyhd8ed1ab_0
  - pandas=1.5.3=py39hde7b980_1
  - pandas-datareader=0.10.0=pyh6c4a22f_0
  - partd=1.4.0=pyhd8ed1ab_0
  - pathos=0.3.0=pyhd8ed1ab_0
  - patsy=0.5.3=pyhd8ed1ab_0
  - pcre2=10.40=hb34f9b4_0
  - pillow=9.4.0=py39h8bd98a6_1
  - pint=0.22=pyhd8ed1ab_1
  - pip=23.1.2=pyhd8ed1ab_0
  - pixman=0.40.0=h27ca646_0
  - platformdirs=3.8.0=pyhd8ed1ab_0
  - pooch=1.7.0=pyha770c72_3
  - poppler=23.01.0=h9564b9f_0
  - poppler-data=0.4.12=hd8ed1ab_0
  - postgresql=15.2=h45c140d_0
  - pox=0.3.2=pyhd8ed1ab_0
  - ppft=1.7.6.6=pyhd8ed1ab_0
  - proj=9.1.1=h13f728c_2
  - psutil=5.9.5=py39h02fc5c5_0
  - pthread-stubs=0.4=h27ca646_1001
  - pyarrow=12.0.0=py39hf40061a_8_cpu
  - pycountry=22.3.5=pyhd8ed1ab_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pyepsg=0.4.0=py_0
  - pyparsing=3.1.0=pyhd8ed1ab_0
  - pyproj=3.5.0=py39hd68364f_0
  - pyshp=2.3.1=pyhd8ed1ab_0
  - pysocks=1.7.1=pyha2e5f31_6
  - pytables=3.7.0=py39h8abd629_3
  - python=3.9.16=hea58f1e_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-eccodes=1.5.1=py39h4d8bf0d_0
  - python_abi=3.9=3_cp39
  - pytz=2023.3=pyhd8ed1ab_0
  - pyxlsb=1.0.10=pyhd8ed1ab_0
  - pyyaml=6.0=py39h02fc5c5_5
  - rasterio=1.3.6=py39h157378c_0
  - re2=2023.03.02=hc5e2d97_0
  - readline=8.2=h92ec313_1
  - requests=2.31.0=pyhd8ed1ab_0
  - rtree=1.0.1=py39hb28b0e7_1
  - salib=1.4.7=pyhd8ed1ab_0
  - scikit-learn=1.2.2=py39hd5c4a62_2
  - scipy=1.11.0=py39ha6b2cbd_0
  - setuptools=68.0.0=pyhd8ed1ab_0
  - shapely=2.0.1=py39h472ea82_0
  - six=1.16.0=pyh6c4a22f_0
  - snappy=1.1.10=h17c5cce_0
  - snuggs=1.4.7=py_0
  - sortedcontainers=2.4.0=pyhd8ed1ab_0
  - sparse=0.14.0=pyhd8ed1ab_0
  - sqlite=3.42.0=h203b68d_0
  - statsmodels=0.14.0=py39h8a366b7_1
  - tabulate=0.9.0=pyhd8ed1ab_1
  - tblib=1.7.0=pyhd8ed1ab_0
  - threadpoolctl=3.1.0=pyh8a188c0_0
  - tiledb=2.13.2=h9bd36d0_0
  - tk=8.6.12=he1e0b03_0
  - toolz=0.12.0=pyhd8ed1ab_0
  - tornado=6.3.2=py39h0f82c59_0
  - tqdm=4.65.0=pyhd8ed1ab_1
  - typing-extensions=4.6.3=hd8ed1ab_0
  - typing_extensions=4.6.3=pyha770c72_0
  - tzcode=2023c=h1a8c8d9_0
  - tzdata=2023c=h71feb2d_0
  - unicodedata2=15.0.0=py39h02fc5c5_0
  - unittest-xml-reporting=3.2.0=pyhd8ed1ab_0
  - urllib3=2.0.3=pyhd8ed1ab_0
  - wheel=0.40.0=pyhd8ed1ab_0
  - xarray=2023.5.0=pyhd8ed1ab_0
  - xerces-c=3.2.4=h627aa08_1
  - xlrd=2.0.1=pyhd8ed1ab_3
  - xlsxwriter=3.1.2=pyhd8ed1ab_0
  - xorg-libxau=1.0.11=hb547adb_0
  - xorg-libxdmcp=1.1.3=h27ca646_0
  - xyzservices=2023.5.0=pyhd8ed1ab_1
  - xz=5.2.6=h57fd34a_0
  - yaml=0.2.5=h3422bc3_2
  - zict=3.0.0=pyhd8ed1ab_0
  - zipp=3.15.0=pyhd8ed1ab_0
  - zlib=1.2.13=h53f4e23_5
  - zstd=1.5.2=hf913c23_6
  - pip:
    - appnope==0.1.3
    - astroid==2.5
    - asttokens==2.2.1
    - backcall==0.2.0
    - coverage==7.2.7
    - decorator==5.1.1
    - deprecation==2.1.0
    - exceptiongroup==1.1.1
    - executing==1.2.0
    - iniconfig==2.0.0
    - ipython==8.14.0
    - isort==5.12.0
    - jedi==0.18.2
    - lazy-object-proxy==1.9.0
    - matplotlib-inline==0.1.6
    - mccabe==0.6.1
    - overpy==0.6
    - parso==0.8.3
    - peewee==3.16.2
    - pexpect==4.8.0
    - pickleshare==0.7.5
    - pluggy==1.2.0
    - prompt-toolkit==3.0.38
    - ptyprocess==0.7.0
    - pure-eval==0.2.2
    - pygments==2.15.1
    - pylint==2.7.1
    - pytest==7.4.0
    - pytest-cov==4.1.0
    - pytest-subtests==0.11.0
    - stack-data==0.6.2
    - toml==0.10.2
    - tomli==2.0.1
    - traitlets==5.9.0
    - wcwidth==0.2.6
    - wrapt==1.12.1
    - xmlrunner==1.7.7
prefix: /Users/ldr.riedel/mambaforge/envs/climada_test

Then I executed pytest for all tests and displayed the durations:

(climada_test) ➜  climada_python git:(develop) ✗ pytest --durations=0 --durations-min=1 climada/
================================================== test session starts ==================================================
platform darwin -- Python 3.9.16, pytest-7.4.0, pluggy-1.2.0
rootdir: /Users/ldr.riedel/coding/climada_python
plugins: subtests-0.11.0, cov-4.1.0
collected 725 items                                                                                                     

climada/engine/test/test_cost_benefit.py ......................                                                   [  3%]
climada/engine/test/test_forecast.py ...                                                                          [  3%]
climada/engine/test/test_impact.py ........................................                                       [  8%]
climada/engine/test/test_impact_calc.py ............................                                              [ 12%]
climada/engine/test/test_impact_data.py ...........                                                               [ 14%]
climada/engine/unsequa/test/test_unsequa.py ................                                                      [ 16%]
climada/entity/disc_rates/test/test_base.py .............                                                         [ 18%]
climada/entity/exposures/test/test_base.py ..........................                                             [ 21%]
climada/entity/exposures/test/test_litpop.py ......................                                               [ 24%]
climada/entity/exposures/test/test_mat.py .........                                                               [ 26%]
climada/entity/exposures/test/test_nightlight.py .....                                                            [ 26%]
climada/entity/impact_funcs/test/test_base.py ...                                                                 [ 27%]
climada/entity/impact_funcs/test/test_imp_fun_set.py .......................                                      [ 30%]
climada/entity/impact_funcs/test/test_tc.py ........                                                              [ 31%]
climada/entity/impact_funcs/test/test_ws.py .                                                                     [ 31%]
climada/entity/measures/test/test_base.py ...........                                                             [ 33%]
climada/entity/measures/test/test_meas_set.py .....................                                               [ 36%]
climada/entity/test/test_entity.py ......                                                                         [ 36%]
climada/entity/test/test_tag.py ...                                                                               [ 37%]
climada/hazard/centroids/test/test_centr.py ........                                                              [ 38%]
climada/hazard/centroids/test/test_vec_ras.py ....................................                                [ 43%]
climada/hazard/test/test_base.py ........................................................                         [ 51%]
climada/hazard/test/test_base_xarray.py ...............                                                           [ 53%]
climada/hazard/test/test_storm_europe.py .......                                                                  [ 54%]
climada/hazard/test/test_tag.py ........                                                                          [ 55%]
climada/hazard/test/test_tc_cc.py ..                                                                              [ 55%]
climada/hazard/test/test_tc_tracks.py ........................................                                    [ 61%]
climada/hazard/test/test_tc_tracks_synth.py ..................                                                    [ 63%]
climada/hazard/test/test_trop_cyclone.py ................                                                         [ 65%]
climada/test/test_api_client.py ................                                                                  [ 68%]
climada/test/test_calibration.py .                                                                                [ 68%]
climada/test/test_engine.py .....                                                                                 [ 68%]
climada/test/test_hazard.py ...........                                                                           [ 70%]
climada/test/test_litpop_integr.py ..................                                                             [ 72%]
climada/test/test_multi_processing.py .                                                                           [ 72%]
climada/test/test_nightlight.py ......                                                                            [ 73%]
climada/test/test_plot.py ...........                                                                             [ 75%]
climada/test/test_util.py .                                                                                       [ 75%]
climada/util/test/test__init__.py .                                                                               [ 75%]
climada/util/test/test_checker.py ....                                                                            [ 76%]
climada/util/test/test_config.py ...                                                                              [ 76%]
climada/util/test/test_coordinates.py ........................................................................... [ 86%]
..                                                                                                                [ 87%]
climada/util/test/test_dates_times.py .....                                                                       [ 87%]
climada/util/test/test_dwd_icon.py .....                                                                          [ 88%]
climada/util/test/test_files.py ............                                                                      [ 90%]
climada/util/test/test_finance.py ...............                                                                 [ 92%]
climada/util/test/test_hdf5.py ......                                                                             [ 93%]
climada/util/test/test_lines_polys_handler.py .........................                                           [ 96%]
climada/util/test/test_plot.py .......                                                                            [ 97%]
climada/util/test/test_save.py ..                                                                                 [ 97%]
climada/util/test/test_select.py .                                                                                [ 97%]
climada/util/test/test_value_representation.py .........                                                          [ 99%]
climada/util/test/test_yearsets.py ......                                                                         [100%]

=================================================== slowest durations ===================================================
32.03s call     climada/test/test_api_client.py::TestClient::test_purge_cache
17.45s call     climada/test/test_litpop_integr.py::TestAdmin1::test_calc_admin1
16.08s call     climada/test/test_litpop_integr.py::TestAdmin1::test_from_countries_calc_admin1_pass
15.04s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_switzerland300_admin1_pc2016_pass
13.68s call     climada/test/test_calibration.py::TestCalib::test_calib_instance
12.36s call     climada/test/test_plot.py::TestPlotter::test_cost_benefit
11.90s call     climada/util/test/test_plot.py::TestPlots::test_geo_scatter_categorical
11.26s call     climada/test/test_api_client.py::TestClient::test_download_file
10.44s call     climada/test/test_litpop_integr.py::TestAdmin1::test_brandenburg
10.09s call     climada/test/test_nightlight.py::TestNightlight::test_download_nl_files
10.09s call     climada/test/test_plot.py::TestPlotter::test_ctx_osm_pass
9.77s call     climada/test/test_nightlight.py::TestNightlight::test_read_bm_files
7.11s call     climada/test/test_api_client.py::TestClient::test_get_hazard_fails
6.98s call     climada/hazard/test/test_tc_tracks.py::TestFuncs::test_track_land_params
6.71s call     climada/test/test_nightlight.py::TestNightlight::test_unzip_tif_to_py
6.20s call     climada/test/test_plot.py::TestPlotter::test_exposures_value_pass
6.19s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_admin1_geometries_fail
6.18s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_admin1_info_pass
5.92s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_admin1_geometries_pass
5.72s call     climada/entity/exposures/test/test_litpop.py::TestLitPop::test_grp_read_pass
5.17s call     climada/test/test_plot.py::TestPlotter::test_hazard_intensity_pass
5.16s call     climada/test/test_hazard.py::TestStormEurope::test_from_footprints
5.06s call     climada/engine/test/test_forecast.py::TestPlot::test_Forecast_plot
4.98s call     climada/test/test_hazard.py::TestTcTracks::test_ibtracs_with_basin
4.47s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_land_geometry_country_pass
4.28s call     climada/test/test_engine.py::TestEmdatProcessing::test_emdat_damage_yearlysum
3.99s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_on_land_pass
3.89s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_country_code_pass
3.76s call     climada/hazard/test/test_storm_europe.py::TestReader::test_generate_prob_storms
3.49s call     climada/test/test_engine.py::TestEmdatToImpact::test_emdat_to_impact_scale
3.40s call     climada/entity/exposures/test/test_base.py::TestFuncs::test_assign_large_hazard_subset_pass
3.37s call     climada/test/test_hazard.py::TestCentroids::test_read_raster_pool_pass
3.34s call     climada/test/test_engine.py::TestGDPScaling::test_scale_impact2refyear
3.33s call     climada/hazard/test/test_tc_tracks_synth.py::TestSynth::test_random_walk_decay_pass
3.28s call     climada/test/test_hazard.py::TestTcTracks::test_cutoff_tracks
3.27s call     climada/test/test_hazard.py::TestCentroids::test_read_write_raster_pass
3.24s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_BLM150_pass
3.24s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_netherlands150_pass
3.22s call     climada/test/test_hazard.py::TestBase::test_reproject_raster_pass
3.20s call     climada/test/test_hazard.py::TestBase::test_raster_to_vector_pass
3.09s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_country_geometries_fail
3.08s call     climada/entity/exposures/test/test_base.py::TestAddSea::test_add_sea_pass
3.00s call     climada/engine/test/test_impact.py::TestImpactReg::test_admin0
2.99s call     climada/hazard/centroids/test/test_vec_ras.py::TestVector::test_on_land
2.91s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_from_shape_and_countries_zurich_pass
2.83s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_switzerland300_pass
2.80s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_country_geometries_country_norway_pass
2.62s call     climada/test/test_hazard.py::TestBase::test_write_read_pass
2.54s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_suriname30_nfw_pass
2.43s call     climada/util/test/test_plot.py::TestPlots::test_geo_im_from_array
2.37s call     climada/test/test_plot.py::TestPlotter::test_hazard_centroids
2.32s call     climada/util/test/test_coordinates.py::TestRasterIO::test_transform_raster_pass
2.28s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_from_nightlight_intensity
2.24s call     climada/test/test_hazard.py::TestStormEurope::test_icon_read
2.22s call     climada/test/test_engine.py::TestCalcCostBenefit::test_calc_uncertainty_pass
2.18s call     climada/test/test_util.py::TestGeomImpactCalcs::test_calc_geom_impact_polys
2.17s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_Monaco150_pass
2.16s call     climada/test/test_plot.py::TestPlotter::test_hazard_fraction_pass
2.16s call     climada/test/test_plot.py::TestPlotter::test_hazard_rp_intensity
2.13s call     climada/hazard/test/test_tc_tracks.py::TestFuncs::test_dist_since_lf_pass
2.13s call     climada/hazard/test/test_tc_tracks_synth.py::TestSynth::test_random_walk_single_point
1.95s call     climada/engine/test/test_impact_data.py::TestEmdatProcessing::test_emdat_impact_event_2018
1.92s call     climada/engine/test/test_forecast.py::TestCalc::test_Forecast_calc_properties
1.91s call     climada/test/test_api_client.py::TestClient::test_get_hazard
1.89s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_wrong_decay_pass
1.88s call     climada/util/test/test_coordinates.py::TestRasterIO::test_crs_and_geometry_raster_pass
1.88s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_from_population
1.87s call     climada/hazard/test/test_storm_europe.py::TestReader::test_set_ssi
1.86s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_all_points_on_sea
1.84s call     climada/entity/exposures/test/test_litpop.py::TestLitPop::test_get_total_value_per_country_gdp
1.83s call     climada/test/test_plot.py::TestPlotter::test_plot_unc_cb
1.80s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_dist_to_coast
1.79s call     climada/hazard/test/test_storm_europe.py::TestReader::test_centroids_from_nc
1.76s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_switzerland30normPop_pass
1.72s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_country_geometries_extent_pass
1.71s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_apply_decay_pass
1.70s call     climada/test/test_multi_processing.py::TestCoordinates::test_set_df_geometry_points_scheduled_pass
1.69s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_calc_land_decay_pass
1.67s call     climada/hazard/test/test_storm_europe.py::TestReader::test_read_with_ref
1.67s call     climada/hazard/test/test_tc_tracks_synth.py::TestSynth::test_random_no_landfall_pass
1.66s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_decay_values_andrew_pass
1.64s call     climada/engine/unsequa/test/test_unsequa.py::TestOutput::test_plot_unc_imp
1.64s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_decay_penv_gt_pcen
1.64s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_decay_end_ocean
1.64s call     climada/hazard/centroids/test/test_vec_ras.py::TestVector::test_region_id_pass
1.63s call     climada/engine/test/test_impact_data.py::TestEmdatProcessing::test_emdat_impact_event_2020
1.63s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_calc_decay_no_landfall_pass
1.62s call     climada/engine/test/test_forecast.py::TestCalc::test_Forecast_init_raise
1.60s call     climada/hazard/test/test_storm_europe.py::TestReader::test_cosmoe_read
1.60s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_range
1.60s call     climada/hazard/centroids/test/test_vec_ras.py::TestRaster::test_on_land
1.60s call     climada/hazard/test/test_storm_europe.py::TestReader::test_generate_forecast
1.59s call     climada/util/test/test_coordinates.py::TestRasterIO::test_crs_raster_pass
1.57s call     climada/hazard/centroids/test/test_centr.py::TestCentroidsMethods::test_union
1.55s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_Liechtenstein_30_pop_pass
1.54s call     climada/hazard/centroids/test/test_vec_ras.py::TestRaster::test_region_id_pass
1.53s call     climada/hazard/test/test_tc_tracks_synth.py::TestDecay::test_apply_decay_no_landfall_pass
1.53s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_interpolate_missing
1.46s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_Liechtenstein_15_lit_pass
1.46s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_scale_wind
1.42s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_get_land_geometry_extent_pass
1.37s call     climada/util/test/test_plot.py::TestPlots::test_geo_scatter_from_array
1.27s call     climada/hazard/test/test_tc_tracks.py::TestIO::test_hdf5_io
1.26s call     climada/util/test/test_plot.py::TestPlots::test_geo_bin_from_array
1.18s call     climada/test/test_engine.py::TestCalcCostBenefit::test_calc_sensitivity_pass
1.07s call     climada/util/test/test_finance.py::TestWBWealthAccount::test_tow_IND_1985_pass
1.04s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_with_provider
1.02s call     climada/entity/exposures/test/test_litpop.py::TestLitPop::test_get_total_value_per_country_pc
1.01s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_additional_variables

(2066 durations < 1s hidden.  Use -vv to show these durations.)
==================================== 725 passed, 2019 warnings in 478.03s (0:07:58) =====================================

To re-create the old environment, I dialed back cartopy and matplotlib (the latter because of an incompatibility that is not tracked by conda):

mamba install -n climada_test cartopy=0.20 matplotlib=3.5

Changeset between environments:

  Package            Version  Build           Channel                     Size
────────────────────────────────────────────────────────────────────────────────
  Install:
────────────────────────────────────────────────────────────────────────────────

  + libdap4           3.20.6  h8510809_2      conda-forge/osx-arm64     Cached
  + pcre                8.45  hbdafb3b_0      conda-forge/osx-arm64     Cached

  Change:
────────────────────────────────────────────────────────────────────────────────

  - geotiff            1.7.1  hdcdc974_6      conda-forge                     
  + geotiff            1.7.1  hc898e3f_3      conda-forge/osx-arm64     Cached
  - librttopo          1.1.0  h844f84d_12     conda-forge                     
  + librttopo          1.1.0  h275bb25_11     conda-forge/osx-arm64     Cached
  - libspatialite      5.0.1  h14115fc_23     conda-forge                     
  + libspatialite      5.0.1  h97b496e_19     conda-forge/osx-arm64     Cached
  - openjpeg           2.5.0  hbc2ba62_2      conda-forge                     
  + openjpeg           2.5.0  h5d4e404_1      conda-forge/osx-arm64     Cached

  Downgrade:
────────────────────────────────────────────────────────────────────────────────

  - cartopy           0.21.1  py39hda17d7f_0  conda-forge                     
  + cartopy           0.20.3  py39h1293edb_2  conda-forge/osx-arm64     Cached
  - cfitsio            4.2.0  h2f961c4_0      conda-forge                     
  + cfitsio            4.1.0  hd4f5c17_0      conda-forge/osx-arm64     Cached
  - fiona              1.9.1  py39h9e5269e_0  conda-forge                     
  + fiona             1.8.22  py39hb828934_0  conda-forge/osx-arm64     Cached
  - gdal               3.6.2  py39h766d3fc_6  conda-forge                     
  + gdal               3.5.2  py39h766d3fc_4  conda-forge/osx-arm64     Cached
  - geos              3.11.1  hb7217d7_0      conda-forge                     
  + geos              3.11.0  h9a09cb3_0      conda-forge/osx-arm64     Cached
  - kealib             1.5.0  hfd766a6_0      conda-forge                     
  + kealib            1.4.15  h02ce806_1      conda-forge/osx-arm64     Cached
  - lcms2               2.15  h481adae_0      conda-forge                     
  + lcms2               2.14  h8193b64_0      conda-forge/osx-arm64     Cached
  - libdeflate          1.17  h1a8c8d9_0      conda-forge                     
  + libdeflate          1.14  h1a8c8d9_0      conda-forge/osx-arm64     Cached
  - libgdal            3.6.2  h90a2855_6      conda-forge                     
  + libgdal            3.5.2  h1ecf2db_4      conda-forge/osx-arm64     Cached
  - libpq               15.2  h1a28acd_0      conda-forge                     
  + libpq               14.5  h1a28acd_5      conda-forge/osx-arm64     Cached
  - libtiff            4.5.0  h5dffbdd_2      conda-forge                     
  + libtiff            4.4.0  heb92581_5      conda-forge/osx-arm64     Cached
  - matplotlib         3.7.1  py39hdf13c20_0  conda-forge                     
  + matplotlib         3.5.3  py39hdf13c20_2  conda-forge/osx-arm64     Cached
  - matplotlib-base    3.7.1  py39h35e9e80_0  conda-forge                     
  + matplotlib-base    3.5.3  py39ha500c34_2  conda-forge/osx-arm64     Cached
  - pillow             9.4.0  py39h8bd98a6_1  conda-forge                     
  + pillow             9.2.0  py39h139752e_3  conda-forge/osx-arm64     Cached
  - poppler          23.01.0  h9564b9f_0      conda-forge                     
  + poppler          22.10.0  hae7f5f0_0      conda-forge/osx-arm64     Cached
  - postgresql          15.2  h45c140d_0      conda-forge                     
  + postgresql          14.5  h45c140d_5      conda-forge/osx-arm64     Cached
  - proj               9.1.1  h13f728c_2      conda-forge                     
  + proj               9.0.1  h4c79c2b_1      conda-forge/osx-arm64     Cached
  - pyproj             3.5.0  py39hd68364f_0  conda-forge                     
  + pyproj             3.4.0  py39h4b6117f_0  conda-forge/osx-arm64     Cached
  - rasterio           1.3.6  py39h157378c_0  conda-forge                     
  + rasterio           1.3.3  py39h3acb546_0  conda-forge/osx-arm64     Cached
  - shapely            2.0.1  py39h472ea82_0  conda-forge                     
  + shapely            1.8.5  py39hda9c22c_1  conda-forge/osx-arm64     Cached
  - tiledb            2.13.2  h9bd36d0_0      conda-forge                     
  + tiledb            2.11.3  h9bd36d0_1      conda-forge/osx-arm64     Cached
Old Environment
(climada_test) ➜  climada_python git:(develop) ✗ mamba env export                            
name: climada_test
channels:
  - conda-forge
  - defaults
dependencies:
  - affine=2.4.0=pyhd8ed1ab_0
  - attrs=23.1.0=pyh71513ae_1
  - aws-c-auth=0.6.28=h826ccd7_5
  - aws-c-cal=0.5.27=h92f41cd_0
  - aws-c-common=0.8.20=hb547adb_0
  - aws-c-compression=0.2.17=h28992cd_0
  - aws-c-event-stream=0.3.0=h7f691c3_6
  - aws-c-http=0.7.8=he2e4218_4
  - aws-c-io=0.13.26=h379bc4c_0
  - aws-c-mqtt=0.8.13=hdb3a981_2
  - aws-c-s3=0.3.4=h02343f9_5
  - aws-c-sdkutils=0.1.10=h28992cd_0
  - aws-checksums=0.1.16=h28992cd_0
  - aws-crt-cpp=0.20.2=h37dd33e_9
  - aws-sdk-cpp=1.10.57=h9b90b14_14
  - blosc=1.21.4=hc338f07_0
  - bokeh=3.1.1=pyhd8ed1ab_0
  - boost-cpp=1.78.0=hf1d6563_2
  - bottleneck=1.3.7=py39h4d8bf0d_0
  - branca=0.6.0=pyhd8ed1ab_0
  - brotli=1.0.9=h1a8c8d9_8
  - brotli-bin=1.0.9=h1a8c8d9_8
  - bzip2=1.0.8=h3422bc3_4
  - c-ares=1.19.1=hb547adb_0
  - ca-certificates=2023.5.7=hf0a4a13_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cairo=1.16.0=h73a0509_1014
  - cartopy=0.20.3=py39h1293edb_2
  - certifi=2023.5.7=pyhd8ed1ab_0
  - cffi=1.15.1=py39h7e6b969_3
  - cfgrib=0.9.9.1=pyhd8ed1ab_2
  - cfitsio=4.1.0=hd4f5c17_0
  - cftime=1.6.2=py39h4d8bf0d_1
  - charset-normalizer=3.1.0=pyhd8ed1ab_0
  - click=8.1.3=unix_pyhd8ed1ab_2
  - click-plugins=1.1.1=py_0
  - cligj=0.7.2=pyhd8ed1ab_1
  - cloudpickle=2.2.1=pyhd8ed1ab_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - contextily=1.3.0=pyhd8ed1ab_0
  - contourpy=1.1.0=py39hbd775c9_0
  - curl=8.1.2=h912dcd9_0
  - cycler=0.11.0=pyhd8ed1ab_0
  - cytoolz=0.12.0=py39h02fc5c5_1
  - dask=2023.6.0=pyhd8ed1ab_0
  - dask-core=2023.6.0=pyhd8ed1ab_0
  - dill=0.3.6=pyhd8ed1ab_1
  - distributed=2023.6.0=pyhd8ed1ab_0
  - eccodes=2.27.1=hcbf30ee_0
  - et_xmlfile=1.1.0=pyhd8ed1ab_0
  - expat=2.5.0=hb7217d7_1
  - findlibs=0.0.5=pyhd8ed1ab_0
  - fiona=1.8.22=py39hb828934_0
  - folium=0.14.0=pyhd8ed1ab_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=hab24e00_0
  - fontconfig=2.14.2=h82840c6_0
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - fonttools=4.40.0=py39h0f82c59_0
  - freetype=2.12.1=hd633e50_1
  - freexl=1.0.6=h1a8c8d9_1
  - fsspec=2023.6.0=pyh1a96a4e_0
  - gdal=3.5.2=py39h766d3fc_4
  - geographiclib=1.52=pyhd8ed1ab_0
  - geopandas=0.13.2=pyhd8ed1ab_1
  - geopandas-base=0.13.2=pyha770c72_1
  - geopy=2.3.0=pyhd8ed1ab_0
  - geos=3.11.0=h9a09cb3_0
  - geotiff=1.7.1=hc898e3f_3
  - gettext=0.21.1=h0186832_0
  - gflags=2.2.2=hc88da5d_1004
  - giflib=5.2.1=h1a8c8d9_3
  - glog=0.6.0=h6da1cb0_0
  - h5py=3.8.0=nompi_py39hc9149d8_100
  - haversine=2.8.0=pyhd8ed1ab_0
  - hdf4=4.2.15=h1a38d6a_5
  - hdf5=1.12.2=nompi_ha7af310_101
  - icu=70.1=h6b3803e_0
  - idna=3.4=pyhd8ed1ab_0
  - importlib-metadata=6.7.0=pyha770c72_0
  - importlib-resources=5.12.0=pyhd8ed1ab_0
  - importlib_metadata=6.7.0=hd8ed1ab_0
  - importlib_resources=5.12.0=pyhd8ed1ab_0
  - jasper=2.0.33=hc3cd1e9_1
  - jinja2=3.1.2=pyhd8ed1ab_1
  - joblib=1.2.0=pyhd8ed1ab_0
  - jpeg=9e=h1a8c8d9_3
  - json-c=0.16=hc449e50_0
  - kealib=1.4.15=h02ce806_1
  - kiwisolver=1.4.4=py39haaf3ac1_1
  - krb5=1.20.1=h69eda48_0
  - lcms2=2.14=h8193b64_0
  - lerc=4.0.0=h9a09cb3_0
  - libabseil=20230125.2=cxx17_h13dd4ca_2
  - libaec=1.0.6=hb7217d7_1
  - libarrow=12.0.0=hbfb5349_8_cpu
  - libblas=3.9.0=17_osxarm64_openblas
  - libbrotlicommon=1.0.9=h1a8c8d9_8
  - libbrotlidec=1.0.9=h1a8c8d9_8
  - libbrotlienc=1.0.9=h1a8c8d9_8
  - libcblas=3.9.0=17_osxarm64_openblas
  - libcrc32c=1.1.2=hbdafb3b_0
  - libcurl=8.1.2=h912dcd9_0
  - libcxx=16.0.6=h4653b0c_0
  - libdap4=3.20.6=h8510809_2
  - libdeflate=1.14=h1a8c8d9_0
  - libedit=3.1.20191231=hc8eb9b7_2
  - libev=4.33=h642e427_1
  - libevent=2.1.12=h2757513_1
  - libexpat=2.5.0=hb7217d7_1
  - libffi=3.4.2=h3422bc3_5
  - libgdal=3.5.2=h1ecf2db_4
  - libgfortran=5.0.0=12_2_0_hd922786_31
  - libgfortran5=12.2.0=h0eea778_31
  - libglib=2.76.3=h24e9cb9_0
  - libgoogle-cloud=2.11.0=h5263b79_1
  - libgrpc=1.55.1=hc384137_1
  - libiconv=1.17=he4db4b2_0
  - libkml=1.3.0=h41464e4_1015
  - liblapack=3.9.0=17_osxarm64_openblas
  - libllvm14=14.0.6=hd1a9a77_3
  - libnetcdf=4.8.1=nompi_h2510be2_106
  - libnghttp2=1.52.0=hae82a92_0
  - libopenblas=0.3.23=openmp_hc731615_0
  - libpng=1.6.39=h76d750c_0
  - libpq=14.5=h1a28acd_5
  - libprotobuf=4.23.2=hf32f9b9_5
  - librttopo=1.1.0=h275bb25_11
  - libspatialindex=1.9.3=hbdafb3b_4
  - libspatialite=5.0.1=h97b496e_19
  - libsqlite=3.42.0=hb31c410_0
  - libssh2=1.11.0=h7a5bd25_0
  - libthrift=0.18.1=ha061701_2
  - libtiff=4.4.0=heb92581_5
  - libutf8proc=2.8.0=h1a8c8d9_0
  - libwebp-base=1.3.0=h1a8c8d9_0
  - libxcb=1.13=h9b22ae9_1004
  - libxml2=2.10.3=h67585b2_4
  - libxslt=1.1.37=h1bd8bc4_0
  - libzip=1.9.2=h76ab92c_1
  - libzlib=1.2.13=h53f4e23_5
  - llvm-openmp=16.0.6=h1c12783_0
  - llvmlite=0.40.0=py39hbad4f83_0
  - locket=1.0.0=pyhd8ed1ab_0
  - lxml=4.9.2=py39h0520ce3_0
  - lz4=4.3.2=py39hb35ce34_0
  - lz4-c=1.9.4=hb7217d7_0
  - mapclassify=2.5.0=pyhd8ed1ab_1
  - markupsafe=2.1.3=py39h0f82c59_0
  - matplotlib=3.5.3=py39hdf13c20_2
  - matplotlib-base=3.5.3=py39ha500c34_2
  - mercantile=1.2.1=pyhd8ed1ab_0
  - msgpack-python=1.0.5=py39haaf3ac1_0
  - multiprocess=0.70.14=py39h02fc5c5_3
  - munch=3.0.0=pyhd8ed1ab_0
  - munkres=1.1.4=pyh9f0ad1d_0
  - ncurses=6.4=h7ea286d_0
  - netcdf4=1.6.2=nompi_py39h8ded8ba_100
  - networkx=3.1=pyhd8ed1ab_0
  - nspr=4.35=hb7217d7_0
  - nss=3.89=h789eff7_0
  - numba=0.57.0=py39he8ed757_2
  - numexpr=2.8.4=py39hd28f0be_0
  - numpy=1.24.3=py39h485cf63_0
  - openjpeg=2.5.0=h5d4e404_1
  - openpyxl=3.1.2=py39h0f82c59_0
  - openssl=3.1.1=h53f4e23_1
  - orc=1.8.4=h13b7ede_0
  - packaging=23.1=pyhd8ed1ab_0
  - pandas=1.5.3=py39hde7b980_1
  - pandas-datareader=0.10.0=pyh6c4a22f_0
  - partd=1.4.0=pyhd8ed1ab_0
  - pathos=0.3.0=pyhd8ed1ab_0
  - patsy=0.5.3=pyhd8ed1ab_0
  - pcre=8.45=hbdafb3b_0
  - pcre2=10.40=hb34f9b4_0
  - pillow=9.2.0=py39h139752e_3
  - pint=0.22=pyhd8ed1ab_1
  - pip=23.1.2=pyhd8ed1ab_0
  - pixman=0.40.0=h27ca646_0
  - platformdirs=3.8.0=pyhd8ed1ab_0
  - pooch=1.7.0=pyha770c72_3
  - poppler=22.10.0=hae7f5f0_0
  - poppler-data=0.4.12=hd8ed1ab_0
  - postgresql=14.5=h45c140d_5
  - pox=0.3.2=pyhd8ed1ab_0
  - ppft=1.7.6.6=pyhd8ed1ab_0
  - proj=9.0.1=h4c79c2b_1
  - psutil=5.9.5=py39h02fc5c5_0
  - pthread-stubs=0.4=h27ca646_1001
  - pyarrow=12.0.0=py39hf40061a_8_cpu
  - pycountry=22.3.5=pyhd8ed1ab_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pyepsg=0.4.0=py_0
  - pyparsing=3.1.0=pyhd8ed1ab_0
  - pyproj=3.4.0=py39h4b6117f_0
  - pyshp=2.3.1=pyhd8ed1ab_0
  - pysocks=1.7.1=pyha2e5f31_6
  - pytables=3.7.0=py39h8abd629_3
  - python=3.9.16=hea58f1e_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-eccodes=1.5.1=py39h4d8bf0d_0
  - python_abi=3.9=3_cp39
  - pytz=2023.3=pyhd8ed1ab_0
  - pyxlsb=1.0.10=pyhd8ed1ab_0
  - pyyaml=6.0=py39h02fc5c5_5
  - rasterio=1.3.3=py39h3acb546_0
  - re2=2023.03.02=hc5e2d97_0
  - readline=8.2=h92ec313_1
  - requests=2.31.0=pyhd8ed1ab_0
  - rtree=1.0.1=py39hb28b0e7_1
  - salib=1.4.7=pyhd8ed1ab_0
  - scikit-learn=1.2.2=py39hd5c4a62_2
  - scipy=1.11.0=py39ha6b2cbd_0
  - setuptools=68.0.0=pyhd8ed1ab_0
  - shapely=1.8.5=py39hda9c22c_1
  - six=1.16.0=pyh6c4a22f_0
  - snappy=1.1.10=h17c5cce_0
  - snuggs=1.4.7=py_0
  - sortedcontainers=2.4.0=pyhd8ed1ab_0
  - sparse=0.14.0=pyhd8ed1ab_0
  - sqlite=3.42.0=h203b68d_0
  - statsmodels=0.14.0=py39h8a366b7_1
  - tabulate=0.9.0=pyhd8ed1ab_1
  - tblib=1.7.0=pyhd8ed1ab_0
  - threadpoolctl=3.1.0=pyh8a188c0_0
  - tiledb=2.11.3=h9bd36d0_1
  - tk=8.6.12=he1e0b03_0
  - toolz=0.12.0=pyhd8ed1ab_0
  - tornado=6.3.2=py39h0f82c59_0
  - tqdm=4.65.0=pyhd8ed1ab_1
  - typing-extensions=4.6.3=hd8ed1ab_0
  - typing_extensions=4.6.3=pyha770c72_0
  - tzcode=2023c=h1a8c8d9_0
  - tzdata=2023c=h71feb2d_0
  - unicodedata2=15.0.0=py39h02fc5c5_0
  - unittest-xml-reporting=3.2.0=pyhd8ed1ab_0
  - urllib3=2.0.3=pyhd8ed1ab_0
  - wheel=0.40.0=pyhd8ed1ab_0
  - xarray=2023.5.0=pyhd8ed1ab_0
  - xerces-c=3.2.4=h627aa08_1
  - xlrd=2.0.1=pyhd8ed1ab_3
  - xlsxwriter=3.1.2=pyhd8ed1ab_0
  - xorg-libxau=1.0.11=hb547adb_0
  - xorg-libxdmcp=1.1.3=h27ca646_0
  - xyzservices=2023.5.0=pyhd8ed1ab_1
  - xz=5.2.6=h57fd34a_0
  - yaml=0.2.5=h3422bc3_2
  - zict=3.0.0=pyhd8ed1ab_0
  - zipp=3.15.0=pyhd8ed1ab_0
  - zlib=1.2.13=h53f4e23_5
  - zstd=1.5.2=hf913c23_6
  - pip:
    - appnope==0.1.3
    - astroid==2.5
    - asttokens==2.2.1
    - backcall==0.2.0
    - coverage==7.2.7
    - decorator==5.1.1
    - deprecation==2.1.0
    - exceptiongroup==1.1.1
    - executing==1.2.0
    - iniconfig==2.0.0
    - ipython==8.14.0
    - isort==5.12.0
    - jedi==0.18.2
    - lazy-object-proxy==1.9.0
    - matplotlib-inline==0.1.6
    - mccabe==0.6.1
    - overpy==0.6
    - parso==0.8.3
    - peewee==3.16.2
    - pexpect==4.8.0
    - pickleshare==0.7.5
    - pluggy==1.2.0
    - prompt-toolkit==3.0.38
    - ptyprocess==0.7.0
    - pure-eval==0.2.2
    - pygments==2.15.1
    - pylint==2.7.1
    - pytest==7.4.0
    - pytest-cov==4.1.0
    - pytest-subtests==0.11.0
    - stack-data==0.6.2
    - toml==0.10.2
    - tomli==2.0.1
    - traitlets==5.9.0
    - wcwidth==0.2.6
    - wrapt==1.12.1
    - xmlrunner==1.7.7
prefix: /Users/ldr.riedel/mambaforge/envs/climada_test

Results from pytest:

(climada_test) ➜  climada_python git:(develop) ✗ pytest --durations=0 --durations-min=1 climada/
================================================== test session starts ==================================================
platform darwin -- Python 3.9.16, pytest-7.4.0, pluggy-1.2.0
rootdir: /Users/ldr.riedel/coding/climada_python
plugins: subtests-0.11.0, cov-4.1.0
collected 725 items                                                                                                     

climada/engine/test/test_cost_benefit.py ......................                                                   [  3%]
climada/engine/test/test_forecast.py ...                                                                          [  3%]
climada/engine/test/test_impact.py ........................................                                       [  8%]
climada/engine/test/test_impact_calc.py ............................                                              [ 12%]
climada/engine/test/test_impact_data.py ...........                                                               [ 14%]
climada/engine/unsequa/test/test_unsequa.py ................                                                      [ 16%]
climada/entity/disc_rates/test/test_base.py .............                                                         [ 18%]
climada/entity/exposures/test/test_base.py ..........................                                             [ 21%]
climada/entity/exposures/test/test_litpop.py ......................                                               [ 24%]
climada/entity/exposures/test/test_mat.py .........                                                               [ 26%]
climada/entity/exposures/test/test_nightlight.py .....                                                            [ 26%]
climada/entity/impact_funcs/test/test_base.py ...                                                                 [ 27%]
climada/entity/impact_funcs/test/test_imp_fun_set.py .......................                                      [ 30%]
climada/entity/impact_funcs/test/test_tc.py ........                                                              [ 31%]
climada/entity/impact_funcs/test/test_ws.py .                                                                     [ 31%]
climada/entity/measures/test/test_base.py ...........                                                             [ 33%]
climada/entity/measures/test/test_meas_set.py .....................                                               [ 36%]
climada/entity/test/test_entity.py ......                                                                         [ 36%]
climada/entity/test/test_tag.py ...                                                                               [ 37%]
climada/hazard/centroids/test/test_centr.py ........                                                              [ 38%]
climada/hazard/centroids/test/test_vec_ras.py ....................................                                [ 43%]
climada/hazard/test/test_base.py ........................................................                         [ 51%]
climada/hazard/test/test_base_xarray.py ...............                                                           [ 53%]
climada/hazard/test/test_storm_europe.py .......                                                                  [ 54%]
climada/hazard/test/test_tag.py ........                                                                          [ 55%]
climada/hazard/test/test_tc_cc.py ..                                                                              [ 55%]
climada/hazard/test/test_tc_tracks.py ........................................                                    [ 61%]
climada/hazard/test/test_tc_tracks_synth.py ..................                                                    [ 63%]
climada/hazard/test/test_trop_cyclone.py ................                                                         [ 65%]
climada/test/test_api_client.py ................                                                                  [ 68%]
climada/test/test_calibration.py .                                                                                [ 68%]
climada/test/test_engine.py .....                                                                                 [ 68%]
climada/test/test_hazard.py ...........                                                                           [ 70%]
climada/test/test_litpop_integr.py ..................                                                             [ 72%]
climada/test/test_multi_processing.py .                                                                           [ 72%]
climada/test/test_nightlight.py ......                                                                            [ 73%]
climada/test/test_plot.py ...........                                                                             [ 75%]
climada/test/test_util.py .                                                                                       [ 75%]
climada/util/test/test__init__.py .                                                                               [ 75%]
climada/util/test/test_checker.py ....                                                                            [ 76%]
climada/util/test/test_config.py ...                                                                              [ 76%]
climada/util/test/test_coordinates.py ........................................................................... [ 86%]
..                                                                                                                [ 87%]
climada/util/test/test_dates_times.py .....                                                                       [ 87%]
climada/util/test/test_dwd_icon.py .....                                                                          [ 88%]
climada/util/test/test_files.py ............                                                                      [ 90%]
climada/util/test/test_finance.py ...............                                                                 [ 92%]
climada/util/test/test_hdf5.py ......                                                                             [ 93%]
climada/util/test/test_lines_polys_handler.py .........................                                           [ 96%]
climada/util/test/test_plot.py .......                                                                            [ 97%]
climada/util/test/test_save.py ..                                                                                 [ 97%]
climada/util/test/test_select.py .                                                                                [ 97%]
climada/util/test/test_value_representation.py .........                                                          [ 99%]
climada/util/test/test_yearsets.py ......                                                                         [100%]

=================================================== slowest durations ===================================================
31.63s call     climada/test/test_api_client.py::TestClient::test_purge_cache
16.41s call     climada/test/test_nightlight.py::TestNightlight::test_download_nl_files
14.23s call     climada/test/test_nightlight.py::TestNightlight::test_read_bm_files
12.72s call     climada/test/test_calibration.py::TestCalib::test_calib_instance
12.31s call     climada/test/test_plot.py::TestPlotter::test_cost_benefit
11.21s call     climada/test/test_api_client.py::TestClient::test_download_file
9.49s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_switzerland300_admin1_pc2016_pass
9.07s call     climada/test/test_litpop_integr.py::TestAdmin1::test_calc_admin1
8.75s call     climada/test/test_plot.py::TestPlotter::test_ctx_osm_pass
8.72s call     climada/test/test_litpop_integr.py::TestAdmin1::test_from_countries_calc_admin1_pass
8.66s call     climada/test/test_util.py::TestGeomImpactCalcs::test_calc_geom_impact_polys
6.76s call     climada/test/test_api_client.py::TestClient::test_get_hazard_fails
6.29s call     climada/test/test_nightlight.py::TestNightlight::test_unzip_tif_to_py
5.10s call     climada/test/test_hazard.py::TestTcTracks::test_ibtracs_with_basin
4.59s call     climada/test/test_litpop_integr.py::TestAdmin1::test_brandenburg
4.57s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_suriname30_nfw_pass
3.90s call     climada/test/test_engine.py::TestEmdatProcessing::test_emdat_damage_yearlysum
3.58s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_from_shape_and_countries_zurich_pass
3.53s call     climada/test/test_hazard.py::TestStormEurope::test_from_footprints
3.44s call     climada/entity/exposures/test/test_base.py::TestFuncs::test_assign_large_hazard_subset_pass
3.15s call     climada/test/test_hazard.py::TestCentroids::test_read_raster_pool_pass
3.14s call     climada/test/test_hazard.py::TestBase::test_reproject_raster_pass
3.14s call     climada/test/test_hazard.py::TestCentroids::test_read_write_raster_pass
3.11s call     climada/test/test_hazard.py::TestBase::test_raster_to_vector_pass
3.06s call     climada/test/test_engine.py::TestGDPScaling::test_scale_impact2refyear
2.83s call     climada/test/test_engine.py::TestEmdatToImpact::test_emdat_to_impact_scale
2.64s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_on_land_pass
2.53s call     climada/test/test_plot.py::TestPlotter::test_exposures_value_pass
2.37s call     climada/test/test_hazard.py::TestBase::test_write_read_pass
2.36s call     climada/util/test/test_plot.py::TestPlots::test_geo_scatter_categorical
2.34s call     climada/util/test/test_coordinates.py::TestRasterIO::test_transform_raster_pass
2.12s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_switzerland30normPop_pass
2.07s call     climada/test/test_engine.py::TestCalcCostBenefit::test_calc_uncertainty_pass
2.00s call     climada/test/test_multi_processing.py::TestCoordinates::test_set_df_geometry_points_scheduled_pass
1.93s call     climada/hazard/test/test_storm_europe.py::TestReader::test_generate_prob_storms
1.90s call     climada/test/test_hazard.py::TestTcTracks::test_cutoff_tracks
1.84s call     climada/engine/test/test_forecast.py::TestPlot::test_Forecast_plot
1.81s call     climada/test/test_api_client.py::TestClient::test_get_hazard
1.81s call     climada/util/test/test_coordinates.py::TestRasterIO::test_crs_raster_pass
1.77s call     climada/engine/test/test_impact_data.py::TestEmdatProcessing::test_emdat_impact_event_2018
1.65s call     climada/engine/test/test_impact_data.py::TestEmdatProcessing::test_emdat_impact_event_2020
1.64s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_netherlands150_pass
1.62s call     climada/test/test_plot.py::TestPlotter::test_plot_unc_cb
1.61s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_interpolate_missing
1.58s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_range
1.56s call     climada/entity/exposures/test/test_litpop.py::TestLitPop::test_get_total_value_per_country_gdp
1.56s call     climada/util/test/test_coordinates.py::TestRasterIO::test_crs_and_geometry_raster_pass
1.48s call     climada/test/test_plot.py::TestPlotter::test_hazard_centroids
1.44s call     climada/test/test_litpop_integr.py::TestLitPopExposure::test_switzerland300_pass
1.35s call     climada/hazard/test/test_tc_tracks.py::TestIbtracs::test_ibtracs_scale_wind
1.29s call     climada/test/test_plot.py::TestPlotter::test_hazard_intensity_pass
1.27s call     climada/hazard/test/test_storm_europe.py::TestReader::test_read_with_ref
1.25s call     climada/hazard/test/test_tc_tracks.py::TestFuncs::test_track_land_params
1.17s call     climada/hazard/test/test_storm_europe.py::TestReader::test_centroids_from_nc
1.17s call     climada/hazard/test/test_storm_europe.py::TestReader::test_set_ssi
1.15s call     climada/engine/test/test_forecast.py::TestCalc::test_Forecast_init_raise
1.09s call     climada/test/test_engine.py::TestCalcCostBenefit::test_calc_sensitivity_pass
1.05s call     climada/util/test/test_plot.py::TestPlots::test_geo_im_from_array
1.04s call     climada/util/test/test_coordinates.py::TestGetGeodata::test_dist_to_coast
1.03s call     climada/hazard/test/test_tc_tracks.py::TestIO::test_hdf5_io
1.00s call     climada/hazard/centroids/test/test_centr.py::TestCentroidsReader::test_base_grid

(2114 durations < 1s hidden.  Use -vv to show these durations.)
==================================== 725 passed, 1878 warnings in 328.54s (0:05:28) =====================================
emanuel-schmid commented 1 year ago

Cool! 😃

Tests on my machine run a whole lot faster than on Jenkins (5:28 / 7:58 vs ~8 / ~13 for unit and integration tests together)

No surprise. Differences at this range are expected with many machines (including mine) when compared to yours.

Many tests with increased runtime are related to LitPop. Might there be a regression in the latest rasterio release?

Interesting observation!

climada/test/test_api_client.py::TestClient::test_purge_cache is by far the slowest test (30sec) and should be improved

Yeah, I know... it calls Client().list_dataset_infos(), twice. Should be mocked.

peanutfun commented 2 months ago

Closing due to inactivity. Might re-open in case of further test performance degradation.

peanutfun commented 2 months ago

Related: #628