Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pyproj for openSUSE:Factory checked in at 2025-08-19 16:44:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyproj (Old) and /work/SRC/openSUSE:Factory/.python-pyproj.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyproj" Tue Aug 19 16:44:44 2025 rev:35 rq:1300144 version:3.7.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyproj/python-pyproj.changes 2025-02-16 22:53:32.224563769 +0100 +++ /work/SRC/openSUSE:Factory/.python-pyproj.new.1085/python-pyproj.changes 2025-08-19 16:45:31.673385361 +0200 @@ -1,0 +2,31 @@ +Fri Aug 15 17:06:58 UTC 2025 - Libor Pechacek <lpecha...@gmx.com> + +- Update to 3.7.2 + * Bump pypa/cibuildwheel from 2.22 to 2.23 by @dependabot[bot] + in #1479 + * TST: Only import time.perf_counter by @snowman2 in #1480 + * DEP: Minimum PROJ version 9.4 by @snowman2 in #1481 + * DEP: Python 3.11+ by @snowman2 in #1483 + * Bump scientific-python/upload-nightly-action from 0.6.1 to + 0.6.2 by @dependabot[bot] in #1488 + * DOC: update doc geometry_area_perimeter by @myl-dvl in #1489 + * DOC: Remove 'noqa: E501' from docstrings by @adamjstewart + in #1492 + * pyproj.crs: add imports to all by @adamjstewart in #1494 + * MNT: replace black and isort with ruff format and lint by + @mwtoews in #1496 + * BUILD/CI: Add win_arm64 wheel build by @khmyznikov in #1503 + * Bump pypa/cibuildwheel from 2.23 to 3.0 by @dependabot[bot] + in #1502 + * Bump pypa/cibuildwheel from 3.0.0 to 3.0.1 by + @dependabot[bot] in #1505 + * BLD: Enable free-threading compatibility by @djhoese in #1512 + * CI: Add 3.13 free-threading wheels by @djhoese in #1514 + * Bump actions/download-artifact from 4 to 5 by + @dependabot[bot] in #1520 + * TST: Remove irrelevant test with modern PROJ versions by + @djhoese in #1519 + * Bump actions/checkout from 4 to 5 by @dependabot[bot] + in #1521 + +------------------------------------------------------------------- Old: ---- pyproj-3.7.1.tar.gz New: ---- pyproj-3.7.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyproj.spec ++++++ --- /var/tmp/diff_new_pack.skA9Ho/_old 2025-08-19 16:45:32.881435661 +0200 +++ /var/tmp/diff_new_pack.skA9Ho/_new 2025-08-19 16:45:32.885435827 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-pyproj # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-pyproj -Version: 3.7.1 +Version: 3.7.2 Release: 0 Summary: Python interface to PROJ library License: SUSE-Public-Domain AND X11 ++++++ pyproj-3.7.1.tar.gz -> pyproj-3.7.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/PKG-INFO new/pyproj-3.7.2/PKG-INFO --- old/pyproj-3.7.1/PKG-INFO 2025-02-16 04:49:51.690460200 +0100 +++ new/pyproj-3.7.2/PKG-INFO 2025-08-14 13:05:26.472398300 +0200 @@ -1,11 +1,11 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: pyproj -Version: 3.7.1 +Version: 3.7.2 Summary: Python interface to PROJ (cartographic projections and coordinate transformations library) Home-page: https://github.com/pyproj4/pyproj Author-email: Jeff Whitaker <jeffrey.s.whita...@noaa.gov> Maintainer: pyproj contributors -License: MIT +License-Expression: MIT Project-URL: homepage, https://pyproj4.github.io/pyproj/ Project-URL: documentation, https://pyproj4.github.io/pyproj/ Project-URL: repository, https://github.com/pyproj4/pyproj @@ -13,24 +13,25 @@ Keywords: GIS,map,geospatial,coordinate-systems,coordinate-transformation,cartographic-projection,geodesic Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Science/Research -Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Scientific/Engineering :: GIS Classifier: Topic :: Scientific/Engineering :: Mathematics Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Typing :: Typed -Requires-Python: >=3.10 +Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta +Requires-Python: >=3.11 Description-Content-Type: text/markdown License-File: LICENSE License-File: LICENSE_proj Requires-Dist: certifi Dynamic: home-page +Dynamic: license-file  @@ -45,7 +46,6 @@ <a href="https://badge.fury.io/py/pyproj"><img alt="PyPI" src="https://badge.fury.io/py/pyproj.svg"></a> <a href="https://pepy.tech/project/pyproj"><img alt="Downloads" src="https://pepy.tech/badge/pyproj"></a> <a href="https://anaconda.org/conda-forge/pyproj"><img alt="Anaconda-Server Badge" src="https://anaconda.org/conda-forge/pyproj/badges/version.svg"></a> -<a href="https://github.com/python/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a> <a href="https://github.com/pre-commit/pre-commit"><img alt="pre-commit" src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white"></a> <a href="https://zenodo.org/badge/latestdoi/28607354"><img alt="DOI" src="https://zenodo.org/badge/28607354.svg"></a> </p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/README.md new/pyproj-3.7.2/README.md --- old/pyproj-3.7.1/README.md 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/README.md 2025-08-14 13:05:05.000000000 +0200 @@ -11,7 +11,6 @@ <a href="https://badge.fury.io/py/pyproj"><img alt="PyPI" src="https://badge.fury.io/py/pyproj.svg"></a> <a href="https://pepy.tech/project/pyproj"><img alt="Downloads" src="https://pepy.tech/badge/pyproj"></a> <a href="https://anaconda.org/conda-forge/pyproj"><img alt="Anaconda-Server Badge" src="https://anaconda.org/conda-forge/pyproj/badges/version.svg"></a> -<a href="https://github.com/python/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a> <a href="https://github.com/pre-commit/pre-commit"><img alt="pre-commit" src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white"></a> <a href="https://zenodo.org/badge/latestdoi/28607354"><img alt="DOI" src="https://zenodo.org/badge/28607354.svg"></a> </p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/docs/history.rst new/pyproj-3.7.2/docs/history.rst --- old/pyproj-3.7.1/docs/history.rst 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/docs/history.rst 2025-08-14 13:05:05.000000000 +0200 @@ -1,6 +1,16 @@ Change Log ========== +3.7.2 +----- +- DEP: Minimum PROJ version 9.4 (pull #1481) +- DEP: Minimum supported Python version 3.11 (pull #1483) +- MNT: Add CRS imports to __all__ +- DEP: Add win_arm64 wheels +- DEP: Add Python 3.13 free-threading wheels +- DEP: Add Python 3.14 and 3.14 free-threading wheels +- TST: Remove irrelevant test with modern PROJ versions + 3.7.1 ------ - WHL: Add wheels for musllinux (pull #1461) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/docs/index.rst new/pyproj-3.7.2/docs/index.rst --- old/pyproj-3.7.1/docs/index.rst 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/docs/index.rst 2025-08-14 13:05:05.000000000 +0200 @@ -5,9 +5,9 @@ GitHub Repository: https://github.com/pyproj4/pyproj -.. note:: Minimum supported PROJ version is 9.2 +.. note:: Minimum supported PROJ version is 9.4 -.. note:: Minimum supported Python version is 3.10 +.. note:: Minimum supported Python version is 3.11 .. note:: Linux (manylinux2014) wheels require pip 19.3+ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/docs/installation.rst new/pyproj-3.7.2/docs/installation.rst --- old/pyproj-3.7.1/docs/installation.rst 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/docs/installation.rst 2025-08-14 13:05:05.000000000 +0200 @@ -83,6 +83,7 @@ 3.4+ 8.2+ 3.5+ 9+ 3.7+ 9.2+ +3.8+ 9.4+ ============ ============ Setup PROJ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/docs/past_versions.rst new/pyproj-3.7.2/docs/past_versions.rst --- old/pyproj-3.7.1/docs/past_versions.rst 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/docs/past_versions.rst 2025-08-14 13:05:05.000000000 +0200 @@ -1,7 +1,7 @@ Documentation Archive ===================== -- `3.7.0 <https://pyproj4.github.io/pyproj/3.7.0/>`_ +- `3.7.1 <https://pyproj4.github.io/pyproj/3.7.1/>`_ - `3.6.1 <https://pyproj4.github.io/pyproj/3.6.1/>`_ - `3.5.0 <https://pyproj4.github.io/pyproj/3.5.0/>`_ - `3.4.1 <https://pyproj4.github.io/pyproj/3.4.1/>`_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproj/__init__.py new/pyproj-3.7.2/pyproj/__init__.py --- old/pyproj-3.7.1/pyproj/__init__.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/pyproj/__init__.py 2025-08-14 13:05:05.000000000 +0200 @@ -71,21 +71,21 @@ transform, ) -__version__ = "3.7.1" +__version__ = "3.7.2" __all__ = [ - "Proj", - "Geod", "CRS", + "Geod", + "Proj", "Transformer", - "transform", - "itransform", - "pj_ellps", - "pj_list", "get_ellps_map", "get_prime_meridians_map", "get_proj_operations_map", "get_units_map", + "itransform", + "pj_ellps", + "pj_list", "show_versions", + "transform", ] __proj_version__ = PROJ_VERSION_STR proj_version_str = PROJ_VERSION_STR # pylint: disable=invalid-name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproj/_crs.pyx new/pyproj-3.7.2/pyproj/_crs.pyx --- old/pyproj-3.7.1/pyproj/_crs.pyx 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/pyproj/_crs.pyx 2025-08-14 13:05:05.000000000 +0200 @@ -2699,7 +2699,7 @@ .. warning:: You will likely lose important projection information when converting to a PROJ string from another format. See: - https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems # noqa: E501 + https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems Parameters ---------- @@ -2709,7 +2709,7 @@ Returns ------- str - """ + """ # noqa: E501 warnings.warn( "You will likely lose important projection information when " "converting to a PROJ string from another format. See: " diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproj/crs/__init__.py new/pyproj-3.7.2/pyproj/crs/__init__.py --- old/pyproj-3.7.1/pyproj/crs/__init__.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/pyproj/crs/__init__.py 2025-08-14 13:05:05.000000000 +0200 @@ -13,7 +13,7 @@ is_proj, is_wkt, ) -from pyproj.crs.crs import ( # noqa: F401 pylint: disable=unused-import +from pyproj.crs.crs import ( CRS, BoundCRS, CompoundCRS, @@ -25,3 +25,17 @@ VerticalCRS, ) from pyproj.exceptions import CRSError # noqa: F401 pylint: disable=unused-import + +__all__ = [ + "CRS", + "BoundCRS", + "CompoundCRS", + "CustomConstructorCRS", + "DerivedGeographicCRS", + "GeocentricCRS", + "GeographicCRS", + "ProjectedCRS", + "VerticalCRS", + "is_proj", + "is_wkt", +] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproj/crs/crs.py new/pyproj-3.7.2/pyproj/crs/crs.py --- old/pyproj-3.7.1/pyproj/crs/crs.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/pyproj/crs/crs.py 2025-08-14 13:05:05.000000000 +0200 @@ -172,15 +172,15 @@ The functionality is based on other fantastic projects: - * `rasterio <https://github.com/mapbox/rasterio/blob/c13f0943b95c0eaa36ff3f620bd91107aa67b381/rasterio/_crs.pyx>`_ # noqa: E501 - * `opendatacube <https://github.com/opendatacube/datacube-core/blob/83bae20d2a2469a6417097168fd4ede37fd2abe5/datacube/utils/geometry/_base.py>`_ # noqa: E501 + * `rasterio <https://github.com/mapbox/rasterio/blob/c13f0943b95c0eaa36ff3f620bd91107aa67b381/rasterio/_crs.pyx>`_ + * `opendatacube <https://github.com/opendatacube/datacube-core/blob/83bae20d2a2469a6417097168fd4ede37fd2abe5/datacube/utils/geometry/_base.py>`_ Attributes ---------- srs: str The string form of the user input used to create the CRS. - """ + """ # noqa: E501 def __init__(self, projparams: Any | None = None, **kwargs) -> None: """ @@ -579,14 +579,14 @@ .. warning:: You will likely lose important projection information when converting to a PROJ string from - another format. See: https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems # noqa: E501 + another format. See: https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems Returns ------- dict: PROJ params in dict format. - """ + """ # noqa: E501 proj_string = self.to_proj4() if proj_string is None: @@ -1280,7 +1280,7 @@ .. warning:: You will likely lose important projection information when converting to a PROJ string from another format. See: - https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems # noqa: E501 + https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems Parameters ---------- @@ -1291,7 +1291,7 @@ Returns ------- str - """ + """ # noqa: E501 proj = self._crs.to_proj4(version=version) if proj is None: raise CRSError("CRS cannot be converted to a PROJ string.") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproj/geod.py new/pyproj-3.7.2/pyproj/geod.py --- old/pyproj-3.7.1/pyproj/geod.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/pyproj/geod.py 2025-08-14 13:05:05.000000000 +0200 @@ -10,10 +10,10 @@ __all__ = [ "Geod", - "pj_ellps", - "geodesic_version_str", "GeodIntermediateFlag", "GeodIntermediateReturn", + "geodesic_version_str", + "pj_ellps", "reverse_azimuth", ] @@ -1031,6 +1031,10 @@ .. note:: lats should be in the range [-90 deg, 90 deg]. + .. note:: | There are a few limitations : + | - only works with areas up to half the size of the globe ; + | - certain large polygons may return negative values. + .. warning:: The area returned is signed with counter-clockwise (CCW) traversal being treated as positive. For polygons, holes should use the opposite traversal to the exterior (if the exterior is CCW, the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproj/transformer.py new/pyproj-3.7.2/pyproj/transformer.py --- old/pyproj-3.7.1/pyproj/transformer.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/pyproj/transformer.py 2025-08-14 13:05:05.000000000 +0200 @@ -3,11 +3,11 @@ """ __all__ = [ - "transform", - "itransform", + "AreaOfInterest", "Transformer", "TransformerGroup", - "AreaOfInterest", + "itransform", + "transform", ] import threading import warnings @@ -329,8 +329,7 @@ if not isinstance(transformer_maker, TransformerMaker): _clear_proj_error() raise ProjError( - "Transformer must be initialized using: " - "'from_crs' or 'from_pipeline'." + "Transformer must be initialized using: 'from_crs' or 'from_pipeline'." ) self._local = TransformerLocal() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproj.egg-info/PKG-INFO new/pyproj-3.7.2/pyproj.egg-info/PKG-INFO --- old/pyproj-3.7.1/pyproj.egg-info/PKG-INFO 2025-02-16 04:49:51.000000000 +0100 +++ new/pyproj-3.7.2/pyproj.egg-info/PKG-INFO 2025-08-14 13:05:26.000000000 +0200 @@ -1,11 +1,11 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: pyproj -Version: 3.7.1 +Version: 3.7.2 Summary: Python interface to PROJ (cartographic projections and coordinate transformations library) Home-page: https://github.com/pyproj4/pyproj Author-email: Jeff Whitaker <jeffrey.s.whita...@noaa.gov> Maintainer: pyproj contributors -License: MIT +License-Expression: MIT Project-URL: homepage, https://pyproj4.github.io/pyproj/ Project-URL: documentation, https://pyproj4.github.io/pyproj/ Project-URL: repository, https://github.com/pyproj4/pyproj @@ -13,24 +13,25 @@ Keywords: GIS,map,geospatial,coordinate-systems,coordinate-transformation,cartographic-projection,geodesic Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Science/Research -Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Scientific/Engineering :: GIS Classifier: Topic :: Scientific/Engineering :: Mathematics Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Typing :: Typed -Requires-Python: >=3.10 +Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta +Requires-Python: >=3.11 Description-Content-Type: text/markdown License-File: LICENSE License-File: LICENSE_proj Requires-Dist: certifi Dynamic: home-page +Dynamic: license-file  @@ -45,7 +46,6 @@ <a href="https://badge.fury.io/py/pyproj"><img alt="PyPI" src="https://badge.fury.io/py/pyproj.svg"></a> <a href="https://pepy.tech/project/pyproj"><img alt="Downloads" src="https://pepy.tech/badge/pyproj"></a> <a href="https://anaconda.org/conda-forge/pyproj"><img alt="Anaconda-Server Badge" src="https://anaconda.org/conda-forge/pyproj/badges/version.svg"></a> -<a href="https://github.com/python/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a> <a href="https://github.com/pre-commit/pre-commit"><img alt="pre-commit" src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white"></a> <a href="https://zenodo.org/badge/latestdoi/28607354"><img alt="DOI" src="https://zenodo.org/badge/28607354.svg"></a> </p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/pyproject.toml new/pyproj-3.7.2/pyproject.toml --- old/pyproj-3.7.1/pyproject.toml 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/pyproject.toml 2025-08-14 13:05:05.000000000 +0200 @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=61.0.0", "wheel", "cython>=3"] +requires = ["setuptools>=61.0.0", "wheel", "cython>=3.1"] build-backend = "setuptools.build_meta" [project] @@ -13,7 +13,8 @@ maintainers = [ {name = "pyproj contributors"}, ] -license = {text = "MIT"} +license = "MIT" +license-files = ["LICENSE", "LICENSE_proj"] keywords = [ "GIS", "map", @@ -26,20 +27,20 @@ classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", - "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3 :: Only", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: GIS", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Software Development :: Libraries :: Python Modules", "Typing :: Typed", + "Programming Language :: Python :: Free Threading :: 2 - Beta", ] -requires-python = ">=3.10" +requires-python = ">=3.11" dependencies = [ "certifi", ] @@ -62,12 +63,8 @@ [tool.setuptools.dynamic] version = {attr = "pyproj.__version__"} -[tool.black] -target_version = ["py310"] - [tool.ruff] line-length = 88 -target-version = "py310" fix = true [tool.ruff.lint] @@ -78,6 +75,8 @@ "F", # pycodestyle "E", "W", + # isort + "I", # flake8-2020 "YTT", # flake8-bugbear @@ -101,7 +100,7 @@ # implicit string concatenation "ISC", # type-checking imports - "TCH", + "TC", # comprehensions "C4", # pygrep-hooks @@ -147,7 +146,7 @@ # Rename unused "B007", # Move standard library import into a type-checking block - "TCH003", + "TC003", # Consider f-string instead of string join "FLY002", # Use a list comprehension to create a transformed list @@ -157,6 +156,6 @@ [tool.mypy] files = ["pyproj"] -python_version = "3.10" +python_version = "3.11" ignore_errors = false enable_error_code = "ignore-without-code" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/setup.py new/pyproj-3.7.2/setup.py --- old/pyproj-3.7.1/setup.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/setup.py 2025-08-14 13:05:05.000000000 +0200 @@ -8,7 +8,7 @@ from setuptools import Extension, setup -PROJ_MIN_VERSION = (9, 2, 0) +PROJ_MIN_VERSION = (9, 4, 0) CURRENT_FILE_PATH = Path(__file__).absolute().parent BASE_INTERNAL_PROJ_DIR = Path("proj_dir") INTERNAL_PROJ_DIR = CURRENT_FILE_PATH / "pyproj" / BASE_INTERNAL_PROJ_DIR @@ -142,6 +142,7 @@ "c_string_type": "str", "c_string_encoding": "utf-8", "embedsignature": True, + "freethreading_compatible": True, }, } if os.environ.get("PYPROJ_FULL_COVERAGE"): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/test/conftest.py new/pyproj-3.7.2/test/conftest.py --- old/pyproj-3.7.1/test/conftest.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/test/conftest.py 2025-08-14 13:05:05.000000000 +0200 @@ -12,8 +12,6 @@ _NETWORK_ENABLED = pyproj.network.is_network_enabled() PROJ_LOOSE_VERSION = version.parse(pyproj.__proj_version__) -PROJ_GTE_921 = PROJ_LOOSE_VERSION >= version.parse("9.2.1") -PROJ_GTE_93 = PROJ_LOOSE_VERSION >= version.parse("9.3.0") PROJ_GTE_941 = PROJ_LOOSE_VERSION >= version.parse("9.4.1") PROJ_GTE_95 = PROJ_LOOSE_VERSION >= version.parse("9.5.0") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/test/crs/test_crs.py new/pyproj-3.7.2/test/crs/test_crs.py --- old/pyproj-3.7.1/test/crs/test_crs.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/test/crs/test_crs.py 2025-08-14 13:05:05.000000000 +0200 @@ -20,7 +20,7 @@ from pyproj.enums import ProjVersion, WktVersion from pyproj.exceptions import CRSError from pyproj.transformer import TransformerGroup -from test.conftest import PROJ_GTE_921, PROJ_GTE_941, assert_can_pickle, grids_available +from test.conftest import PROJ_GTE_941, assert_can_pickle, grids_available class CustomCRS: @@ -427,10 +427,10 @@ "+k=1 +x_0=0 +y_0=0 +gamma=0 +ellps=WGS84 " "+towgs84=0,0,0,0,0,0,0 +units=m +no_defs" ) - datum_name = "Unknown based on WGS84 ellipsoid" - if PROJ_GTE_921: - datum_name = "Unknown based on WGS 84 ellipsoid" - assert crs.datum.name == f"{datum_name} using towgs84=0,0,0,0,0,0,0" + assert ( + crs.datum.name + == "Unknown based on WGS 84 ellipsoid using towgs84=0,0,0,0,0,0,0" + ) def test_epsg__not_found(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/test/test_awips221.py new/pyproj-3.7.2/test/test_awips221.py --- old/pyproj-3.7.1/test/test_awips221.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/test/test_awips221.py 2025-08-14 13:05:05.000000000 +0200 @@ -1,15 +1,11 @@ import array +from time import perf_counter import numpy from numpy.testing import assert_allclose from pyproj import Proj, __proj_version__ -try: - from time import perf_counter -except ImportError: - from time import clock as perf_counter - def test_awips221(): params = {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/test/test_doctest_wrapper.py new/pyproj-3.7.2/test/test_doctest_wrapper.py --- old/pyproj-3.7.1/test/test_doctest_wrapper.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/test/test_doctest_wrapper.py 2025-08-14 13:05:05.000000000 +0200 @@ -33,9 +33,9 @@ expected_failure_count = 6 # if the below line fails, doctests have failed - assert ( - failure_count == expected_failure_count - ), f"{failure_count} of the doctests failed" + assert failure_count == expected_failure_count, ( + f"{failure_count} of the doctests failed" + ) @pytest.mark.network diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/test/test_pickle.py new/pyproj-3.7.2/test/test_pickle.py --- old/pyproj-3.7.1/test/test_pickle.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/test/test_pickle.py 2025-08-14 13:05:05.000000000 +0200 @@ -5,17 +5,13 @@ import shutil import tempfile from contextlib import contextmanager +from time import perf_counter import numpy from numpy.testing import assert_allclose from pyproj import Proj -try: - from time import perf_counter -except ImportError: - from time import clock as perf_counter - @contextmanager def temporary_directory(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproj-3.7.1/test/test_transformer.py new/pyproj-3.7.2/test/test_transformer.py --- old/pyproj-3.7.1/test/test_transformer.py 2025-02-16 04:49:32.000000000 +0100 +++ new/pyproj-3.7.2/test/test_transformer.py 2025-08-14 13:05:05.000000000 +0200 @@ -18,7 +18,7 @@ from pyproj.enums import TransformDirection from pyproj.exceptions import ProjError from pyproj.transformer import AreaOfInterest, TransformerGroup -from test.conftest import PROJ_GTE_93, grids_available, proj_env, proj_network_env +from test.conftest import grids_available, proj_env, proj_network_env def test_tranform_wgs84_to_custom(): @@ -535,14 +535,6 @@ "Description: unavailable until proj_trans is called\n" "Area of Use:\n- undefined" ) - elif not PROJ_GTE_93: - assert trans_repr == ( - "<Unknown Transformer: noop>\n" - "Description: Transformation from EGM2008 height to WGS 84 " - "(ballpark vertical transformation, without ellipsoid height " - "to vertical height correction)\n" - "Area of Use:\n- undefined" - ) else: assert trans_repr == ( "<Other Coordinate Operation Transformer: noop>\n" @@ -600,8 +592,7 @@ assert transformer.scope is None assert [op.scope for op in transformer.operations] == [ "Engineering survey, topographic mapping.", - "Transformation of GDA94 coordinates that have been derived " - "through GNSS CORS.", + "Transformation of GDA94 coordinates that have been derived through GNSS CORS.", "Engineering survey, topographic mapping.", ] assert [str(op.remarks)[:5].strip() for op in transformer.operations] == [ @@ -1319,27 +1310,6 @@ ) -@pytest.mark.parametrize( - "input_crs,input_bounds,expected_bounds", - [ - ( - "ESRI:102036", - (-180.0, -90.0, 180.0, 1.3), - (0, -116576599, 0, 0), - ), - ("ESRI:54026", (-180.0, -90.0, 180.0, 90.0), (0, -179545824, 0, 179545824)), - ], -) -def test_transform_bounds__ignore_inf(input_crs, input_bounds, expected_bounds): - crs = CRS(input_crs) - transformer = Transformer.from_crs(crs.geodetic_crs, crs, always_xy=True) - assert_almost_equal( - transformer.transform_bounds(*input_bounds), - expected_bounds, - decimal=0, - ) - - def test_transform_bounds__ignore_inf_geographic(): crs_wkt = ( 'PROJCS["Interrupted_Goode_Homolosine",'