shapely 2.2.0rc1__tar.gz → 2.3.0.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of shapely might be problematic. Click here for more details.

Files changed (276) hide show
  1. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CHANGES.txt +1 -1
  2. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CITATION.cff +2 -2
  3. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/PKG-INFO +1 -1
  4. shapely-2.3.0.dev0/_version.py +4 -0
  5. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/conf.py +1 -1
  6. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/environment.yml +0 -3
  7. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/installation.rst +3 -3
  8. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/manual.rst +116 -71
  9. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/release/2.x.rst +23 -10
  10. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/pyproject.toml +10 -3
  11. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/coordinates.py +44 -36
  12. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos.c +1 -1
  13. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos.h +1 -1
  14. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_O_b.c +1 -1
  15. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/linear.py +4 -4
  16. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/ops.py +9 -4
  17. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_transform.py +12 -13
  18. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_coordinates.py +54 -16
  19. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_linear.py +18 -0
  20. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_misc.py +4 -0
  21. shapely-2.2.0rc1/_version.py +0 -4
  22. shapely-2.2.0rc1/setup.cfg +0 -7
  23. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CODE_OF_CONDUCT.md +0 -0
  24. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CONTRIBUTING.md +0 -0
  25. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CREDITS.txt +0 -0
  26. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/LICENSE.txt +0 -0
  27. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/README.rst +0 -0
  28. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/Makefile +0 -0
  29. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/_templates/autosummary/class.rst +0 -0
  30. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/buffer.py +0 -0
  31. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/buffer_single_side.py +0 -0
  32. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/convex_hull.py +0 -0
  33. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/coverage_simplify.py +0 -0
  34. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/difference.py +0 -0
  35. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/figures.py +0 -0
  36. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/geometrycollection.py +0 -0
  37. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/intersection-sym-difference.py +0 -0
  38. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/linearring.py +0 -0
  39. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/linestring.py +0 -0
  40. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/make_valid_geometrycollection.py +0 -0
  41. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/make_valid_methods.py +0 -0
  42. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/make_valid_multipolygon.py +0 -0
  43. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/minimum_rotated_rectangle.py +0 -0
  44. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/multilinestring.py +0 -0
  45. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/multipolygon.py +0 -0
  46. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/parallel_offset.py +0 -0
  47. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/parallel_offset_mitre.py +0 -0
  48. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/polygon.py +0 -0
  49. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/polygon2.py +0 -0
  50. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/rotate.py +0 -0
  51. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/scale.py +0 -0
  52. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/simplify.py +0 -0
  53. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/skew.py +0 -0
  54. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/triangulate.py +0 -0
  55. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/unary_union.py +0 -0
  56. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/union.py +0 -0
  57. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/voronoi_diagram.py +0 -0
  58. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/constructive.rst +0 -0
  59. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/coordinates.rst +0 -0
  60. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/coverage.rst +0 -0
  61. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/creation.rst +0 -0
  62. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/design.rst +0 -0
  63. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/faq.rst +0 -0
  64. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/geometry.rst +0 -0
  65. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/index.rst +0 -0
  66. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/io.rst +0 -0
  67. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/linear.rst +0 -0
  68. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/measurement.rst +0 -0
  69. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/migration.rst +0 -0
  70. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/migration_pygeos.rst +0 -0
  71. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/plotting.rst +0 -0
  72. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/predicates.rst +0 -0
  73. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/properties.rst +0 -0
  74. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/release/1.x.rst +0 -0
  75. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/release.rst +0 -0
  76. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/set_operations.rst +0 -0
  77. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/strtree.rst +0 -0
  78. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/testing.rst +0 -0
  79. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/generate_version.py +0 -0
  80. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/meson.build +0 -0
  81. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/__init__.py +0 -0
  82. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_coverage.py +0 -0
  83. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_enum.py +0 -0
  84. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geometry.py +0 -0
  85. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geometry_helpers.pyx +0 -0
  86. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geos.pxd +0 -0
  87. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geos.pyx +0 -0
  88. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_pygeos_api.pxd +0 -0
  89. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_ragged_array.py +0 -0
  90. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/affinity.py +0 -0
  91. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/__init__.py +0 -0
  92. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/_oriented_envelope.py +0 -0
  93. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/cga.py +0 -0
  94. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/polylabel.py +0 -0
  95. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/conftest.py +0 -0
  96. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/constructive.py +0 -0
  97. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/coords.py +0 -0
  98. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/creation.py +0 -0
  99. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/decorators.py +0 -0
  100. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/errors.py +0 -0
  101. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/__init__.py +0 -0
  102. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/base.py +0 -0
  103. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/collection.py +0 -0
  104. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/geo.py +0 -0
  105. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/linestring.py +0 -0
  106. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/multilinestring.py +0 -0
  107. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/multipoint.py +0 -0
  108. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/multipolygon.py +0 -0
  109. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/point.py +0 -0
  110. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/polygon.py +0 -0
  111. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geos.py +0 -0
  112. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/io.py +0 -0
  113. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/c_api.c +0 -0
  114. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/c_api.h +0 -0
  115. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/coords.c +0 -0
  116. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/coords.h +0 -0
  117. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/fast_loop_macros.h +0 -0
  118. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geom_arr.c +0 -0
  119. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geom_arr.h +0 -0
  120. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_O_b.h +0 -0
  121. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYO_b.c +0 -0
  122. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYO_b.h +0 -0
  123. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_O.c +0 -0
  124. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_O.h +0 -0
  125. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_Y.c +0 -0
  126. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_Y.h +0 -0
  127. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_b.c +0 -0
  128. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_b.h +0 -0
  129. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_d.c +0 -0
  130. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_d.h +0 -0
  131. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_Y.c +0 -0
  132. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_Y.h +0 -0
  133. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_b.c +0 -0
  134. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_b.h +0 -0
  135. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_d.c +0 -0
  136. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_d.h +0 -0
  137. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_O.c +0 -0
  138. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_O.h +0 -0
  139. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_Y.c +0 -0
  140. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_Y.h +0 -0
  141. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_b.c +0 -0
  142. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_b.h +0 -0
  143. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_d.c +0 -0
  144. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_d.h +0 -0
  145. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_i.c +0 -0
  146. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_i.h +0 -0
  147. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yd_Y.c +0 -0
  148. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yd_Y.h +0 -0
  149. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydb_Y.c +0 -0
  150. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydb_Y.h +0 -0
  151. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydd_b.c +0 -0
  152. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydd_b.h +0 -0
  153. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydddd_Y.c +0 -0
  154. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydddd_Y.h +0 -0
  155. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydi_Y.c +0 -0
  156. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydi_Y.h +0 -0
  157. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yi_Y.c +0 -0
  158. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yi_Y.h +0 -0
  159. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/kvec.h +0 -0
  160. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/lib.c +0 -0
  161. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/meson.build +0 -0
  162. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeom.c +0 -0
  163. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeom.h +0 -0
  164. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeos.c +0 -0
  165. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeos.h +0 -0
  166. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/signal_checks.c +0 -0
  167. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/signal_checks.h +0 -0
  168. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/strtree.c +0 -0
  169. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/strtree.h +0 -0
  170. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/ufuncs.c +0 -0
  171. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/ufuncs.h +0 -0
  172. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/vector.c +0 -0
  173. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/vector.h +0 -0
  174. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/measurement.py +0 -0
  175. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/meson.build +0 -0
  176. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/plotting.py +0 -0
  177. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/predicates.py +0 -0
  178. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/prepared.py +0 -0
  179. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/set_operations.py +0 -0
  180. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/speedups.py +0 -0
  181. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/strtree.py +0 -0
  182. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/testing.py +0 -0
  183. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/__init__.py +0 -0
  184. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/common.py +0 -0
  185. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/__init__.py +0 -0
  186. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_collection.py +0 -0
  187. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_coords.py +0 -0
  188. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_decimal.py +0 -0
  189. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_emptiness.py +0 -0
  190. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_equality.py +0 -0
  191. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_format.py +0 -0
  192. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_geometry_base.py +0 -0
  193. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_hash.py +0 -0
  194. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_linestring.py +0 -0
  195. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multi.py +0 -0
  196. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multilinestring.py +0 -0
  197. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multipoint.py +0 -0
  198. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multipolygon.py +0 -0
  199. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_point.py +0 -0
  200. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_polygon.py +0 -0
  201. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/__init__.py +0 -0
  202. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/conftest.py +0 -0
  203. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/emptypoint_1.8.5.post1.pickle +0 -0
  204. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/emptypolygon_1.8.5.post1.pickle +0 -0
  205. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/geometrycollection_1.8.5.post1.pickle +0 -0
  206. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/linearring_1.8.5.post1.pickle +0 -0
  207. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/linestring_1.8.5.post1.pickle +0 -0
  208. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/multilinestring_1.8.5.post1.pickle +0 -0
  209. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/multipoint_1.8.5.post1.pickle +0 -0
  210. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/multipolygon_1.8.5.post1.pickle +0 -0
  211. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/point2d_1.8.5.post1.pickle +0 -0
  212. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/point3d_1.8.5.post1.pickle +0 -0
  213. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/polygon_1.8.5.post1.pickle +0 -0
  214. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_affinity.py +0 -0
  215. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_box.py +0 -0
  216. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_buffer.py +0 -0
  217. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_cga.py +0 -0
  218. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_clip_by_rect.py +0 -0
  219. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_create_inconsistent_dimensionality.py +0 -0
  220. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_delaunay.py +0 -0
  221. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_empty_polygons.py +0 -0
  222. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_equality.py +0 -0
  223. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_geointerface.py +0 -0
  224. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_invalid_geometries.py +0 -0
  225. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_linear_referencing.py +0 -0
  226. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_linemerge.py +0 -0
  227. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_locale.py +0 -0
  228. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_make_valid.py +0 -0
  229. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_mapping.py +0 -0
  230. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_minimum_clearance.py +0 -0
  231. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_ndarrays.py +0 -0
  232. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_nearest.py +0 -0
  233. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_operations.py +0 -0
  234. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_operators.py +0 -0
  235. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_orient.py +0 -0
  236. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_parallel_offset.py +0 -0
  237. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_persist.py +0 -0
  238. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_pickle.py +0 -0
  239. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_polygonize.py +0 -0
  240. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_polylabel.py +0 -0
  241. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_predicates.py +0 -0
  242. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_prepared.py +0 -0
  243. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_products_z.py +0 -0
  244. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_shape.py +0 -0
  245. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_shared_paths.py +0 -0
  246. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_singularity.py +0 -0
  247. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_snap.py +0 -0
  248. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_split.py +0 -0
  249. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_substring.py +0 -0
  250. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_svg.py +0 -0
  251. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_union.py +0 -0
  252. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_validation.py +0 -0
  253. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_vectorized.py +0 -0
  254. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_voronoi_diagram.py +0 -0
  255. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_wkb.py +0 -0
  256. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_wkt.py +0 -0
  257. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/threading_test.py +0 -0
  258. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_constructive.py +0 -0
  259. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_coverage.py +0 -0
  260. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_creation.py +0 -0
  261. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_creation_indices.py +0 -0
  262. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_decorators.py +0 -0
  263. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_geometry.py +0 -0
  264. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_io.py +0 -0
  265. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_measurement.py +0 -0
  266. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_plotting.py +0 -0
  267. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_predicates.py +0 -0
  268. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_ragged_array.py +0 -0
  269. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_set_operations.py +0 -0
  270. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_strtree.py +0 -0
  271. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_testing.py +0 -0
  272. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/validation.py +0 -0
  273. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/vectorized/__init__.py +0 -0
  274. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/wkb.py +0 -0
  275. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/wkt.py +0 -0
  276. {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/versioneer.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Changes
2
2
  =======
3
3
 
4
- 2.2.0 (unreleased)
4
+ 2.2.0 (2026-10-07)
5
5
  ------------------
6
6
 
7
7
  Shapely 2.2.0 is a feature release with various new functions,
@@ -2,8 +2,8 @@ cff-version: 1.2.0
2
2
  message: "Please cite this software using these metadata."
3
3
  type: software
4
4
  title: Shapely
5
- version: "2.1.1"
6
- date-released: "2025-05-19"
5
+ version: "2.2.0"
6
+ date-released: "2026-10-07"
7
7
  doi: 10.5281/zenodo.5597138
8
8
  abstract: "Manipulation and analysis of geometric objects in the Cartesian plane."
9
9
  repository-artifact: https://pypi.org/project/Shapely
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shapely
3
- Version: 2.2.0rc1
3
+ Version: 2.3.0.dev0
4
4
  Summary: Manipulation and analysis of geometric objects
5
5
  Keywords: geometry,topology,gis
6
6
  Author: Sean Gillies
@@ -0,0 +1,4 @@
1
+ """Module to show version information for the installed package."""
2
+
3
+ __version__ = "2.3.0.dev0"
4
+ __git_version__ = "93c894ed95e0fcfc7c29d4eec78781ab2045b3bd"
@@ -12,7 +12,7 @@ os.environ["SPHINX_DOC_BUILD"] = "1"
12
12
  # -- Project information -----------------------------------------------------
13
13
 
14
14
  project = 'Shapely'
15
- copyright = '2011-2025, Sean Gillies and Shapely contributors'
15
+ copyright = '2011-2026, Sean Gillies and Shapely contributors'
16
16
 
17
17
  # The full version, including alpha/beta/rc tags.
18
18
  import shapely
@@ -5,12 +5,9 @@ dependencies:
5
5
  - python=3.12
6
6
  - geos=3.13
7
7
  - numpy
8
- - cython
9
8
  - sphinx-book-theme
10
9
  - sphinx-remove-toctrees
11
10
  - numpydoc=1.1
12
11
  - matplotlib
13
12
  - pip
14
13
  - pkg-config
15
- - meson
16
- - meson-python
@@ -115,13 +115,13 @@ modules happens in editable mode, add ``-Ceditable-verbose=true`` to the command
115
115
  Conda environments
116
116
  ^^^^^^^^^^^^^^^^^^
117
117
 
118
- Development within conda environments requires additional packages installed
119
- with the ``conda`` command, including pre-built distributions of GEOS.
118
+ When developing within a conda environment, it is recommended to install the
119
+ development dependencies using conda, including a pre-built distribution of GEOS.
120
120
  For example:
121
121
 
122
122
  .. code-block:: console
123
123
 
124
- $ conda create -n shapely-dev cython meson meson-python pkg-config ninja numpy geos pip pytest
124
+ $ conda create -n shapely-dev c-compiler cython meson meson-python pkg-config ninja numpy geos pip pytest
125
125
 
126
126
  Activate the environment and install shapely in editable mode using ``pip``:
127
127
 
@@ -318,7 +318,7 @@ Coordinate values are accessed via `coords`, `x`, `y`, `z`, and `m` properties.
318
318
  >>> point.y
319
319
  0.0
320
320
 
321
- Coordinates may also be sliced. `New in version 1.2.14`.
321
+ Coordinates may also be sliced.
322
322
 
323
323
  .. code-block:: pycon
324
324
 
@@ -386,7 +386,7 @@ The defining coordinate values are accessed via the `coords` property.
386
386
  >>> list(line.coords)
387
387
  [(0.0, 0.0), (1.0, 1.0)]
388
388
 
389
- Coordinates may also be sliced. `New in version 1.2.14`.
389
+ Coordinates may also be sliced.
390
390
 
391
391
  .. code-block:: pycon
392
392
 
@@ -566,8 +566,6 @@ the :func:`shapely.geometry.box()` function.
566
566
  Makes a rectangular polygon from the provided bounding box values, with
567
567
  counter-clockwise order by default.
568
568
 
569
- `New in version 1.2.9`.
570
-
571
569
  For example:
572
570
 
573
571
  .. code-block:: pycon
@@ -592,8 +590,6 @@ To obtain a polygon with a known orientation, use
592
590
  oriented counter-clockwise and the interior rings (holes) will be oriented
593
591
  clockwise.
594
592
 
595
- `New in version 1.2.10`.
596
-
597
593
  .. _collections:
598
594
 
599
595
  Collections
@@ -979,8 +975,6 @@ example will be shown for each.
979
975
  region with positive signed area). This method applies to `LinearRing`
980
976
  objects only.
981
977
 
982
- `New in version 1.2.10`.
983
-
984
978
  .. code-block:: pycon
985
979
 
986
980
  >>> LinearRing([(1,0), (1,1), (0,0)]).is_ccw
@@ -1854,8 +1848,6 @@ transform (`rotate`, `scale`, etc.). The functions can be used with all
1854
1848
  geometry types (except `GeometryCollection`), and 3D types are either
1855
1849
  preserved or supported by 3D affine transformations.
1856
1850
 
1857
- `New in version 1.2.17`.
1858
-
1859
1851
  .. function:: shapely.affinity.affine_transform(geom, matrix)
1860
1852
 
1861
1853
  Returns a transformed geometry using an affine transformation matrix.
@@ -2060,85 +2052,159 @@ Other Transformations
2060
2052
  Shapely supports map projections and other arbitrary transformations of
2061
2053
  geometric objects.
2062
2054
 
2063
- .. function:: shapely.ops.transform(func, geom)
2055
+ .. function:: shapely.transform(geom, func, include_z=False, interleaved=True)
2056
+ :no-index:
2064
2057
 
2065
- Applies `func` to all coordinates of `geom` and returns a new
2066
- geometry of the same type from the transformed coordinates.
2058
+ Apply a transformation `func` to all the coordinates of `geom`, and return
2059
+ a new geometry of the same type from the transformed coordinates.
2067
2060
 
2068
- `func` maps x, y, and optionally z to output xp, yp, zp. The input
2069
- parameters may be iterable types like lists or arrays or single values.
2070
- The output shall be of the same type: scalars in, scalars out;
2071
- lists in, lists out.
2061
+ By default, `func` maps a single 2D array of coordinates to a new 2D array
2062
+ of transformed coordinates (``func([[x1, y1], [x2, y2], ...])``).
2072
2063
 
2073
- `transform` tries to determine which kind of function was passed in
2074
- by calling `func` first with n iterables of coordinates, where n
2075
- is the dimensionality of the input geometry. If `func` raises
2076
- a `TypeError` when called with iterables as arguments,
2077
- then it will instead call `func` on each individual coordinate
2078
- in the geometry.
2064
+ If your function works on separate arrays of x, y, and optionally z
2065
+ coordinates, set `interleaved=False` (``func([x1, x2, ...], [y1, y2, ...])``).
2079
2066
 
2080
- `New in version 1.2.18`.
2067
+ Full reference: :func:`shapely.transform`
2081
2068
 
2082
- For example, here is an identity function applicable to both types of input
2083
- (scalar or array).
2069
+ For example, here is a simple function that returns shifted coordinates:
2084
2070
 
2085
2071
  .. code-block:: python
2086
2072
 
2087
- def id_func(x, y, z=None):
2088
- return tuple(filter(None, [x, y, z]))
2073
+ def shift_xy(coords):
2074
+ # NumPy applies this addition element-wise to all coordinates
2075
+ return coords + 2
2089
2076
 
2090
- g2 = transform(id_func, g1)
2077
+ g2 = shapely.transform(g1, shift_xy)
2091
2078
 
2079
+ or that swaps the x and y coordinates:
2092
2080
 
2093
- If using `pyproj>=2.1.0`, the preferred method to project geometries is:
2081
+ .. code-block:: python
2082
+
2083
+ def swap_xy(x, y):
2084
+ return y, x
2085
+
2086
+ # specify interleaved=False to pass separate x and y arrays to the function
2087
+ g3 = shapely.transform(g1, swap_xy, interleaved=False)
2088
+
2089
+ To reproject geometries using ``pyproj``:
2094
2090
 
2095
2091
  .. code-block:: python
2096
2092
 
2097
2093
  import pyproj
2098
2094
 
2099
- from shapely import Point
2100
- from shapely.ops import transform
2095
+ from shapely import Point, transform
2101
2096
 
2102
2097
  wgs84_pt = Point(-72.2495, 43.886)
2103
2098
 
2104
2099
  wgs84 = pyproj.CRS('EPSG:4326')
2105
2100
  utm = pyproj.CRS('EPSG:32618')
2106
2101
 
2107
- project = pyproj.Transformer.from_crs(wgs84, utm, always_xy=True).transform
2108
- utm_point = transform(project, wgs84_pt)
2102
+ transformer = pyproj.Transformer.from_crs(wgs84, utm, always_xy=True)
2103
+ # specify interleaved=False because the pyproj transform function expects
2104
+ # separate x, y arrays as input
2105
+ utm_point = transform(wgs84_pt, transformer.transform, interleaved=False)
2109
2106
 
2110
2107
  It is important to note that in the example above, the `always_xy` kwarg is
2111
2108
  required as Shapely only supports coordinates in X,Y order, and in PROJ 6 the
2112
2109
  WGS84 CRS uses the EPSG-defined Lat/Lon coordinate order instead of the
2113
2110
  expected Lon/Lat.
2114
2111
 
2115
- If using `pyproj < 2.1`, then the canonical example is:
2112
+ .. function:: shapely.transform_coordseq(geom, func, include_z=False, interleaved=True)
2113
+ :no-index:
2116
2114
 
2117
- .. code-block:: python
2115
+ Apply a transformation `func` to the coordinate sequences of a geometry.
2118
2116
 
2119
- from functools import partial
2120
- import pyproj
2117
+ Similar to :func:`shapely.transform`, the transformation function can
2118
+ accept a single 2D array of coordinates or separate x, y, and optionally
2119
+ z arrays (depending on the ``interleaved`` keyword).
2121
2120
 
2122
- from shapely.ops import transform
2121
+ The difference is that in case of :func:`~shapely.transform_coordseq`,
2122
+ the transformation function is called separately for each coordinate
2123
+ sequence (and thus only receiving the coordinates of one sequence at a
2124
+ time), instead of being called once for all coordinates. For polygons, this
2125
+ means per ring.
2123
2126
 
2124
- wgs84 = pyproj.Proj(init='epsg:4326')
2125
- utm = pyproj.Proj(init='epsg:32618')
2127
+ As a result, the number of coordinate pairs per coordinate sequence is
2128
+ allowed to change.
2126
2129
 
2127
- project = partial(
2128
- pyproj.transform,
2129
- wgs84,
2130
- utm)
2130
+ Full reference: :func:`shapely.transform_coordseq`
2131
2131
 
2132
- utm_point = transform(project, wgs84_pt)
2132
+ For example, reducing a linestring to only its first 2 points:
2133
2133
 
2134
- Lambda expressions such as the one in
2134
+ .. code-block:: pycon
2135
2135
 
2136
- .. code-block:: python
2136
+ >>> import shapely
2137
+ >>> line = LineString([(2, 2), (4, 4), (6, 6)])
2138
+ >>> shapely.transform_coordseq(line, lambda coords: coords[:2])
2139
+ <LINESTRING (2 2, 4 4)>
2137
2140
 
2138
- g2 = transform(lambda x, y, z=None: (x+1.0, y+1.0), g1)
2141
+ The :func:`~shapely.transform` function is the more performant option, so
2142
+ whenever your transformation function can be applied to all coordinates
2143
+ element-wise at once and does not change the number of coordinate pairs, we
2144
+ recommend using that.
2139
2145
 
2140
- also satisfy the requirements for `func`.
2146
+ Finally, there is a third `transform` function, which existed before the
2147
+ options described above, and is kept for backwards compatibility but is
2148
+ deprecated:
2141
2149
 
2150
+ .. function:: shapely.ops.transform(func, geom)
2151
+
2152
+ Applies `func` to all coordinates of `geom` and returns a new
2153
+ geometry of the same type from the transformed coordinates.
2154
+
2155
+ `func` maps x, y, and optionally z to output xp, yp, zp. The input
2156
+ parameters may be iterable types like lists or arrays or single values.
2157
+ The output shall be of the same type: scalars in, scalars out;
2158
+ lists in, lists out.
2159
+
2160
+ `transform` tries to determine which kind of function was passed in
2161
+ by calling `func` first with n iterables of coordinates, where n
2162
+ is the dimensionality of the input geometry. If `func` raises
2163
+ a `TypeError` when called with iterables as arguments,
2164
+ then it will instead call `func` on each individual coordinate
2165
+ in the geometry.
2166
+
2167
+ .. deprecated:: 2.2.0
2168
+
2169
+ **Updating to use** :func:`shapely.transform` **or** :func:`shapely.transform_coordseq`
2170
+
2171
+ If you are currently using ``shapely.ops.transform``, consider whether your
2172
+ transformation function can be applied to all coordinates at once
2173
+ independently. If that is the case, replace:
2174
+
2175
+ .. code-block:: python
2176
+
2177
+ geom2 = shapely.ops.transform(func, geom1)
2178
+
2179
+ with :func:`shapely.transform`:
2180
+
2181
+ .. code-block:: python
2182
+
2183
+ geom2 = shapely.transform(geom1, func, interleaved=False)
2184
+
2185
+ If your function has custom logic per coordinate sequence or changes the
2186
+ number of coordinate pairs, use :func:`shapely.transform_coordseq`.
2187
+
2188
+ If your function only works on scalar coordinate values, you can define
2189
+ a small wrapper function that accepts an array of coordinates, and
2190
+ applies your scalar function to each coordinate pair individually:
2191
+
2192
+ .. code-block:: python
2193
+
2194
+ import numpy as np
2195
+
2196
+ def func_scalar(x, y, z=None):
2197
+ if x < 0:
2198
+ x += 360
2199
+ return x, y
2200
+
2201
+ def func_wrapped(coords):
2202
+ return np.array([func_scalar(x, y) for x, y in coords])
2203
+
2204
+ geom2 = shapely.transform(geom1, func_wrapped)
2205
+
2206
+ Note: this scalar function is only for illustration purposes, and this
2207
+ specific operation can also be re-written to use vectorized array operations.
2142
2208
 
2143
2209
  Other Operations
2144
2210
  ================
@@ -2183,8 +2249,6 @@ Sequences of touching lines can be merged into `MultiLineStrings` or
2183
2249
  form part of polygon. Invalid ring lines form rings which are invalid
2184
2250
  (bowties, etc).
2185
2251
 
2186
- `New in version 1.2.18.`
2187
-
2188
2252
  .. code-block:: pycon
2189
2253
 
2190
2254
  >>> from shapely import polygonize_full
@@ -2233,8 +2297,6 @@ within a rectangle.
2233
2297
  not guaranteed to be valid. No exceptions will be raised for topological
2234
2298
  errors.
2235
2299
 
2236
- `New in version 1.7.`
2237
-
2238
2300
  .. code-block:: python
2239
2301
 
2240
2302
  >>> from shapely import clip_by_rect
@@ -2404,8 +2466,6 @@ a second geometry with a given tolerance.
2404
2466
  The `tolerance` argument specifies the minimum distance between vertices for
2405
2467
  them to be snapped.
2406
2468
 
2407
- `New in version 1.5.0`
2408
-
2409
2469
  .. code-block:: pycon
2410
2470
 
2411
2471
  >>> from shapely import snap
@@ -2431,8 +2491,6 @@ linear geometries.
2431
2491
  inputs. The second element is a MultiLineString containing shared paths with
2432
2492
  the opposite direction for the two inputs.
2433
2493
 
2434
- `New in version 1.6.0`
2435
-
2436
2494
  .. code-block:: pycon
2437
2495
 
2438
2496
  >>> from shapely import shared_paths
@@ -2564,8 +2622,6 @@ Diagnostics
2564
2622
 
2565
2623
  Returns a string explaining the validity or invalidity of the object.
2566
2624
 
2567
- `New in version 1.2.1`.
2568
-
2569
2625
  The messages may or may not have a representation of a problem point that can
2570
2626
  be parsed out.
2571
2627
 
@@ -2640,13 +2696,6 @@ Polylabel
2640
2696
  Finds the approximate location of the pole of inaccessibility for a given
2641
2697
  polygon. Based on Vladimir Agafonkin's polylabel_.
2642
2698
 
2643
- `New in version 1.6.0`
2644
-
2645
- .. note::
2646
-
2647
- Prior to 1.7 `polylabel` must be imported from `shapely.algorithms.polylabel`
2648
- instead of `shapely.ops`.
2649
-
2650
2699
  .. code-block:: pycon
2651
2700
 
2652
2701
  >>> from shapely.ops import polylabel
@@ -2672,8 +2721,6 @@ cannot add or remove geometries.
2672
2721
 
2673
2722
  References to these geometric objects are kept and stored in the R-tree.
2674
2723
 
2675
- `New in version 1.4.0`.
2676
-
2677
2724
  .. method:: strtree.query(geom)
2678
2725
  :noindex:
2679
2726
 
@@ -2864,8 +2911,6 @@ The GeoJSON-like mapping of a geometric object can be obtained using
2864
2911
  counterclockwise, and interior rings (holes) clockwise with
2865
2912
  :func:`shapely.orient_polygons`.
2866
2913
 
2867
- `New in version 1.2.3`.
2868
-
2869
2914
  For example, using the same `GeoThing` class:
2870
2915
 
2871
2916
  .. code-block:: pycon
@@ -4,7 +4,7 @@ Version 2.x
4
4
 
5
5
  .. _version-2-2-0:
6
6
 
7
- Version 2.2.0 (2026-09-xx)
7
+ Version 2.2.0 (2026-10-07)
8
8
  --------------------------
9
9
 
10
10
  New features
@@ -41,9 +41,9 @@ vectorized functions:
41
41
  of a geometry (#2313).
42
42
  - :func:`.coverage_clean`, which returns a cleaned version of geometries
43
43
  forming a polygonal coverage (#2454) (requires GEOS >= 3.14).
44
- - :func:`.split` to split a geometry by another geometry (uses GEOS>=3.15,
45
- falls back to the existing :func:`shapely.ops.split` implementation
46
- otherwise) (#2477).
44
+ - :func:`~shapely.split` to split a geometry by another geometry (uses
45
+ GEOS>=3.15, falls back to the existing :func:`shapely.ops.split`
46
+ implementation otherwise) (#2477).
47
47
 
48
48
  In addition, two other functions have been added to the top-level namespace:
49
49
 
@@ -67,25 +67,36 @@ Other improvements
67
67
  reused through a thread-local GEOS context (#2343).
68
68
 
69
69
  - :func:`.Polygon.from_bounds` now builds the ring in counterclockwise order,
70
- consistent with :function:`shapely.box`, so the result satisfies the GeoJSON
70
+ consistent with :func:`shapely.box`, so the result satisfies the GeoJSON
71
71
  right-hand rule (#2396).
72
72
 
73
73
  - Added return values to :func:`.prepare` and :func:`.destroy_prepared`. They
74
74
  now return whether something was done; calling `prepare` twice on a geometry
75
75
  will first return `True`, and then `False` (#2359).
76
76
 
77
- - The :func:`.split` and :func:`shapely.ops.split` functions now support
78
- splitting a (Multi)Polygon by another (Multi)Polygon, by using the boundary
79
- to split to with (similarly as was already done for splitting a
77
+ - The :func:`~shapely.split` and :func:`shapely.ops.split` functions now
78
+ support splitting a (Multi)Polygon by another (Multi)Polygon, by using the
79
+ boundary to split to with (similarly as was already done for splitting a
80
80
  (Multi)LineString with a polygon) (#2505).
81
81
 
82
82
  API changes
83
83
  ^^^^^^^^^^^
84
84
 
85
- - The :func:`shapely.ops.transform`` is deprecated. Use the more specific
85
+ - The :func:`shapely.ops.transform` is deprecated. Use the more specific
86
86
  :meth:`shapely.transform` (when your function works independently on all
87
87
  coordinates) or :meth:`shapely.transform_coordseq` (when your function works
88
- on the coordinate sequence directly) instead (#1902).
88
+ on the coordinate sequence directly) instead. See
89
+ :func:`the manual with update advice <shapely.ops.transform>` for more
90
+ details (#1902).
91
+
92
+ - The ``multithreading_enabled`` decorator is deprecated, and is also no longer
93
+ used internally. This decorator added overhead to each function call, while
94
+ only providing minimal and incomplete safety guarantees around multi-threaded
95
+ usage of shapely (#2338).
96
+ When sharing NumPy array of geometries between threads, it is the responsibility
97
+ of the user to ensure those geometries are not modified at the same time.
98
+ See the `multithreading section <https://github.com/shapely/shapely#multithreading>`__
99
+ for more details.
89
100
 
90
101
  Bug fixes
91
102
  ^^^^^^^^^
@@ -95,6 +106,8 @@ Bug fixes
95
106
  passing a sequence of non-polygons (#2461).
96
107
  - Fix a crash in :func:`.coverage_invalid_edges` on invalid (non-geometry)
97
108
  input (#2483).
109
+ - Fix keyword argument forwarding in :func:`shapely.line_interpolate_point`
110
+ and :func:`shapely.line_locate_point` (#2480).
98
111
 
99
112
  Packaging
100
113
  ^^^^^^^^^
@@ -2,7 +2,7 @@
2
2
  requires = [
3
3
  # keep in sync with a subset of [dependency-groups.build]
4
4
  "Cython",
5
- "meson-python>=0.15.0",
5
+ "meson-python>=0.15.0,!=0.22.0",
6
6
  "numpy>=1.26,<3",
7
7
  ]
8
8
  build-backend = "mesonpy"
@@ -46,7 +46,7 @@ build = [
46
46
  # keep in sync with a superset of [build-system.requires]
47
47
  "Cython",
48
48
  "meson>=1.2.1",
49
- "meson-python>=0.15.0",
49
+ "meson-python>=0.15.0,!=0.22.0",
50
50
  "ninja",
51
51
  "numpy>=1.26,<3",
52
52
  ]
@@ -184,7 +184,6 @@ ignore = [
184
184
 
185
185
  [tool.ruff.lint.isort]
186
186
  combine-as-imports = true
187
- extra-standard-library = ["packaging"]
188
187
 
189
188
  [tool.ruff.lint.pydocstyle]
190
189
  convention = "numpy"
@@ -197,3 +196,11 @@ allow-dunder-method-names = [
197
196
  "_repr_svg_",
198
197
  ]
199
198
  max-positional-args = 8 # TODO: revise with deprecate_positional changes
199
+
200
+ [tool.versioneer]
201
+ VCS = "git"
202
+ style = "pep440"
203
+ versionfile_source = "src/shapely/_version.py"
204
+ versionfile_build = "shapely/_version.py"
205
+ tag_prefix = ""
206
+ parentdir_prefix = "shapely-"