shapely 1.8.2__tar.gz → 1.8.4__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.
Files changed (148) hide show
  1. {Shapely-1.8.2 → Shapely-1.8.4}/CHANGES.txt +33 -1
  2. {Shapely-1.8.2/Shapely.egg-info → Shapely-1.8.4}/PKG-INFO +34 -5
  3. {Shapely-1.8.2 → Shapely-1.8.4/Shapely.egg-info}/PKG-INFO +34 -5
  4. Shapely-1.8.4/VERSION.txt +1 -0
  5. Shapely-1.8.4/pyproject.toml +6 -0
  6. Shapely-1.8.4/shapely/__init__.py +1 -0
  7. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/ctypes_declarations.py +10 -7
  8. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/base.py +10 -6
  9. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/proxy.py +5 -2
  10. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/strtree.py +20 -2
  11. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/topology.py +2 -1
  12. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geos_err_handler.py +8 -4
  13. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_linear_referencing.py +6 -3
  14. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_parallel_offset.py +4 -2
  15. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_shared_paths.py +15 -10
  16. Shapely-1.8.4/tests/test_split.py +247 -0
  17. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_strtree.py +29 -14
  18. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_substring.py +5 -2
  19. Shapely-1.8.2/VERSION.txt +0 -1
  20. Shapely-1.8.2/pyproject.toml +0 -2
  21. Shapely-1.8.2/shapely/__init__.py +0 -1
  22. Shapely-1.8.2/tests/test_split.py +0 -230
  23. {Shapely-1.8.2 → Shapely-1.8.4}/CREDITS.txt +0 -0
  24. {Shapely-1.8.2 → Shapely-1.8.4}/LICENSE.txt +0 -0
  25. {Shapely-1.8.2 → Shapely-1.8.4}/README.rst +0 -0
  26. {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/SOURCES.txt +0 -0
  27. {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/dependency_links.txt +0 -0
  28. {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/requires.txt +0 -0
  29. {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/top_level.txt +0 -0
  30. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/__init__.py +0 -0
  31. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/__about__.py +0 -0
  32. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/__init__.py +0 -0
  33. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/_compat.py +0 -0
  34. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/_structures.py +0 -0
  35. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/markers.py +0 -0
  36. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/requirements.py +0 -0
  37. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/specifiers.py +0 -0
  38. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/utils.py +0 -0
  39. {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/version.py +0 -0
  40. {Shapely-1.8.2 → Shapely-1.8.4}/docs/design.rst +0 -0
  41. {Shapely-1.8.2 → Shapely-1.8.4}/docs/index.rst +0 -0
  42. {Shapely-1.8.2 → Shapely-1.8.4}/docs/manual.rst +0 -0
  43. {Shapely-1.8.2 → Shapely-1.8.4}/docs/migration.rst +0 -0
  44. {Shapely-1.8.2 → Shapely-1.8.4}/docs/project.rst +0 -0
  45. {Shapely-1.8.2 → Shapely-1.8.4}/setup.cfg +0 -0
  46. {Shapely-1.8.2 → Shapely-1.8.4}/setup.py +0 -0
  47. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/_buildcfg.py +0 -0
  48. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/_geos.pxi +0 -0
  49. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/affinity.py +0 -0
  50. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/algorithms/__init__.py +0 -0
  51. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/algorithms/cga.py +0 -0
  52. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/algorithms/polylabel.py +0 -0
  53. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/coords.py +0 -0
  54. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/errors.py +0 -0
  55. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/__init__.py +0 -0
  56. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/dissolve.py +0 -0
  57. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/geoms.py +0 -0
  58. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/intersect.py +0 -0
  59. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/__init__.py +0 -0
  60. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/collection.py +0 -0
  61. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/conftest.py +0 -0
  62. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/geo.py +0 -0
  63. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/linestring.py +0 -0
  64. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/multilinestring.py +0 -0
  65. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/multipoint.py +0 -0
  66. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/multipolygon.py +0 -0
  67. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/point.py +0 -0
  68. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/polygon.py +0 -0
  69. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geos.py +0 -0
  70. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/impl.py +0 -0
  71. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/iterops.py +0 -0
  72. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/linref.py +0 -0
  73. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/ops.py +0 -0
  74. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/predicates.py +0 -0
  75. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/prepared.py +0 -0
  76. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/speedups/__init__.py +0 -0
  77. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/speedups/_speedups.pyx +0 -0
  78. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/validation.py +0 -0
  79. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/vectorized/__init__.py +0 -0
  80. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/vectorized/_vectorized.pyx +0 -0
  81. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/wkb.py +0 -0
  82. {Shapely-1.8.2 → Shapely-1.8.4}/shapely/wkt.py +0 -0
  83. {Shapely-1.8.2 → Shapely-1.8.4}/tests/__init__.py +0 -0
  84. {Shapely-1.8.2 → Shapely-1.8.4}/tests/conftest.py +0 -0
  85. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_affinity.py +0 -0
  86. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_binascii_hex.txt +0 -0
  87. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_box.py +0 -0
  88. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_buffer.py +0 -0
  89. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_cga.py +0 -0
  90. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_clip_by_rect.py +0 -0
  91. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_collection.py +0 -0
  92. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_coords.py +0 -0
  93. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_create_inconsistent_dimensionality.py +0 -0
  94. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_default_impl.py +0 -0
  95. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_delaunay.py +0 -0
  96. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_delegated.py +0 -0
  97. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_dlls.py +0 -0
  98. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_doctests.py +0 -0
  99. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_emptiness.py +0 -0
  100. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_empty_polygons.py +0 -0
  101. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_equality.py +0 -0
  102. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geointerface.py +0 -0
  103. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geometry_base.py +0 -0
  104. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geomseq.py +0 -0
  105. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_getitem.py +0 -0
  106. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_hash.py +0 -0
  107. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_invalid_geometries.py +0 -0
  108. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_iterops.py +0 -0
  109. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_linemerge.py +0 -0
  110. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_linestring.py +0 -0
  111. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_locale.py +0 -0
  112. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_make_valid.py +0 -0
  113. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_mapping.py +0 -0
  114. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_minimum_clearance.py +0 -0
  115. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_minimum_rotated_rectangle.py +0 -0
  116. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multi.py +0 -0
  117. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multilinestring.py +0 -0
  118. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multipoint.py +0 -0
  119. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multipolygon.py +0 -0
  120. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_ndarrays.py +0 -0
  121. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_nearest.py +0 -0
  122. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_operations.py +0 -0
  123. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_operators.py +0 -0
  124. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_orient.py +0 -0
  125. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_persist.py +0 -0
  126. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_pickle.py +0 -0
  127. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_point.py +0 -0
  128. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_polygon.py +0 -0
  129. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_polygonize.py +0 -0
  130. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_polylabel.py +0 -0
  131. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_predicates.py +0 -0
  132. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_prepared.py +0 -0
  133. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_products_z.py +0 -0
  134. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_shape.py +0 -0
  135. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_singularity.py +0 -0
  136. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_snap.py +0 -0
  137. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_styles.py +0 -0
  138. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_svg.py +0 -0
  139. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_transform.py +0 -0
  140. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_union.py +0 -0
  141. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_validation.py +0 -0
  142. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_vectorized.py +0 -0
  143. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_voronoi_diagram.py +0 -0
  144. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_wkb.py +0 -0
  145. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_wkt.py +0 -0
  146. {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_xy.py +0 -0
  147. {Shapely-1.8.2 → Shapely-1.8.4}/tests/threading_test.py +0 -0
  148. {Shapely-1.8.2 → Shapely-1.8.4}/tests/unpickle-strtree.py +0 -0
@@ -1,6 +1,38 @@
1
1
  Changes
2
2
  =======
3
3
 
4
+ 1.8.4 (2022-08-17)
5
+ ------------------
6
+
7
+ Bug fixes:
8
+
9
+ - The new c_geom_p type caused a regression and has been removed (#1487).
10
+
11
+ 1.8.3 (2022-08-16)
12
+ ------------------
13
+
14
+ Deprecations:
15
+
16
+ The STRtree class will be changed in 2.0.0 and will not be compatible with the
17
+ class in versions 1.8.x. This change obsoletes the deprecation announcement in
18
+ 1.8a3 (below).
19
+
20
+ Packaging:
21
+
22
+ Wheels for 1.8.3 published on PyPI include GEOS 3.10.3.
23
+
24
+ Bug fixes:
25
+
26
+ - The signature for GEOSMinimumClearance has been corrected, fixing an issue
27
+ affecting aarch64-darwin (#1480)
28
+ - Return and arg types have been corrected and made more strict for area,
29
+ length, and distance properties.
30
+ - A new c_geom_p type has been created to replace c_void_p when calling GEOS
31
+ functions (#1479).
32
+ - An incorrect polygon-line intersection (#1427) has been fixed in GEOS 3.10.3,
33
+ which will be included in wheels published to PyPI.
34
+ - GEOS buffer parameters are now destroyed, fixing a memory leak (#1440).
35
+
4
36
  1.8.2 (2022-05-03)
5
37
  ------------------
6
38
 
@@ -23,7 +55,7 @@ install from source.
23
55
  Packaging:
24
56
 
25
57
  Wheels for 1.8.1 published on PyPI include GEOS 3.10.2. This version is the
26
- best version of GDAL yet. Discrepancies in behavior compared to previous
58
+ best version of GEOS yet. Discrepancies in behavior compared to previous
27
59
  versions are considered to be improvements.
28
60
 
29
61
  For the first time, we will publish wheels for macos_arm64 (see PR #1310).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Shapely
3
- Version: 1.8.2
3
+ Version: 1.8.4
4
4
  Summary: Geometric objects, predicates, and operations
5
5
  Home-page: https://github.com/shapely/shapely
6
6
  Author: Sean Gillies
@@ -9,7 +9,6 @@ Maintainer: Sean Gillies
9
9
  Maintainer-email: sean.gillies@gmail.com
10
10
  License: BSD
11
11
  Keywords: geometry topology gis
12
- Platform: UNKNOWN
13
12
  Classifier: Development Status :: 5 - Production/Stable
14
13
  Classifier: Intended Audience :: Developers
15
14
  Classifier: Intended Audience :: Science/Research
@@ -332,6 +331,38 @@ U.S. National Endowment for the Humanities (https://www.neh.gov).
332
331
  Changes
333
332
  =======
334
333
 
334
+ 1.8.4 (2022-08-17)
335
+ ------------------
336
+
337
+ Bug fixes:
338
+
339
+ - The new c_geom_p type caused a regression and has been removed (#1487).
340
+
341
+ 1.8.3 (2022-08-16)
342
+ ------------------
343
+
344
+ Deprecations:
345
+
346
+ The STRtree class will be changed in 2.0.0 and will not be compatible with the
347
+ class in versions 1.8.x. This change obsoletes the deprecation announcement in
348
+ 1.8a3 (below).
349
+
350
+ Packaging:
351
+
352
+ Wheels for 1.8.3 published on PyPI include GEOS 3.10.3.
353
+
354
+ Bug fixes:
355
+
356
+ - The signature for GEOSMinimumClearance has been corrected, fixing an issue
357
+ affecting aarch64-darwin (#1480)
358
+ - Return and arg types have been corrected and made more strict for area,
359
+ length, and distance properties.
360
+ - A new c_geom_p type has been created to replace c_void_p when calling GEOS
361
+ functions (#1479).
362
+ - An incorrect polygon-line intersection (#1427) has been fixed in GEOS 3.10.3,
363
+ which will be included in wheels published to PyPI.
364
+ - GEOS buffer parameters are now destroyed, fixing a memory leak (#1440).
365
+
335
366
  1.8.2 (2022-05-03)
336
367
  ------------------
337
368
 
@@ -354,7 +385,7 @@ install from source.
354
385
  Packaging:
355
386
 
356
387
  Wheels for 1.8.1 published on PyPI include GEOS 3.10.2. This version is the
357
- best version of GDAL yet. Discrepancies in behavior compared to previous
388
+ best version of GEOS yet. Discrepancies in behavior compared to previous
358
389
  versions are considered to be improvements.
359
390
 
360
391
  For the first time, we will publish wheels for macos_arm64 (see PR #1310).
@@ -1224,5 +1255,3 @@ TODO: fill gap here
1224
1255
  1.0 RC1 (2008-01-14)
1225
1256
  --------------------
1226
1257
  - First release candidate
1227
-
1228
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Shapely
3
- Version: 1.8.2
3
+ Version: 1.8.4
4
4
  Summary: Geometric objects, predicates, and operations
5
5
  Home-page: https://github.com/shapely/shapely
6
6
  Author: Sean Gillies
@@ -9,7 +9,6 @@ Maintainer: Sean Gillies
9
9
  Maintainer-email: sean.gillies@gmail.com
10
10
  License: BSD
11
11
  Keywords: geometry topology gis
12
- Platform: UNKNOWN
13
12
  Classifier: Development Status :: 5 - Production/Stable
14
13
  Classifier: Intended Audience :: Developers
15
14
  Classifier: Intended Audience :: Science/Research
@@ -332,6 +331,38 @@ U.S. National Endowment for the Humanities (https://www.neh.gov).
332
331
  Changes
333
332
  =======
334
333
 
334
+ 1.8.4 (2022-08-17)
335
+ ------------------
336
+
337
+ Bug fixes:
338
+
339
+ - The new c_geom_p type caused a regression and has been removed (#1487).
340
+
341
+ 1.8.3 (2022-08-16)
342
+ ------------------
343
+
344
+ Deprecations:
345
+
346
+ The STRtree class will be changed in 2.0.0 and will not be compatible with the
347
+ class in versions 1.8.x. This change obsoletes the deprecation announcement in
348
+ 1.8a3 (below).
349
+
350
+ Packaging:
351
+
352
+ Wheels for 1.8.3 published on PyPI include GEOS 3.10.3.
353
+
354
+ Bug fixes:
355
+
356
+ - The signature for GEOSMinimumClearance has been corrected, fixing an issue
357
+ affecting aarch64-darwin (#1480)
358
+ - Return and arg types have been corrected and made more strict for area,
359
+ length, and distance properties.
360
+ - A new c_geom_p type has been created to replace c_void_p when calling GEOS
361
+ functions (#1479).
362
+ - An incorrect polygon-line intersection (#1427) has been fixed in GEOS 3.10.3,
363
+ which will be included in wheels published to PyPI.
364
+ - GEOS buffer parameters are now destroyed, fixing a memory leak (#1440).
365
+
335
366
  1.8.2 (2022-05-03)
336
367
  ------------------
337
368
 
@@ -354,7 +385,7 @@ install from source.
354
385
  Packaging:
355
386
 
356
387
  Wheels for 1.8.1 published on PyPI include GEOS 3.10.2. This version is the
357
- best version of GDAL yet. Discrepancies in behavior compared to previous
388
+ best version of GEOS yet. Discrepancies in behavior compared to previous
358
389
  versions are considered to be improvements.
359
390
 
360
391
  For the first time, we will publish wheels for macos_arm64 (see PR #1310).
@@ -1224,5 +1255,3 @@ TODO: fill gap here
1224
1255
  1.0 RC1 (2008-01-14)
1225
1256
  --------------------
1226
1257
  - First release candidate
1227
-
1228
-
@@ -0,0 +1 @@
1
+ 1.8.4
@@ -0,0 +1,6 @@
1
+ [build-system]
2
+ requires = [
3
+ "Cython>=0.29.24,<3",
4
+ "oldest-supported-numpy",
5
+ "setuptools<64",
6
+ ]
@@ -0,0 +1 @@
1
+ __version__ = "1.8.4"
@@ -132,6 +132,9 @@ def prototype(lgeos, geos_version):
132
132
  lgeos.GEOSBufferParams_create.restype = c_void_p
133
133
  lgeos.GEOSBufferParams_create.argtypes = None
134
134
 
135
+ lgeos.GEOSBufferParams_destroy.restype = None
136
+ lgeos.GEOSBufferParams_destroy.argtypes = [c_void_p]
137
+
135
138
  lgeos.GEOSBufferParams_setEndCapStyle.restype = c_int
136
139
  lgeos.GEOSBufferParams_setEndCapStyle.argtypes = [c_void_p, c_int]
137
140
 
@@ -393,17 +396,17 @@ def prototype(lgeos, geos_version):
393
396
 
394
397
  # Misc functions
395
398
 
396
- lgeos.GEOSArea.restype = c_double
397
- lgeos.GEOSArea.argtypes = [c_void_p, c_void_p]
399
+ lgeos.GEOSArea.restype = c_int
400
+ lgeos.GEOSArea.argtypes = [c_void_p, POINTER(c_double)]
398
401
 
399
402
  lgeos.GEOSLength.restype = c_int
400
- lgeos.GEOSLength.argtypes = [c_void_p, c_void_p]
403
+ lgeos.GEOSLength.argtypes = [c_void_p, POINTER(c_double)]
401
404
 
402
405
  lgeos.GEOSDistance.restype = c_int
403
- lgeos.GEOSDistance.argtypes = [c_void_p, c_void_p, c_void_p]
406
+ lgeos.GEOSDistance.argtypes = [c_void_p, c_void_p, POINTER(c_double)]
404
407
 
405
408
  lgeos.GEOSHausdorffDistance.restype = c_int
406
- lgeos.GEOSHausdorffDistance.argtypes = [c_void_p, c_void_p, c_void_p]
409
+ lgeos.GEOSHausdorffDistance.argtypes = [c_void_p, c_void_p, POINTER(c_double)]
407
410
 
408
411
  # Reader and Writer APIs
409
412
 
@@ -521,8 +524,8 @@ def prototype(lgeos, geos_version):
521
524
  c_void_p, py_object, c_void_p, lgeos.GEOSDistanceCallback, py_object]
522
525
  lgeos.GEOSSTRtree_nearest_generic.restype = c_void_p
523
526
 
524
- lgeos.GEOSMinimumClearance.argtypes = [c_void_p]
525
- lgeos.GEOSMinimumClearance.restype = c_double
527
+ lgeos.GEOSMinimumClearance.argtypes = [c_void_p, POINTER(c_double)]
528
+ lgeos.GEOSMinimumClearance.restype = c_int
526
529
 
527
530
  if geos_version >= (3, 8, 0):
528
531
  lgeos.GEOSMakeValid.restype = c_void_p
@@ -625,12 +625,16 @@ class BaseGeometry:
625
625
 
626
626
  if 'buffer_with_params' in self.impl:
627
627
  params = self._lgeos.GEOSBufferParams_create()
628
- self._lgeos.GEOSBufferParams_setEndCapStyle(params, cap_style)
629
- self._lgeos.GEOSBufferParams_setJoinStyle(params, join_style)
630
- self._lgeos.GEOSBufferParams_setMitreLimit(params, mitre_limit)
631
- self._lgeos.GEOSBufferParams_setQuadrantSegments(params, res)
632
- self._lgeos.GEOSBufferParams_setSingleSided(params, single_sided)
633
- return geom_factory(self.impl['buffer_with_params'](self, params, distance))
628
+ try:
629
+ self._lgeos.GEOSBufferParams_setEndCapStyle(params, cap_style)
630
+ self._lgeos.GEOSBufferParams_setJoinStyle(params, join_style)
631
+ self._lgeos.GEOSBufferParams_setMitreLimit(params, mitre_limit)
632
+ self._lgeos.GEOSBufferParams_setQuadrantSegments(params, res)
633
+ self._lgeos.GEOSBufferParams_setSingleSided(params, single_sided)
634
+ return geom_factory(self.impl['buffer_with_params'](self, params, distance))
635
+ finally:
636
+ if params:
637
+ self._lgeos.GEOSBufferParams_destroy(params)
634
638
 
635
639
  if cap_style == CAP_STYLE.round and join_style == JOIN_STYLE.round:
636
640
  return geom_factory(self.impl['buffer'](self, distance, res))
@@ -34,14 +34,17 @@ class CachingGeometryProxy:
34
34
  self.__geom__, n = self.factory(self.context)
35
35
  self._gtag = gtag
36
36
  return self.__geom__
37
-
37
+
38
38
  def gtag(self):
39
39
  return hash(repr(self.context))
40
40
 
41
41
  def __setattr__(self, name, value):
42
42
  # to override the custom one in BaseGeometry, so we don't warn
43
43
  # for the proxy classes, which are already deprecated itself
44
- object.__setattr__(self, name, value)
44
+ try:
45
+ object.__setattr__(self, name, value)
46
+ except AttributeError:
47
+ pass
45
48
 
46
49
 
47
50
  class PolygonProxy(CachingGeometryProxy):
@@ -22,7 +22,9 @@ import ctypes
22
22
  import logging
23
23
  from typing import Any, ItemsView, Iterable, Iterator, Optional, Sequence, Tuple, Union
24
24
  import sys
25
+ from warnings import warn
25
26
 
27
+ from shapely.errors import ShapelyDeprecationWarning
26
28
  from shapely.geometry.base import BaseGeometry
27
29
  from shapely.geos import lgeos
28
30
 
@@ -97,6 +99,19 @@ class STRtree:
97
99
  items: Iterable[Any] = None,
98
100
  node_capacity: int = 10,
99
101
  ):
102
+ if items is not None:
103
+ warn(
104
+ "STRtree will be changed in 2.0.0 and will not be compatible with versions < 2. "
105
+ "Specifically: the items keyword argument will be removed.",
106
+ ShapelyDeprecationWarning,
107
+ stacklevel=2,
108
+ )
109
+ else:
110
+ warn(
111
+ "STRtree will be changed in 2.0.0 and will not be compatible with versions < 2.",
112
+ ShapelyDeprecationWarning,
113
+ stacklevel=2,
114
+ )
100
115
  self.node_capacity = node_capacity
101
116
 
102
117
  # Keep references to geoms
@@ -247,8 +262,11 @@ class STRtree:
247
262
  if callback_userdata["exclusive"] and self._geoms[idx].equals(geom2):
248
263
  dist[0] = sys.float_info.max
249
264
  else:
250
- lgeos.GEOSDistance(self._geoms[idx]._geom, geom2._geom, dist)
251
-
265
+ lgeos.GEOSDistance(
266
+ self._geoms[idx]._geom,
267
+ geom2._geom,
268
+ dist,
269
+ )
252
270
  return 1
253
271
  except Exception:
254
272
  log.exception("Caught exception")
@@ -7,7 +7,8 @@ to GEOS functions via ctypes.
7
7
  These methods return ctypes objects that should be recast by the caller.
8
8
  """
9
9
 
10
- from ctypes import byref, c_double
10
+ from ctypes import byref, cast, c_double
11
+
11
12
  from shapely.geos import TopologicalError, lgeos
12
13
  from shapely.errors import InvalidGeometryError
13
14
 
@@ -19,7 +19,8 @@ def test_error_handler_exception(tmpdir):
19
19
  with pytest.raises(ReadingError):
20
20
  loads('POINT (LOLWUT)')
21
21
 
22
- log = open(logfile).read()
22
+ with open(logfile) as fobj:
23
+ log = fobj.read()
23
24
  assert "Expected number but encountered word: 'LOLWUT'" in log
24
25
 
25
26
 
@@ -33,7 +34,8 @@ def test_error_handler(tmpdir):
33
34
  # has *no* conversion specifiers.
34
35
  LineString([(0, 0), (2, 2)]).project(LineString([(1, 1), (1.5, 1.5)]))
35
36
 
36
- log = open(logfile).read()
37
+ with open(logfile) as fobj:
38
+ log = fobj.read()
37
39
  assert "third argument of GEOSProject_r must be Point" in log
38
40
 
39
41
 
@@ -57,7 +59,8 @@ def test_info_handler(tmpdir):
57
59
  g = loads('MULTIPOLYGON (((10 20, 10 120, 60 70, 30 70, 30 40, 60 40, 60 70, 90 20, 10 20)))')
58
60
  assert not g.is_valid
59
61
 
60
- log = open(logfile).read()
62
+ with open(logfile) as fobj:
63
+ log = fobj.read()
61
64
  assert "Ring Self-intersection at or near point 60 70" in log
62
65
 
63
66
 
@@ -71,5 +74,6 @@ def test_info_handler_quiet(tmpdir):
71
74
  g = loads('MULTIPOLYGON (((10 20, 10 120, 60 70, 30 70, 30 40, 60 40, 60 70, 90 20, 10 20)))')
72
75
  assert not g.is_valid
73
76
 
74
- log = open(logfile).read()
77
+ with open(logfile) as fobj:
78
+ log = fobj.read()
75
79
  assert "Ring Self-intersection at or near point 60 70" not in log
@@ -1,5 +1,7 @@
1
+ import pytest
2
+
1
3
  from . import unittest
2
- from shapely.errors import GeometryTypeError
4
+ from shapely.errors import GeometryTypeError, ShapelyDeprecationWarning
3
5
  from shapely.geometry import Point, LineString, MultiLineString
4
6
 
5
7
 
@@ -28,8 +30,9 @@ class LinearReferencingTestCase(unittest.TestCase):
28
30
  self.multiline.project(self.point, normalized=True), 0.125)
29
31
 
30
32
  def test_not_supported_project(self):
31
- with self.assertRaises(GeometryTypeError):
32
- self.point.buffer(1.0).project(self.point)
33
+ with pytest.warns(ShapelyDeprecationWarning):
34
+ with self.assertRaises(GeometryTypeError):
35
+ self.point.buffer(1.0).project(self.point)
33
36
 
34
37
  def test_not_on_line_project(self):
35
38
  # Points that aren't on the line project to 0.
@@ -9,9 +9,11 @@ class OperationsTestCase(unittest.TestCase):
9
9
  left = line1.parallel_offset(5, 'left')
10
10
  self.assertEqual(left, LineString([(0, 5), (10, 5)]))
11
11
  right = line1.parallel_offset(5, 'right')
12
- self.assertEqual(right, LineString([(10, -5), (0, -5)]))
12
+ # using spatial equality because the order of coordinates is not guaranteed
13
+ # (GEOS 3.11 changed this, see https://github.com/shapely/shapely/issues/1436)
14
+ assert right.equals(LineString([(10, -5), (0, -5)]))
13
15
  right = line1.parallel_offset(-5, 'left')
14
- self.assertEqual(right, LineString([(10, -5), (0, -5)]))
16
+ assert right.equals(LineString([(10, -5), (0, -5)]))
15
17
  left = line1.parallel_offset(-5, 'right')
16
18
  self.assertEqual(left, LineString([(0, 5), (10, 5)]))
17
19
 
@@ -1,16 +1,19 @@
1
+ import pytest
2
+
1
3
  from . import unittest
2
4
 
3
- from shapely.errors import GeometryTypeError
5
+ from shapely.errors import GeometryTypeError, ShapelyDeprecationWarning
4
6
  from shapely.geometry import Point, LineString, Polygon, MultiLineString, \
5
7
  GeometryCollection
6
8
  from shapely.ops import shared_paths
7
9
 
10
+
8
11
  class SharedPaths(unittest.TestCase):
9
12
  def test_shared_paths_forward(self):
10
13
  g1 = LineString([(0, 0), (10, 0), (10, 5), (20, 5)])
11
14
  g2 = LineString([(5, 0), (15, 0)])
12
15
  result = shared_paths(g1, g2)
13
-
16
+
14
17
  self.assertTrue(isinstance(result, GeometryCollection))
15
18
  self.assertTrue(len(result.geoms) == 2)
16
19
  a, b = result.geoms
@@ -23,7 +26,7 @@ class SharedPaths(unittest.TestCase):
23
26
  g1 = LineString([(0, 0), (10, 0), (10, 5), (20, 5)])
24
27
  g2 = LineString([(15, 0), (5, 0)])
25
28
  result = shared_paths(g1, g2)
26
-
29
+
27
30
  self.assertTrue(isinstance(result, GeometryCollection))
28
31
  self.assertTrue(len(result.geoms) == 2)
29
32
  a, b = result.geoms
@@ -31,13 +34,15 @@ class SharedPaths(unittest.TestCase):
31
34
  self.assertTrue(len(b.geoms) == 1)
32
35
  self.assertEqual(b.geoms[0].coords[:], [(5, 0), (10, 0)])
33
36
  self.assertTrue(a.is_empty)
34
-
37
+
35
38
  def test_wrong_type(self):
36
39
  g1 = Point(0, 0)
37
40
  g2 = LineString([(5, 0), (15, 0)])
38
-
39
- with self.assertRaises(GeometryTypeError):
40
- result = shared_paths(g1, g2)
41
-
42
- with self.assertRaises(GeometryTypeError):
43
- result = shared_paths(g2, g1)
41
+
42
+ with pytest.warns(ShapelyDeprecationWarning):
43
+ with self.assertRaises(GeometryTypeError):
44
+ result = shared_paths(g1, g2)
45
+
46
+ with pytest.warns(ShapelyDeprecationWarning):
47
+ with self.assertRaises(GeometryTypeError):
48
+ result = shared_paths(g2, g1)