Package: src:python-cartopy
Version: 0.25.0+dfsg-1
Severity: serious
Tags: ftbfs forky sid

Dear maintainer:

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

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

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

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 cannot 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:python-cartopy, 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:142: Building wheel for python3.14 with "build" 
module
I: pybuild base:384: python3.14 -m build --skip-dependency-check --no-isolation 
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_cartopy  
* Building wheel...
Compiling lib/cartopy/trace.pyx because it changed.

[... snipped ...]


self = <cartopy.tests.test_crs_transform_vectors.TestTransformVectors object at 
0x7fe331c5f130>

    def test_invalid_xy_domain_corner(self):
        # If the point we need to calculate the vector angle falls outside the
        # source projection x and y-domain it should be handled correctly.
        rlon = np.array([180.])
        rlat = np.array([90.])
        u = np.array([1.])
        v = np.array([1.])
        src_proj = ccrs.PlateCarree()
        target_proj = ccrs.Stereographic(central_latitude=90,
                                         central_longitude=0)
        ut, vt = target_proj.transform_vectors(src_proj, rlon, rlat, u, v)
>       assert_array_almost_equal(ut, np.array([0.]), decimal=2)
E       AssertionError: 
E       Arrays are not almost equal to 2 decimals
E       
E       nan location mismatch:
E        ACTUAL: array([nan])
E        DESIRED: array([0.])

cartopy/tests/test_crs_transform_vectors.py:122: AssertionError
________ TestMisc.test_infinite_loop_bounds[InterruptedGoodeHomolosine] ________

self = <cartopy.tests.test_polygon.TestMisc object at 0x7fe331a29130>
proj = <class 'cartopy.crs.InterruptedGoodeHomolosine'>

    @pytest.mark.parametrize('proj',
                             [ccrs.InterruptedGoodeHomolosine, ccrs.Mollweide])
    def test_infinite_loop_bounds(self, proj):
        # test a polygon which used to get stuck in an infinite loop but is now
        # erroneously clipped.
        # see https://github.com/SciTools/cartopy/issues/1131
    
        # These names are for IGH; effectively the same for Mollweide.
        bottom = [0., 70.]
        right = [0., 90.]
        top = [-180., 90.]
        left = [-180., 70.]
        verts = np.array([
            bottom,
            right,
            top,
            left,
            bottom,
        ])
        bad_path = sgeom.Polygon(verts)
    
        target = proj()
        source = ccrs.PlateCarree()
    
        projected = target.project_geometry(bad_path, source)
    
        # When transforming segments was broken, the resulting path did not
        # close, and either filled most of the domain, or a smaller portion
        # than it should. Check that the bounds match the individual points at
        # the expected edges.
        projected_left = target.transform_point(left[0], left[1], source)
        assert projected.bounds[0] == pytest.approx(projected_left[0],
                                                    rel=target.threshold)
        projected_bottom = target.transform_point(bottom[0], bottom[1], source)
        assert projected.bounds[1] == pytest.approx(projected_bottom[1],
                                                    rel=target.threshold)
        projected_right = target.transform_point(right[0], right[1], source)
>       assert projected.bounds[2] == pytest.approx(projected_right[0],
                                                    rel=target.threshold,
                                                    abs=1e-8)
E       assert 3148724.315906706 == nan ± ???
E         
E         comparison failed
E         Obtained: 3148724.315906706
E         Expected: nan ± ???

cartopy/tests/test_polygon.py:162: AssertionError
________________ TestMisc.test_infinite_loop_bounds[Mollweide] _________________

self = <cartopy.tests.test_polygon.TestMisc object at 0x7fe3319fc8d0>
proj = <class 'cartopy.crs.Mollweide'>

    @pytest.mark.parametrize('proj',
                             [ccrs.InterruptedGoodeHomolosine, ccrs.Mollweide])
    def test_infinite_loop_bounds(self, proj):
        # test a polygon which used to get stuck in an infinite loop but is now
        # erroneously clipped.
        # see https://github.com/SciTools/cartopy/issues/1131
    
        # These names are for IGH; effectively the same for Mollweide.
        bottom = [0., 70.]
        right = [0., 90.]
        top = [-180., 90.]
        left = [-180., 70.]
        verts = np.array([
            bottom,
            right,
            top,
            left,
            bottom,
        ])
        bad_path = sgeom.Polygon(verts)
    
        target = proj()
        source = ccrs.PlateCarree()
    
        projected = target.project_geometry(bad_path, source)
    
        # When transforming segments was broken, the resulting path did not
        # close, and either filled most of the domain, or a smaller portion
        # than it should. Check that the bounds match the individual points at
        # the expected edges.
        projected_left = target.transform_point(left[0], left[1], source)
        assert projected.bounds[0] == pytest.approx(projected_left[0],
                                                    rel=target.threshold)
        projected_bottom = target.transform_point(bottom[0], bottom[1], source)
        assert projected.bounds[1] == pytest.approx(projected_bottom[1],
                                                    rel=target.threshold)
        projected_right = target.transform_point(right[0], right[1], source)
>       assert projected.bounds[2] == pytest.approx(projected_right[0],
                                                    rel=target.threshold,
                                                    abs=1e-8)
E       assert 0.0 == nan ± ???
E         
E         comparison failed
E         Obtained: 0.0
E         Expected: nan ± ???

cartopy/tests/test_polygon.py:162: AssertionError
_______________ TestMisc.test_tiny_point_between_boundary_points _______________

self = <cartopy.tests.test_polygon.TestMisc object at 0x7fe331c9f200>

    def test_tiny_point_between_boundary_points(self):
        # Geometry comes from #259.
        target = ccrs.Orthographic(0, -75)
        source = ccrs.PlateCarree()
        wkt = 'POLYGON ((132 -40, 133 -6, 125.3 1, 115 -6, 132 -40))'
        geom = shapely.wkt.loads(wkt)
    
        target = ccrs.Orthographic(central_latitude=90., central_longitude=0)
        source = ccrs.PlateCarree()
        projected = target.project_geometry(geom, source)
        area = projected.area
        # Before fixing, this geometry used to fill the whole disk. Approx
        # 1.2e14.
>       assert 81330 < area < 81340, \
            f'Got area {area}, expecting ~81336'
E       AssertionError: Got area 85832.84574015415, expecting ~81336
E       assert 85832.84574015415 < 81340

cartopy/tests/test_polygon.py:225: AssertionError
________________ Test_vector_scalar_to_grid.test_with_transform ________________

self = <cartopy.tests.test_vector_transform.Test_vector_scalar_to_grid object 
at 0x7fe32f51b390>

    def test_with_transform(self):
        # Transform and regrid vector.
        target_crs = ccrs.PlateCarree()
        src_crs = ccrs.NorthPolarStereo()
    
        input_coords = [src_crs.transform_point(xp, yp, target_crs)
                        for xp, yp in zip(self.x, self.y)]
        x_nps = np.array([ic[0] for ic in input_coords])
        y_nps = np.array([ic[1] for ic in input_coords])
        u_nps, v_nps = src_crs.transform_vectors(target_crs, self.x, self.y,
                                                 self.u, self.v)
    
        expected_x_grid = np.array([[-10., -5., 0., 5., 10.],
                                    [-10., -5., 0., 5., 10.],
                                    [-10., -5., 0., 5., 10.]])
        expected_y_grid = np.array([[5., 5., 5., 5., 5.],
                                    [7.5, 7.5, 7.5, 7.5, 7.5],
                                    [10., 10., 10., 10., 10]])
        expected_u_grid = np.array([[np.nan, np.nan, np.nan, np.nan, np.nan],
                                    [np.nan, 2.3838, 3.5025, 2.6152, np.nan],
                                    [2, 3.0043, 4, 2.9022, 2]])
        expected_v_grid = np.array([[np.nan, np.nan, np.nan, np.nan, np.nan],
                                    [np.nan, 2.6527, 2.1904, 2.4192, np.nan],
                                    [5.5, 4.6483, 4, 4.47, 5.5]])
    
        x_grid, y_grid, u_grid, v_grid = vec_trans.vector_scalar_to_grid(
            src_crs, target_crs, (5, 3), x_nps, y_nps, u_nps, v_nps)
    
        assert_array_almost_equal(x_grid, expected_x_grid)
        assert_array_almost_equal(y_grid, expected_y_grid)
        # Vector transforms are somewhat approximate, so we are more lenient
        # with the returned values since we have transformed twice.
>       assert_array_almost_equal(u_grid, expected_u_grid, decimal=4)
E       AssertionError: 
E       Arrays are not almost equal to 4 decimals
E       
E       Mismatched elements: 5 / 15 (33.3%)
E       Max absolute difference among violations: 0.0019536
E       Max relative difference among violations: 0.00067314
E        ACTUAL: array([[   nan,    nan,    nan,    nan,    nan],
E              [   nan, 2.3843, 3.5023, 2.6158,    nan],
E              [2.    , 3.0062, 4.    , 2.9042, 2.    ]])
E        DESIRED: array([[   nan,    nan,    nan,    nan,    nan],
E              [   nan, 2.3838, 3.5025, 2.6152,    nan],
E              [2.    , 3.0043, 4.    , 2.9022, 2.    ]])

cartopy/tests/test_vector_transform.py:167: AssertionError
=============================== warnings summary ===============================
cartopy/tests/mpl/test_gridliner.py:14
  
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_cartopy/build/cartopy/tests/mpl/test_gridliner.py:14:
 DeprecationWarning: The 'shapely.geos' module is deprecated, and will be 
removed in a future version. All attributes of 'shapely.geos' are available 
directly from the top-level 'shapely' namespace (since shapely 2.0.0).
    from shapely.geos import geos_version

cartopy/tests/mpl/test_mpl_integration.py::test_pcolormesh_wrap_gouraud_shading_failing_mask_creation
  
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_cartopy/build/cartopy/mpl/geoaxes.py:1890:
 UserWarning: Handling wrapped coordinates with gouraud shading is likely to 
introduce artifacts. It is recommended to remove the wrap manually before 
calling pcolormesh.
    warnings.warn("Handling wrapped coordinates with gouraud "

cartopy/tests/mpl/test_plots.py::test_triplot_bbox_tight
cartopy/tests/test_line_string.py::TestBisect::test_nan_rectangular
  /usr/lib/python3/dist-packages/shapely/creation.py:218: RuntimeWarning: 
invalid value encountered in linestrings
    return lib.linestrings(coords, np.intc(handle_nan), out=out, **kwargs)

cartopy/tests/test_crs.py::TestCRS::test_osgb[True]
cartopy/tests/test_crs.py::TestCRS::test_osgb[False]
cartopy/tests/test_crs.py::TestCRS::test_epsg
  
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_cartopy/build/cartopy/tests/test_crs.py:61:
 UserWarning: uk_os_OSTN15_NTv2_OSGBtoETRS.tif is unavailable; testing OSGB at 
reduced precision
    warnings.warn(f'{grid_name} is unavailable; '

cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
cartopy/tests/test_geodesic.py::test_geometry_length_multilinestring
  /usr/lib/python3/dist-packages/pyproj/geod.py:398: DeprecationWarning: 
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error 
in future. Ensure you extract a single element from your array before 
performing this operation. (Deprecated NumPy 1.25.)
    return self._inv_point(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED cartopy/tests/crs/test_geostationary.py::TestGeostationary::test_sweep
FAILED 
cartopy/tests/crs/test_lambert_conformal.py::TestLambertZoneII::test_default
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[default]
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[azimuth]
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[central_longitude]
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[central_latitude]
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[false_easting_northing]
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[scale_factor]
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[globe]
FAILED 
cartopy/tests/crs/test_oblique_mercator.py::TestCrsArgs::test_transform_point[combo]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestTransverseMercator::test_default[True]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestTransverseMercator::test_default[False]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestTransverseMercator::test_osgb_vals[True]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestTransverseMercator::test_osgb_vals[False]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestOSGB::test_default[True]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestOSGB::test_default[False]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestOSNI::test_default[True]
FAILED 
cartopy/tests/crs/test_transverse_mercator.py::TestOSNI::test_default[False]
FAILED cartopy/tests/mpl/test_axes.py::test_geoaxes_no_subslice - Failed: Err...
FAILED cartopy/tests/mpl/test_axes.py::test_geoaxes_set_boundary_clipping - F...
FAILED 
cartopy/tests/mpl/test_contour.py::test_plot_after_contour_doesnt_shrink[contour]
FAILED cartopy/tests/mpl/test_gridliner.py::test_gridliner_labels_zoom - Asse...
FAILED cartopy/tests/mpl/test_images.py::test_imshow - Failed: Error: Image f...
FAILED cartopy/tests/mpl/test_images.py::test_stock_img - Failed: Error: Imag...
FAILED cartopy/tests/mpl/test_images.py::test_pil_Image - Failed: Error: Imag...
FAILED cartopy/tests/mpl/test_images.py::test_background_img - Failed: Error:...
FAILED cartopy/tests/mpl/test_mpl_integration.py::test_cursor_values - Assert...
FAILED cartopy/tests/mpl/test_pseudo_color.py::test_pcolormesh_datalim - Asse...
FAILED cartopy/tests/mpl/test_set_extent.py::test_extents - AssertionError: 
FAILED cartopy/tests/mpl/test_set_extent.py::test_get_extent - AssertionError: 
FAILED cartopy/tests/mpl/test_ticker.py::test_LatitudeFormatter_mercator - As...
FAILED 
cartopy/tests/test_crs_transform_vectors.py::TestTransformVectors::test_invalid_y_domain
FAILED 
cartopy/tests/test_crs_transform_vectors.py::TestTransformVectors::test_invalid_xy_domain_corner
FAILED 
cartopy/tests/test_polygon.py::TestMisc::test_infinite_loop_bounds[InterruptedGoodeHomolosine]
FAILED 
cartopy/tests/test_polygon.py::TestMisc::test_infinite_loop_bounds[Mollweide]
FAILED 
cartopy/tests/test_polygon.py::TestMisc::test_tiny_point_between_boundary_points
FAILED 
cartopy/tests/test_vector_transform.py::Test_vector_scalar_to_grid::test_with_transform
= 37 failed, 630 passed, 2 skipped, 218 deselected, 5 xfailed, 15 warnings in 
8.98s =
E: pybuild pybuild:483: test: plugin pyproject failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_cartopy/build; python3.13 -m pytest 
--pyargs -v -m "not network and not natural_earth" cartopy
dh_auto_test: error: pybuild --test -i python{version} -p "3.14 3.13" returned 
exit code 13
make[1]: *** [debian/rules:33: override_dh_auto_test] Error 25
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:26: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess failed with exit 
status 2
--------------------------------------------------------------------------------

Reply via email to