[Git][debian-gis-team/python-shapely][master] 6 commits: New upstream version 2.1.2

Bas Couwenberg (@sebastic) gitlab at salsa.debian.org
Fri Sep 26 17:27:55 BST 2025



Bas Couwenberg pushed to branch master at Debian GIS Project / python-shapely


Commits:
7d895e25 by Bas Couwenberg at 2025-09-26T18:19:41+02:00
New upstream version 2.1.2
- - - - -
3c043ea5 by Bas Couwenberg at 2025-09-26T18:19:42+02:00
Update upstream source from tag 'upstream/2.1.2'

Update to upstream version '2.1.2'
with Debian dir 68b21f0d42474c319128a2f8388136b8c6bfc8e7
- - - - -
eec20f3b by Bas Couwenberg at 2025-09-26T18:19:58+02:00
New upstream release.

- - - - -
f23684b2 by Bas Couwenberg at 2025-09-26T18:21:35+02:00
Drop geos-3.14.0.patch, fixed upstream.

- - - - -
3058fa66 by Bas Couwenberg at 2025-09-26T18:24:51+02:00
Enable verbose pytest output.

- - - - -
b066776e by Bas Couwenberg at 2025-09-26T18:25:10+02:00
Set distribution to unstable.

- - - - -


15 changed files:

- .github/workflows/pre-commit.yml
- .github/workflows/release.yml
- .github/workflows/tests.yml
- CHANGES.txt
- CITATION.cff
- debian/changelog
- − debian/patches/geos-3.14.0.patch
- debian/patches/series
- debian/rules
- docs/release/2.x.rst
- pyproject.toml
- shapely/_version.py
- shapely/set_operations.py
- shapely/tests/test_measurement.py
- shapely/tests/test_set_operations.py


Changes:

=====================================
.github/workflows/pre-commit.yml
=====================================
@@ -6,9 +6,9 @@ jobs:
   pre-commit:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout at v4
+      - uses: actions/checkout at v5
 
-      - uses: actions/setup-python at v5
+      - uses: actions/setup-python at v6
         with:
           python-version: 3.x
 


=====================================
.github/workflows/release.yml
=====================================
@@ -28,12 +28,12 @@ jobs:
 
     steps:
       - name: Checkout source
-        uses: actions/checkout at v4
+        uses: actions/checkout at v5
         with:
           fetch-depth: 0
 
       - name: Set up Python
-        uses: actions/setup-python at v5
+        uses: actions/setup-python at v6
         with:
           python-version: "3.x"
 
@@ -75,11 +75,11 @@ jobs:
             cibw_build: "*musllinux_aarch64"
             arch: aarch64
     env:
-      basetag: 2024.08.12-1
+      basetag: 2025.08.02-1
 
     steps:
       - name: Checkout source
-        uses: actions/checkout at v4
+        uses: actions/checkout at v5
         with:
           fetch-depth: 0
 
@@ -113,7 +113,7 @@ jobs:
         shell: bash
 
       - name: Build wheels
-        uses: pypa/cibuildwheel at v2.23.3
+        uses: pypa/cibuildwheel at v3.2.0
         env:
           CIBW_ARCHS: ${{ matrix.arch }}
           # TEMP don't use automated/isolated build environment, but manually
@@ -145,10 +145,10 @@ jobs:
       fail-fast: false
       matrix:
         include:
-          - os: windows-2019
+          - os: windows-2022
             arch: x86
             msvc_arch: x86
-          - os: windows-2019
+          - os: windows-2022
             arch: AMD64
             msvc_arch: x64
           - os: macos-13
@@ -160,7 +160,7 @@ jobs:
 
     steps:
       - name: Checkout source
-        uses: actions/checkout at v4
+        uses: actions/checkout at v5
         with:
           fetch-depth: 0
 
@@ -177,7 +177,7 @@ jobs:
       - name: Add MSVC LICENSE
         run: cp ci/wheelbuilder/LICENSE_win32 .
         shell: bash
-        if: ${{ matrix.os == 'windows-2019' }}
+        if: ${{ startsWith(matrix.os, 'windows') }}
 
       - name: Activate MSVC
         uses: ilammy/msvc-dev-cmd at v1
@@ -186,7 +186,7 @@ jobs:
         if: ${{ matrix.msvc_arch }}
 
       - name: Build wheels
-        uses: pypa/cibuildwheel at v2.23.3
+        uses: pypa/cibuildwheel at v3.2.0
         env:
           CIBW_ARCHS: ${{ matrix.arch }}
           CIBW_ENVIRONMENT_MACOS:
@@ -230,7 +230,7 @@ jobs:
     runs-on: ubuntu-latest
     if: github.repository == 'shapely/shapely' && github.ref == 'refs/heads/main'
     steps:
-      - uses: actions/download-artifact at v4
+      - uses: actions/download-artifact at v5
         with:
           pattern: release-*
           merge-multiple: true
@@ -248,7 +248,7 @@ jobs:
     # release on every tag
     if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/')
     steps:
-      - uses: actions/download-artifact at v4
+      - uses: actions/download-artifact at v5
         with:
           pattern: release-*
           merge-multiple: true


=====================================
.github/workflows/tests.yml
=====================================
@@ -12,9 +12,9 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [ubuntu-latest, macos-13, windows-2019]
+        os: [ubuntu-latest, macos-13, windows-2022]
         architecture: [x64]
-        geos: [3.9.6, 3.10.7, 3.11.5, 3.12.3, 3.13.1, main]
+        geos: [3.9.6, 3.10.7, 3.11.5, 3.12.3, 3.13.1, 3.14.0, main]
         include:
           # 2020
           - python: "3.10"
@@ -39,6 +39,10 @@ jobs:
             matplotlib: true
             doctest: true
             extra_pytest_args: "-W error"  # error on warnings
+          # 2025
+          - python: "3.14"
+            geos: 3.14.0
+            numpy: 2.3.3
           # free threaded Python (no numpy version to indicate installing nightly cython and numpy)
           - os: ubuntu-22.04
             python: "3.13t"
@@ -53,12 +57,12 @@ jobs:
             geos: main
             extra_pytest_args: "-W error"  # error on warnings
           # enable two 32-bit windows builds:
-          - os: windows-2019
+          - os: windows-2022
             architecture: x86
             python: "3.10"
             geos: 3.9.6
             numpy: 1.21.6
-          - os: windows-2019
+          - os: windows-2022
             architecture: x86
             python: "3.11"
             geos: 3.12.3
@@ -80,13 +84,13 @@ jobs:
         run: |
           echo 'GEOS_INSTALL=${{ github.workspace }}\geosinstall\geos-${{ matrix.geos }}' >> $GITHUB_ENV
           echo 'GEOS_BUILD=${{ github.workspace }}\geosbuild' >> $GITHUB_ENV
-        if: ${{ matrix.os == 'windows-2019' }}
+        if: ${{ startsWith(matrix.os, 'windows') }}
 
       - name: Checkout Shapely
-        uses: actions/checkout at v4
+        uses: actions/checkout at v5
 
       - name: Checkout GEOS (main)
-        uses: actions/checkout at v4
+        uses: actions/checkout at v5
         with:
           repository: libgeos/geos
           ref: main
@@ -100,7 +104,7 @@ jobs:
         if: ${{ matrix.geos == 'main' }}
 
       - name: Set up Python ${{ matrix.python }}
-        uses: Quansight-Labs/setup-python at 869aeafb7eeb9dc48ba68acc0479e6fc3fd7ce5e  # v5.4.0
+        uses: actions/setup-python at v6
         with:
           python-version: ${{ matrix.python }}
           architecture: ${{ matrix.architecture }}
@@ -118,7 +122,7 @@ jobs:
         uses: ilammy/msvc-dev-cmd at v1
         with:
           arch: ${{ matrix.architecture }}
-        if: ${{ matrix.os == 'windows-2019' }}
+        if: ${{ startsWith(matrix.os, 'windows') }}
 
       - name: Install GEOS
         run: |


=====================================
CHANGES.txt
=====================================
@@ -1,6 +1,12 @@
 Changes
 =======
 
+2.1.2 (2025-09-24)
+------------------
+
+Wheels are available for Python 3.14 (and still include GEOS 3.13.1).
+
+
 2.1.1 (2025-05-19)
 ------------------
 


=====================================
CITATION.cff
=====================================
@@ -2,8 +2,8 @@ cff-version: 1.2.0
 message: "Please cite this software using these metadata."
 type: software
 title: Shapely
-version: "2.1.1"
-date-released: "2025-05-19"
+version: "2.1.2"
+date-released: "2025-09-24"
 doi: 10.5281/zenodo.5597138
 abstract: "Manipulation and analysis of geometric objects in the Cartesian plane."
 repository-artifact: https://pypi.org/project/Shapely


=====================================
debian/changelog
=====================================
@@ -1,8 +1,11 @@
-python-shapely (2.1.1-4) UNRELEASED; urgency=medium
+python-shapely (2.1.2-1) unstable; urgency=medium
 
+  * New upstream release.
   * Update lintian overrides.
+  * Drop geos-3.14.0.patch, fixed upstream.
+  * Enable verbose pytest output.
 
- -- Bas Couwenberg <sebastic at debian.org>  Fri, 12 Sep 2025 17:48:08 +0200
+ -- Bas Couwenberg <sebastic at debian.org>  Fri, 26 Sep 2025 18:25:00 +0200
 
 python-shapely (2.1.1-3) unstable; urgency=medium
 


=====================================
debian/patches/geos-3.14.0.patch deleted
=====================================
@@ -1,34 +0,0 @@
-Description: Fix FTBFS with GEOS 3.14.0.
-Author: Bas Couwenberg <sebastic at debian.org>
-Forwarded: not-needed
-
---- a/shapely/tests/test_measurement.py
-+++ b/shapely/tests/test_measurement.py
-@@ -240,6 +240,7 @@ def test_frechet_distance(geom1, geom2,
-     assert actual == pytest.approx(expected, abs=1e-12)
- 
- 
-+ at pytest.mark.xfail(strict=False, reason="Fails with GEOS 3.14.0")
- @pytest.mark.parametrize(
-     "geom1, geom2, densify, expected",
-     [
---- a/shapely/tests/test_set_operations.py
-+++ b/shapely/tests/test_set_operations.py
-@@ -283,6 +283,7 @@ def test_coverage_union_reduce_axis():
-     assert actual.shape == (3,)
- 
- 
-+ at pytest.mark.xfail(strict=False, reason="Fails with GEOS 3.14.0")
- def test_coverage_union_overlapping_inputs():
-     polygon = Polygon([(1, 1), (1, 0), (0, 0), (0, 1), (1, 1)])
-     other = Polygon([(1, 0), (0.9, 1), (2, 1), (2, 0), (1, 0)])
---- a/shapely/tests/legacy/test_polylabel.py
-+++ b/shapely/tests/legacy/test_polylabel.py
-@@ -32,6 +32,7 @@ class PolylabelTestCase(unittest.TestCas
-         label = polylabel(concave_polygon)
-         assert concave_polygon.contains(label)
- 
-+    @pytest.mark.xfail(strict=False, reason="Fails with GEOS 3.14.0 when built with prior version")
-     def test_rectangle_special_case(self):
-         """
-         The centroid algorithm used is vulnerable to floating point errors


=====================================
debian/patches/series
=====================================
@@ -1,2 +1 @@
 0004-Remove-externally-referenced-image.patch
-geos-3.14.0.patch


=====================================
debian/rules
=====================================
@@ -12,6 +12,8 @@ export DEB_CFLAGS_MAINT_APPEND=-Wno-error=incompatible-pointer-types
 export PYBUILD_NAME=shapely
 ifeq ($(PYBUILD_AUTOPKGTEST),1)
 export PYBUILD_TEST_ARGS=-vv --pyargs ${PYBUILD_NAME}
+else
+export PYBUILD_TEST_ARGS=-vv
 endif
 
 export LC_ALL=C.UTF-8


=====================================
docs/release/2.x.rst
=====================================
@@ -1,6 +1,13 @@
 Version 2.x
 ===========
 
+.. _version-2-1-2:
+
+Version 2.1.2 (2025-09-24)
+--------------------------
+
+Wheels are available for Python 3.14 (and still include GEOS 3.13.1).
+
 .. _version-2-1-1:
 
 Version 2.1.1 (2025-05-19)


=====================================
pyproject.toml
=====================================
@@ -35,6 +35,7 @@ classifiers = [
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Programming Language :: Python :: 3.13",
+    "Programming Language :: Python :: 3.14",
     "Topic :: Scientific/Engineering :: GIS",
 ]
 requires-python = ">=3.10"
@@ -74,7 +75,7 @@ skip = ["pp*", "*_i686", "*_ppc64le", "*_s390x"]
 build-verbosity = 1
 test-requires = "pytest"
 test-command = "pytest --pyargs shapely.tests"
-free-threaded-support = true
+enable = ["cpython-freethreading"]
 
 [tool.coverage.run]
 source = ["shapely"]


=====================================
shapely/_version.py
=====================================
@@ -25,9 +25,9 @@ def get_keywords():
     # setup.py/versioneer.py will grep for the variable names, so they must
     # each be defined on a line of their own. _version.py will just call
     # get_keywords().
-    git_refnames = " (HEAD -> main, tag: 2.1.1)"
-    git_full = "b49155ea7eaec698a0357fb9bc1147533b566916"
-    git_date = "2025-05-19 12:40:46 +0200"
+    git_refnames = " (tag: 2.1.2, maint-2.1)"
+    git_full = "5fb639d1056888d135fe56bfaf750c9648addeec"
+    git_date = "2025-09-24 15:22:48 +0200"
     keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
     return keywords
 


=====================================
shapely/set_operations.py
=====================================
@@ -562,6 +562,9 @@ def coverage_union(a, b, **kwargs):
 
     This is an optimized version of union which assumes the polygons to be
     non-overlapping.
+    If this assumption is not met, the exact result is not guaranteed
+    (depending on the GEOS version, it may return the input unchanged or raise
+    an error).
 
     Parameters
     ----------


=====================================
shapely/tests/test_measurement.py
=====================================
@@ -247,7 +247,7 @@ def test_frechet_distance(geom1, geom2, expected):
         (
             shapely.linestrings([[0, 0], [100, 0]]),
             shapely.linestrings([[0, 0], [50, 50], [100, 0]]),
-            0.001,
+            0.002,
             50,
         )
     ],


=====================================
shapely/tests/test_set_operations.py
=====================================
@@ -287,7 +287,11 @@ def test_coverage_union_overlapping_inputs():
     polygon = Polygon([(1, 1), (1, 0), (0, 0), (0, 1), (1, 1)])
     other = Polygon([(1, 0), (0.9, 1), (2, 1), (2, 0), (1, 0)])
 
-    if shapely.geos_version >= (3, 12, 0):
+    if shapely.geos_version >= (3, 14, 0):
+        # Overlapping polygons raise an error again
+        with pytest.raises(shapely.GEOSException, match="TopologyException"):
+            shapely.coverage_union(polygon, other)
+    elif shapely.geos_version >= (3, 12, 0):
         # Return mostly unchanged output
         result = shapely.coverage_union(polygon, other)
         expected = shapely.multipolygons([polygon, other])



View it on GitLab: https://salsa.debian.org/debian-gis-team/python-shapely/-/compare/cbb0a78667920d4badf945e362e21ec95365fd7a...b066776ed15283aa83d74c72563af58472e47f69

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/python-shapely/-/compare/cbb0a78667920d4badf945e362e21ec95365fd7a...b066776ed15283aa83d74c72563af58472e47f69
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20250926/a9e065dd/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list