shapely 1.8.3__tar.gz → 1.8.5__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.
- {Shapely-1.8.3 → Shapely-1.8.5}/CHANGES.txt +21 -0
- {Shapely-1.8.3/Shapely.egg-info → Shapely-1.8.5}/PKG-INFO +22 -1
- {Shapely-1.8.3 → Shapely-1.8.5/Shapely.egg-info}/PKG-INFO +22 -1
- Shapely-1.8.5/VERSION.txt +1 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/docs/migration.rst +2 -2
- Shapely-1.8.5/pyproject.toml +17 -0
- Shapely-1.8.5/shapely/__init__.py +1 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/ctypes_declarations.py +18 -40
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/base.py +5 -5
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/collection.py +1 -2
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/linestring.py +3 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/multilinestring.py +6 -7
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/multipoint.py +2 -3
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/multipolygon.py +4 -5
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/polygon.py +5 -7
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geos.py +1 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/ops.py +13 -29
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/strtree.py +2 -3
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/topology.py +2 -5
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_buffer.py +9 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_parallel_offset.py +10 -1
- Shapely-1.8.3/VERSION.txt +0 -1
- Shapely-1.8.3/pyproject.toml +0 -6
- Shapely-1.8.3/shapely/__init__.py +0 -1
- {Shapely-1.8.3 → Shapely-1.8.5}/CREDITS.txt +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/LICENSE.txt +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/README.rst +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/Shapely.egg-info/SOURCES.txt +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/Shapely.egg-info/dependency_links.txt +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/Shapely.egg-info/requires.txt +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/Shapely.egg-info/top_level.txt +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/__about__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/_compat.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/_structures.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/markers.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/requirements.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/specifiers.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/utils.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/_vendor/packaging/version.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/docs/design.rst +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/docs/index.rst +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/docs/manual.rst +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/docs/project.rst +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/setup.cfg +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/setup.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/_buildcfg.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/_geos.pxi +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/affinity.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/algorithms/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/algorithms/cga.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/algorithms/polylabel.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/coords.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/errors.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/examples/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/examples/dissolve.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/examples/geoms.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/examples/intersect.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/conftest.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/geo.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/point.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/geometry/proxy.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/impl.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/iterops.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/linref.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/predicates.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/prepared.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/speedups/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/speedups/_speedups.pyx +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/validation.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/vectorized/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/vectorized/_vectorized.pyx +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/wkb.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/shapely/wkt.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/__init__.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/conftest.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_affinity.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_binascii_hex.txt +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_box.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_cga.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_clip_by_rect.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_collection.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_coords.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_create_inconsistent_dimensionality.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_default_impl.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_delaunay.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_delegated.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_dlls.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_doctests.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_emptiness.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_empty_polygons.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_equality.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_geointerface.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_geometry_base.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_geomseq.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_geos_err_handler.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_getitem.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_hash.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_invalid_geometries.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_iterops.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_linear_referencing.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_linemerge.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_linestring.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_locale.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_make_valid.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_mapping.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_minimum_clearance.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_minimum_rotated_rectangle.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_multi.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_multilinestring.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_multipoint.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_multipolygon.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_ndarrays.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_nearest.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_operations.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_operators.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_orient.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_persist.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_pickle.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_point.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_polygon.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_polygonize.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_polylabel.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_predicates.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_prepared.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_products_z.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_shape.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_shared_paths.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_singularity.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_snap.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_split.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_strtree.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_styles.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_substring.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_svg.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_transform.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_union.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_validation.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_vectorized.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_voronoi_diagram.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_wkb.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_wkt.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/test_xy.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/threading_test.py +0 -0
- {Shapely-1.8.3 → Shapely-1.8.5}/tests/unpickle-strtree.py +0 -0
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
Changes
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
1.8.5 (2022-10-12)
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
Packaging:
|
|
8
|
+
|
|
9
|
+
Python 3.11 wheels have been added to the matrix for all platforms.
|
|
10
|
+
|
|
11
|
+
Bug fixes:
|
|
12
|
+
|
|
13
|
+
- Assign _lgeos in the macos frozen app check, fixing a bug introduced in 1.8.2
|
|
14
|
+
(#1528).
|
|
15
|
+
- An exception is now raised when nan is passed to buffer and parallel_offset,
|
|
16
|
+
preventing segmentation faults (#1516).
|
|
17
|
+
|
|
18
|
+
1.8.4 (2022-08-17)
|
|
19
|
+
------------------
|
|
20
|
+
|
|
21
|
+
Bug fixes:
|
|
22
|
+
|
|
23
|
+
- The new c_geom_p type caused a regression and has been removed (#1487).
|
|
24
|
+
|
|
4
25
|
1.8.3 (2022-08-16)
|
|
5
26
|
------------------
|
|
6
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.5
|
|
4
4
|
Summary: Geometric objects, predicates, and operations
|
|
5
5
|
Home-page: https://github.com/shapely/shapely
|
|
6
6
|
Author: Sean Gillies
|
|
@@ -331,6 +331,27 @@ U.S. National Endowment for the Humanities (https://www.neh.gov).
|
|
|
331
331
|
Changes
|
|
332
332
|
=======
|
|
333
333
|
|
|
334
|
+
1.8.5 (2022-10-12)
|
|
335
|
+
------------------
|
|
336
|
+
|
|
337
|
+
Packaging:
|
|
338
|
+
|
|
339
|
+
Python 3.11 wheels have been added to the matrix for all platforms.
|
|
340
|
+
|
|
341
|
+
Bug fixes:
|
|
342
|
+
|
|
343
|
+
- Assign _lgeos in the macos frozen app check, fixing a bug introduced in 1.8.2
|
|
344
|
+
(#1528).
|
|
345
|
+
- An exception is now raised when nan is passed to buffer and parallel_offset,
|
|
346
|
+
preventing segmentation faults (#1516).
|
|
347
|
+
|
|
348
|
+
1.8.4 (2022-08-17)
|
|
349
|
+
------------------
|
|
350
|
+
|
|
351
|
+
Bug fixes:
|
|
352
|
+
|
|
353
|
+
- The new c_geom_p type caused a regression and has been removed (#1487).
|
|
354
|
+
|
|
334
355
|
1.8.3 (2022-08-16)
|
|
335
356
|
------------------
|
|
336
357
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.5
|
|
4
4
|
Summary: Geometric objects, predicates, and operations
|
|
5
5
|
Home-page: https://github.com/shapely/shapely
|
|
6
6
|
Author: Sean Gillies
|
|
@@ -331,6 +331,27 @@ U.S. National Endowment for the Humanities (https://www.neh.gov).
|
|
|
331
331
|
Changes
|
|
332
332
|
=======
|
|
333
333
|
|
|
334
|
+
1.8.5 (2022-10-12)
|
|
335
|
+
------------------
|
|
336
|
+
|
|
337
|
+
Packaging:
|
|
338
|
+
|
|
339
|
+
Python 3.11 wheels have been added to the matrix for all platforms.
|
|
340
|
+
|
|
341
|
+
Bug fixes:
|
|
342
|
+
|
|
343
|
+
- Assign _lgeos in the macos frozen app check, fixing a bug introduced in 1.8.2
|
|
344
|
+
(#1528).
|
|
345
|
+
- An exception is now raised when nan is passed to buffer and parallel_offset,
|
|
346
|
+
preventing segmentation faults (#1516).
|
|
347
|
+
|
|
348
|
+
1.8.4 (2022-08-17)
|
|
349
|
+
------------------
|
|
350
|
+
|
|
351
|
+
Bug fixes:
|
|
352
|
+
|
|
353
|
+
- The new c_geom_p type caused a regression and has been removed (#1487).
|
|
354
|
+
|
|
334
355
|
1.8.3 (2022-08-16)
|
|
335
356
|
------------------
|
|
336
357
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.8.5
|
|
@@ -261,9 +261,9 @@ manager that can be copied into your project::
|
|
|
261
261
|
import contextlib
|
|
262
262
|
import shapely
|
|
263
263
|
import warnings
|
|
264
|
-
from
|
|
264
|
+
from packaging import version # https://packaging.pypa.io/
|
|
265
265
|
|
|
266
|
-
SHAPELY_GE_20 =
|
|
266
|
+
SHAPELY_GE_20 = version.parse(shapely.__version__) >= version.parse("2.0a1")
|
|
267
267
|
|
|
268
268
|
try:
|
|
269
269
|
from shapely.errors import ShapelyDeprecationWarning as shapely_warning
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = [
|
|
3
|
+
"Cython>=0.29.24,<3",
|
|
4
|
+
"oldest-supported-numpy",
|
|
5
|
+
"setuptools<64",
|
|
6
|
+
]
|
|
7
|
+
|
|
8
|
+
[tool.cibuildwheel]
|
|
9
|
+
build = ["cp37-*", "cp38-*", "cp39-*", "cp310-*", "cp311-*"]
|
|
10
|
+
skip = "pp* *musllinux*"
|
|
11
|
+
manylinux-x86_64-image = "manylinux2014"
|
|
12
|
+
manylinux-i686-image = "manylinux2014"
|
|
13
|
+
|
|
14
|
+
[[tool.cibuildwheel.overrides]]
|
|
15
|
+
select = "cp3{7,8,9,10}-*"
|
|
16
|
+
manylinux-x86_64-image = "manylinux2010"
|
|
17
|
+
manylinux-i686-image = "manylinux2010"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.8.5"
|
|
@@ -3,19 +3,8 @@
|
|
|
3
3
|
See header file: geos-x.y.z/capi/geos_c.h
|
|
4
4
|
'''
|
|
5
5
|
|
|
6
|
-
from ctypes import
|
|
7
|
-
|
|
8
|
-
POINTER,
|
|
9
|
-
Structure,
|
|
10
|
-
c_void_p,
|
|
11
|
-
c_char_p,
|
|
12
|
-
c_size_t,
|
|
13
|
-
c_byte,
|
|
14
|
-
c_uint,
|
|
15
|
-
c_int,
|
|
16
|
-
c_double,
|
|
17
|
-
py_object,
|
|
18
|
-
)
|
|
6
|
+
from ctypes import CFUNCTYPE, POINTER, c_void_p, c_char_p, \
|
|
7
|
+
c_size_t, c_byte, c_uint, c_int, c_double, py_object
|
|
19
8
|
|
|
20
9
|
from .errors import UnsupportedGEOSVersionError
|
|
21
10
|
|
|
@@ -31,13 +20,6 @@ class allocated_c_char_p(c_char_p):
|
|
|
31
20
|
pass
|
|
32
21
|
|
|
33
22
|
|
|
34
|
-
class GEOSGeom_t(Structure):
|
|
35
|
-
pass
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
c_geom_p = POINTER(GEOSGeom_t)
|
|
39
|
-
|
|
40
|
-
|
|
41
23
|
def prototype(lgeos, geos_version):
|
|
42
24
|
"""Protype functions in geos_c.h for different version of GEOS
|
|
43
25
|
|
|
@@ -173,25 +155,25 @@ def prototype(lgeos, geos_version):
|
|
|
173
155
|
|
|
174
156
|
# Geometry constructors
|
|
175
157
|
|
|
176
|
-
lgeos.GEOSGeom_createPoint.restype =
|
|
158
|
+
lgeos.GEOSGeom_createPoint.restype = c_void_p
|
|
177
159
|
lgeos.GEOSGeom_createPoint.argtypes = [c_void_p]
|
|
178
160
|
|
|
179
|
-
lgeos.GEOSGeom_createLinearRing.restype =
|
|
161
|
+
lgeos.GEOSGeom_createLinearRing.restype = c_void_p
|
|
180
162
|
lgeos.GEOSGeom_createLinearRing.argtypes = [c_void_p]
|
|
181
163
|
|
|
182
|
-
lgeos.GEOSGeom_createLineString.restype =
|
|
164
|
+
lgeos.GEOSGeom_createLineString.restype = c_void_p
|
|
183
165
|
lgeos.GEOSGeom_createLineString.argtypes = [c_void_p]
|
|
184
166
|
|
|
185
|
-
lgeos.GEOSGeom_createPolygon.restype =
|
|
186
|
-
lgeos.GEOSGeom_createPolygon.argtypes = [
|
|
167
|
+
lgeos.GEOSGeom_createPolygon.restype = c_void_p
|
|
168
|
+
lgeos.GEOSGeom_createPolygon.argtypes = [c_void_p, c_void_p, c_uint]
|
|
187
169
|
|
|
188
|
-
lgeos.GEOSGeom_createCollection.restype =
|
|
189
|
-
lgeos.GEOSGeom_createCollection.argtypes = [c_int,
|
|
170
|
+
lgeos.GEOSGeom_createCollection.restype = c_void_p
|
|
171
|
+
lgeos.GEOSGeom_createCollection.argtypes = [c_int, c_void_p, c_uint]
|
|
190
172
|
|
|
191
|
-
lgeos.GEOSGeom_createEmptyCollection.restype =
|
|
173
|
+
lgeos.GEOSGeom_createEmptyCollection.restype = c_void_p
|
|
192
174
|
lgeos.GEOSGeom_createEmptyCollection.argtypes = [c_int]
|
|
193
175
|
|
|
194
|
-
lgeos.GEOSGeom_clone.restype =
|
|
176
|
+
lgeos.GEOSGeom_clone.restype = c_void_p
|
|
195
177
|
lgeos.GEOSGeom_clone.argtypes = [c_void_p]
|
|
196
178
|
|
|
197
179
|
# Memory management
|
|
@@ -243,13 +225,9 @@ def prototype(lgeos, geos_version):
|
|
|
243
225
|
lgeos.GEOSPolygonize.restype = c_void_p
|
|
244
226
|
lgeos.GEOSPolygonize.argtypes = [c_void_p, c_uint]
|
|
245
227
|
|
|
246
|
-
lgeos.GEOSPolygonize_full.restype =
|
|
228
|
+
lgeos.GEOSPolygonize_full.restype = c_void_p
|
|
247
229
|
lgeos.GEOSPolygonize_full.argtypes = [
|
|
248
|
-
|
|
249
|
-
POINTER(c_geom_p),
|
|
250
|
-
POINTER(c_geom_p),
|
|
251
|
-
POINTER(c_geom_p),
|
|
252
|
-
]
|
|
230
|
+
c_void_p, c_void_p, c_void_p, c_void_p]
|
|
253
231
|
|
|
254
232
|
if geos_version >= (3, 4, 0):
|
|
255
233
|
lgeos.GEOSDelaunayTriangulation.restype = c_void_p
|
|
@@ -419,16 +397,16 @@ def prototype(lgeos, geos_version):
|
|
|
419
397
|
# Misc functions
|
|
420
398
|
|
|
421
399
|
lgeos.GEOSArea.restype = c_int
|
|
422
|
-
lgeos.GEOSArea.argtypes = [
|
|
400
|
+
lgeos.GEOSArea.argtypes = [c_void_p, POINTER(c_double)]
|
|
423
401
|
|
|
424
402
|
lgeos.GEOSLength.restype = c_int
|
|
425
|
-
lgeos.GEOSLength.argtypes = [
|
|
403
|
+
lgeos.GEOSLength.argtypes = [c_void_p, POINTER(c_double)]
|
|
426
404
|
|
|
427
405
|
lgeos.GEOSDistance.restype = c_int
|
|
428
|
-
lgeos.GEOSDistance.argtypes = [
|
|
406
|
+
lgeos.GEOSDistance.argtypes = [c_void_p, c_void_p, POINTER(c_double)]
|
|
429
407
|
|
|
430
408
|
lgeos.GEOSHausdorffDistance.restype = c_int
|
|
431
|
-
lgeos.GEOSHausdorffDistance.argtypes = [
|
|
409
|
+
lgeos.GEOSHausdorffDistance.argtypes = [c_void_p, c_void_p, POINTER(c_double)]
|
|
432
410
|
|
|
433
411
|
# Reader and Writer APIs
|
|
434
412
|
|
|
@@ -546,7 +524,7 @@ def prototype(lgeos, geos_version):
|
|
|
546
524
|
c_void_p, py_object, c_void_p, lgeos.GEOSDistanceCallback, py_object]
|
|
547
525
|
lgeos.GEOSSTRtree_nearest_generic.restype = c_void_p
|
|
548
526
|
|
|
549
|
-
lgeos.GEOSMinimumClearance.argtypes = [
|
|
527
|
+
lgeos.GEOSMinimumClearance.argtypes = [c_void_p, POINTER(c_double)]
|
|
550
528
|
lgeos.GEOSMinimumClearance.restype = c_int
|
|
551
529
|
|
|
552
530
|
if geos_version >= (3, 8, 0):
|
|
@@ -7,7 +7,7 @@ different z values may intersect or be equal.
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from binascii import a2b_hex
|
|
10
|
-
from ctypes import
|
|
10
|
+
from ctypes import pointer, c_size_t, c_char_p, c_void_p
|
|
11
11
|
from itertools import islice
|
|
12
12
|
import logging
|
|
13
13
|
import math
|
|
@@ -18,7 +18,6 @@ import warnings
|
|
|
18
18
|
|
|
19
19
|
from shapely.affinity import affine_transform
|
|
20
20
|
from shapely.coords import CoordinateSequence
|
|
21
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
22
21
|
from shapely.errors import GeometryTypeError, WKBReadingError, WKTReadingError
|
|
23
22
|
from shapely.errors import ShapelyDeprecationWarning
|
|
24
23
|
from shapely.geos import WKBWriter, WKTWriter
|
|
@@ -108,11 +107,10 @@ def geos_geom_from_py(ob, create_func=None):
|
|
|
108
107
|
This behaviour is useful for converting between LineString and LinearRing
|
|
109
108
|
objects.
|
|
110
109
|
"""
|
|
111
|
-
geom_ptr = cast(ob._geom, c_geom_p)
|
|
112
110
|
if create_func is None:
|
|
113
|
-
geom = lgeos.GEOSGeom_clone(
|
|
111
|
+
geom = lgeos.GEOSGeom_clone(ob._geom)
|
|
114
112
|
else:
|
|
115
|
-
cs = lgeos.GEOSGeom_getCoordSeq(
|
|
113
|
+
cs = lgeos.GEOSGeom_getCoordSeq(ob._geom)
|
|
116
114
|
cs = lgeos.GEOSCoordSeq_clone(cs)
|
|
117
115
|
geom = create_func(cs)
|
|
118
116
|
|
|
@@ -624,6 +622,8 @@ class BaseGeometry:
|
|
|
624
622
|
if mitre_limit == 0.0:
|
|
625
623
|
raise ValueError(
|
|
626
624
|
'Cannot compute offset from zero-length line segment')
|
|
625
|
+
elif not math.isfinite(distance):
|
|
626
|
+
raise ValueError("buffer distance must be finite")
|
|
627
627
|
|
|
628
628
|
if 'buffer_with_params' in self.impl:
|
|
629
629
|
params = self._lgeos.GEOSBufferParams_create()
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
from ctypes import c_void_p
|
|
5
5
|
|
|
6
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
7
6
|
from shapely.geos import lgeos
|
|
8
7
|
from shapely.geometry.base import BaseGeometry
|
|
9
8
|
from shapely.geometry.base import BaseMultipartGeometry
|
|
@@ -64,7 +63,7 @@ def geos_geometrycollection_from_py(ob):
|
|
|
64
63
|
ob = ob.geoms
|
|
65
64
|
L = len(ob)
|
|
66
65
|
N = 2
|
|
67
|
-
subs = (
|
|
66
|
+
subs = (c_void_p * L)()
|
|
68
67
|
for l in range(L):
|
|
69
68
|
assert(isinstance(ob[l], BaseGeometry))
|
|
70
69
|
if ob[l].has_z:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"""
|
|
3
3
|
|
|
4
4
|
from ctypes import c_double
|
|
5
|
+
import math
|
|
5
6
|
import warnings
|
|
6
7
|
|
|
7
8
|
from shapely.coords import CoordinateSequence
|
|
@@ -171,6 +172,8 @@ class LineString(BaseGeometry):
|
|
|
171
172
|
if mitre_limit == 0.0:
|
|
172
173
|
raise ValueError(
|
|
173
174
|
'Cannot compute offset from zero-length line segment')
|
|
175
|
+
elif not math.isfinite(distance):
|
|
176
|
+
raise ValueError("parallel_offset distance must be finite")
|
|
174
177
|
try:
|
|
175
178
|
return geom_factory(self.impl['parallel_offset'](
|
|
176
179
|
self, distance, resolution, join_style, mitre_limit, side))
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
from ctypes import c_void_p, cast
|
|
5
5
|
import warnings
|
|
6
6
|
|
|
7
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
8
7
|
from shapely.errors import EmptyPartError, ShapelyDeprecationWarning
|
|
9
8
|
from shapely.geos import lgeos
|
|
10
9
|
from shapely.geometry.base import BaseMultipartGeometry, geos_geom_from_py
|
|
@@ -117,9 +116,9 @@ def asMultiLineString(context):
|
|
|
117
116
|
|
|
118
117
|
|
|
119
118
|
def geos_multilinestring_from_py(ob):
|
|
120
|
-
# ob must be either a MultiLineString, a sequence, or
|
|
119
|
+
# ob must be either a MultiLineString, a sequence, or
|
|
121
120
|
# array of sequences or arrays
|
|
122
|
-
|
|
121
|
+
|
|
123
122
|
if isinstance(ob, MultiLineString):
|
|
124
123
|
return geos_geom_from_py(ob)
|
|
125
124
|
|
|
@@ -135,8 +134,8 @@ def geos_multilinestring_from_py(ob):
|
|
|
135
134
|
raise ValueError("Invalid coordinate dimensionality")
|
|
136
135
|
|
|
137
136
|
# Array of pointers to point geometries
|
|
138
|
-
subs = (
|
|
139
|
-
|
|
137
|
+
subs = (c_void_p * L)()
|
|
138
|
+
|
|
140
139
|
# add to coordinate sequence
|
|
141
140
|
for l in range(L):
|
|
142
141
|
geom, ndims = linestring.geos_linestring_from_py(obs[l])
|
|
@@ -144,6 +143,6 @@ def geos_multilinestring_from_py(ob):
|
|
|
144
143
|
if lgeos.GEOSisEmpty(geom):
|
|
145
144
|
raise EmptyPartError("Can't create MultiLineString with empty component")
|
|
146
145
|
|
|
147
|
-
subs[l] = cast(geom,
|
|
148
|
-
|
|
146
|
+
subs[l] = cast(geom, c_void_p)
|
|
147
|
+
|
|
149
148
|
return (lgeos.GEOSGeom_createCollection(5, subs, L), N)
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
from ctypes import byref, c_double, c_void_p, cast
|
|
5
5
|
import warnings
|
|
6
6
|
|
|
7
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
8
7
|
from shapely.errors import EmptyPartError, ShapelyDeprecationWarning
|
|
9
8
|
from shapely.geos import lgeos
|
|
10
9
|
from shapely.geometry.base import (
|
|
@@ -195,7 +194,7 @@ def geos_multipoint_from_py(ob):
|
|
|
195
194
|
assert n == 2 or n == 3
|
|
196
195
|
|
|
197
196
|
# Array of pointers to point geometries
|
|
198
|
-
subs = (
|
|
197
|
+
subs = (c_void_p * m)()
|
|
199
198
|
|
|
200
199
|
# add to coordinate sequence
|
|
201
200
|
for i in range(m):
|
|
@@ -205,6 +204,6 @@ def geos_multipoint_from_py(ob):
|
|
|
205
204
|
if lgeos.GEOSisEmpty(geom):
|
|
206
205
|
raise EmptyPartError("Can't create MultiPoint with empty component")
|
|
207
206
|
|
|
208
|
-
subs[i] = cast(geom,
|
|
207
|
+
subs[i] = cast(geom, c_void_p)
|
|
209
208
|
|
|
210
209
|
return lgeos.GEOSGeom_createCollection(4, subs, m), n
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
from ctypes import c_void_p, cast
|
|
5
5
|
import warnings
|
|
6
6
|
|
|
7
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
8
7
|
from shapely.errors import ShapelyDeprecationWarning
|
|
9
8
|
from shapely.geos import lgeos
|
|
10
9
|
from shapely.geometry.base import BaseMultipartGeometry, geos_geom_from_py
|
|
@@ -147,10 +146,10 @@ def geos_multipolygon_from_py(ob):
|
|
|
147
146
|
N = len(ob[0][0][0])
|
|
148
147
|
assert N == 2 or N == 3
|
|
149
148
|
|
|
150
|
-
subs = (
|
|
149
|
+
subs = (c_void_p * L)()
|
|
151
150
|
for l in range(L):
|
|
152
151
|
geom, ndims = polygon.geos_polygon_from_py(ob[l][0], ob[l][1:])
|
|
153
|
-
subs[l] = cast(geom,
|
|
152
|
+
subs[l] = cast(geom, c_void_p)
|
|
154
153
|
|
|
155
154
|
return (lgeos.GEOSGeom_createCollection(6, subs, L), N)
|
|
156
155
|
|
|
@@ -193,7 +192,7 @@ def geos_multipolygon_from_polygons(arg):
|
|
|
193
192
|
|
|
194
193
|
assert N == 2 or N == 3
|
|
195
194
|
|
|
196
|
-
subs = (
|
|
195
|
+
subs = (c_void_p * L)()
|
|
197
196
|
|
|
198
197
|
for i, ob in enumerate(obs):
|
|
199
198
|
if isinstance(ob, polygon.Polygon):
|
|
@@ -204,6 +203,6 @@ def geos_multipolygon_from_polygons(arg):
|
|
|
204
203
|
holes = ob[1]
|
|
205
204
|
|
|
206
205
|
geom, ndims = polygon.geos_polygon_from_py(shell, holes)
|
|
207
|
-
subs[i] = cast(geom,
|
|
206
|
+
subs[i] = cast(geom, c_void_p)
|
|
208
207
|
|
|
209
208
|
return (lgeos.GEOSGeom_createCollection(6, subs, L), N)
|
|
@@ -9,7 +9,6 @@ import weakref
|
|
|
9
9
|
|
|
10
10
|
from shapely.algorithms.cga import signed_area
|
|
11
11
|
from shapely.coords import CoordinateSequence
|
|
12
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
13
12
|
from shapely.geos import lgeos
|
|
14
13
|
from shapely.geometry.base import BaseGeometry, geos_geom_from_py
|
|
15
14
|
from shapely.geometry.linestring import LineString, LineStringAdapter
|
|
@@ -556,17 +555,16 @@ def geos_polygon_from_py(shell, holes=None):
|
|
|
556
555
|
raise ValueError("insufficiant coordinate dimension")
|
|
557
556
|
|
|
558
557
|
# Array of pointers to ring geometries
|
|
559
|
-
geos_holes = (
|
|
558
|
+
geos_holes = (c_void_p * L)()
|
|
560
559
|
|
|
561
560
|
# add to coordinate sequence
|
|
562
561
|
for l in range(L):
|
|
563
562
|
geom, ndim = geos_linearring_from_py(ob[l])
|
|
564
|
-
geos_holes[l] = cast(geom,
|
|
563
|
+
geos_holes[l] = cast(geom, c_void_p)
|
|
565
564
|
else:
|
|
566
|
-
geos_holes = POINTER(
|
|
565
|
+
geos_holes = POINTER(c_void_p)()
|
|
567
566
|
L = 0
|
|
568
567
|
|
|
569
568
|
return (
|
|
570
|
-
lgeos.GEOSGeom_createPolygon(
|
|
571
|
-
|
|
572
|
-
)
|
|
569
|
+
lgeos.GEOSGeom_createPolygon(
|
|
570
|
+
c_void_p(geos_shell), geos_holes, L), ndim)
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"""Support for various GEOS geometry operations
|
|
2
2
|
"""
|
|
3
3
|
|
|
4
|
-
from ctypes import byref,
|
|
4
|
+
from ctypes import byref, c_void_p, c_double
|
|
5
5
|
from warnings import warn
|
|
6
6
|
|
|
7
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
8
7
|
from shapely.errors import GeometryTypeError, ShapelyDeprecationWarning
|
|
9
8
|
from shapely.prepared import prep
|
|
10
9
|
from shapely.geos import lgeos
|
|
@@ -45,16 +44,12 @@ class CollectionOperator:
|
|
|
45
44
|
source = [source]
|
|
46
45
|
finally:
|
|
47
46
|
obs = [self.shapeup(l) for l in source]
|
|
48
|
-
|
|
49
|
-
geom_array_type = c_geom_p * len(obs)
|
|
47
|
+
geom_array_type = c_void_p * len(obs)
|
|
50
48
|
geom_array = geom_array_type()
|
|
51
|
-
|
|
52
49
|
for i, line in enumerate(obs):
|
|
53
|
-
geom_array[i] =
|
|
54
|
-
|
|
50
|
+
geom_array[i] = line._geom
|
|
55
51
|
product = lgeos.GEOSPolygonize(byref(geom_array), len(obs))
|
|
56
52
|
collection = geom_factory(product)
|
|
57
|
-
|
|
58
53
|
for g in collection.geoms:
|
|
59
54
|
clone = lgeos.GEOSGeom_clone(g._geom)
|
|
60
55
|
g = geom_factory(clone)
|
|
@@ -83,21 +78,16 @@ class CollectionOperator:
|
|
|
83
78
|
source = [source]
|
|
84
79
|
finally:
|
|
85
80
|
obs = [self.shapeup(l) for l in source]
|
|
86
|
-
|
|
87
81
|
L = len(obs)
|
|
88
|
-
subs = (
|
|
89
|
-
|
|
82
|
+
subs = (c_void_p * L)()
|
|
90
83
|
for i, g in enumerate(obs):
|
|
91
|
-
subs[i] =
|
|
92
|
-
|
|
84
|
+
subs[i] = g._geom
|
|
93
85
|
collection = lgeos.GEOSGeom_createCollection(5, subs, L)
|
|
94
|
-
dangles =
|
|
95
|
-
cuts =
|
|
96
|
-
invalids =
|
|
86
|
+
dangles = c_void_p()
|
|
87
|
+
cuts = c_void_p()
|
|
88
|
+
invalids = c_void_p()
|
|
97
89
|
product = lgeos.GEOSPolygonize_full(
|
|
98
|
-
collection, byref(dangles), byref(cuts), byref(invalids)
|
|
99
|
-
)
|
|
100
|
-
|
|
90
|
+
collection, byref(dangles), byref(cuts), byref(invalids))
|
|
101
91
|
return (
|
|
102
92
|
geom_factory(product),
|
|
103
93
|
geom_factory(dangles),
|
|
@@ -145,12 +135,9 @@ class CollectionOperator:
|
|
|
145
135
|
except TypeError:
|
|
146
136
|
geoms = [geoms]
|
|
147
137
|
L = 1
|
|
148
|
-
|
|
149
|
-
subs = (c_geom_p * L)()
|
|
150
|
-
|
|
138
|
+
subs = (c_void_p * L)()
|
|
151
139
|
for i, g in enumerate(geoms):
|
|
152
|
-
subs[i] =
|
|
153
|
-
|
|
140
|
+
subs[i] = g._geom
|
|
154
141
|
collection = lgeos.GEOSGeom_createCollection(6, subs, L)
|
|
155
142
|
return geom_factory(lgeos.methods['cascaded_union'](collection))
|
|
156
143
|
|
|
@@ -167,12 +154,9 @@ class CollectionOperator:
|
|
|
167
154
|
except TypeError:
|
|
168
155
|
geoms = [geoms]
|
|
169
156
|
L = 1
|
|
170
|
-
|
|
171
|
-
subs = (c_geom_p * L)()
|
|
172
|
-
|
|
157
|
+
subs = (c_void_p * L)()
|
|
173
158
|
for i, g in enumerate(geoms):
|
|
174
|
-
subs[i] =
|
|
175
|
-
|
|
159
|
+
subs[i] = g._geom
|
|
176
160
|
collection = lgeos.GEOSGeom_createCollection(6, subs, L)
|
|
177
161
|
return geom_factory(lgeos.methods['unary_union'](collection))
|
|
178
162
|
|
|
@@ -24,7 +24,6 @@ from typing import Any, ItemsView, Iterable, Iterator, Optional, Sequence, Tuple
|
|
|
24
24
|
import sys
|
|
25
25
|
from warnings import warn
|
|
26
26
|
|
|
27
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
28
27
|
from shapely.errors import ShapelyDeprecationWarning
|
|
29
28
|
from shapely.geometry.base import BaseGeometry
|
|
30
29
|
from shapely.geos import lgeos
|
|
@@ -264,8 +263,8 @@ class STRtree:
|
|
|
264
263
|
dist[0] = sys.float_info.max
|
|
265
264
|
else:
|
|
266
265
|
lgeos.GEOSDistance(
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
self._geoms[idx]._geom,
|
|
267
|
+
geom2._geom,
|
|
269
268
|
dist,
|
|
270
269
|
)
|
|
271
270
|
return 1
|
|
@@ -9,7 +9,6 @@ These methods return ctypes objects that should be recast by the caller.
|
|
|
9
9
|
|
|
10
10
|
from ctypes import byref, cast, c_double
|
|
11
11
|
|
|
12
|
-
from shapely.ctypes_declarations import c_geom_p
|
|
13
12
|
from shapely.geos import TopologicalError, lgeos
|
|
14
13
|
from shapely.errors import InvalidGeometryError
|
|
15
14
|
|
|
@@ -49,9 +48,7 @@ class BinaryRealProperty(Delegating):
|
|
|
49
48
|
self._validate(this)
|
|
50
49
|
self._validate(other, stop_prepared=True)
|
|
51
50
|
d = c_double()
|
|
52
|
-
retval = self.fn(
|
|
53
|
-
cast(this._geom, c_geom_p), cast(other._geom, c_geom_p), byref(d)
|
|
54
|
-
)
|
|
51
|
+
retval = self.fn(this._geom, other._geom, byref(d))
|
|
55
52
|
return d.value
|
|
56
53
|
|
|
57
54
|
|
|
@@ -60,7 +57,7 @@ class UnaryRealProperty(Delegating):
|
|
|
60
57
|
def __call__(self, this):
|
|
61
58
|
self._validate(this)
|
|
62
59
|
d = c_double()
|
|
63
|
-
retval = self.fn(
|
|
60
|
+
retval = self.fn(this._geom, byref(d))
|
|
64
61
|
return d.value
|
|
65
62
|
|
|
66
63
|
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
1
3
|
from . import unittest
|
|
2
4
|
from shapely import geometry
|
|
3
5
|
|
|
4
6
|
|
|
7
|
+
@pytest.mark.parametrize("distance", [float("nan"), float("inf")])
|
|
8
|
+
def test_non_finite_distance(distance):
|
|
9
|
+
g = geometry.Point(0, 0)
|
|
10
|
+
with pytest.raises(ValueError, match="distance must be finite"):
|
|
11
|
+
g.buffer(distance)
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
class BufferSingleSidedCase(unittest.TestCase):
|
|
6
15
|
""" Test Buffer Point/Line/Polygon with and without single_sided params """
|
|
7
16
|
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
1
3
|
from . import unittest
|
|
2
4
|
from shapely.geometry import LineString, LinearRing
|
|
3
|
-
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@pytest.mark.parametrize("distance", [float("nan"), float("inf")])
|
|
8
|
+
def test_non_finite_distance(distance):
|
|
9
|
+
g = LineString([(0, 0), (10, 0)])
|
|
10
|
+
with pytest.raises(ValueError, match="distance must be finite"):
|
|
11
|
+
g.parallel_offset(distance)
|
|
12
|
+
|
|
4
13
|
|
|
5
14
|
class OperationsTestCase(unittest.TestCase):
|
|
6
15
|
|
Shapely-1.8.3/VERSION.txt
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.8.3
|
Shapely-1.8.3/pyproject.toml
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.8.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|