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