0s autopkgtest [10:21:15]: starting date and time: 2024-06-16 10:21:15+0000 0s autopkgtest [10:21:15]: git checkout: 433ed4cb Merge branch 'skia/nova_flock' into 'ubuntu/5.34+prod' 0s autopkgtest [10:21:15]: host juju-7f2275-prod-proposed-migration-environment-2; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.d26d96i4/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:pooch --apt-upgrade metpy --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=pooch/1.8.2-1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-2@bos02-s390x-18.secgroup --name adt-oracular-s390x-metpy-20240616-102115-juju-7f2275-prod-proposed-migration-environment-2-5784e4bc-640b-4a8c-80bc-f44c1d8edc13 --image adt/ubuntu-oracular-s390x-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-2 --net-id=net_prod-proposed-migration -e TERM=linux -e ''"'"'http_proxy=http://squid.internal:3128'"'"'' -e ''"'"'https_proxy=http://squid.internal:3128'"'"'' -e ''"'"'no_proxy=127.0.0.1,127.0.1.1,login.ubuntu.com,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,keyserver.ubuntu.com,launchpadlibrarian.net,launchpadcontent.net,launchpad.net,10.24.0.0/24,keystone.ps5.canonical.com,objectstorage.prodstack5.canonical.com'"'"'' --mirror=http://ftpmaster.internal/ubuntu/ 171s autopkgtest [10:24:06]: testbed dpkg architecture: s390x 171s autopkgtest [10:24:06]: testbed apt version: 2.9.5 171s autopkgtest [10:24:06]: @@@@@@@@@@@@@@@@@@@@ test bed setup 172s Get:1 http://ftpmaster.internal/ubuntu oracular-proposed InRelease [110 kB] 172s Get:2 http://ftpmaster.internal/ubuntu oracular-proposed/universe Sources [389 kB] 172s Get:3 http://ftpmaster.internal/ubuntu oracular-proposed/restricted Sources [7052 B] 172s Get:4 http://ftpmaster.internal/ubuntu oracular-proposed/main Sources [36.1 kB] 172s Get:5 http://ftpmaster.internal/ubuntu oracular-proposed/multiverse Sources [2576 B] 172s Get:6 http://ftpmaster.internal/ubuntu oracular-proposed/main s390x Packages [43.9 kB] 172s Get:7 http://ftpmaster.internal/ubuntu oracular-proposed/restricted s390x Packages [1860 B] 172s Get:8 http://ftpmaster.internal/ubuntu oracular-proposed/universe s390x Packages [298 kB] 172s Get:9 http://ftpmaster.internal/ubuntu oracular-proposed/multiverse s390x Packages [2528 B] 173s Fetched 892 kB in 1s (1128 kB/s) 173s Reading package lists... 175s Reading package lists... 175s Building dependency tree... 175s Reading state information... 175s Calculating upgrade... 175s The following packages will be upgraded: 175s libldap-common libldap2 175s 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 175s Need to get 230 kB of archives. 175s After this operation, 16.4 kB disk space will be freed. 175s Get:1 http://ftpmaster.internal/ubuntu oracular/main s390x libldap-common all 2.6.7+dfsg-1~exp1ubuntu9 [31.5 kB] 176s Get:2 http://ftpmaster.internal/ubuntu oracular/main s390x libldap2 s390x 2.6.7+dfsg-1~exp1ubuntu9 [199 kB] 176s Fetched 230 kB in 1s (416 kB/s) 176s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 54671 files and directories currently installed.) 176s Preparing to unpack .../libldap-common_2.6.7+dfsg-1~exp1ubuntu9_all.deb ... 176s Unpacking libldap-common (2.6.7+dfsg-1~exp1ubuntu9) over (2.6.7+dfsg-1~exp1ubuntu8) ... 176s Preparing to unpack .../libldap2_2.6.7+dfsg-1~exp1ubuntu9_s390x.deb ... 176s Unpacking libldap2:s390x (2.6.7+dfsg-1~exp1ubuntu9) over (2.6.7+dfsg-1~exp1ubuntu8) ... 176s Setting up libldap-common (2.6.7+dfsg-1~exp1ubuntu9) ... 176s Setting up libldap2:s390x (2.6.7+dfsg-1~exp1ubuntu9) ... 176s Processing triggers for man-db (2.12.1-2) ... 176s Processing triggers for libc-bin (2.39-0ubuntu9) ... 177s Reading package lists... 177s Building dependency tree... 177s Reading state information... 177s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 177s Hit:1 http://ftpmaster.internal/ubuntu oracular-proposed InRelease 177s Hit:2 http://ftpmaster.internal/ubuntu oracular InRelease 177s Hit:3 http://ftpmaster.internal/ubuntu oracular-updates InRelease 178s Hit:4 http://ftpmaster.internal/ubuntu oracular-security InRelease 179s Reading package lists... 179s Reading package lists... 179s Building dependency tree... 179s Reading state information... 179s Calculating upgrade... 179s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 179s Reading package lists... 179s Building dependency tree... 179s Reading state information... 179s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 182s autopkgtest [10:24:17]: testbed running kernel: Linux 6.8.0-31-generic #31-Ubuntu SMP Sat Apr 20 00:14:26 UTC 2024 182s autopkgtest [10:24:17]: @@@@@@@@@@@@@@@@@@@@ apt-source metpy 184s Get:1 http://ftpmaster.internal/ubuntu oracular/universe metpy 1.6.2+ds-1 (dsc) [2640 B] 184s Get:2 http://ftpmaster.internal/ubuntu oracular/universe metpy 1.6.2+ds-1 (tar) [9945 kB] 184s Get:3 http://ftpmaster.internal/ubuntu oracular/universe metpy 1.6.2+ds-1 (diff) [9740 B] 184s gpgv: Signature made Tue Apr 16 08:36:50 2024 UTC 184s gpgv: using RSA key 3B70F209A5FFD68903C472C5EBF48AB2578F9812 184s gpgv: issuer "antonio.valentino@tiscali.it" 184s gpgv: Can't check signature: No public key 184s dpkg-source: warning: cannot verify inline signature for ./metpy_1.6.2+ds-1.dsc: no acceptable signature found 185s autopkgtest [10:24:20]: testing package metpy version 1.6.2+ds-1 186s autopkgtest [10:24:21]: build not needed 187s autopkgtest [10:24:22]: test pybuild-autopkgtest: preparing testbed 188s Reading package lists... 188s Building dependency tree... 188s Reading state information... 188s Starting pkgProblemResolver with broken count: 0 188s Starting 2 pkgProblemResolver with broken count: 0 188s Done 189s The following additional packages will be installed: 189s autoconf automake autopoint autotools-dev blt build-essential cpp cpp-13 189s cpp-13-s390x-linux-gnu cpp-s390x-linux-gnu debhelper debugedit dh-autoreconf 189s dh-python dh-strip-nondeterminism dwz fonts-glyphicons-halflings fonts-lyx 189s g++ g++-13 g++-13-s390x-linux-gnu g++-s390x-linux-gnu gcc gcc-13 gcc-13-base 189s gcc-13-s390x-linux-gnu gcc-s390x-linux-gnu gettext intltool-debian 189s javascript-common libaec0 libarchive-zip-perl libasan8 libatomic1 libblas3 189s libcc1-0 libdebhelper-perl libfile-stripnondeterminism-perl libgcc-13-dev 189s libgeos-c1t64 libgeos3.12.2 libgfortran5 libgomp1 libgraphite2-3 189s libharfbuzz0b libhdf5-103-1t64 libhdf5-hl-100t64 libimagequant0 libisl23 189s libitm1 libjs-bootstrap libjs-bootstrap4 libjs-jquery libjs-jquery-ui 189s libjs-popper.js liblapack3 liblbfgsb0 liblcms2-2 libmpc3 libnetcdf19t64 189s libopenjp2-7 libproj25 libqhull-r8.0 libraqm0 libstdc++-13-dev libsz2 189s libtcl8.6 libtk8.6 libtool libubsan1 libwebpdemux2 libwebpmux3 libxft2 189s libxrender1 libxslt1.1 libxss1 m4 po-debconf proj-data 189s pybuild-plugin-autopkgtest pybuild-plugin-pyproject python-cartopy-data 189s python-matplotlib-data python3-all python3-appdirs python3-brotli 189s python3-build python3-cartopy python3-cftime python3-contourpy 189s python3-cycler python3-dateutil python3-decorator python3-fonttools 189s python3-fs python3-iniconfig python3-installer python3-kiwisolver 189s python3-lxml python3-lz4 python3-matplotlib python3-metpy python3-mpmath 189s python3-netcdf4 python3-numpy python3-packaging python3-pandas 189s python3-pandas-lib python3-pil python3-pil.imagetk python3-pint 189s python3-platformdirs python3-pluggy python3-pooch python3-pyproj 189s python3-pyproject-hooks python3-pyshp python3-pytest python3-pytest-mpl 189s python3-scipy python3-setuptools-scm python3-shapely python3-sympy 189s python3-tk python3-toml python3-traitlets python3-tz python3-ufolib2 189s python3-unicodedata2 python3-wheel python3-xarray tk8.6-blt2.5 unicode-data 189s x11-common 189s Suggested packages: 189s autoconf-archive gnu-standards autoconf-doc blt-demo cpp-doc gcc-13-locales 189s cpp-13-doc dh-make flit g++-multilib g++-13-multilib gcc-13-doc gcc-multilib 189s manpages-dev flex bison gdb gcc-doc gcc-13-multilib gdb-s390x-linux-gnu 189s gettext-doc libasprintf-dev libgettextpo-dev apache2 | lighttpd | httpd 189s libjs-jquery-ui-docs liblcms2-utils proj-bin libstdc++-13-doc tcl8.6 tk8.6 189s libtool-doc gfortran | fortran95-compiler gcj-jdk m4-doc libmail-box-perl 189s python3-pip python3-venv python-build-doc python3-fiona python3-gdal 189s python3-owslib python3-pykdtree python-cycler-doc python-installer-doc 189s python-lxml-doc cm-super-minimal dvipng ffmpeg fonts-staypuft ghostscript 189s gir1.2-gtk-3.0 inkscape ipython3 librsvg2-common python3-cairocffi 189s python3-gi-cairo python3-gobject python3-pyqt5 python3-sip python3-tornado 189s texlive-extra-utils texlive-latex-extra python-mpmath-doc python3-gmpy2 189s gfortran python-numpy-doc python3-dev python-pandas-doc python3-statsmodels 189s python-pil-doc python3-paramiko python-scipy-doc texlive-fonts-extra 189s python-sympy-doc tix python3-tk-dbg python-xarray-doc python3-pydap 189s python3-seaborn python3-toolz 189s Recommended packages: 189s libarchive-cpio-perl node-jquery libltdl-dev libmail-sendmail-perl 189s python3-bs4 python3-cssselect python3-html5lib python3-bottleneck 189s python3-numexpr python3-odf python3-openpyxl python3-tables python3-olefile 189s python3-tqdm isympy-common python3-dask python3-rasterio python3-h5netcdf 189s python3-zarr 189s The following NEW packages will be installed: 189s autoconf automake autopkgtest-satdep autopoint autotools-dev blt 189s build-essential cpp cpp-13 cpp-13-s390x-linux-gnu cpp-s390x-linux-gnu 189s debhelper debugedit dh-autoreconf dh-python dh-strip-nondeterminism dwz 189s fonts-glyphicons-halflings fonts-lyx g++ g++-13 g++-13-s390x-linux-gnu 189s g++-s390x-linux-gnu gcc gcc-13 gcc-13-base gcc-13-s390x-linux-gnu 189s gcc-s390x-linux-gnu gettext intltool-debian javascript-common libaec0 189s libarchive-zip-perl libasan8 libatomic1 libblas3 libcc1-0 libdebhelper-perl 189s libfile-stripnondeterminism-perl libgcc-13-dev libgeos-c1t64 libgeos3.12.2 189s libgfortran5 libgomp1 libgraphite2-3 libharfbuzz0b libhdf5-103-1t64 189s libhdf5-hl-100t64 libimagequant0 libisl23 libitm1 libjs-bootstrap 189s libjs-bootstrap4 libjs-jquery libjs-jquery-ui libjs-popper.js liblapack3 189s liblbfgsb0 liblcms2-2 libmpc3 libnetcdf19t64 libopenjp2-7 libproj25 189s libqhull-r8.0 libraqm0 libstdc++-13-dev libsz2 libtcl8.6 libtk8.6 libtool 189s libubsan1 libwebpdemux2 libwebpmux3 libxft2 libxrender1 libxslt1.1 libxss1 189s m4 po-debconf proj-data pybuild-plugin-autopkgtest pybuild-plugin-pyproject 189s python-cartopy-data python-matplotlib-data python3-all python3-appdirs 189s python3-brotli python3-build python3-cartopy python3-cftime 189s python3-contourpy python3-cycler python3-dateutil python3-decorator 189s python3-fonttools python3-fs python3-iniconfig python3-installer 189s python3-kiwisolver python3-lxml python3-lz4 python3-matplotlib python3-metpy 189s python3-mpmath python3-netcdf4 python3-numpy python3-packaging 189s python3-pandas python3-pandas-lib python3-pil python3-pil.imagetk 189s python3-pint python3-platformdirs python3-pluggy python3-pooch 189s python3-pyproj python3-pyproject-hooks python3-pyshp python3-pytest 189s python3-pytest-mpl python3-scipy python3-setuptools-scm python3-shapely 189s python3-sympy python3-tk python3-toml python3-traitlets python3-tz 189s python3-ufolib2 python3-unicodedata2 python3-wheel python3-xarray 189s tk8.6-blt2.5 unicode-data x11-common 189s 0 upgraded, 135 newly installed, 0 to remove and 0 not upgraded. 189s Need to get 142 MB/142 MB of archives. 189s After this operation, 530 MB of additional disk space will be used. 189s Get:1 /tmp/autopkgtest.v9TBX8/1-autopkgtest-satdep.deb autopkgtest-satdep s390x 0 [880 B] 189s Get:2 http://ftpmaster.internal/ubuntu oracular/main s390x m4 s390x 1.4.19-4build1 [256 kB] 189s Get:3 http://ftpmaster.internal/ubuntu oracular/main s390x autoconf all 2.71-3 [339 kB] 189s Get:4 http://ftpmaster.internal/ubuntu oracular/main s390x autotools-dev all 20220109.1 [44.9 kB] 189s Get:5 http://ftpmaster.internal/ubuntu oracular/main s390x automake all 1:1.16.5-1.3ubuntu1 [558 kB] 190s Get:6 http://ftpmaster.internal/ubuntu oracular/main s390x autopoint all 0.21-14ubuntu2 [422 kB] 190s Get:7 http://ftpmaster.internal/ubuntu oracular/main s390x libtcl8.6 s390x 8.6.14+dfsg-1build1 [1038 kB] 190s Get:8 http://ftpmaster.internal/ubuntu oracular/main s390x libxrender1 s390x 1:0.9.10-1.1build1 [20.4 kB] 190s Get:9 http://ftpmaster.internal/ubuntu oracular/main s390x libxft2 s390x 2.3.6-1build1 [49.6 kB] 190s Get:10 http://ftpmaster.internal/ubuntu oracular/main s390x x11-common all 1:7.7+23ubuntu3 [21.7 kB] 190s Get:11 http://ftpmaster.internal/ubuntu oracular/main s390x libxss1 s390x 1:1.2.3-1build3 [7396 B] 190s Get:12 http://ftpmaster.internal/ubuntu oracular/main s390x libtk8.6 s390x 8.6.14-1build1 [833 kB] 191s Get:13 http://ftpmaster.internal/ubuntu oracular/main s390x tk8.6-blt2.5 s390x 2.5.3+dfsg-7build1 [662 kB] 191s Get:14 http://ftpmaster.internal/ubuntu oracular/main s390x blt s390x 2.5.3+dfsg-7build1 [4840 B] 191s Get:15 http://ftpmaster.internal/ubuntu oracular/main s390x gcc-13-base s390x 13.2.0-23ubuntu4 [48.9 kB] 191s Get:16 http://ftpmaster.internal/ubuntu oracular/main s390x libisl23 s390x 0.26-3build1 [713 kB] 191s Get:17 http://ftpmaster.internal/ubuntu oracular/main s390x libmpc3 s390x 1.3.1-1build1 [58.4 kB] 191s Get:18 http://ftpmaster.internal/ubuntu oracular/main s390x cpp-13-s390x-linux-gnu s390x 13.2.0-23ubuntu4 [9939 kB] 194s Get:19 http://ftpmaster.internal/ubuntu oracular/main s390x cpp-13 s390x 13.2.0-23ubuntu4 [1030 B] 194s Get:20 http://ftpmaster.internal/ubuntu oracular/main s390x cpp-s390x-linux-gnu s390x 4:13.2.0-7ubuntu1 [5308 B] 194s Get:21 http://ftpmaster.internal/ubuntu oracular/main s390x cpp s390x 4:13.2.0-7ubuntu1 [22.4 kB] 194s Get:22 http://ftpmaster.internal/ubuntu oracular/main s390x libcc1-0 s390x 14.1.0-1ubuntu1 [50.7 kB] 194s Get:23 http://ftpmaster.internal/ubuntu oracular/main s390x libgomp1 s390x 14.1.0-1ubuntu1 [151 kB] 194s Get:24 http://ftpmaster.internal/ubuntu oracular/main s390x libitm1 s390x 14.1.0-1ubuntu1 [31.1 kB] 194s Get:25 http://ftpmaster.internal/ubuntu oracular/main s390x libatomic1 s390x 14.1.0-1ubuntu1 [9378 B] 194s Get:26 http://ftpmaster.internal/ubuntu oracular/main s390x libasan8 s390x 14.1.0-1ubuntu1 [3003 kB] 195s Get:27 http://ftpmaster.internal/ubuntu oracular/main s390x libubsan1 s390x 14.1.0-1ubuntu1 [1189 kB] 195s Get:28 http://ftpmaster.internal/ubuntu oracular/main s390x libgcc-13-dev s390x 13.2.0-23ubuntu4 [1004 kB] 195s Get:29 http://ftpmaster.internal/ubuntu oracular/main s390x gcc-13-s390x-linux-gnu s390x 13.2.0-23ubuntu4 [19.1 MB] 200s Get:30 http://ftpmaster.internal/ubuntu oracular/main s390x gcc-13 s390x 13.2.0-23ubuntu4 [472 kB] 200s Get:31 http://ftpmaster.internal/ubuntu oracular/main s390x gcc-s390x-linux-gnu s390x 4:13.2.0-7ubuntu1 [1208 B] 200s Get:32 http://ftpmaster.internal/ubuntu oracular/main s390x gcc s390x 4:13.2.0-7ubuntu1 [5014 B] 200s Get:33 http://ftpmaster.internal/ubuntu oracular/main s390x libstdc++-13-dev s390x 13.2.0-23ubuntu4 [2494 kB] 200s Get:34 http://ftpmaster.internal/ubuntu oracular/main s390x g++-13-s390x-linux-gnu s390x 13.2.0-23ubuntu4 [11.3 MB] 203s Get:35 http://ftpmaster.internal/ubuntu oracular/main s390x g++-13 s390x 13.2.0-23ubuntu4 [14.5 kB] 203s Get:36 http://ftpmaster.internal/ubuntu oracular/main s390x g++-s390x-linux-gnu s390x 4:13.2.0-7ubuntu1 [956 B] 203s Get:37 http://ftpmaster.internal/ubuntu oracular/main s390x g++ s390x 4:13.2.0-7ubuntu1 [1096 B] 203s Get:38 http://ftpmaster.internal/ubuntu oracular/main s390x build-essential s390x 12.10ubuntu1 [4930 B] 203s Get:39 http://ftpmaster.internal/ubuntu oracular/main s390x libdebhelper-perl all 13.15.3ubuntu2 [92.3 kB] 203s Get:40 http://ftpmaster.internal/ubuntu oracular/main s390x libtool all 2.4.7-7build1 [166 kB] 203s Get:41 http://ftpmaster.internal/ubuntu oracular/main s390x dh-autoreconf all 20 [16.1 kB] 203s Get:42 http://ftpmaster.internal/ubuntu oracular/main s390x libarchive-zip-perl all 1.68-1 [90.2 kB] 203s Get:43 http://ftpmaster.internal/ubuntu oracular/main s390x libfile-stripnondeterminism-perl all 1.14.0-1 [20.1 kB] 203s Get:44 http://ftpmaster.internal/ubuntu oracular/main s390x dh-strip-nondeterminism all 1.14.0-1 [5058 B] 203s Get:45 http://ftpmaster.internal/ubuntu oracular/main s390x debugedit s390x 1:5.0-5build2 [50.5 kB] 203s Get:46 http://ftpmaster.internal/ubuntu oracular/main s390x dwz s390x 0.15-1build6 [122 kB] 203s Get:47 http://ftpmaster.internal/ubuntu oracular/main s390x gettext s390x 0.21-14ubuntu2 [915 kB] 203s Get:48 http://ftpmaster.internal/ubuntu oracular/main s390x intltool-debian all 0.35.0+20060710.6 [23.2 kB] 203s Get:49 http://ftpmaster.internal/ubuntu oracular/main s390x po-debconf all 1.0.21+nmu1 [233 kB] 203s Get:50 http://ftpmaster.internal/ubuntu oracular/main s390x debhelper all 13.15.3ubuntu2 [878 kB] 203s Get:51 http://ftpmaster.internal/ubuntu oracular/universe s390x dh-python all 6.20240422 [110 kB] 203s Get:52 http://ftpmaster.internal/ubuntu oracular/universe s390x fonts-glyphicons-halflings all 1.009~3.4.1+dfsg-3 [118 kB] 203s Get:53 http://ftpmaster.internal/ubuntu oracular/universe s390x fonts-lyx all 2.4.0-1 [171 kB] 203s Get:54 http://ftpmaster.internal/ubuntu oracular/main s390x javascript-common all 11+nmu1 [5936 B] 203s Get:55 http://ftpmaster.internal/ubuntu oracular/universe s390x libaec0 s390x 1.1.3-1 [25.7 kB] 203s Get:56 http://ftpmaster.internal/ubuntu oracular/main s390x libblas3 s390x 3.12.0-3build1 [245 kB] 203s Get:57 http://ftpmaster.internal/ubuntu oracular/universe s390x libgeos3.12.2 s390x 3.12.2-1 [883 kB] 203s Get:58 http://ftpmaster.internal/ubuntu oracular/universe s390x libgeos-c1t64 s390x 3.12.2-1 [90.8 kB] 203s Get:59 http://ftpmaster.internal/ubuntu oracular/main s390x libgfortran5 s390x 14.1.0-1ubuntu1 [600 kB] 203s Get:60 http://ftpmaster.internal/ubuntu oracular/main s390x libgraphite2-3 s390x 1.3.14-2build1 [80.0 kB] 203s Get:61 http://ftpmaster.internal/ubuntu oracular/main s390x libharfbuzz0b s390x 8.3.0-2build2 [515 kB] 203s Get:62 http://ftpmaster.internal/ubuntu oracular/universe s390x libsz2 s390x 1.1.3-1 [5442 B] 203s Get:63 http://ftpmaster.internal/ubuntu oracular/universe s390x libhdf5-103-1t64 s390x 1.10.10+repack-3.1ubuntu4 [1436 kB] 204s Get:64 http://ftpmaster.internal/ubuntu oracular/universe s390x libhdf5-hl-100t64 s390x 1.10.10+repack-3.1ubuntu4 [58.0 kB] 204s Get:65 http://ftpmaster.internal/ubuntu oracular/main s390x libimagequant0 s390x 2.18.0-1build1 [43.3 kB] 204s Get:66 http://ftpmaster.internal/ubuntu oracular/universe s390x libjs-bootstrap all 3.4.1+dfsg-3 [129 kB] 204s Get:67 http://ftpmaster.internal/ubuntu oracular/universe s390x libjs-popper.js all 1.16.1+ds-6 [54.1 kB] 204s Get:68 http://ftpmaster.internal/ubuntu oracular/universe s390x libjs-bootstrap4 all 4.6.1+dfsg1-4 [537 kB] 204s Get:69 http://ftpmaster.internal/ubuntu oracular/main s390x libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB] 204s Get:70 http://ftpmaster.internal/ubuntu oracular/universe s390x libjs-jquery-ui all 1.13.2+dfsg-1 [252 kB] 204s Get:71 http://ftpmaster.internal/ubuntu oracular/main s390x liblapack3 s390x 3.12.0-3build1 [2976 kB] 204s Get:72 http://ftpmaster.internal/ubuntu oracular/universe s390x liblbfgsb0 s390x 3.0+dfsg.4-1build1 [32.4 kB] 204s Get:73 http://ftpmaster.internal/ubuntu oracular/main s390x liblcms2-2 s390x 2.14-2build1 [172 kB] 204s Get:74 http://ftpmaster.internal/ubuntu oracular/universe s390x libnetcdf19t64 s390x 1:4.9.2-6 [498 kB] 204s Get:75 http://ftpmaster.internal/ubuntu oracular/universe s390x proj-data all 9.4.1-1 [7892 kB] 205s Get:76 http://ftpmaster.internal/ubuntu oracular/universe s390x libproj25 s390x 9.4.1-1 [1398 kB] 206s Get:77 http://ftpmaster.internal/ubuntu oracular/universe s390x libqhull-r8.0 s390x 2020.2-6build1 [199 kB] 206s Get:78 http://ftpmaster.internal/ubuntu oracular/main s390x libraqm0 s390x 0.10.1-1build1 [16.2 kB] 206s Get:79 http://ftpmaster.internal/ubuntu oracular/main s390x libwebpdemux2 s390x 1.4.0-0.1 [12.2 kB] 206s Get:80 http://ftpmaster.internal/ubuntu oracular/main s390x libwebpmux3 s390x 1.4.0-0.1 [25.3 kB] 206s Get:81 http://ftpmaster.internal/ubuntu oracular/main s390x libxslt1.1 s390x 1.1.39-0exp1build1 [170 kB] 206s Get:82 http://ftpmaster.internal/ubuntu oracular/universe s390x pybuild-plugin-autopkgtest all 6.20240422 [1748 B] 206s Get:83 http://ftpmaster.internal/ubuntu oracular/main s390x python3-packaging all 24.0-1 [41.1 kB] 206s Get:84 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pyproject-hooks all 1.1.0-1 [9852 B] 206s Get:85 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-toml all 0.10.2-1 [16.5 kB] 206s Get:86 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-wheel all 0.43.0-1 [53.5 kB] 206s Get:87 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-build all 1.2.1-1 [29.7 kB] 206s Get:88 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-installer all 0.7.0+dfsg1-3 [17.4 kB] 206s Get:89 http://ftpmaster.internal/ubuntu oracular/universe s390x pybuild-plugin-pyproject all 6.20240422 [1730 B] 206s Get:90 http://ftpmaster.internal/ubuntu oracular/universe s390x python-cartopy-data all 0.23.0+dfsg-1 [6508 kB] 206s Get:91 http://ftpmaster.internal/ubuntu oracular/universe s390x python-matplotlib-data all 3.6.3-2ubuntu1 [2937 kB] 207s Get:92 http://ftpmaster.internal/ubuntu oracular/main s390x python3-all s390x 3.12.3-0ubuntu1 [890 B] 207s Get:93 http://ftpmaster.internal/ubuntu oracular/main s390x python3-appdirs all 1.4.4-4 [10.9 kB] 207s Get:94 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-brotli s390x 1.1.0-2build2 [376 kB] 207s Get:95 http://ftpmaster.internal/ubuntu oracular/main s390x python3-dateutil all 2.9.0-2 [80.3 kB] 207s Get:96 http://ftpmaster.internal/ubuntu oracular/main s390x libopenjp2-7 s390x 2.5.0-2build3 [192 kB] 207s Get:97 http://ftpmaster.internal/ubuntu oracular/main s390x python3-pil s390x 10.3.0-2 [488 kB] 207s Get:98 http://ftpmaster.internal/ubuntu oracular/main s390x python3-tk s390x 3.12.3-0ubuntu1 [104 kB] 207s Get:99 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pil.imagetk s390x 10.3.0-2 [9114 B] 207s Get:100 http://ftpmaster.internal/ubuntu oracular/main s390x python3-numpy s390x 1:1.26.4+ds-10 [4090 kB] 207s Get:101 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-contourpy s390x 1.0.7-3 [180 kB] 207s Get:102 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-cycler all 0.12.1-1 [9716 B] 207s Get:103 http://ftpmaster.internal/ubuntu oracular/main s390x python3-decorator all 5.1.1-5 [10.1 kB] 208s Get:104 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-scipy s390x 1.12.0-2 [17.3 MB] 210s Get:105 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-ufolib2 all 0.16.0+dfsg1-1 [33.5 kB] 210s Get:106 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-mpmath all 1.3.0-1 [425 kB] 210s Get:107 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-sympy all 1.12-8 [3966 kB] 210s Get:108 http://ftpmaster.internal/ubuntu oracular/main s390x python3-tz all 2024.1-2 [31.4 kB] 210s Get:109 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-fs all 2.4.16-4 [91.3 kB] 210s Get:110 http://ftpmaster.internal/ubuntu oracular/main s390x python3-lxml s390x 5.2.1-1 [1300 kB] 210s Get:111 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-lz4 s390x 4.0.2+dfsg-1build4 [26.4 kB] 210s Get:112 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-unicodedata2 s390x 15.1.0+ds-1build1 [367 kB] 210s Get:113 http://ftpmaster.internal/ubuntu oracular/universe s390x unicode-data all 15.1.0-1 [8878 kB] 210s Get:114 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-fonttools s390x 4.46.0-1build2 [1453 kB] 211s Get:115 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-kiwisolver s390x 1.4.5-1 [52.6 kB] 211s Get:116 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-matplotlib s390x 3.6.3-2ubuntu1 [6022 kB] 211s Get:117 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pyproj s390x 3.6.1-4 [432 kB] 211s Get:118 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pyshp all 2.3.1-2 [62.0 kB] 211s Get:119 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-shapely s390x 2.0.4-1 [310 kB] 211s Get:120 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-cartopy s390x 0.23.0+dfsg-1 [461 kB] 211s Get:121 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-cftime s390x 1.6.4-1 [215 kB] 211s Get:122 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-iniconfig all 1.1.1-2 [6024 B] 211s Get:123 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pandas-lib s390x 2.1.4+dfsg-8 [4689 kB] 211s Get:124 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pandas all 2.1.4+dfsg-8 [3042 kB] 211s Get:125 http://ftpmaster.internal/ubuntu oracular/main s390x python3-pint all 0.19.2-1 [170 kB] 211s Get:126 http://ftpmaster.internal/ubuntu oracular/main s390x python3-platformdirs all 4.2.1-1 [16.3 kB] 211s Get:127 http://ftpmaster.internal/ubuntu oracular-proposed/universe s390x python3-pooch all 1.8.2-1 [49.9 kB] 211s Get:128 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-traitlets all 5.5.0-2 [85.0 kB] 211s Get:129 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-xarray all 2024.03.0-1 [744 kB] 211s Get:130 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-metpy all 1.6.2+ds-1 [354 kB] 211s Get:131 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-netcdf4 s390x 1.7.0-1 [589 kB] 211s Get:132 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pluggy all 1.5.0-1 [21.0 kB] 211s Get:133 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pytest all 7.4.4-1 [305 kB] 211s Get:134 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-pytest-mpl all 0.17.0-1 [26.5 kB] 211s Get:135 http://ftpmaster.internal/ubuntu oracular/universe s390x python3-setuptools-scm all 8.1.0-1 [32.2 kB] 212s Fetched 142 MB in 23s (6249 kB/s) 212s Selecting previously unselected package m4. 212s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 54671 files and directories currently installed.) 212s Preparing to unpack .../000-m4_1.4.19-4build1_s390x.deb ... 212s Unpacking m4 (1.4.19-4build1) ... 212s Selecting previously unselected package autoconf. 212s Preparing to unpack .../001-autoconf_2.71-3_all.deb ... 212s Unpacking autoconf (2.71-3) ... 212s Selecting previously unselected package autotools-dev. 212s Preparing to unpack .../002-autotools-dev_20220109.1_all.deb ... 212s Unpacking autotools-dev (20220109.1) ... 212s Selecting previously unselected package automake. 212s Preparing to unpack .../003-automake_1%3a1.16.5-1.3ubuntu1_all.deb ... 212s Unpacking automake (1:1.16.5-1.3ubuntu1) ... 212s Selecting previously unselected package autopoint. 212s Preparing to unpack .../004-autopoint_0.21-14ubuntu2_all.deb ... 212s Unpacking autopoint (0.21-14ubuntu2) ... 212s Selecting previously unselected package libtcl8.6:s390x. 212s Preparing to unpack .../005-libtcl8.6_8.6.14+dfsg-1build1_s390x.deb ... 212s Unpacking libtcl8.6:s390x (8.6.14+dfsg-1build1) ... 212s Selecting previously unselected package libxrender1:s390x. 212s Preparing to unpack .../006-libxrender1_1%3a0.9.10-1.1build1_s390x.deb ... 212s Unpacking libxrender1:s390x (1:0.9.10-1.1build1) ... 212s Selecting previously unselected package libxft2:s390x. 212s Preparing to unpack .../007-libxft2_2.3.6-1build1_s390x.deb ... 212s Unpacking libxft2:s390x (2.3.6-1build1) ... 212s Selecting previously unselected package x11-common. 212s Preparing to unpack .../008-x11-common_1%3a7.7+23ubuntu3_all.deb ... 212s Unpacking x11-common (1:7.7+23ubuntu3) ... 212s Selecting previously unselected package libxss1:s390x. 212s Preparing to unpack .../009-libxss1_1%3a1.2.3-1build3_s390x.deb ... 212s Unpacking libxss1:s390x (1:1.2.3-1build3) ... 212s Selecting previously unselected package libtk8.6:s390x. 212s Preparing to unpack .../010-libtk8.6_8.6.14-1build1_s390x.deb ... 212s Unpacking libtk8.6:s390x (8.6.14-1build1) ... 212s Selecting previously unselected package tk8.6-blt2.5. 212s Preparing to unpack .../011-tk8.6-blt2.5_2.5.3+dfsg-7build1_s390x.deb ... 212s Unpacking tk8.6-blt2.5 (2.5.3+dfsg-7build1) ... 212s Selecting previously unselected package blt. 212s Preparing to unpack .../012-blt_2.5.3+dfsg-7build1_s390x.deb ... 212s Unpacking blt (2.5.3+dfsg-7build1) ... 212s Selecting previously unselected package gcc-13-base:s390x. 212s Preparing to unpack .../013-gcc-13-base_13.2.0-23ubuntu4_s390x.deb ... 212s Unpacking gcc-13-base:s390x (13.2.0-23ubuntu4) ... 212s Selecting previously unselected package libisl23:s390x. 212s Preparing to unpack .../014-libisl23_0.26-3build1_s390x.deb ... 212s Unpacking libisl23:s390x (0.26-3build1) ... 212s Selecting previously unselected package libmpc3:s390x. 212s Preparing to unpack .../015-libmpc3_1.3.1-1build1_s390x.deb ... 212s Unpacking libmpc3:s390x (1.3.1-1build1) ... 212s Selecting previously unselected package cpp-13-s390x-linux-gnu. 212s Preparing to unpack .../016-cpp-13-s390x-linux-gnu_13.2.0-23ubuntu4_s390x.deb ... 212s Unpacking cpp-13-s390x-linux-gnu (13.2.0-23ubuntu4) ... 213s Selecting previously unselected package cpp-13. 213s Preparing to unpack .../017-cpp-13_13.2.0-23ubuntu4_s390x.deb ... 213s Unpacking cpp-13 (13.2.0-23ubuntu4) ... 213s Selecting previously unselected package cpp-s390x-linux-gnu. 213s Preparing to unpack .../018-cpp-s390x-linux-gnu_4%3a13.2.0-7ubuntu1_s390x.deb ... 213s Unpacking cpp-s390x-linux-gnu (4:13.2.0-7ubuntu1) ... 213s Selecting previously unselected package cpp. 213s Preparing to unpack .../019-cpp_4%3a13.2.0-7ubuntu1_s390x.deb ... 213s Unpacking cpp (4:13.2.0-7ubuntu1) ... 213s Selecting previously unselected package libcc1-0:s390x. 213s Preparing to unpack .../020-libcc1-0_14.1.0-1ubuntu1_s390x.deb ... 213s Unpacking libcc1-0:s390x (14.1.0-1ubuntu1) ... 213s Selecting previously unselected package libgomp1:s390x. 213s Preparing to unpack .../021-libgomp1_14.1.0-1ubuntu1_s390x.deb ... 213s Unpacking libgomp1:s390x (14.1.0-1ubuntu1) ... 213s Selecting previously unselected package libitm1:s390x. 213s Preparing to unpack .../022-libitm1_14.1.0-1ubuntu1_s390x.deb ... 213s Unpacking libitm1:s390x (14.1.0-1ubuntu1) ... 213s Selecting previously unselected package libatomic1:s390x. 213s Preparing to unpack .../023-libatomic1_14.1.0-1ubuntu1_s390x.deb ... 213s Unpacking libatomic1:s390x (14.1.0-1ubuntu1) ... 213s Selecting previously unselected package libasan8:s390x. 213s Preparing to unpack .../024-libasan8_14.1.0-1ubuntu1_s390x.deb ... 213s Unpacking libasan8:s390x (14.1.0-1ubuntu1) ... 213s Selecting previously unselected package libubsan1:s390x. 213s Preparing to unpack .../025-libubsan1_14.1.0-1ubuntu1_s390x.deb ... 213s Unpacking libubsan1:s390x (14.1.0-1ubuntu1) ... 213s Selecting previously unselected package libgcc-13-dev:s390x. 213s Preparing to unpack .../026-libgcc-13-dev_13.2.0-23ubuntu4_s390x.deb ... 213s Unpacking libgcc-13-dev:s390x (13.2.0-23ubuntu4) ... 213s Selecting previously unselected package gcc-13-s390x-linux-gnu. 213s Preparing to unpack .../027-gcc-13-s390x-linux-gnu_13.2.0-23ubuntu4_s390x.deb ... 213s Unpacking gcc-13-s390x-linux-gnu (13.2.0-23ubuntu4) ... 213s Selecting previously unselected package gcc-13. 213s Preparing to unpack .../028-gcc-13_13.2.0-23ubuntu4_s390x.deb ... 213s Unpacking gcc-13 (13.2.0-23ubuntu4) ... 213s Selecting previously unselected package gcc-s390x-linux-gnu. 213s Preparing to unpack .../029-gcc-s390x-linux-gnu_4%3a13.2.0-7ubuntu1_s390x.deb ... 213s Unpacking gcc-s390x-linux-gnu (4:13.2.0-7ubuntu1) ... 213s Selecting previously unselected package gcc. 213s Preparing to unpack .../030-gcc_4%3a13.2.0-7ubuntu1_s390x.deb ... 213s Unpacking gcc (4:13.2.0-7ubuntu1) ... 213s Selecting previously unselected package libstdc++-13-dev:s390x. 213s Preparing to unpack .../031-libstdc++-13-dev_13.2.0-23ubuntu4_s390x.deb ... 213s Unpacking libstdc++-13-dev:s390x (13.2.0-23ubuntu4) ... 214s Selecting previously unselected package g++-13-s390x-linux-gnu. 214s Preparing to unpack .../032-g++-13-s390x-linux-gnu_13.2.0-23ubuntu4_s390x.deb ... 214s Unpacking g++-13-s390x-linux-gnu (13.2.0-23ubuntu4) ... 214s Selecting previously unselected package g++-13. 214s Preparing to unpack .../033-g++-13_13.2.0-23ubuntu4_s390x.deb ... 214s Unpacking g++-13 (13.2.0-23ubuntu4) ... 214s Selecting previously unselected package g++-s390x-linux-gnu. 214s Preparing to unpack .../034-g++-s390x-linux-gnu_4%3a13.2.0-7ubuntu1_s390x.deb ... 214s Unpacking g++-s390x-linux-gnu (4:13.2.0-7ubuntu1) ... 214s Selecting previously unselected package g++. 214s Preparing to unpack .../035-g++_4%3a13.2.0-7ubuntu1_s390x.deb ... 214s Unpacking g++ (4:13.2.0-7ubuntu1) ... 214s Selecting previously unselected package build-essential. 214s Preparing to unpack .../036-build-essential_12.10ubuntu1_s390x.deb ... 214s Unpacking build-essential (12.10ubuntu1) ... 214s Selecting previously unselected package libdebhelper-perl. 214s Preparing to unpack .../037-libdebhelper-perl_13.15.3ubuntu2_all.deb ... 214s Unpacking libdebhelper-perl (13.15.3ubuntu2) ... 214s Selecting previously unselected package libtool. 214s Preparing to unpack .../038-libtool_2.4.7-7build1_all.deb ... 214s Unpacking libtool (2.4.7-7build1) ... 214s Selecting previously unselected package dh-autoreconf. 214s Preparing to unpack .../039-dh-autoreconf_20_all.deb ... 214s Unpacking dh-autoreconf (20) ... 214s Selecting previously unselected package libarchive-zip-perl. 214s Preparing to unpack .../040-libarchive-zip-perl_1.68-1_all.deb ... 214s Unpacking libarchive-zip-perl (1.68-1) ... 214s Selecting previously unselected package libfile-stripnondeterminism-perl. 214s Preparing to unpack .../041-libfile-stripnondeterminism-perl_1.14.0-1_all.deb ... 214s Unpacking libfile-stripnondeterminism-perl (1.14.0-1) ... 214s Selecting previously unselected package dh-strip-nondeterminism. 214s Preparing to unpack .../042-dh-strip-nondeterminism_1.14.0-1_all.deb ... 214s Unpacking dh-strip-nondeterminism (1.14.0-1) ... 214s Selecting previously unselected package debugedit. 214s Preparing to unpack .../043-debugedit_1%3a5.0-5build2_s390x.deb ... 214s Unpacking debugedit (1:5.0-5build2) ... 214s Selecting previously unselected package dwz. 214s Preparing to unpack .../044-dwz_0.15-1build6_s390x.deb ... 214s Unpacking dwz (0.15-1build6) ... 214s Selecting previously unselected package gettext. 214s Preparing to unpack .../045-gettext_0.21-14ubuntu2_s390x.deb ... 214s Unpacking gettext (0.21-14ubuntu2) ... 214s Selecting previously unselected package intltool-debian. 214s Preparing to unpack .../046-intltool-debian_0.35.0+20060710.6_all.deb ... 214s Unpacking intltool-debian (0.35.0+20060710.6) ... 214s Selecting previously unselected package po-debconf. 214s Preparing to unpack .../047-po-debconf_1.0.21+nmu1_all.deb ... 214s Unpacking po-debconf (1.0.21+nmu1) ... 214s Selecting previously unselected package debhelper. 214s Preparing to unpack .../048-debhelper_13.15.3ubuntu2_all.deb ... 214s Unpacking debhelper (13.15.3ubuntu2) ... 214s Selecting previously unselected package dh-python. 214s Preparing to unpack .../049-dh-python_6.20240422_all.deb ... 214s Unpacking dh-python (6.20240422) ... 214s Selecting previously unselected package fonts-glyphicons-halflings. 214s Preparing to unpack .../050-fonts-glyphicons-halflings_1.009~3.4.1+dfsg-3_all.deb ... 214s Unpacking fonts-glyphicons-halflings (1.009~3.4.1+dfsg-3) ... 214s Selecting previously unselected package fonts-lyx. 214s Preparing to unpack .../051-fonts-lyx_2.4.0-1_all.deb ... 214s Unpacking fonts-lyx (2.4.0-1) ... 214s Selecting previously unselected package javascript-common. 214s Preparing to unpack .../052-javascript-common_11+nmu1_all.deb ... 214s Unpacking javascript-common (11+nmu1) ... 214s Selecting previously unselected package libaec0:s390x. 214s Preparing to unpack .../053-libaec0_1.1.3-1_s390x.deb ... 214s Unpacking libaec0:s390x (1.1.3-1) ... 214s Selecting previously unselected package libblas3:s390x. 214s Preparing to unpack .../054-libblas3_3.12.0-3build1_s390x.deb ... 214s Unpacking libblas3:s390x (3.12.0-3build1) ... 214s Selecting previously unselected package libgeos3.12.2:s390x. 214s Preparing to unpack .../055-libgeos3.12.2_3.12.2-1_s390x.deb ... 214s Unpacking libgeos3.12.2:s390x (3.12.2-1) ... 214s Selecting previously unselected package libgeos-c1t64:s390x. 214s Preparing to unpack .../056-libgeos-c1t64_3.12.2-1_s390x.deb ... 214s Unpacking libgeos-c1t64:s390x (3.12.2-1) ... 214s Selecting previously unselected package libgfortran5:s390x. 214s Preparing to unpack .../057-libgfortran5_14.1.0-1ubuntu1_s390x.deb ... 214s Unpacking libgfortran5:s390x (14.1.0-1ubuntu1) ... 214s Selecting previously unselected package libgraphite2-3:s390x. 214s Preparing to unpack .../058-libgraphite2-3_1.3.14-2build1_s390x.deb ... 214s Unpacking libgraphite2-3:s390x (1.3.14-2build1) ... 214s Selecting previously unselected package libharfbuzz0b:s390x. 214s Preparing to unpack .../059-libharfbuzz0b_8.3.0-2build2_s390x.deb ... 214s Unpacking libharfbuzz0b:s390x (8.3.0-2build2) ... 214s Selecting previously unselected package libsz2:s390x. 214s Preparing to unpack .../060-libsz2_1.1.3-1_s390x.deb ... 214s Unpacking libsz2:s390x (1.1.3-1) ... 214s Selecting previously unselected package libhdf5-103-1t64:s390x. 214s Preparing to unpack .../061-libhdf5-103-1t64_1.10.10+repack-3.1ubuntu4_s390x.deb ... 214s Unpacking libhdf5-103-1t64:s390x (1.10.10+repack-3.1ubuntu4) ... 214s Selecting previously unselected package libhdf5-hl-100t64:s390x. 214s Preparing to unpack .../062-libhdf5-hl-100t64_1.10.10+repack-3.1ubuntu4_s390x.deb ... 214s Unpacking libhdf5-hl-100t64:s390x (1.10.10+repack-3.1ubuntu4) ... 215s Selecting previously unselected package libimagequant0:s390x. 215s Preparing to unpack .../063-libimagequant0_2.18.0-1build1_s390x.deb ... 215s Unpacking libimagequant0:s390x (2.18.0-1build1) ... 215s Selecting previously unselected package libjs-bootstrap. 215s Preparing to unpack .../064-libjs-bootstrap_3.4.1+dfsg-3_all.deb ... 215s Unpacking libjs-bootstrap (3.4.1+dfsg-3) ... 215s Selecting previously unselected package libjs-popper.js. 215s Preparing to unpack .../065-libjs-popper.js_1.16.1+ds-6_all.deb ... 215s Unpacking libjs-popper.js (1.16.1+ds-6) ... 215s Selecting previously unselected package libjs-bootstrap4. 215s Preparing to unpack .../066-libjs-bootstrap4_4.6.1+dfsg1-4_all.deb ... 215s Unpacking libjs-bootstrap4 (4.6.1+dfsg1-4) ... 215s Selecting previously unselected package libjs-jquery. 215s Preparing to unpack .../067-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... 215s Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 215s Selecting previously unselected package libjs-jquery-ui. 215s Preparing to unpack .../068-libjs-jquery-ui_1.13.2+dfsg-1_all.deb ... 215s Unpacking libjs-jquery-ui (1.13.2+dfsg-1) ... 215s Selecting previously unselected package liblapack3:s390x. 215s Preparing to unpack .../069-liblapack3_3.12.0-3build1_s390x.deb ... 215s Unpacking liblapack3:s390x (3.12.0-3build1) ... 215s Selecting previously unselected package liblbfgsb0:s390x. 215s Preparing to unpack .../070-liblbfgsb0_3.0+dfsg.4-1build1_s390x.deb ... 215s Unpacking liblbfgsb0:s390x (3.0+dfsg.4-1build1) ... 215s Selecting previously unselected package liblcms2-2:s390x. 215s Preparing to unpack .../071-liblcms2-2_2.14-2build1_s390x.deb ... 215s Unpacking liblcms2-2:s390x (2.14-2build1) ... 215s Selecting previously unselected package libnetcdf19t64:s390x. 215s Preparing to unpack .../072-libnetcdf19t64_1%3a4.9.2-6_s390x.deb ... 215s Unpacking libnetcdf19t64:s390x (1:4.9.2-6) ... 215s Selecting previously unselected package proj-data. 215s Preparing to unpack .../073-proj-data_9.4.1-1_all.deb ... 215s Unpacking proj-data (9.4.1-1) ... 215s Selecting previously unselected package libproj25:s390x. 215s Preparing to unpack .../074-libproj25_9.4.1-1_s390x.deb ... 215s Unpacking libproj25:s390x (9.4.1-1) ... 215s Selecting previously unselected package libqhull-r8.0:s390x. 215s Preparing to unpack .../075-libqhull-r8.0_2020.2-6build1_s390x.deb ... 215s Unpacking libqhull-r8.0:s390x (2020.2-6build1) ... 215s Selecting previously unselected package libraqm0:s390x. 215s Preparing to unpack .../076-libraqm0_0.10.1-1build1_s390x.deb ... 215s Unpacking libraqm0:s390x (0.10.1-1build1) ... 215s Selecting previously unselected package libwebpdemux2:s390x. 215s Preparing to unpack .../077-libwebpdemux2_1.4.0-0.1_s390x.deb ... 215s Unpacking libwebpdemux2:s390x (1.4.0-0.1) ... 215s Selecting previously unselected package libwebpmux3:s390x. 215s Preparing to unpack .../078-libwebpmux3_1.4.0-0.1_s390x.deb ... 215s Unpacking libwebpmux3:s390x (1.4.0-0.1) ... 215s Selecting previously unselected package libxslt1.1:s390x. 215s Preparing to unpack .../079-libxslt1.1_1.1.39-0exp1build1_s390x.deb ... 215s Unpacking libxslt1.1:s390x (1.1.39-0exp1build1) ... 215s Selecting previously unselected package pybuild-plugin-autopkgtest. 215s Preparing to unpack .../080-pybuild-plugin-autopkgtest_6.20240422_all.deb ... 215s Unpacking pybuild-plugin-autopkgtest (6.20240422) ... 215s Selecting previously unselected package python3-packaging. 215s Preparing to unpack .../081-python3-packaging_24.0-1_all.deb ... 215s Unpacking python3-packaging (24.0-1) ... 215s Selecting previously unselected package python3-pyproject-hooks. 215s Preparing to unpack .../082-python3-pyproject-hooks_1.1.0-1_all.deb ... 215s Unpacking python3-pyproject-hooks (1.1.0-1) ... 215s Selecting previously unselected package python3-toml. 215s Preparing to unpack .../083-python3-toml_0.10.2-1_all.deb ... 215s Unpacking python3-toml (0.10.2-1) ... 215s Selecting previously unselected package python3-wheel. 215s Preparing to unpack .../084-python3-wheel_0.43.0-1_all.deb ... 215s Unpacking python3-wheel (0.43.0-1) ... 215s Selecting previously unselected package python3-build. 215s Preparing to unpack .../085-python3-build_1.2.1-1_all.deb ... 215s Unpacking python3-build (1.2.1-1) ... 215s Selecting previously unselected package python3-installer. 215s Preparing to unpack .../086-python3-installer_0.7.0+dfsg1-3_all.deb ... 215s Unpacking python3-installer (0.7.0+dfsg1-3) ... 215s Selecting previously unselected package pybuild-plugin-pyproject. 215s Preparing to unpack .../087-pybuild-plugin-pyproject_6.20240422_all.deb ... 215s Unpacking pybuild-plugin-pyproject (6.20240422) ... 215s Selecting previously unselected package python-cartopy-data. 215s Preparing to unpack .../088-python-cartopy-data_0.23.0+dfsg-1_all.deb ... 215s Unpacking python-cartopy-data (0.23.0+dfsg-1) ... 215s Selecting previously unselected package python-matplotlib-data. 215s Preparing to unpack .../089-python-matplotlib-data_3.6.3-2ubuntu1_all.deb ... 215s Unpacking python-matplotlib-data (3.6.3-2ubuntu1) ... 215s Selecting previously unselected package python3-all. 215s Preparing to unpack .../090-python3-all_3.12.3-0ubuntu1_s390x.deb ... 215s Unpacking python3-all (3.12.3-0ubuntu1) ... 215s Selecting previously unselected package python3-appdirs. 215s Preparing to unpack .../091-python3-appdirs_1.4.4-4_all.deb ... 215s Unpacking python3-appdirs (1.4.4-4) ... 215s Selecting previously unselected package python3-brotli. 215s Preparing to unpack .../092-python3-brotli_1.1.0-2build2_s390x.deb ... 215s Unpacking python3-brotli (1.1.0-2build2) ... 216s Selecting previously unselected package python3-dateutil. 216s Preparing to unpack .../093-python3-dateutil_2.9.0-2_all.deb ... 216s Unpacking python3-dateutil (2.9.0-2) ... 216s Selecting previously unselected package libopenjp2-7:s390x. 216s Preparing to unpack .../094-libopenjp2-7_2.5.0-2build3_s390x.deb ... 216s Unpacking libopenjp2-7:s390x (2.5.0-2build3) ... 216s Selecting previously unselected package python3-pil:s390x. 216s Preparing to unpack .../095-python3-pil_10.3.0-2_s390x.deb ... 216s Unpacking python3-pil:s390x (10.3.0-2) ... 216s Selecting previously unselected package python3-tk:s390x. 216s Preparing to unpack .../096-python3-tk_3.12.3-0ubuntu1_s390x.deb ... 216s Unpacking python3-tk:s390x (3.12.3-0ubuntu1) ... 216s Selecting previously unselected package python3-pil.imagetk:s390x. 216s Preparing to unpack .../097-python3-pil.imagetk_10.3.0-2_s390x.deb ... 216s Unpacking python3-pil.imagetk:s390x (10.3.0-2) ... 216s Selecting previously unselected package python3-numpy. 216s Preparing to unpack .../098-python3-numpy_1%3a1.26.4+ds-10_s390x.deb ... 216s Unpacking python3-numpy (1:1.26.4+ds-10) ... 216s Selecting previously unselected package python3-contourpy. 216s Preparing to unpack .../099-python3-contourpy_1.0.7-3_s390x.deb ... 216s Unpacking python3-contourpy (1.0.7-3) ... 216s Selecting previously unselected package python3-cycler. 216s Preparing to unpack .../100-python3-cycler_0.12.1-1_all.deb ... 216s Unpacking python3-cycler (0.12.1-1) ... 216s Selecting previously unselected package python3-decorator. 216s Preparing to unpack .../101-python3-decorator_5.1.1-5_all.deb ... 216s Unpacking python3-decorator (5.1.1-5) ... 216s Selecting previously unselected package python3-scipy. 216s Preparing to unpack .../102-python3-scipy_1.12.0-2_s390x.deb ... 216s Unpacking python3-scipy (1.12.0-2) ... 216s Selecting previously unselected package python3-ufolib2. 216s Preparing to unpack .../103-python3-ufolib2_0.16.0+dfsg1-1_all.deb ... 216s Unpacking python3-ufolib2 (0.16.0+dfsg1-1) ... 217s Selecting previously unselected package python3-mpmath. 217s Preparing to unpack .../104-python3-mpmath_1.3.0-1_all.deb ... 217s Unpacking python3-mpmath (1.3.0-1) ... 217s Selecting previously unselected package python3-sympy. 217s Preparing to unpack .../105-python3-sympy_1.12-8_all.deb ... 217s Unpacking python3-sympy (1.12-8) ... 217s Selecting previously unselected package python3-tz. 217s Preparing to unpack .../106-python3-tz_2024.1-2_all.deb ... 217s Unpacking python3-tz (2024.1-2) ... 217s Selecting previously unselected package python3-fs. 217s Preparing to unpack .../107-python3-fs_2.4.16-4_all.deb ... 217s Unpacking python3-fs (2.4.16-4) ... 217s Selecting previously unselected package python3-lxml:s390x. 217s Preparing to unpack .../108-python3-lxml_5.2.1-1_s390x.deb ... 217s Unpacking python3-lxml:s390x (5.2.1-1) ... 217s Selecting previously unselected package python3-lz4. 217s Preparing to unpack .../109-python3-lz4_4.0.2+dfsg-1build4_s390x.deb ... 217s Unpacking python3-lz4 (4.0.2+dfsg-1build4) ... 217s Selecting previously unselected package python3-unicodedata2. 217s Preparing to unpack .../110-python3-unicodedata2_15.1.0+ds-1build1_s390x.deb ... 217s Unpacking python3-unicodedata2 (15.1.0+ds-1build1) ... 217s Selecting previously unselected package unicode-data. 217s Preparing to unpack .../111-unicode-data_15.1.0-1_all.deb ... 217s Unpacking unicode-data (15.1.0-1) ... 217s Selecting previously unselected package python3-fonttools. 217s Preparing to unpack .../112-python3-fonttools_4.46.0-1build2_s390x.deb ... 217s Unpacking python3-fonttools (4.46.0-1build2) ... 217s Selecting previously unselected package python3-kiwisolver. 217s Preparing to unpack .../113-python3-kiwisolver_1.4.5-1_s390x.deb ... 217s Unpacking python3-kiwisolver (1.4.5-1) ... 217s Selecting previously unselected package python3-matplotlib. 217s Preparing to unpack .../114-python3-matplotlib_3.6.3-2ubuntu1_s390x.deb ... 217s Unpacking python3-matplotlib (3.6.3-2ubuntu1) ... 218s Selecting previously unselected package python3-pyproj. 218s Preparing to unpack .../115-python3-pyproj_3.6.1-4_s390x.deb ... 218s Unpacking python3-pyproj (3.6.1-4) ... 218s Selecting previously unselected package python3-pyshp. 218s Preparing to unpack .../116-python3-pyshp_2.3.1-2_all.deb ... 218s Unpacking python3-pyshp (2.3.1-2) ... 218s Selecting previously unselected package python3-shapely. 218s Preparing to unpack .../117-python3-shapely_2.0.4-1_s390x.deb ... 218s Unpacking python3-shapely (2.0.4-1) ... 218s Selecting previously unselected package python3-cartopy. 218s Preparing to unpack .../118-python3-cartopy_0.23.0+dfsg-1_s390x.deb ... 218s Unpacking python3-cartopy (0.23.0+dfsg-1) ... 218s Selecting previously unselected package python3-cftime. 218s Preparing to unpack .../119-python3-cftime_1.6.4-1_s390x.deb ... 218s Unpacking python3-cftime (1.6.4-1) ... 218s Selecting previously unselected package python3-iniconfig. 218s Preparing to unpack .../120-python3-iniconfig_1.1.1-2_all.deb ... 218s Unpacking python3-iniconfig (1.1.1-2) ... 218s Selecting previously unselected package python3-pandas-lib:s390x. 218s Preparing to unpack .../121-python3-pandas-lib_2.1.4+dfsg-8_s390x.deb ... 218s Unpacking python3-pandas-lib:s390x (2.1.4+dfsg-8) ... 218s Selecting previously unselected package python3-pandas. 218s Preparing to unpack .../122-python3-pandas_2.1.4+dfsg-8_all.deb ... 218s Unpacking python3-pandas (2.1.4+dfsg-8) ... 218s Selecting previously unselected package python3-pint. 218s Preparing to unpack .../123-python3-pint_0.19.2-1_all.deb ... 218s Unpacking python3-pint (0.19.2-1) ... 218s Selecting previously unselected package python3-platformdirs. 218s Preparing to unpack .../124-python3-platformdirs_4.2.1-1_all.deb ... 218s Unpacking python3-platformdirs (4.2.1-1) ... 218s Selecting previously unselected package python3-pooch. 218s Preparing to unpack .../125-python3-pooch_1.8.2-1_all.deb ... 218s Unpacking python3-pooch (1.8.2-1) ... 218s Selecting previously unselected package python3-traitlets. 218s Preparing to unpack .../126-python3-traitlets_5.5.0-2_all.deb ... 218s Unpacking python3-traitlets (5.5.0-2) ... 218s Selecting previously unselected package python3-xarray. 218s Preparing to unpack .../127-python3-xarray_2024.03.0-1_all.deb ... 218s Unpacking python3-xarray (2024.03.0-1) ... 218s Selecting previously unselected package python3-metpy. 218s Preparing to unpack .../128-python3-metpy_1.6.2+ds-1_all.deb ... 218s Unpacking python3-metpy (1.6.2+ds-1) ... 218s Selecting previously unselected package python3-netcdf4. 218s Preparing to unpack .../129-python3-netcdf4_1.7.0-1_s390x.deb ... 218s Unpacking python3-netcdf4 (1.7.0-1) ... 218s Selecting previously unselected package python3-pluggy. 218s Preparing to unpack .../130-python3-pluggy_1.5.0-1_all.deb ... 218s Unpacking python3-pluggy (1.5.0-1) ... 218s Selecting previously unselected package python3-pytest. 218s Preparing to unpack .../131-python3-pytest_7.4.4-1_all.deb ... 218s Unpacking python3-pytest (7.4.4-1) ... 218s Selecting previously unselected package python3-pytest-mpl. 218s Preparing to unpack .../132-python3-pytest-mpl_0.17.0-1_all.deb ... 218s Unpacking python3-pytest-mpl (0.17.0-1) ... 218s Selecting previously unselected package python3-setuptools-scm. 218s Preparing to unpack .../133-python3-setuptools-scm_8.1.0-1_all.deb ... 218s Unpacking python3-setuptools-scm (8.1.0-1) ... 218s Selecting previously unselected package autopkgtest-satdep. 218s Preparing to unpack .../134-1-autopkgtest-satdep.deb ... 218s Unpacking autopkgtest-satdep (0) ... 219s Setting up dh-python (6.20240422) ... 219s Setting up javascript-common (11+nmu1) ... 219s Setting up libgraphite2-3:s390x (1.3.14-2build1) ... 219s Setting up liblcms2-2:s390x (2.14-2build1) ... 219s Setting up python3-iniconfig (1.1.1-2) ... 219s Setting up proj-data (9.4.1-1) ... 219s Setting up libxrender1:s390x (1:0.9.10-1.1build1) ... 219s Setting up libproj25:s390x (9.4.1-1) ... 219s Setting up libjs-popper.js (1.16.1+ds-6) ... 219s Setting up python3-lz4 (4.0.2+dfsg-1build4) ... 219s Setting up libarchive-zip-perl (1.68-1) ... 219s Setting up fonts-glyphicons-halflings (1.009~3.4.1+dfsg-3) ... 219s Setting up python3-unicodedata2 (15.1.0+ds-1build1) ... 219s Setting up fonts-lyx (2.4.0-1) ... 219s Setting up libwebpdemux2:s390x (1.4.0-0.1) ... 219s Setting up libdebhelper-perl (13.15.3ubuntu2) ... 219s Setting up libgeos3.12.2:s390x (3.12.2-1) ... 219s Setting up x11-common (1:7.7+23ubuntu3) ... 219s Setting up m4 (1.4.19-4build1) ... 219s Setting up libqhull-r8.0:s390x (2020.2-6build1) ... 219s Setting up python3-all (3.12.3-0ubuntu1) ... 219s Setting up python3-pyshp (2.3.1-2) ... 219s Setting up libgomp1:s390x (14.1.0-1ubuntu1) ... 219s Setting up python3-wheel (0.43.0-1) ... 220s Setting up libaec0:s390x (1.1.3-1) ... 220s Setting up python3-platformdirs (4.2.1-1) ... 220s Setting up python3-tz (2024.1-2) ... 220s Setting up unicode-data (15.1.0-1) ... 220s Setting up python3-pint (0.19.2-1) ... 220s Setting up python3-decorator (5.1.1-5) ... 220s Setting up autotools-dev (20220109.1) ... 220s Setting up libblas3:s390x (3.12.0-3build1) ... 220s update-alternatives: using /usr/lib/s390x-linux-gnu/blas/libblas.so.3 to provide /usr/lib/s390x-linux-gnu/libblas.so.3 (libblas.so.3-s390x-linux-gnu) in auto mode 220s Setting up python3-packaging (24.0-1) ... 221s Setting up gcc-13-base:s390x (13.2.0-23ubuntu4) ... 221s Setting up python3-pyproject-hooks (1.1.0-1) ... 221s Setting up python-cartopy-data (0.23.0+dfsg-1) ... 221s Setting up python3-pooch (1.8.2-1) ... 221s Setting up python3-brotli (1.1.0-2build2) ... 221s Setting up python3-cycler (0.12.1-1) ... 221s Setting up libimagequant0:s390x (2.18.0-1build1) ... 221s Setting up python3-kiwisolver (1.4.5-1) ... 221s Setting up libmpc3:s390x (1.3.1-1build1) ... 221s Setting up libatomic1:s390x (14.1.0-1ubuntu1) ... 221s Setting up libtcl8.6:s390x (8.6.14+dfsg-1build1) ... 221s Setting up autopoint (0.21-14ubuntu2) ... 221s Setting up python3-toml (0.10.2-1) ... 221s Setting up python3-installer (0.7.0+dfsg1-3) ... 222s Setting up libgfortran5:s390x (14.1.0-1ubuntu1) ... 222s Setting up autoconf (2.71-3) ... 222s Setting up python3-pluggy (1.5.0-1) ... 222s Setting up libubsan1:s390x (14.1.0-1ubuntu1) ... 222s Setting up dwz (0.15-1build6) ... 222s Setting up python3-traitlets (5.5.0-2) ... 222s Setting up libasan8:s390x (14.1.0-1ubuntu1) ... 222s Setting up libxslt1.1:s390x (1.1.39-0exp1build1) ... 222s Setting up debugedit (1:5.0-5build2) ... 222s Setting up libopenjp2-7:s390x (2.5.0-2build3) ... 222s Setting up libharfbuzz0b:s390x (8.3.0-2build2) ... 222s Setting up python3-dateutil (2.9.0-2) ... 222s Setting up libxss1:s390x (1:1.2.3-1build3) ... 222s Setting up libjs-bootstrap4 (4.6.1+dfsg1-4) ... 222s Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 222s Setting up python3-mpmath (1.3.0-1) ... 223s Setting up libisl23:s390x (0.26-3build1) ... 223s Setting up python3-build (1.2.1-1) ... 223s Setting up python-matplotlib-data (3.6.3-2ubuntu1) ... 223s Setting up libwebpmux3:s390x (1.4.0-0.1) ... 223s Setting up python3-appdirs (1.4.4-4) ... 223s Setting up libcc1-0:s390x (14.1.0-1ubuntu1) ... 223s Setting up libsz2:s390x (1.1.3-1) ... 223s Setting up libjs-bootstrap (3.4.1+dfsg-3) ... 223s Setting up libitm1:s390x (14.1.0-1ubuntu1) ... 223s Setting up automake (1:1.16.5-1.3ubuntu1) ... 223s update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode 223s Setting up libfile-stripnondeterminism-perl (1.14.0-1) ... 223s Setting up python3-sympy (1.12-8) ... 230s Setting up liblapack3:s390x (3.12.0-3build1) ... 230s update-alternatives: using /usr/lib/s390x-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/s390x-linux-gnu/liblapack.so.3 (liblapack.so.3-s390x-linux-gnu) in auto mode 230s Setting up libxft2:s390x (2.3.6-1build1) ... 230s Setting up gettext (0.21-14ubuntu2) ... 230s Setting up pybuild-plugin-pyproject (6.20240422) ... 230s Setting up python3-pytest (7.4.4-1) ... 230s Setting up libgeos-c1t64:s390x (3.12.2-1) ... 230s Setting up libtk8.6:s390x (8.6.14-1build1) ... 230s Setting up python3-setuptools-scm (8.1.0-1) ... 230s Setting up intltool-debian (0.35.0+20060710.6) ... 230s Setting up python3-fs (2.4.16-4) ... 230s Setting up libjs-jquery-ui (1.13.2+dfsg-1) ... 230s Setting up cpp-13-s390x-linux-gnu (13.2.0-23ubuntu4) ... 230s Setting up libraqm0:s390x (0.10.1-1build1) ... 230s Setting up python3-numpy (1:1.26.4+ds-10) ... 232s Setting up dh-strip-nondeterminism (1.14.0-1) ... 232s Setting up libgcc-13-dev:s390x (13.2.0-23ubuntu4) ... 233s Setting up python3-lxml:s390x (5.2.1-1) ... 233s Setting up python3-contourpy (1.0.7-3) ... 233s Setting up libhdf5-103-1t64:s390x (1.10.10+repack-3.1ubuntu4) ... 233s Setting up libstdc++-13-dev:s390x (13.2.0-23ubuntu4) ... 233s Setting up liblbfgsb0:s390x (3.0+dfsg.4-1build1) ... 233s Setting up libhdf5-hl-100t64:s390x (1.10.10+repack-3.1ubuntu4) ... 233s Setting up python3-shapely (2.0.4-1) ... 233s Setting up tk8.6-blt2.5 (2.5.3+dfsg-7build1) ... 233s Setting up libnetcdf19t64:s390x (1:4.9.2-6) ... 233s Setting up python3-scipy (1.12.0-2) ... 237s Setting up cpp-13 (13.2.0-23ubuntu4) ... 237s Setting up cpp-s390x-linux-gnu (4:13.2.0-7ubuntu1) ... 237s Setting up po-debconf (1.0.21+nmu1) ... 237s Setting up blt (2.5.3+dfsg-7build1) ... 237s Setting up python3-pandas-lib:s390x (2.1.4+dfsg-8) ... 237s Setting up python3-tk:s390x (3.12.3-0ubuntu1) ... 237s Setting up python3-pyproj (3.6.1-4) ... 237s Setting up python3-pil:s390x (10.3.0-2) ... 238s Setting up python3-pandas (2.1.4+dfsg-8) ... 243s Setting up gcc-13-s390x-linux-gnu (13.2.0-23ubuntu4) ... 243s Setting up gcc-s390x-linux-gnu (4:13.2.0-7ubuntu1) ... 243s Setting up python3-pil.imagetk:s390x (10.3.0-2) ... 244s Setting up g++-13-s390x-linux-gnu (13.2.0-23ubuntu4) ... 244s Setting up gcc-13 (13.2.0-23ubuntu4) ... 244s Setting up python3-cftime (1.6.4-1) ... 244s Setting up cpp (4:13.2.0-7ubuntu1) ... 244s Setting up python3-netcdf4 (1.7.0-1) ... 244s Setting up g++-13 (13.2.0-23ubuntu4) ... 244s Setting up libtool (2.4.7-7build1) ... 244s Setting up python3-xarray (2024.03.0-1) ... 245s Setting up g++-s390x-linux-gnu (4:13.2.0-7ubuntu1) ... 245s Setting up gcc (4:13.2.0-7ubuntu1) ... 245s Setting up dh-autoreconf (20) ... 245s Setting up g++ (4:13.2.0-7ubuntu1) ... 245s update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode 245s Setting up build-essential (12.10ubuntu1) ... 245s Setting up debhelper (13.15.3ubuntu2) ... 245s Setting up pybuild-plugin-autopkgtest (6.20240422) ... 245s Setting up python3-ufolib2 (0.16.0+dfsg1-1) ... 245s Setting up python3-fonttools (4.46.0-1build2) ... 246s Setting up python3-matplotlib (3.6.3-2ubuntu1) ... 248s Setting up python3-pytest-mpl (0.17.0-1) ... 248s Setting up python3-cartopy (0.23.0+dfsg-1) ... 248s Setting up python3-metpy (1.6.2+ds-1) ... 249s Setting up autopkgtest-satdep (0) ... 249s Processing triggers for libc-bin (2.39-0ubuntu9) ... 249s Processing triggers for man-db (2.12.1-2) ... 250s Processing triggers for install-info (7.1-3build2) ... 254s (Reading database ... 67268 files and directories currently installed.) 254s Removing autopkgtest-satdep (0) ... 255s autopkgtest [10:25:30]: test pybuild-autopkgtest: pybuild-autopkgtest 255s autopkgtest [10:25:30]: test pybuild-autopkgtest: [----------------------- 255s pybuild-autopkgtest 256s I: pybuild pybuild:308: ln -s /tmp/autopkgtest.v9TBX8/build.dvx/src/conftest.py /tmp/autopkgtest.v9TBX8/build.dvx/src/tests 2>/dev/null || true; ln -s /tmp/autopkgtest.v9TBX8/build.dvx/src/src/metpy/*.txt /tmp/autopkgtest.v9TBX8/autopkgtest_tmp/build/metpy 2>/dev/null || true; ln -s /tmp/autopkgtest.v9TBX8/build.dvx/src/src/metpy/plots/_static /tmp/autopkgtest.v9TBX8/autopkgtest_tmp/build/metpy/plots 2>/dev/null || true; ln -s /tmp/autopkgtest.v9TBX8/build.dvx/src/src/metpy/plots/colortable_files /tmp/autopkgtest.v9TBX8/autopkgtest_tmp/build/metpy/plots 2>/dev/null || true; ln -s /tmp/autopkgtest.v9TBX8/build.dvx/src/src/metpy/plots/nexrad_tables /tmp/autopkgtest.v9TBX8/autopkgtest_tmp/build/metpy/plots 2>/dev/null || true 256s I: pybuild base:311: cd /tmp/autopkgtest.v9TBX8/autopkgtest_tmp/build; python3.12 -m pytest -W ignore::DeprecationWarning -k "not test_projection and not test_pyproj_projection and not test_no_projection and not test_globe and not test_geodetic and not test_unit_array and not test_units and not test_units_data and not test_magnitude_with_quantity and not test_convert_units and not test_convert_to_base_units and not test_missing_grid_mapping_invalid and not test_coordinates_basic_by_method and not test_coordinates_basic_by_property and not test_narr_example_variable_without_grid_mapping and not test_find_axis_name_ and not test_find_axis_number_ and not test_cf_parse_with_grid_mapping and not test_data_array_loc_ and not test_data_array_sel_ and not test_dataset_ and not test_check_axis_with_bad_unit and not test_auxilary_lat_lon_ and not test_zoom_xarray and not test_parse_grid_arguments_xarray and not test_absolute_momentum_xarray_units_attr and not test_precipitable_water and not test_mean_pressure_weighted and not test_weighted_continuous_average and not test_precipitable_water_xarray and not test_bunkers_motion and not test_bulk_shear and not test_critical_angle and not _4d and not test_interpolate_to_grid and not test_natural_neighbor_to_grid and not test_inverse_distance_to_grid and not test_interpolate_to_points and not test_natural_neighbor_to_points and not test_inverse_distance_to_points and not test_declarative_ and not test_no_field_error and not test_ndim_error_ and not test_projection_object and not test_colorfill and not test_global and not test_latlon and not test_plotobs_units_with_formatter and not test_attribute_error_ and not test_time_deltas and not test_latlon_default_units and not test_add_timestamp_xarray and not test_find_nn_triangles_point and not test_vorticity_grid_pole and not test_corfidi_motion and not test_corfidi_motion_override_llj and not test_corfidi_corfidi_llj_unaivalable and not test_corfidi_corfidi_cloudlayer_trimmed and not test_corfidi_motion_with_nans and not test_colorbar_kwargs and not test_xy_not_vertical and not test_lcc_minimal and not test_lcc_single_std_parallel" --ignore=tests/io/test_gempak.py --ignore=tests/io/test_gini.py --ignore=tests/io/test_metar.py --ignore=tests/io/test_nexrad.py --ignore=tests/io/test_station_data.py --ignore=tests/io/test_text.py 259s ============================= test session starts ============================== 259s platform linux -- Python 3.12.4, pytest-7.4.4, pluggy-1.5.0 259s Matplotlib: 3.6.3 259s Freetype: 2.13.2 259s Dep Versions: Matplotlib 3.6.3, NumPy 1.26.4, Pandas 2.1.4, Pint 0.19.2 259s PyProj 3.6.1, SciPy 1.12.0, Traitlets 5.5.0, Xarray 2024.3.0 259s rootdir: /tmp/autopkgtest.v9TBX8/autopkgtest_tmp/build 259s configfile: pyproject.toml 259s plugins: mpl-0.17.0 259s collected 1257 items / 271 deselected / 986 selected 259s 259s tests/test_cbook.py .. [ 0%] 259s tests/test_deprecation.py . [ 0%] 259s tests/test_packaging.py . [ 0%] 259s tests/test_testing.py ........ [ 1%] 259s tests/test_xarray.py ................................................... [ 6%] 259s ........................................................................ [ 13%] 261s ............................................. [ 18%] 261s tests/calc/test_basic.py s...s....s...s...s....s........s.......s....s.. [ 23%] 261s ......s....s....s...s....s...s...s...s......s........s.....s..........s. [ 30%] 261s ...s...s.....s....s... [ 32%] 262s tests/calc/test_calc_tools.py .......................................... [ 36%] 263s ......................FF...............................FFFFFFF.FFFF..... [ 44%] 263s ............................. [ 47%] 267s tests/calc/test_cross_sections.py ............ [ 48%] 267s tests/calc/test_indices.py .... [ 48%] 267s tests/calc/test_kinematics.py .......................................... [ 52%] 268s ......FFFFFF............. [ 55%] 268s tests/calc/test_thermo.py .............................................. [ 60%] 268s ...............F.........................F.............................. [ 67%] 269s ........................................................................ [ 74%] 270s .......FFFFF............. [ 77%] 270s tests/calc/test_turbulence.py ........................... [ 80%] 270s tests/interpolate/test_geometry.py ............ [ 81%] 270s tests/interpolate/test_grid.py ....... [ 81%] 270s tests/interpolate/test_interpolate_tools.py ...... [ 82%] 270s tests/interpolate/test_one_dimension.py .................. [ 84%] 270s tests/interpolate/test_points.py ... [ 84%] 270s tests/interpolate/test_slices.py ........ [ 85%] 270s tests/io/test_tools.py .. [ 85%] 271s tests/plots/test_cartopy_utils.py ....... [ 86%] 271s tests/plots/test_ctables.py .......... [ 87%] 271s tests/plots/test_declarative.py ........... [ 88%] 271s tests/plots/test_mapping.py .................... [ 90%] 271s tests/plots/test_mpl.py . [ 90%] 271s tests/plots/test_patheffects.py ........ [ 91%] 271s tests/plots/test_plot_areas.py ..... [ 91%] 272s tests/plots/test_skewt.py .................................... [ 95%] 272s tests/plots/test_station_plot.py .......................... [ 98%] 272s tests/plots/test_util.py ............. [ 99%] 272s tests/plots/test_wx_symbols.py .... [100%] 272s 272s =================================== FAILURES =================================== 272s __________________________ test_get_layer_heights_agl __________________________ 272s 272s def test_get_layer_heights_agl(): 272s """Test get_layer_heights with interpolation.""" 272s heights = np.arange(300, 1200, 100) * units.m 272s data = heights.m * 0.1 * units.degC 272s > heights, data = get_layer_heights(heights, 500 * units.m, data, with_agl=True) 272s 272s tests/calc/test_calc_tools.py:461: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = None, interpolate = True 272s with_agl = True 272s args = (,) 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s _________________ test_get_layer_heights_agl_bottom_no_interp __________________ 272s 272s def test_get_layer_heights_agl_bottom_no_interp(): 272s """Test get_layer_heights with no interpolation and a bottom.""" 272s heights_init = np.arange(300, 1200, 100) * units.m 272s data = heights_init.m * 0.1 * units.degC 272s > heights, data = get_layer_heights(heights_init, 500 * units.m, data, with_agl=True, 272s interpolate=False, bottom=200 * units.m) 272s 272s tests/calc/test_calc_tools.py:472: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = 272s interpolate = False, with_agl = True 272s args = (,) 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s ___________________________ test_angle_to_direction ____________________________ 272s 272s def test_angle_to_direction(): 272s """Test single angle in degree.""" 272s expected_dirs = DIR_STRS[:-1] # UND at -1 272s > output_dirs = [angle_to_direction(angle) for angle in FULL_CIRCLE_DEGREES] 272s 272s tests/calc/test_calc_tools.py:850: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = , full = False, level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _________________________ test_angle_to_direction_edge _________________________ 272s 272s def test_angle_to_direction_edge(): 272s """Test single angle edge case (360 and no units) in degree.""" 272s expected_dirs = 'N' 272s > output_dirs = angle_to_direction(360) 272s 272s tests/calc/test_calc_tools.py:857: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = , full = False, level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _________________________ test_angle_to_direction_list _________________________ 272s 272s def test_angle_to_direction_list(): 272s """Test list of angles in degree.""" 272s expected_dirs = DIR_STRS[:-1] 272s > output_dirs = list(angle_to_direction(FULL_CIRCLE_DEGREES)) 272s 272s tests/calc/test_calc_tools.py:864: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = 272s full = False, level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _________________________ test_angle_to_direction_arr __________________________ 272s 272s def test_angle_to_direction_arr(): 272s """Test array of angles in degree.""" 272s expected_dirs = DIR_STRS[:-1] 272s > output_dirs = angle_to_direction(FULL_CIRCLE_DEGREES) 272s 272s tests/calc/test_calc_tools.py:871: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = 272s full = False, level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _________________________ test_angle_to_direction_full _________________________ 272s 272s def test_angle_to_direction_full(): 272s """Test the `full` keyword argument, expecting unabbrieviated output.""" 272s expected_dirs = [ 272s 'North', 'North North East', 'North East', 'East North East', 272s 'East', 'East South East', 'South East', 'South South East', 272s 'South', 'South South West', 'South West', 'West South West', 272s 'West', 'West North West', 'North West', 'North North West' 272s ] 272s > output_dirs = angle_to_direction(FULL_CIRCLE_DEGREES, full=True) 272s 272s tests/calc/test_calc_tools.py:883: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = 272s full = True, level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s ____________________ test_angle_to_direction_invalid_scalar ____________________ 272s 272s @pytest.mark.filterwarnings('ignore:invalid value encountered in remainder:RuntimeWarning') 272s def test_angle_to_direction_invalid_scalar(): 272s """Test invalid angle.""" 272s expected_dirs = UND 272s > output_dirs = angle_to_direction(None) 272s 272s tests/calc/test_calc_tools.py:891: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = , full = False, level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _____________________ test_angle_to_direction_invalid_arr ______________________ 272s 272s @pytest.mark.filterwarnings('ignore:invalid value encountered in remainder:RuntimeWarning') 272s def test_angle_to_direction_invalid_arr(): 272s """Test array of invalid angles.""" 272s expected_dirs = ['NE', UND, UND, UND, 'N'] 272s > output_dirs = angle_to_direction(['46', None, np.nan, None, '362.']) 272s 272s tests/calc/test_calc_tools.py:899: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = , full = False 272s level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _______________________ test_angle_to_direction_level_3 ________________________ 272s 272s def test_angle_to_direction_level_3(): 272s """Test array of angles in degree.""" 272s expected_dirs = DIR_STRS[:-1] # UND at -1 272s > output_dirs = angle_to_direction(FULL_CIRCLE_DEGREES, level=3) 272s 272s tests/calc/test_calc_tools.py:913: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = 272s full = False, level = 3 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _______________________ test_angle_to_direction_level_2 ________________________ 272s 272s def test_angle_to_direction_level_2(): 272s """Test array of angles in degree.""" 272s expected_dirs = [ 272s 'N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW' 272s ] 272s > output_dirs = angle_to_direction(FULL_CIRCLE_DEGREES, level=2) 272s 272s tests/calc/test_calc_tools.py:923: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = 272s full = False, level = 2 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _______________________ test_angle_to_direction_level_1 ________________________ 272s 272s def test_angle_to_direction_level_1(): 272s """Test array of angles in degree.""" 272s expected_dirs = [ 272s 'N', 'N', 'N', 'E', 'E', 'E', 'E', 'S', 'S', 'S', 'S', 272s 'W', 'W', 'W', 'W', 'N'] 272s > output_dirs = angle_to_direction(FULL_CIRCLE_DEGREES, level=1) 272s 272s tests/calc/test_calc_tools.py:932: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = 272s full = False, level = 1 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _______________________ test_angle_to_direction_ndarray ________________________ 272s 272s def test_angle_to_direction_ndarray(): 272s """Test array of angles in degree with a 2d numpy array.""" 272s expected_dirs = np.array([['E', 'W'], ['E', 'W']]) 272s input_angle = np.array([[90, 270], [90, 270]]) 272s > output_dirs = angle_to_direction(input_angle, level=1) 272s 272s tests/calc/test_calc_tools.py:940: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s input_angle = , full = False 272s level = 1 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s def angle_to_direction(input_angle, full=False, level=3): 272s """Convert the meteorological angle to directional text. 272s 272s Works for angles greater than or equal to 360 (360 -> N | 405 -> NE) 272s and rounds to the nearest angle (355 -> N | 404 -> NNE) 272s 272s Parameters 272s ---------- 272s input_angle : float or array-like 272s Angles such as 0, 25, 45, 360, 410, etc. 272s full : bool 272s True returns full text (South), False returns abbreviated text (S) 272s level : int 272s Level of detail (3 = N/NNE/NE/ENE/E... 2 = N/NE/E/SE... 1 = N/E/S/W) 272s 272s Returns 272s ------- 272s direction 272s The directional text 272s 272s Examples 272s -------- 272s >>> from metpy.calc import angle_to_direction 272s >>> from metpy.units import units 272s >>> angle_to_direction(225. * units.deg) 272s 'SW' 272s 272s """ 272s try: # strip units temporarily 272s origin_units = input_angle.units 272s input_angle = input_angle.m 272s except AttributeError: # no units associated 272s origin_units = units.degree 272s 272s if not hasattr(input_angle, '__len__') or isinstance(input_angle, str): 272s input_angle = [input_angle] 272s scalar = True 272s else: 272s scalar = False 272s 272s np_input_angle = np.array(input_angle).astype(float) 272s origshape = np_input_angle.shape 272s ndarray = len(origshape) > 1 272s # clean any numeric strings, negatives, and None does not handle strings with alphabet 272s input_angle = units.Quantity(np_input_angle, origin_units) 272s input_angle[input_angle < 0] = np.nan 272s 272s # Normalize between 0 - 360 272s norm_angles = input_angle % MAX_DEGREE_ANGLE 272s 272s if level == 3: 272s nskip = 1 272s elif level == 2: 272s nskip = 2 272s elif level == 1: 272s nskip = 4 272s else: 272s err_msg = 'Level of complexity cannot be less than 1 or greater than 3!' 272s raise ValueError(err_msg) 272s 272s angle_dict = { 272s i * BASE_DEGREE_MULTIPLIER.m * nskip: dir_str 272s for i, dir_str in enumerate(DIR_STRS[::nskip]) 272s } 272s angle_dict[MAX_DEGREE_ANGLE.m] = 'N' # handle edge case of 360. 272s angle_dict[UND_ANGLE] = UND 272s 272s # round to the nearest angles for dict lookup 272s # 0.001 is subtracted so there's an equal number of dir_str from 272s # np.arange(0, 360, 22.5), or else some dir_str will be preferred 272s 272s # without the 0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'E', 'E', 'E', 'SE', 'S', 'S', 272s # 'S', 'SW', 'W', 'W', 'W', 'NW', 'N'] 272s 272s # with the -0.001, level=2 would yield: 272s # ['N', 'N', 'NE', 'NE', 'E', 'E', 'SE', 'SE', 272s # 'S', 'S', 'SW', 'SW', 'W', 'W', 'NW', 'NW'] 272s 272s > multiplier = np.round((norm_angles / BASE_DEGREE_MULTIPLIER / nskip) - 0.001).m 272s E TypeError: no implementation found for 'numpy.round' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:1887: TypeError 272s _________________ test_storm_relative_helicity_no_storm_motion _________________ 272s 272s def test_storm_relative_helicity_no_storm_motion(): 272s """Test storm relative helicity with no storm motion and differing input units.""" 272s u = np.array([0, 20, 10, 0]) * units('m/s') 272s v = np.array([20, 0, 0, 10]) * units('m/s') 272s u = u.to('knots') 272s heights = np.array([0, 250, 500, 750]) * units.m 272s 272s > positive_srh, negative_srh, total_srh = storm_relative_helicity(heights, u, v, 272s depth=750 * units.meters) 272s 272s tests/calc/test_kinematics.py:550: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s /usr/lib/python3/dist-packages/metpy/calc/kinematics.py:848: in storm_relative_helicity 272s _, u, v = get_layer_heights(height, depth, u, v, with_agl=True, bottom=bottom) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = 272s interpolate = True, with_agl = True 272s args = (, ) 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s __________________ test_storm_relative_helicity_storm_motion ___________________ 272s 272s def test_storm_relative_helicity_storm_motion(): 272s """Test storm relative helicity with storm motion and differing input units.""" 272s u = np.array([5, 25, 15, 5]) * units('m/s') 272s v = np.array([30, 10, 10, 20]) * units('m/s') 272s u = u.to('knots') 272s heights = np.array([0, 250, 500, 750]) * units.m 272s 272s > pos_srh, neg_srh, total_srh = storm_relative_helicity(heights, u, v, 272s depth=750 * units.meters, 272s storm_u=5 * units('m/s'), 272s storm_v=10 * units('m/s')) 272s 272s tests/calc/test_kinematics.py:565: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s /usr/lib/python3/dist-packages/metpy/calc/kinematics.py:848: in storm_relative_helicity 272s _, u, v = get_layer_heights(height, depth, u, v, with_agl=True, bottom=bottom) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = 272s interpolate = True, with_agl = True 272s args = (, ) 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s _______________ test_storm_relative_helicity_with_interpolation ________________ 272s 272s def test_storm_relative_helicity_with_interpolation(): 272s """Test storm relative helicity with interpolation.""" 272s u = np.array([-5, 15, 25, 15, -5]) * units('m/s') 272s v = np.array([40, 20, 10, 10, 30]) * units('m/s') 272s u = u.to('knots') 272s heights = np.array([0, 100, 200, 300, 400]) * units.m 272s 272s > pos_srh, neg_srh, total_srh = storm_relative_helicity(heights, u, v, 272s bottom=50 * units.meters, 272s depth=300 * units.meters, 272s storm_u=5 * units('m/s'), 272s storm_v=10 * units('m/s')) 272s 272s tests/calc/test_kinematics.py:582: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s /usr/lib/python3/dist-packages/metpy/calc/kinematics.py:848: in storm_relative_helicity 272s _, u, v = get_layer_heights(height, depth, u, v, with_agl=True, bottom=bottom) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = 272s interpolate = True, with_agl = True 272s args = (, ) 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s _________________________ test_storm_relative_helicity _________________________ 272s 272s def test_storm_relative_helicity(): 272s """Test function for SRH calculations on an eigth-circle hodograph.""" 272s # Create larger arrays for everything except pressure to make a smoother graph 272s hgt_int = np.arange(0, 2050, 50) 272s hgt_int = hgt_int * units('meter') 272s dir_int = np.arange(180, 272.25, 2.25) 272s spd_int = np.zeros(hgt_int.shape[0]) 272s spd_int[:] = 2. 272s u_int, v_int = wind_components(spd_int * units('m/s'), dir_int * units.degree) 272s 272s # Put in the correct value of SRH for a eighth-circle, 2 m/s hodograph 272s # (SRH = 2 * area under hodo, in this case...) 272s srh_true_p = (.25 * np.pi * (2 ** 2)) * units('m^2/s^2') 272s 272s # Since there's only positive SRH in this case, total SRH will be equal to positive SRH and 272s # negative SRH will be zero. 272s srh_true_t = srh_true_p 272s srh_true_n = 0 * units('m^2/s^2') 272s > p_srh, n_srh, t_srh = storm_relative_helicity(hgt_int, u_int, v_int, 272s 1000 * units('meter'), 272s bottom=0 * units('meter'), 272s storm_u=0 * units.knot, 272s storm_v=0 * units.knot) 272s 272s tests/calc/test_kinematics.py:611: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s /usr/lib/python3/dist-packages/metpy/calc/kinematics.py:848: in storm_relative_helicity 272s _, u, v = get_layer_heights(height, depth, u, v, with_agl=True, bottom=bottom) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = 272s interpolate = True, with_agl = True 272s args = () 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s _______________________ test_storm_relative_helicity_agl _______________________ 272s 272s def test_storm_relative_helicity_agl(): 272s """Test storm relative helicity with heights above ground.""" 272s u = np.array([-5, 15, 25, 15, -5]) * units('m/s') 272s v = np.array([40, 20, 10, 10, 30]) * units('m/s') 272s u = u.to('knots') 272s heights = np.array([100, 200, 300, 400, 500]) * units.m 272s 272s > pos_srh, neg_srh, total_srh = storm_relative_helicity(heights, u, v, 272s bottom=50 * units.meters, 272s depth=300 * units.meters, 272s storm_u=5 * units('m/s'), 272s storm_v=10 * units('m/s')) 272s 272s tests/calc/test_kinematics.py:628: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s /usr/lib/python3/dist-packages/metpy/calc/kinematics.py:848: in storm_relative_helicity 272s _, u, v = get_layer_heights(height, depth, u, v, with_agl=True, bottom=bottom) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = 272s interpolate = True, with_agl = True 272s args = (, ) 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s _____________________ test_storm_relative_helicity_masked ______________________ 272s 272s def test_storm_relative_helicity_masked(): 272s """Test that srh does not return masked values.""" 272s h = units.Quantity(np.ma.array([20.72, 234.85, 456.69, 683.21]), units.meter) 272s u = units.Quantity(np.ma.array(np.zeros((4,))), units.knot) 272s v = units.Quantity(np.zeros_like(u), units.knot) 272s > pos, neg, com = storm_relative_helicity(h, u, v, depth=500 * units.meter, 272s storm_u=15.77463015050421 * units('m/s'), 272s storm_v=21.179437759755647 * units('m/s')) 272s 272s tests/calc/test_kinematics.py:646: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s /usr/lib/python3/dist-packages/metpy/calc/kinematics.py:848: in storm_relative_helicity 272s _, u, v = get_layer_heights(height, depth, u, v, with_agl=True, bottom=bottom) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s height = 272s depth = , bottom = 272s interpolate = True, with_agl = True 272s args = (, ) 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[length]') 272s def get_layer_heights(height, depth, *args, bottom=None, interpolate=True, with_agl=False): 272s """Return an atmospheric layer from upper air data with the requested bottom and depth. 272s 272s This function will subset an upper air dataset to contain only the specified layer using 272s the height only. 272s 272s Parameters 272s ---------- 272s height : array-like 272s Atmospheric height 272s depth : `pint.Quantity` 272s Thickness of the layer 272s args : array-like 272s Atmospheric variable(s) measured at the given pressures 272s bottom : `pint.Quantity`, optional 272s Bottom of the layer 272s interpolate : bool, optional 272s Interpolate the top and bottom points if they are not in the given data. Defaults 272s to True. 272s with_agl : bool, optional 272s Returns the height as above ground level by subtracting the minimum height in the 272s provided height. Defaults to False. 272s 272s Returns 272s ------- 272s `pint.Quantity, pint.Quantity` 272s Height and data variables of the layer 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Also, this will return Pint Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``heights`` parameter to ``height`` 272s 272s """ 272s # Make sure pressure and datavars are the same length 272s for datavar in args: 272s if len(height) != len(datavar): 272s raise ValueError('Height and data variables must have the same length.') 272s 272s # If we want things in AGL, subtract the minimum height from all height values 272s if with_agl: 272s > sfc_height = np.min(height) 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/tools.py:476: TypeError 272s _________________________________ test_lfc_ml2 _________________________________ 272s 272s def test_lfc_ml2(): 272s """Test a mixed-layer LFC calculation that previously crashed.""" 272s levels = np.array([1024.95703125, 1016.61474609, 1005.33056641, 991.08544922, 973.4163208, 272s 951.3381958, 924.82836914, 898.25482178, 873.46124268, 848.69830322, 272s 823.92553711, 788.49304199, 743.44580078, 700.50970459, 659.62017822, 272s 620.70861816, 583.69421387, 548.49719238, 515.03826904, 483.24401855, 272s 453.0418396, 424.36477661, 397.1505127, 371.33441162, 346.85922241, 272s 323.66995239, 301.70935059, 280.92651367, 261.27053833, 242.69168091, 272s 225.14237976, 208.57781982, 192.95333862, 178.22599792, 164.39630127, 272s 151.54336548, 139.68635559, 128.74923706, 118.6588974, 109.35111237, 272s 100.76405334, 92.84288025, 85.53556824, 78.79430389, 72.57549286, 272s 66.83885193, 61.54678726, 56.66480637, 52.16108322]) * units.mbar 272s temperatures = np.array([6.00750732, 5.14892578, 4.177948, 3.00268555, 1.55535889, 272s -0.25527954, -1.93988037, -3.57766724, -4.40600586, -4.19238281, 272s -3.71185303, -4.47943115, -6.81280518, -8.08685303, -8.41287231, 272s -10.79302979, -14.13262939, -16.85784912, -19.51675415, 272s -22.28689575, -24.99938965, -27.79664612, -30.90414429, 272s -34.49435425, -38.438797, -42.27981567, -45.99230957, 272s -49.75340271, -53.58230591, -57.30686951, -60.76026917, 272s -63.92070007, -66.72470093, -68.97846985, -70.4264679, 272s -71.16407776, -71.53797913, -71.64375305, -71.52735901, 272s -71.53523254, -71.61097717, -71.92687988, -72.68682861, 272s -74.129776, -76.02471924, -76.88977051, -76.26008606, 272s -75.90351868, -76.15809631]) * units.celsius 272s dewpoints = np.array([4.50012302, 3.42483997, 2.78102994, 2.24474645, 1.593485, -0.9440815, 272s -3.8044982, -3.55629468, -9.7376976, -10.2950449, -9.67498302, 272s -10.30486488, -8.70559597, -8.71669006, -12.66509628, -18.6697197, 272s -23.00351334, -29.46240425, -36.82178497, -41.68824768, -44.50320816, 272s -48.54426575, -52.50753403, -51.09564209, -48.92690659, -49.97380829, 272s -51.57516098, -52.62096405, -54.24332809, -57.09109879, -60.5596199, 272s -63.93486404, -67.07530212, -70.01263428, -72.9258728, -76.12271881, 272s -79.49847412, -82.2350769, -83.91127014, -84.95665741, -85.61238861, 272s -86.16391754, -86.7653656, -87.34436035, -87.87495422, -88.34281921, 272s -88.74453735, -89.04680634, -89.26436615]) * units.celsius 272s __, t_mixed, td_mixed = mixed_parcel(levels, temperatures, dewpoints) 272s mixed_parcel_prof = parcel_profile(levels, t_mixed, td_mixed) 272s > lfc_pressure, lfc_temp = lfc(levels, temperatures, dewpoints, mixed_parcel_prof, td_mixed) 272s 272s tests/calc/test_thermo.py:618: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s pressure = 272s temperature = 272s dewpoint = 272s parcel_temperature_profile = 272s dewpoint_start = , which = 'top' 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[pressure]', '[temperature]', '[temperature]', '[temperature]') 272s def lfc(pressure, temperature, dewpoint, parcel_temperature_profile=None, dewpoint_start=None, 272s which='top'): 272s r"""Calculate the level of free convection (LFC). 272s 272s This works by finding the first intersection of the ideal parcel path and 272s the measured parcel temperature. If this intersection occurs below the LCL, 272s the LFC is determined to be the same as the LCL, based upon the conditions 272s set forth in [USAF1990]_, pg 4-14, where a parcel must be lifted dry adiabatically 272s to saturation before it can freely rise. 272s 272s Parameters 272s ---------- 272s pressure : `pint.Quantity` 272s Atmospheric pressure profile. This array must be from high to low pressure. 272s 272s temperature : `pint.Quantity` 272s Temperature at the levels given by `pressure` 272s 272s dewpoint : `pint.Quantity` 272s Dewpoint at the levels given by `pressure` 272s 272s parcel_temperature_profile: `pint.Quantity`, optional 272s The parcel's temperature profile from which to calculate the LFC. Defaults to the 272s surface parcel profile. 272s 272s dewpoint_start: `pint.Quantity`, optional 272s Dewpoint of the parcel for which to calculate the LFC. Defaults to the surface 272s dewpoint. 272s 272s which: str, optional 272s Pick which LFC to return. Options are 'top', 'bottom', 'wide', 'most_cape', and 'all'; 272s 'top' returns the lowest-pressure LFC (default), 272s 'bottom' returns the highest-pressure LFC, 272s 'wide' returns the LFC whose corresponding EL is farthest away, 272s 'most_cape' returns the LFC that results in the most CAPE in the profile. 272s 272s Returns 272s ------- 272s `pint.Quantity` 272s LFC pressure, or array of same if which='all' 272s 272s `pint.Quantity` 272s LFC temperature, or array of same if which='all' 272s 272s Examples 272s -------- 272s >>> from metpy.calc import dewpoint_from_relative_humidity, lfc 272s >>> from metpy.units import units 272s >>> # pressure 272s >>> p = [1008., 1000., 950., 900., 850., 800., 750., 700., 650., 600., 272s ... 550., 500., 450., 400., 350., 300., 250., 200., 272s ... 175., 150., 125., 100., 80., 70., 60., 50., 272s ... 40., 30., 25., 20.] * units.hPa 272s >>> # temperature 272s >>> T = [29.3, 28.1, 23.5, 20.9, 18.4, 15.9, 13.1, 10.1, 6.7, 3.1, 272s ... -0.5, -4.5, -9.0, -14.8, -21.5, -29.7, -40.0, -52.4, 272s ... -59.2, -66.5, -74.1, -78.5, -76.0, -71.6, -66.7, -61.3, 272s ... -56.3, -51.7, -50.7, -47.5] * units.degC 272s >>> # relative humidity 272s >>> rh = [.85, .65, .36, .39, .82, .72, .75, .86, .65, .22, .52, 272s ... .66, .64, .20, .05, .75, .76, .45, .25, .48, .76, .88, 272s ... .56, .88, .39, .67, .15, .04, .94, .35] * units.dimensionless 272s >>> # calculate dewpoint 272s >>> Td = dewpoint_from_relative_humidity(T, rh) 272s >>> # calculate LFC 272s >>> lfc(p, T, Td) 272s (, ) 272s 272s See Also 272s -------- 272s parcel_profile 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Since this function returns scalar values when given a profile, this will return Pint 272s Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``dewpt``,``dewpoint_start`` parameters to ``dewpoint``, ``dewpoint_start`` 272s 272s """ 272s # Default to surface parcel if no profile or starting pressure level is given 272s if parcel_temperature_profile is None: 272s pressure, temperature, dewpoint = _remove_nans(pressure, temperature, dewpoint) 272s new_profile = parcel_profile_with_lcl(pressure, temperature, dewpoint) 272s pressure, temperature, dewpoint, parcel_temperature_profile = new_profile 272s parcel_temperature_profile = parcel_temperature_profile.to(temperature.units) 272s else: 272s new_profile = _remove_nans(pressure, temperature, dewpoint, parcel_temperature_profile) 272s pressure, temperature, dewpoint, parcel_temperature_profile = new_profile 272s 272s if dewpoint_start is None: 272s dewpoint_start = dewpoint[0] 272s 272s # The parcel profile and data may have the same first data point. 272s # If that is the case, ignore that point to get the real first 272s # intersection for the LFC calculation. Use logarithmic interpolation. 272s if np.isclose(parcel_temperature_profile[0].to(temperature.units).m, temperature[0].m): 272s x, y = find_intersections(pressure[1:], parcel_temperature_profile[1:], 272s temperature[1:], direction='increasing', log_x=True) 272s else: 272s x, y = find_intersections(pressure, parcel_temperature_profile, 272s temperature, direction='increasing', log_x=True) 272s 272s # Compute LCL for this parcel for future comparisons 272s this_lcl = lcl(pressure[0], parcel_temperature_profile[0], dewpoint_start) 272s 272s # The LFC could: 272s # 1) Not exist 272s # 2) Exist but be equal to the LCL 272s # 3) Exist and be above the LCL 272s 272s # LFC does not exist or is LCL 272s if len(x) == 0: 272s # Is there any positive area above the LCL? 272s mask = pressure < this_lcl[0] 272s if np.all(_less_or_close(parcel_temperature_profile[mask], temperature[mask])): 272s # LFC doesn't exist 272s x = units.Quantity(np.nan, pressure.units) 272s y = units.Quantity(np.nan, temperature.units) 272s else: # LFC = LCL 272s x, y = this_lcl 272s return x, y 272s 272s # LFC exists. Make sure it is no lower than the LCL 272s else: 272s idx = x < this_lcl[0] 272s # LFC height < LCL height, so set LFC = LCL 272s if not any(idx): 272s el_pressure, _ = find_intersections(pressure[1:], parcel_temperature_profile[1:], 272s temperature[1:], direction='decreasing', 272s log_x=True) 272s > if np.min(el_pressure) > this_lcl[0]: 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/thermo.py:724: TypeError 272s __________________________ test_lfc_and_el_below_lcl ___________________________ 272s 272s def test_lfc_and_el_below_lcl(): 272s """Test that LFC and EL are returned as NaN if both are below LCL.""" 272s dewpoint = [264.5351, 261.13443, 259.0122, 252.30063, 248.58017, 242.66582] * units.kelvin 272s temperature = [273.09723, 268.40173, 263.56207, 260.257, 256.63538, 272s 252.91345] * units.kelvin 272s pressure = [1017.16, 950, 900, 850, 800, 750] * units.hPa 272s el_pressure, el_temperature = el(pressure, temperature, dewpoint) 272s > lfc_pressure, lfc_temperature = lfc(pressure, temperature, dewpoint) 272s 272s tests/calc/test_thermo.py:938: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s pressure = 272s temperature = 272s dewpoint = 272s parcel_temperature_profile = 272s dewpoint_start = , which = 'top' 272s 272s @exporter.export 272s @preprocess_and_wrap() 272s @check_units('[pressure]', '[temperature]', '[temperature]', '[temperature]') 272s def lfc(pressure, temperature, dewpoint, parcel_temperature_profile=None, dewpoint_start=None, 272s which='top'): 272s r"""Calculate the level of free convection (LFC). 272s 272s This works by finding the first intersection of the ideal parcel path and 272s the measured parcel temperature. If this intersection occurs below the LCL, 272s the LFC is determined to be the same as the LCL, based upon the conditions 272s set forth in [USAF1990]_, pg 4-14, where a parcel must be lifted dry adiabatically 272s to saturation before it can freely rise. 272s 272s Parameters 272s ---------- 272s pressure : `pint.Quantity` 272s Atmospheric pressure profile. This array must be from high to low pressure. 272s 272s temperature : `pint.Quantity` 272s Temperature at the levels given by `pressure` 272s 272s dewpoint : `pint.Quantity` 272s Dewpoint at the levels given by `pressure` 272s 272s parcel_temperature_profile: `pint.Quantity`, optional 272s The parcel's temperature profile from which to calculate the LFC. Defaults to the 272s surface parcel profile. 272s 272s dewpoint_start: `pint.Quantity`, optional 272s Dewpoint of the parcel for which to calculate the LFC. Defaults to the surface 272s dewpoint. 272s 272s which: str, optional 272s Pick which LFC to return. Options are 'top', 'bottom', 'wide', 'most_cape', and 'all'; 272s 'top' returns the lowest-pressure LFC (default), 272s 'bottom' returns the highest-pressure LFC, 272s 'wide' returns the LFC whose corresponding EL is farthest away, 272s 'most_cape' returns the LFC that results in the most CAPE in the profile. 272s 272s Returns 272s ------- 272s `pint.Quantity` 272s LFC pressure, or array of same if which='all' 272s 272s `pint.Quantity` 272s LFC temperature, or array of same if which='all' 272s 272s Examples 272s -------- 272s >>> from metpy.calc import dewpoint_from_relative_humidity, lfc 272s >>> from metpy.units import units 272s >>> # pressure 272s >>> p = [1008., 1000., 950., 900., 850., 800., 750., 700., 650., 600., 272s ... 550., 500., 450., 400., 350., 300., 250., 200., 272s ... 175., 150., 125., 100., 80., 70., 60., 50., 272s ... 40., 30., 25., 20.] * units.hPa 272s >>> # temperature 272s >>> T = [29.3, 28.1, 23.5, 20.9, 18.4, 15.9, 13.1, 10.1, 6.7, 3.1, 272s ... -0.5, -4.5, -9.0, -14.8, -21.5, -29.7, -40.0, -52.4, 272s ... -59.2, -66.5, -74.1, -78.5, -76.0, -71.6, -66.7, -61.3, 272s ... -56.3, -51.7, -50.7, -47.5] * units.degC 272s >>> # relative humidity 272s >>> rh = [.85, .65, .36, .39, .82, .72, .75, .86, .65, .22, .52, 272s ... .66, .64, .20, .05, .75, .76, .45, .25, .48, .76, .88, 272s ... .56, .88, .39, .67, .15, .04, .94, .35] * units.dimensionless 272s >>> # calculate dewpoint 272s >>> Td = dewpoint_from_relative_humidity(T, rh) 272s >>> # calculate LFC 272s >>> lfc(p, T, Td) 272s (, ) 272s 272s See Also 272s -------- 272s parcel_profile 272s 272s Notes 272s ----- 272s Only functions on 1D profiles (not higher-dimension vertical cross sections or grids). 272s Since this function returns scalar values when given a profile, this will return Pint 272s Quantities even when given xarray DataArray profiles. 272s 272s .. versionchanged:: 1.0 272s Renamed ``dewpt``,``dewpoint_start`` parameters to ``dewpoint``, ``dewpoint_start`` 272s 272s """ 272s # Default to surface parcel if no profile or starting pressure level is given 272s if parcel_temperature_profile is None: 272s pressure, temperature, dewpoint = _remove_nans(pressure, temperature, dewpoint) 272s new_profile = parcel_profile_with_lcl(pressure, temperature, dewpoint) 272s pressure, temperature, dewpoint, parcel_temperature_profile = new_profile 272s parcel_temperature_profile = parcel_temperature_profile.to(temperature.units) 272s else: 272s new_profile = _remove_nans(pressure, temperature, dewpoint, parcel_temperature_profile) 272s pressure, temperature, dewpoint, parcel_temperature_profile = new_profile 272s 272s if dewpoint_start is None: 272s dewpoint_start = dewpoint[0] 272s 272s # The parcel profile and data may have the same first data point. 272s # If that is the case, ignore that point to get the real first 272s # intersection for the LFC calculation. Use logarithmic interpolation. 272s if np.isclose(parcel_temperature_profile[0].to(temperature.units).m, temperature[0].m): 272s x, y = find_intersections(pressure[1:], parcel_temperature_profile[1:], 272s temperature[1:], direction='increasing', log_x=True) 272s else: 272s x, y = find_intersections(pressure, parcel_temperature_profile, 272s temperature, direction='increasing', log_x=True) 272s 272s # Compute LCL for this parcel for future comparisons 272s this_lcl = lcl(pressure[0], parcel_temperature_profile[0], dewpoint_start) 272s 272s # The LFC could: 272s # 1) Not exist 272s # 2) Exist but be equal to the LCL 272s # 3) Exist and be above the LCL 272s 272s # LFC does not exist or is LCL 272s if len(x) == 0: 272s # Is there any positive area above the LCL? 272s mask = pressure < this_lcl[0] 272s if np.all(_less_or_close(parcel_temperature_profile[mask], temperature[mask])): 272s # LFC doesn't exist 272s x = units.Quantity(np.nan, pressure.units) 272s y = units.Quantity(np.nan, temperature.units) 272s else: # LFC = LCL 272s x, y = this_lcl 272s return x, y 272s 272s # LFC exists. Make sure it is no lower than the LCL 272s else: 272s idx = x < this_lcl[0] 272s # LFC height < LCL height, so set LFC = LCL 272s if not any(idx): 272s el_pressure, _ = find_intersections(pressure[1:], parcel_temperature_profile[1:], 272s temperature[1:], direction='decreasing', 272s log_x=True) 272s > if np.min(el_pressure) > this_lcl[0]: 272s E TypeError: no implementation found for 'numpy.min' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/thermo.py:724: TypeError 272s ___________________________________ test_gdi ___________________________________ 272s 272s def test_gdi(): 272s """Test the Galvez Davison Index calculation.""" 272s pressure = np.array([1014., 1000., 997., 981.2, 947.4, 925., 914.9, 911., 272s 902., 883., 850., 822.3, 816., 807., 793.2, 770., 272s 765.1, 753., 737.5, 737., 713., 700., 688., 685., 272s 680., 666., 659.8, 653., 643., 634., 615., 611.8, 272s 566.2, 516., 500., 487., 484.2, 481., 475., 460., 272s 400.]) * units.hPa 272s temperature = np.array([24.2, 24.2, 24., 23.1, 21., 19.6, 18.7, 18.4, 272s 19.2, 19.4, 17.2, 15.3, 14.8, 14.4, 13.4, 11.6, 272s 11.1, 10., 8.8, 8.8, 8.2, 7., 5.6, 5.6, 272s 5.6, 4.4, 3.8, 3.2, 3., 3.2, 1.8, 1.5, 272s -3.4, -9.3, -11.3, -13.1, -13.1, -13.1, -13.7, -15.1, 272s -23.5]) * units.degC 272s dewpoint = np.array([23.2, 23.1, 22.8, 22., 20.2, 19., 17.6, 17., 272s 16.8, 15.5, 14., 11.7, 11.2, 8.4, 7., 4.6, 272s 5., 6., 4.2, 4.1, -1.8, -2., -1.4, -0.4, 272s -3.4, -5.6, -4.3, -2.8, -7., -25.8, -31.2, -31.4, 272s -34.1, -37.3, -32.3, -34.1, -37.3, -41.1, -37.7, -58.1, 272s -57.5]) * units.degC 272s 272s relative_humidity = relative_humidity_from_dewpoint(temperature, dewpoint) 272s mixrat = mixing_ratio_from_relative_humidity(pressure, temperature, relative_humidity) 272s > gdi = galvez_davison_index(pressure, temperature, mixrat, pressure[0]) 272s 272s tests/calc/test_thermo.py:2468: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1546: in wrapper 272s return func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s pressure = 272s temperature = 272s mixing_ratio = 272s surface_pressure = , vertical_dim = 0 272s 272s @exporter.export 272s @add_vertical_dim_from_xarray 272s @preprocess_and_wrap(broadcast=('pressure', 'temperature', 'mixing_ratio')) 272s @check_units('[pressure]', '[temperature]', '[dimensionless]', '[pressure]') 272s def galvez_davison_index(pressure, temperature, mixing_ratio, surface_pressure, 272s vertical_dim=0): 272s """ 272s Calculate GDI from the pressure, temperature, mixing ratio, and surface pressure. 272s 272s Calculation of the GDI relies on temperatures and mixing ratios at 950, 272s 850, 700, and 500 hPa. These four levels define three layers: A) Boundary, 272s B) Trade Wind Inversion (TWI), C) Mid-Troposphere. 272s 272s GDI formula derived from [Galvez2015]_: 272s 272s .. math:: GDI = CBI + MWI + II + TC 272s 272s where: 272s 272s * :math:`CBI` is the Column Buoyancy Index 272s * :math:`MWI` is the Mid-tropospheric Warming Index 272s * :math:`II` is the Inversion Index 272s * :math:`TC` is the Terrain Correction [optional] 272s 272s .. list-table:: GDI Values & Corresponding Convective Regimes 272s :widths: 15 75 272s :header-rows: 1 272s 272s * - GDI Value 272s - Expected Convective Regime 272s * - >=45 272s - Scattered to widespread thunderstorms likely. 272s * - 35 to 45 272s - Scattered thunderstorms and/or scattered to widespread rain showers. 272s * - 25 to 35 272s - Isolated to scattered thunderstorms and/or scattered showers. 272s * - 15 to 25 272s - Isolated thunderstorms and/or isolated to scattered showers. 272s * - 5 to 10 272s - Isolated to scattered showers. 272s * - <5 272s - Strong TWI likely, light rain possible. 272s 272s Parameters 272s ---------- 272s pressure : `pint.Quantity` 272s Pressure level(s) 272s 272s temperature : `pint.Quantity` 272s Temperature corresponding to pressure 272s 272s mixing_ratio : `pint.Quantity` 272s Mixing ratio values corresponding to pressure 272s 272s surface_pressure : `pint.Quantity` 272s Pressure of the surface. 272s 272s vertical_dim : int, optional 272s The axis corresponding to vertical, defaults to 0. Automatically determined from 272s xarray DataArray arguments. 272s 272s Returns 272s ------- 272s `pint.Quantity` 272s GDI Index 272s 272s Examples 272s -------- 272s >>> from metpy.calc import mixing_ratio_from_relative_humidity 272s >>> from metpy.units import units 272s >>> # pressure 272s >>> p = [1008., 1000., 950., 900., 850., 800., 750., 700., 650., 600., 272s ... 550., 500., 450., 400., 350., 300., 250., 200., 272s ... 175., 150., 125., 100., 80., 70., 60., 50., 272s ... 40., 30., 25., 20.] * units.hPa 272s >>> # temperature 272s >>> T = [29.3, 28.1, 23.5, 20.9, 18.4, 15.9, 13.1, 10.1, 6.7, 3.1, 272s ... -0.5, -4.5, -9.0, -14.8, -21.5, -29.7, -40.0, -52.4, 272s ... -59.2, -66.5, -74.1, -78.5, -76.0, -71.6, -66.7, -61.3, 272s ... -56.3, -51.7, -50.7, -47.5] * units.degC 272s >>> # relative humidity 272s >>> rh = [.85, .65, .36, .39, .82, .72, .75, .86, .65, .22, .52, 272s ... .66, .64, .20, .05, .75, .76, .45, .25, .48, .76, .88, 272s ... .56, .88, .39, .67, .15, .04, .94, .35] * units.dimensionless 272s >>> # calculate mixing ratio 272s >>> mixrat = mixing_ratio_from_relative_humidity(p, T, rh) 272s >>> galvez_davison_index(p, T, mixrat, p[0]) 272s 272s """ 272s > if np.any(np.max(pressure, axis=vertical_dim) < 950 * units.hectopascal): 272s E TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/thermo.py:4586: TypeError 272s _______________________________ test_gdi_xarray ________________________________ 272s 272s index_xarray_data_expanded = Size: 1kB 272s Dimensions: (isobaric: 4, time: 1, y: 2, x: 3) 272s Coordinates: 272s * isobaric (is... float64 192B result = galvez_davison_index( 272s pressure, 272s temperature, 272s mixing_ratio, 272s pressure[0] 272s ) 272s 272s tests/calc/test_thermo.py:2482: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1546: in wrapper 272s return func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s pressure = 272s temperature = 272s mixing_ratio = 272s surface_pressure = , vertical_dim = 0 272s 272s @exporter.export 272s @add_vertical_dim_from_xarray 272s @preprocess_and_wrap(broadcast=('pressure', 'temperature', 'mixing_ratio')) 272s @check_units('[pressure]', '[temperature]', '[dimensionless]', '[pressure]') 272s def galvez_davison_index(pressure, temperature, mixing_ratio, surface_pressure, 272s vertical_dim=0): 272s """ 272s Calculate GDI from the pressure, temperature, mixing ratio, and surface pressure. 272s 272s Calculation of the GDI relies on temperatures and mixing ratios at 950, 272s 850, 700, and 500 hPa. These four levels define three layers: A) Boundary, 272s B) Trade Wind Inversion (TWI), C) Mid-Troposphere. 272s 272s GDI formula derived from [Galvez2015]_: 272s 272s .. math:: GDI = CBI + MWI + II + TC 272s 272s where: 272s 272s * :math:`CBI` is the Column Buoyancy Index 272s * :math:`MWI` is the Mid-tropospheric Warming Index 272s * :math:`II` is the Inversion Index 272s * :math:`TC` is the Terrain Correction [optional] 272s 272s .. list-table:: GDI Values & Corresponding Convective Regimes 272s :widths: 15 75 272s :header-rows: 1 272s 272s * - GDI Value 272s - Expected Convective Regime 272s * - >=45 272s - Scattered to widespread thunderstorms likely. 272s * - 35 to 45 272s - Scattered thunderstorms and/or scattered to widespread rain showers. 272s * - 25 to 35 272s - Isolated to scattered thunderstorms and/or scattered showers. 272s * - 15 to 25 272s - Isolated thunderstorms and/or isolated to scattered showers. 272s * - 5 to 10 272s - Isolated to scattered showers. 272s * - <5 272s - Strong TWI likely, light rain possible. 272s 272s Parameters 272s ---------- 272s pressure : `pint.Quantity` 272s Pressure level(s) 272s 272s temperature : `pint.Quantity` 272s Temperature corresponding to pressure 272s 272s mixing_ratio : `pint.Quantity` 272s Mixing ratio values corresponding to pressure 272s 272s surface_pressure : `pint.Quantity` 272s Pressure of the surface. 272s 272s vertical_dim : int, optional 272s The axis corresponding to vertical, defaults to 0. Automatically determined from 272s xarray DataArray arguments. 272s 272s Returns 272s ------- 272s `pint.Quantity` 272s GDI Index 272s 272s Examples 272s -------- 272s >>> from metpy.calc import mixing_ratio_from_relative_humidity 272s >>> from metpy.units import units 272s >>> # pressure 272s >>> p = [1008., 1000., 950., 900., 850., 800., 750., 700., 650., 600., 272s ... 550., 500., 450., 400., 350., 300., 250., 200., 272s ... 175., 150., 125., 100., 80., 70., 60., 50., 272s ... 40., 30., 25., 20.] * units.hPa 272s >>> # temperature 272s >>> T = [29.3, 28.1, 23.5, 20.9, 18.4, 15.9, 13.1, 10.1, 6.7, 3.1, 272s ... -0.5, -4.5, -9.0, -14.8, -21.5, -29.7, -40.0, -52.4, 272s ... -59.2, -66.5, -74.1, -78.5, -76.0, -71.6, -66.7, -61.3, 272s ... -56.3, -51.7, -50.7, -47.5] * units.degC 272s >>> # relative humidity 272s >>> rh = [.85, .65, .36, .39, .82, .72, .75, .86, .65, .22, .52, 272s ... .66, .64, .20, .05, .75, .76, .45, .25, .48, .76, .88, 272s ... .56, .88, .39, .67, .15, .04, .94, .35] * units.dimensionless 272s >>> # calculate mixing ratio 272s >>> mixrat = mixing_ratio_from_relative_humidity(p, T, rh) 272s >>> galvez_davison_index(p, T, mixrat, p[0]) 272s 272s """ 272s > if np.any(np.max(pressure, axis=vertical_dim) < 950 * units.hectopascal): 272s E TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/thermo.py:4586: TypeError 272s _______________________________ test_gdi_arrays ________________________________ 272s 272s index_xarray_data_expanded = Size: 1kB 272s Dimensions: (isobaric: 4, time: 1, y: 2, x: 3) 272s Coordinates: 272s * isobaric (is... float64 192B result = galvez_davison_index(pressure, temperature, mixing_ratio, surface_pressure) 272s 272s tests/calc/test_thermo.py:2507: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1546: in wrapper 272s return func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s pressure = 272s temperature = 272s mixing_ratio = 272s surface_pressure = 272s vertical_dim = 0 272s 272s @exporter.export 272s @add_vertical_dim_from_xarray 272s @preprocess_and_wrap(broadcast=('pressure', 'temperature', 'mixing_ratio')) 272s @check_units('[pressure]', '[temperature]', '[dimensionless]', '[pressure]') 272s def galvez_davison_index(pressure, temperature, mixing_ratio, surface_pressure, 272s vertical_dim=0): 272s """ 272s Calculate GDI from the pressure, temperature, mixing ratio, and surface pressure. 272s 272s Calculation of the GDI relies on temperatures and mixing ratios at 950, 272s 850, 700, and 500 hPa. These four levels define three layers: A) Boundary, 272s B) Trade Wind Inversion (TWI), C) Mid-Troposphere. 272s 272s GDI formula derived from [Galvez2015]_: 272s 272s .. math:: GDI = CBI + MWI + II + TC 272s 272s where: 272s 272s * :math:`CBI` is the Column Buoyancy Index 272s * :math:`MWI` is the Mid-tropospheric Warming Index 272s * :math:`II` is the Inversion Index 272s * :math:`TC` is the Terrain Correction [optional] 272s 272s .. list-table:: GDI Values & Corresponding Convective Regimes 272s :widths: 15 75 272s :header-rows: 1 272s 272s * - GDI Value 272s - Expected Convective Regime 272s * - >=45 272s - Scattered to widespread thunderstorms likely. 272s * - 35 to 45 272s - Scattered thunderstorms and/or scattered to widespread rain showers. 272s * - 25 to 35 272s - Isolated to scattered thunderstorms and/or scattered showers. 272s * - 15 to 25 272s - Isolated thunderstorms and/or isolated to scattered showers. 272s * - 5 to 10 272s - Isolated to scattered showers. 272s * - <5 272s - Strong TWI likely, light rain possible. 272s 272s Parameters 272s ---------- 272s pressure : `pint.Quantity` 272s Pressure level(s) 272s 272s temperature : `pint.Quantity` 272s Temperature corresponding to pressure 272s 272s mixing_ratio : `pint.Quantity` 272s Mixing ratio values corresponding to pressure 272s 272s surface_pressure : `pint.Quantity` 272s Pressure of the surface. 272s 272s vertical_dim : int, optional 272s The axis corresponding to vertical, defaults to 0. Automatically determined from 272s xarray DataArray arguments. 272s 272s Returns 272s ------- 272s `pint.Quantity` 272s GDI Index 272s 272s Examples 272s -------- 272s >>> from metpy.calc import mixing_ratio_from_relative_humidity 272s >>> from metpy.units import units 272s >>> # pressure 272s >>> p = [1008., 1000., 950., 900., 850., 800., 750., 700., 650., 600., 272s ... 550., 500., 450., 400., 350., 300., 250., 200., 272s ... 175., 150., 125., 100., 80., 70., 60., 50., 272s ... 40., 30., 25., 20.] * units.hPa 272s >>> # temperature 272s >>> T = [29.3, 28.1, 23.5, 20.9, 18.4, 15.9, 13.1, 10.1, 6.7, 3.1, 272s ... -0.5, -4.5, -9.0, -14.8, -21.5, -29.7, -40.0, -52.4, 272s ... -59.2, -66.5, -74.1, -78.5, -76.0, -71.6, -66.7, -61.3, 272s ... -56.3, -51.7, -50.7, -47.5] * units.degC 272s >>> # relative humidity 272s >>> rh = [.85, .65, .36, .39, .82, .72, .75, .86, .65, .22, .52, 272s ... .66, .64, .20, .05, .75, .76, .45, .25, .48, .76, .88, 272s ... .56, .88, .39, .67, .15, .04, .94, .35] * units.dimensionless 272s >>> # calculate mixing ratio 272s >>> mixrat = mixing_ratio_from_relative_humidity(p, T, rh) 272s >>> galvez_davison_index(p, T, mixrat, p[0]) 272s 272s """ 272s > if np.any(np.max(pressure, axis=vertical_dim) < 950 * units.hectopascal): 272s E TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/thermo.py:4586: TypeError 272s _______________________________ test_gdi_profile _______________________________ 272s 272s index_xarray_data_expanded = Size: 1kB 272s Dimensions: (isobaric: 4, time: 1, y: 2, x: 3) 272s Coordinates: 272s * isobaric (is... float64 192B assert_almost_equal(galvez_davison_index(pressure, temperature, mixing_ratio, pressure[0]), 272s 189.5890429, 4) 272s 272s tests/calc/test_thermo.py:2525: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1546: in wrapper 272s return func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s pressure = 272s temperature = 272s mixing_ratio = 272s surface_pressure = , vertical_dim = 0 272s 272s @exporter.export 272s @add_vertical_dim_from_xarray 272s @preprocess_and_wrap(broadcast=('pressure', 'temperature', 'mixing_ratio')) 272s @check_units('[pressure]', '[temperature]', '[dimensionless]', '[pressure]') 272s def galvez_davison_index(pressure, temperature, mixing_ratio, surface_pressure, 272s vertical_dim=0): 272s """ 272s Calculate GDI from the pressure, temperature, mixing ratio, and surface pressure. 272s 272s Calculation of the GDI relies on temperatures and mixing ratios at 950, 272s 850, 700, and 500 hPa. These four levels define three layers: A) Boundary, 272s B) Trade Wind Inversion (TWI), C) Mid-Troposphere. 272s 272s GDI formula derived from [Galvez2015]_: 272s 272s .. math:: GDI = CBI + MWI + II + TC 272s 272s where: 272s 272s * :math:`CBI` is the Column Buoyancy Index 272s * :math:`MWI` is the Mid-tropospheric Warming Index 272s * :math:`II` is the Inversion Index 272s * :math:`TC` is the Terrain Correction [optional] 272s 272s .. list-table:: GDI Values & Corresponding Convective Regimes 272s :widths: 15 75 272s :header-rows: 1 272s 272s * - GDI Value 272s - Expected Convective Regime 272s * - >=45 272s - Scattered to widespread thunderstorms likely. 272s * - 35 to 45 272s - Scattered thunderstorms and/or scattered to widespread rain showers. 272s * - 25 to 35 272s - Isolated to scattered thunderstorms and/or scattered showers. 272s * - 15 to 25 272s - Isolated thunderstorms and/or isolated to scattered showers. 272s * - 5 to 10 272s - Isolated to scattered showers. 272s * - <5 272s - Strong TWI likely, light rain possible. 272s 272s Parameters 272s ---------- 272s pressure : `pint.Quantity` 272s Pressure level(s) 272s 272s temperature : `pint.Quantity` 272s Temperature corresponding to pressure 272s 272s mixing_ratio : `pint.Quantity` 272s Mixing ratio values corresponding to pressure 272s 272s surface_pressure : `pint.Quantity` 272s Pressure of the surface. 272s 272s vertical_dim : int, optional 272s The axis corresponding to vertical, defaults to 0. Automatically determined from 272s xarray DataArray arguments. 272s 272s Returns 272s ------- 272s `pint.Quantity` 272s GDI Index 272s 272s Examples 272s -------- 272s >>> from metpy.calc import mixing_ratio_from_relative_humidity 272s >>> from metpy.units import units 272s >>> # pressure 272s >>> p = [1008., 1000., 950., 900., 850., 800., 750., 700., 650., 600., 272s ... 550., 500., 450., 400., 350., 300., 250., 200., 272s ... 175., 150., 125., 100., 80., 70., 60., 50., 272s ... 40., 30., 25., 20.] * units.hPa 272s >>> # temperature 272s >>> T = [29.3, 28.1, 23.5, 20.9, 18.4, 15.9, 13.1, 10.1, 6.7, 3.1, 272s ... -0.5, -4.5, -9.0, -14.8, -21.5, -29.7, -40.0, -52.4, 272s ... -59.2, -66.5, -74.1, -78.5, -76.0, -71.6, -66.7, -61.3, 272s ... -56.3, -51.7, -50.7, -47.5] * units.degC 272s >>> # relative humidity 272s >>> rh = [.85, .65, .36, .39, .82, .72, .75, .86, .65, .22, .52, 272s ... .66, .64, .20, .05, .75, .76, .45, .25, .48, .76, .88, 272s ... .56, .88, .39, .67, .15, .04, .94, .35] * units.dimensionless 272s >>> # calculate mixing ratio 272s >>> mixrat = mixing_ratio_from_relative_humidity(p, T, rh) 272s >>> galvez_davison_index(p, T, mixrat, p[0]) 272s 272s """ 272s > if np.any(np.max(pressure, axis=vertical_dim) < 950 * units.hectopascal): 272s E TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/thermo.py:4586: TypeError 272s ______________________ test_gdi_no_950_raises_valueerror _______________________ 272s 272s index_xarray_data = Size: 812B 272s Dimensions: (isobaric: 3, time: 1, y: 2, x: 3) 272s Coordinates: 272s * isobaric (i... float64 144B galvez_davison_index( 272s pressure, 272s temperature, 272s mixrat, 272s pressure[0] 272s ) 272s 272s tests/calc/test_thermo.py:2540: 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1546: in wrapper 272s return func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/xarray.py:1330: in wrapper 272s result = func(*bound_args.args, **bound_args.kwargs) 272s /usr/lib/python3/dist-packages/metpy/units.py:333: in wrapper 272s return func(*args, **kwargs) 272s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 272s 272s pressure = 272s temperature = 272s mixing_ratio = 272s surface_pressure = , vertical_dim = 0 272s 272s @exporter.export 272s @add_vertical_dim_from_xarray 272s @preprocess_and_wrap(broadcast=('pressure', 'temperature', 'mixing_ratio')) 272s @check_units('[pressure]', '[temperature]', '[dimensionless]', '[pressure]') 272s def galvez_davison_index(pressure, temperature, mixing_ratio, surface_pressure, 272s vertical_dim=0): 272s """ 272s Calculate GDI from the pressure, temperature, mixing ratio, and surface pressure. 272s 272s Calculation of the GDI relies on temperatures and mixing ratios at 950, 272s 850, 700, and 500 hPa. These four levels define three layers: A) Boundary, 272s B) Trade Wind Inversion (TWI), C) Mid-Troposphere. 272s 272s GDI formula derived from [Galvez2015]_: 272s 272s .. math:: GDI = CBI + MWI + II + TC 272s 272s where: 272s 272s * :math:`CBI` is the Column Buoyancy Index 272s * :math:`MWI` is the Mid-tropospheric Warming Index 272s * :math:`II` is the Inversion Index 272s * :math:`TC` is the Terrain Correction [optional] 272s 272s .. list-table:: GDI Values & Corresponding Convective Regimes 272s :widths: 15 75 272s :header-rows: 1 272s 272s * - GDI Value 272s - Expected Convective Regime 272s * - >=45 272s - Scattered to widespread thunderstorms likely. 272s * - 35 to 45 272s - Scattered thunderstorms and/or scattered to widespread rain showers. 272s * - 25 to 35 272s - Isolated to scattered thunderstorms and/or scattered showers. 272s * - 15 to 25 272s - Isolated thunderstorms and/or isolated to scattered showers. 272s * - 5 to 10 272s - Isolated to scattered showers. 272s * - <5 272s - Strong TWI likely, light rain possible. 272s 272s Parameters 272s ---------- 272s pressure : `pint.Quantity` 272s Pressure level(s) 272s 272s temperature : `pint.Quantity` 272s Temperature corresponding to pressure 272s 272s mixing_ratio : `pint.Quantity` 272s Mixing ratio values corresponding to pressure 272s 272s surface_pressure : `pint.Quantity` 272s Pressure of the surface. 272s 272s vertical_dim : int, optional 272s The axis corresponding to vertical, defaults to 0. Automatically determined from 272s xarray DataArray arguments. 272s 272s Returns 272s ------- 272s `pint.Quantity` 272s GDI Index 272s 272s Examples 272s -------- 272s >>> from metpy.calc import mixing_ratio_from_relative_humidity 272s >>> from metpy.units import units 272s >>> # pressure 272s >>> p = [1008., 1000., 950., 900., 850., 800., 750., 700., 650., 600., 272s ... 550., 500., 450., 400., 350., 300., 250., 200., 272s ... 175., 150., 125., 100., 80., 70., 60., 50., 272s ... 40., 30., 25., 20.] * units.hPa 272s >>> # temperature 272s >>> T = [29.3, 28.1, 23.5, 20.9, 18.4, 15.9, 13.1, 10.1, 6.7, 3.1, 272s ... -0.5, -4.5, -9.0, -14.8, -21.5, -29.7, -40.0, -52.4, 272s ... -59.2, -66.5, -74.1, -78.5, -76.0, -71.6, -66.7, -61.3, 272s ... -56.3, -51.7, -50.7, -47.5] * units.degC 272s >>> # relative humidity 272s >>> rh = [.85, .65, .36, .39, .82, .72, .75, .86, .65, .22, .52, 272s ... .66, .64, .20, .05, .75, .76, .45, .25, .48, .76, .88, 272s ... .56, .88, .39, .67, .15, .04, .94, .35] * units.dimensionless 272s >>> # calculate mixing ratio 272s >>> mixrat = mixing_ratio_from_relative_humidity(p, T, rh) 272s >>> galvez_davison_index(p, T, mixrat, p[0]) 272s 272s """ 272s > if np.any(np.max(pressure, axis=vertical_dim) < 950 * units.hectopascal): 272s E TypeError: no implementation found for 'numpy.max' on types that implement __array_function__: [.Quantity'>] 272s 272s /usr/lib/python3/dist-packages/metpy/calc/thermo.py:4586: TypeError 272s =========================== short test summary info ============================ 272s FAILED tests/calc/test_calc_tools.py::test_get_layer_heights_agl - TypeError:... 272s FAILED tests/calc/test_calc_tools.py::test_get_layer_heights_agl_bottom_no_interp 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction - TypeError: no... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_edge - TypeErro... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_list - TypeErro... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_arr - TypeError... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_full - TypeErro... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_invalid_scalar 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_invalid_arr - T... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_level_3 - TypeE... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_level_2 - TypeE... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_level_1 - TypeE... 272s FAILED tests/calc/test_calc_tools.py::test_angle_to_direction_ndarray - TypeE... 272s FAILED tests/calc/test_kinematics.py::test_storm_relative_helicity_no_storm_motion 272s FAILED tests/calc/test_kinematics.py::test_storm_relative_helicity_storm_motion 272s FAILED tests/calc/test_kinematics.py::test_storm_relative_helicity_with_interpolation 272s FAILED tests/calc/test_kinematics.py::test_storm_relative_helicity - TypeErro... 272s FAILED tests/calc/test_kinematics.py::test_storm_relative_helicity_agl - Type... 272s FAILED tests/calc/test_kinematics.py::test_storm_relative_helicity_masked - T... 272s FAILED tests/calc/test_thermo.py::test_lfc_ml2 - TypeError: no implementation... 272s FAILED tests/calc/test_thermo.py::test_lfc_and_el_below_lcl - TypeError: no i... 272s FAILED tests/calc/test_thermo.py::test_gdi - TypeError: no implementation fou... 272s FAILED tests/calc/test_thermo.py::test_gdi_xarray - TypeError: no implementat... 272s FAILED tests/calc/test_thermo.py::test_gdi_arrays - TypeError: no implementat... 272s FAILED tests/calc/test_thermo.py::test_gdi_profile - TypeError: no implementa... 272s FAILED tests/calc/test_thermo.py::test_gdi_no_950_raises_valueerror - TypeErr... 272s ========= 26 failed, 935 passed, 25 skipped, 271 deselected in 15.24s ========== 273s lsoda-- at t (=r1), too much accuracy requested for precision of machine.. see tolsf (=r2) in above, r1 = 0.3103761152184D+02 r2 = NaN 273s E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /tmp/autopkgtest.v9TBX8/autopkgtest_tmp/build; python3.12 -m pytest -W ignore::DeprecationWarning -k "not test_projection and not test_pyproj_projection and not test_no_projection and not test_globe and not test_geodetic and not test_unit_array and not test_units and not test_units_data and not test_magnitude_with_quantity and not test_convert_units and not test_convert_to_base_units and not test_missing_grid_mapping_invalid and not test_coordinates_basic_by_method and not test_coordinates_basic_by_property and not test_narr_example_variable_without_grid_mapping and not test_find_axis_name_ and not test_find_axis_number_ and not test_cf_parse_with_grid_mapping and not test_data_array_loc_ and not test_data_array_sel_ and not test_dataset_ and not test_check_axis_with_bad_unit and not test_auxilary_lat_lon_ and not test_zoom_xarray and not test_parse_grid_arguments_xarray and not test_absolute_momentum_xarray_units_attr and not test_precipitable_water and not test_mean_pressure_weighted and not test_weighted_continuous_average and not test_precipitable_water_xarray and not test_bunkers_motion and not test_bulk_shear and not test_critical_angle and not _4d and not test_interpolate_to_grid and not test_natural_neighbor_to_grid and not test_inverse_distance_to_grid and not test_interpolate_to_points and not test_natural_neighbor_to_points and not test_inverse_distance_to_points and not test_declarative_ and not test_no_field_error and not test_ndim_error_ and not test_projection_object and not test_colorfill and not test_global and not test_latlon and not test_plotobs_units_with_formatter and not test_attribute_error_ and not test_time_deltas and not test_latlon_default_units and not test_add_timestamp_xarray and not test_find_nn_triangles_point and not test_vorticity_grid_pole and not test_corfidi_motion and not test_corfidi_motion_override_llj and not test_corfidi_corfidi_llj_unaivalable and not test_corfidi_corfidi_cloudlayer_trimmed and not test_corfidi_motion_with_nans and not test_colorbar_kwargs and not test_xy_not_vertical and not test_lcc_minimal and not test_lcc_single_std_parallel" --ignore=tests/io/test_gempak.py --ignore=tests/io/test_gini.py --ignore=tests/io/test_metar.py --ignore=tests/io/test_nexrad.py --ignore=tests/io/test_station_data.py --ignore=tests/io/test_text.py 273s pybuild-autopkgtest: error: pybuild --autopkgtest --test-pytest -i python{version} -p 3.12 returned exit code 13 273s make: *** [/tmp/LUsqUsDClq/run:4: pybuild-autopkgtest] Error 25 273s pybuild-autopkgtest: error: /tmp/LUsqUsDClq/run pybuild-autopkgtest returned exit code 2 273s autopkgtest [10:25:48]: test pybuild-autopkgtest: -----------------------] 273s autopkgtest [10:25:48]: test pybuild-autopkgtest: - - - - - - - - - - results - - - - - - - - - - 273s pybuild-autopkgtest FAIL non-zero exit status 25 274s autopkgtest [10:25:49]: @@@@@@@@@@@@@@@@@@@@ summary 274s pybuild-autopkgtest FAIL non-zero exit status 25 284s nova [W] Using flock in scalingstack-bos02-s390x 284s flock: timeout while waiting to get lock 284s Creating nova instance adt-oracular-s390x-metpy-20240616-102115-juju-7f2275-prod-proposed-migration-environment-2-5784e4bc-640b-4a8c-80bc-f44c1d8edc13 from image adt/ubuntu-oracular-s390x-server-20240616.img (UUID dd882b34-7da0-4822-87ea-13d5ca0a8a0e)...