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