Bug#1114444: xarray-sentinel: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13

Santiago Vila sanvila at debian.org
Fri Sep 5 19:28:35 BST 2025


Package: src:xarray-sentinel
Version: 0.9.5+ds-4
Severity: serious
Tags: ftbfs forky sid

Dear maintainer:

During a rebuild of all packages in unstable, your package failed to build.

Below you will find how the build ends (probably the most relevant part,
but not necessarily). If required, the full build log is available here:

https://people.debian.org/~sanvila/build-logs/202509/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:xarray-sentinel, so that this is still
visible in the BTS web page for this package.

Thanks.

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 debian/rules binary
dh binary --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
   dh_auto_build -O--buildsystem=pybuild
I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module
I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_xarray-sentinel  
* Building wheel...

[... snipped ...]

            # Fast, but not safe for subclasses of ndarray, or object arrays,
            # which do not implement isnan (gh-9009), or fmin correctly (gh-8975)
>           res = np.fmin.reduce(a, axis=axis, out=out, **kwargs)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E           ValueError: zero-size array to reduction operation fmin which has no identity

/usr/lib/python3/dist-packages/numpy/lib/_nanfunctions_impl.py:357: ValueError
________________________ test_open_calibration_dataset _________________________

    def test_open_calibration_dataset() -> None:
        annotation_path = (
            DATA_FOLDER
            / "S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE"
        )
>       res = xr.open_dataset(
            annotation_path, engine="sentinel-1", group="IW1/VV/calibration"
        )

../../../tests/test_30_xarray_backends.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/xarray/backends/api.py:750: in open_dataset
    backend_ds = backend.open_dataset(
xarray_sentinel/xarray_backends.py:22: in open_dataset
    ds = sentinel1.open_sentinel1_dataset(
xarray_sentinel/sentinel1.py:991: in open_sentinel1_dataset
    ds = METADATA_OPENERS[metadata](file, attrs=common_attrs)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

calibration = <fsspec.implementations.local.LocalFileOpener object at 0x7f7aefcee7d0>
attrs = {'ascending_node_time': '2021-04-01T04:49:55.637823', 'family_name': 'SENTINEL-1', 'mode': 'IW', 'number': 'B', ...}

    def open_calibration_dataset(
        calibration: esa_safe.PathType, attrs: Dict[str, Any] = {}
    ) -> xr.Dataset:
        calibration_vectors = esa_safe.parse_tag_as_list(
            calibration, ".//calibrationVector", "calibration"
        )
    
        azimuth_time_list = []
        pixel_list = []
        line_list = []
        sigmaNought_list = []
        betaNought_list = []
        gamma_list = []
        dn_list = []
        for vector in calibration_vectors:
            azimuth_time_list.append(vector["azimuthTime"])
            line_list.append(vector["line"])
            pixel = np.fromstring(vector["pixel"]["$"], dtype=int, sep=" ")
            pixel_list.append(pixel)
            sigmaNought = np.fromstring(
                vector["sigmaNought"]["$"], dtype=np.float32, sep=" "
            )
            sigmaNought_list.append(sigmaNought)
            betaNought = np.fromstring(vector["betaNought"]["$"], dtype=np.float32, sep=" ")
            betaNought_list.append(betaNought)
            gamma = np.fromstring(vector["gamma"]["$"], dtype=np.float32, sep=" ")
            gamma_list.append(gamma)
            dn = np.fromstring(vector["dn"]["$"], dtype=np.float32, sep=" ")
            dn_list.append(dn)
    
        pixel = np.array(pixel_list)
>       if (pixel - pixel[0]).any():
                    ^^^^^^^^
E       IndexError: index 0 is out of bounds for axis 0 with size 0

xarray_sentinel/sentinel1.py:103: IndexError
____________________ test_open_pol_dataset_preferred_chunks ____________________

    def test_open_pol_dataset_preferred_chunks() -> None:
        product_path = (
            DATA_FOLDER
            / "S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE"
        )
>       res = xr.open_dataset(product_path, engine="sentinel-1", group="IW1/VV", chunks={})
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

../../../tests/test_35_xarray_backends_dask.py:16: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/xarray/backends/api.py:750: in open_dataset
    backend_ds = backend.open_dataset(
xarray_sentinel/xarray_backends.py:22: in open_dataset
    ds = sentinel1.open_sentinel1_dataset(
xarray_sentinel/sentinel1.py:979: in open_sentinel1_dataset
    gcp = open_gcp_dataset(annotation, attrs=common_attrs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
xarray_sentinel/sentinel1.py:271: in open_gcp_dataset
    footprint = get_footprint_linestring(ds.azimuth_time, ds.slant_range_time, ds)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
xarray_sentinel/sentinel1.py:285: in get_footprint_linestring
    azimuth_time_mm = [azimuth_time.min(), azimuth_time.max()]
                       ^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/xarray/core/_aggregations.py:2899: in min
    return self.reduce(
/usr/lib/python3/dist-packages/xarray/core/dataarray.py:3909: in reduce
    var = self.variable.reduce(func, dim, axis, keep_attrs, keepdims, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/xarray/core/variable.py:1762: in reduce
    result = super().reduce(
/usr/lib/python3/dist-packages/xarray/namedarray/core.py:919: in reduce
    data = func(self.data, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/xarray/core/duck_array_ops.py:532: in f
    return func(values, axis=axis, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/xarray/computation/nanops.py:71: in nanmin
    return nputils.nanmin(a, axis=axis)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/xarray/core/nputils.py:242: in f
    result = getattr(npmodule, name)(values, axis=axis, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

a = array([], dtype=float64), axis = None, out = None, keepdims = <no value>
initial = <no value>, where = <no value>

    @array_function_dispatch(_nanmin_dispatcher)
    def nanmin(a, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue,
               where=np._NoValue):
        """
        Return minimum of an array or minimum along an axis, ignoring any NaNs.
        When all-NaN slices are encountered a ``RuntimeWarning`` is raised and
        Nan is returned for that slice.
    
        Parameters
        ----------
        a : array_like
            Array containing numbers whose minimum is desired. If `a` is not an
            array, a conversion is attempted.
        axis : {int, tuple of int, None}, optional
            Axis or axes along which the minimum is computed. The default is to compute
            the minimum of the flattened array.
        out : ndarray, optional
            Alternate output array in which to place the result.  The default
            is ``None``; if provided, it must have the same shape as the
            expected output, but the type will be cast if necessary. See
            :ref:`ufuncs-output-type` for more details.
        keepdims : bool, optional
            If this is set to True, the axes which are reduced are left
            in the result as dimensions with size one. With this option,
            the result will broadcast correctly against the original `a`.
    
            If the value is anything but the default, then
            `keepdims` will be passed through to the `min` method
            of sub-classes of `ndarray`.  If the sub-classes methods
            does not implement `keepdims` any exceptions will be raised.
        initial : scalar, optional
            The maximum value of an output element. Must be present to allow
            computation on empty slice. See `~numpy.ufunc.reduce` for details.
    
            .. versionadded:: 1.22.0
        where : array_like of bool, optional
            Elements to compare for the minimum. See `~numpy.ufunc.reduce`
            for details.
    
            .. versionadded:: 1.22.0
    
        Returns
        -------
        nanmin : ndarray
            An array with the same shape as `a`, with the specified axis
            removed.  If `a` is a 0-d array, or if axis is None, an ndarray
            scalar is returned.  The same dtype as `a` is returned.
    
        See Also
        --------
        nanmax :
            The maximum value of an array along a given axis, ignoring any NaNs.
        amin :
            The minimum value of an array along a given axis, propagating any NaNs.
        fmin :
            Element-wise minimum of two arrays, ignoring any NaNs.
        minimum :
            Element-wise minimum of two arrays, propagating any NaNs.
        isnan :
            Shows which elements are Not a Number (NaN).
        isfinite:
            Shows which elements are neither NaN nor infinity.
    
        amax, fmax, maximum
    
        Notes
        -----
        NumPy uses the IEEE Standard for Binary Floating-Point for Arithmetic
        (IEEE 754). This means that Not a Number is not equivalent to infinity.
        Positive infinity is treated as a very large number and negative
        infinity is treated as a very small (i.e. negative) number.
    
        If the input has a integer type the function is equivalent to np.min.
    
        Examples
        --------
        >>> import numpy as np
        >>> a = np.array([[1, 2], [3, np.nan]])
        >>> np.nanmin(a)
        1.0
        >>> np.nanmin(a, axis=0)
        array([1.,  2.])
        >>> np.nanmin(a, axis=1)
        array([1.,  3.])
    
        When positive infinity and negative infinity are present:
    
        >>> np.nanmin([1, 2, np.nan, np.inf])
        1.0
        >>> np.nanmin([1, 2, np.nan, -np.inf])
        -inf
    
        """
        kwargs = {}
        if keepdims is not np._NoValue:
            kwargs['keepdims'] = keepdims
        if initial is not np._NoValue:
            kwargs['initial'] = initial
        if where is not np._NoValue:
            kwargs['where'] = where
    
        if type(a) is np.ndarray and a.dtype != np.object_:
            # Fast, but not safe for subclasses of ndarray, or object arrays,
            # which do not implement isnan (gh-9009), or fmin correctly (gh-8975)
>           res = np.fmin.reduce(a, axis=axis, out=out, **kwargs)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E           ValueError: zero-size array to reduction operation fmin which has no identity

/usr/lib/python3/dist-packages/numpy/lib/_nanfunctions_impl.py:357: ValueError
=============================== warnings summary ===============================
xarray_sentinel/esa_safe.py:7
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_xarray-sentinel/build/xarray_sentinel/esa_safe.py:7: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
    import pkg_resources

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED ../../../tests/test_10_esa_safe.py::test_parse_tag - AssertionError: <...
FAILED ../../../tests/test_10_esa_safe.py::test_parse_tag_as_list - IndexErro...
FAILED ../../../tests/test_20_sentinel1.py::test_open_calibration_dataset - I...
FAILED ../../../tests/test_20_sentinel1.py::test_open_noise_range_dataset - I...
FAILED ../../../tests/test_20_sentinel1.py::test_open_noise_azimuth_dataset
FAILED ../../../tests/test_20_sentinel1.py::test_open_coordinate_conversion_dataset
FAILED ../../../tests/test_20_sentinel1.py::test_open_gcp_dataset - ValueErro...
FAILED ../../../tests/test_20_sentinel1.py::test_get_footprint_linestring - V...
FAILED ../../../tests/test_20_sentinel1.py::test_open_orbit_dataset - IndexEr...
FAILED ../../../tests/test_20_sentinel1.py::test_open_dc_estimate_dataset - I...
FAILED ../../../tests/test_20_sentinel1.py::test_open_azimuth_fm_rate_dataset
FAILED ../../../tests/test_20_sentinel1.py::test_open_pol_dataset_iw - Assert...
FAILED ../../../tests/test_20_sentinel1.py::test_open_pol_dataset_sm - Assert...
FAILED ../../../tests/test_20_sentinel1.py::test_open_sentinel1_dataset - Ind...
FAILED ../../../tests/test_20_sentinel1.py::test_open_dataset_virtual_groups
FAILED ../../../tests/test_20_sentinel1.py::test_crop_burst_dataset - ValueEr...
FAILED ../../../tests/test_20_sentinel1.py::test_crop_burst_dataset_gcp - Val...
FAILED ../../../tests/test_20_sentinel1.py::test_calibrate_amplitude - ValueE...
FAILED ../../../tests/test_20_sentinel1.py::test_calibrate_intensity - ValueE...
FAILED ../../../tests/test_20_sentinel1.py::test_slant_range_time_to_ground_range
FAILED ../../../tests/test_20_sentinel1.py::test_ground_range_to_slant_range_time
FAILED ../../../tests/test_30_sentinel1_fsspec.py::test_open_dataset_zip_metadata
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_polarisation_slc[product_path0-IW1/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_polarisation_slc[product_path1-EW1/HH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_polarisation_slc[product_path2-S3/VH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_polarisation_grd[product_path0-IW/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_orbit[product_path0-IW1/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_orbit[product_path1-EW1/HH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_orbit[product_path2-S3/VH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_orbit[product_path3-IW/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_gcp[product_path0-IW1/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_gcp[product_path1-EW1/HH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_gcp[product_path2-S3/VH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_gcp[product_path3-IW/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_dc_estimate[product_path0-IW1/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_dc_estimate[product_path1-EW1/HH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_dc_estimate[product_path2-S3/VH]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_dataset_dc_estimate[product_path3-IW/VV]
FAILED ../../../tests/test_30_xarray_backends.py::test_open_pol_dataset - Val...
FAILED ../../../tests/test_30_xarray_backends.py::test_burst_id_attribute - V...
FAILED ../../../tests/test_30_xarray_backends.py::test_open_calibration_dataset
FAILED ../../../tests/test_35_xarray_backends_dask.py::test_open_pol_dataset_preferred_chunks
====== 42 failed, 21 passed, 4 deselected, 1 xfailed, 1 warning in 4.96s =======
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_xarray-sentinel/build; python3.13 -m pytest -k "not test_mosaic_slc_iw and not test_to_group_netcdf and not test_open_dataset_zip_data and not test_to_group_zarr" /<<PKGBUILDDIR>>/tests
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13
make: *** [debian/rules:16: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------



More information about the Pkg-grass-devel mailing list