shapely 1.6.2__tar.gz → 1.6.3__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 (134) hide show
  1. {Shapely-1.6.2 → Shapely-1.6.3}/CHANGES.txt +17 -0
  2. {Shapely-1.6.2/Shapely.egg-info → Shapely-1.6.3}/PKG-INFO +18 -1
  3. {Shapely-1.6.2 → Shapely-1.6.3/Shapely.egg-info}/PKG-INFO +18 -1
  4. Shapely-1.6.3/VERSION.txt +1 -0
  5. {Shapely-1.6.2 → Shapely-1.6.3}/docs/manual.rst +15 -3
  6. Shapely-1.6.3/shapely/__init__.py +1 -0
  7. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/base.py +15 -3
  8. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/polygon.py +16 -5
  9. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/proxy.py +2 -1
  10. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/speedups/_speedups.c +809 -730
  11. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/speedups/_speedups.pyx +3 -0
  12. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/strtree.py +3 -1
  13. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_emptiness.py +10 -0
  14. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_geointerface.py +17 -1
  15. Shapely-1.6.3/tests/test_pickle.py +28 -0
  16. Shapely-1.6.2/VERSION.txt +0 -1
  17. Shapely-1.6.2/shapely/__init__.py +0 -1
  18. Shapely-1.6.2/tests/test_pickle.py +0 -22
  19. {Shapely-1.6.2 → Shapely-1.6.3}/CREDITS.txt +0 -0
  20. {Shapely-1.6.2 → Shapely-1.6.3}/LICENSE.txt +0 -0
  21. {Shapely-1.6.2 → Shapely-1.6.3}/README.rst +0 -0
  22. {Shapely-1.6.2 → Shapely-1.6.3}/Shapely.egg-info/SOURCES.txt +0 -0
  23. {Shapely-1.6.2 → Shapely-1.6.3}/Shapely.egg-info/dependency_links.txt +0 -0
  24. {Shapely-1.6.2 → Shapely-1.6.3}/Shapely.egg-info/requires.txt +0 -0
  25. {Shapely-1.6.2 → Shapely-1.6.3}/Shapely.egg-info/top_level.txt +0 -0
  26. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/__init__.py +0 -0
  27. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/__about__.py +0 -0
  28. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/__init__.py +0 -0
  29. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/_compat.py +0 -0
  30. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/_structures.py +0 -0
  31. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/markers.py +0 -0
  32. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/requirements.py +0 -0
  33. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/specifiers.py +0 -0
  34. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/utils.py +0 -0
  35. {Shapely-1.6.2 → Shapely-1.6.3}/_vendor/packaging/version.py +0 -0
  36. {Shapely-1.6.2 → Shapely-1.6.3}/docs/design.rst +0 -0
  37. {Shapely-1.6.2 → Shapely-1.6.3}/docs/index.rst +0 -0
  38. {Shapely-1.6.2 → Shapely-1.6.3}/docs/project.rst +0 -0
  39. {Shapely-1.6.2 → Shapely-1.6.3}/setup.cfg +0 -0
  40. {Shapely-1.6.2 → Shapely-1.6.3}/setup.py +0 -0
  41. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/_buildcfg.py +0 -0
  42. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/_geos.pxi +0 -0
  43. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/affinity.py +0 -0
  44. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/algorithms/__init__.py +0 -0
  45. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/algorithms/cga.py +0 -0
  46. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/algorithms/polylabel.py +0 -0
  47. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/coords.py +0 -0
  48. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/ctypes_declarations.py +0 -0
  49. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/errors.py +0 -0
  50. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/examples/__init__.py +0 -0
  51. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/examples/dissolve.py +0 -0
  52. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/examples/geoms.py +0 -0
  53. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/examples/intersect.py +0 -0
  54. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/ftools.py +0 -0
  55. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/__init__.py +0 -0
  56. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/collection.py +0 -0
  57. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/geo.py +0 -0
  58. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/linestring.py +0 -0
  59. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/multilinestring.py +0 -0
  60. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/multipoint.py +0 -0
  61. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/multipolygon.py +0 -0
  62. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geometry/point.py +0 -0
  63. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/geos.py +0 -0
  64. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/impl.py +0 -0
  65. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/iterops.py +0 -0
  66. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/linref.py +0 -0
  67. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/ops.py +0 -0
  68. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/predicates.py +0 -0
  69. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/prepared.py +0 -0
  70. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/speedups/__init__.py +0 -0
  71. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/topology.py +0 -0
  72. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/validation.py +0 -0
  73. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/vectorized/__init__.py +0 -0
  74. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/vectorized/_vectorized.pyx +0 -0
  75. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/wkb.py +0 -0
  76. {Shapely-1.6.2 → Shapely-1.6.3}/shapely/wkt.py +0 -0
  77. {Shapely-1.6.2 → Shapely-1.6.3}/tests/__init__.py +0 -0
  78. {Shapely-1.6.2 → Shapely-1.6.3}/tests/binascii_hex.txt +0 -0
  79. {Shapely-1.6.2 → Shapely-1.6.3}/tests/conftest.py +0 -0
  80. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_affinity.py +0 -0
  81. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_box.py +0 -0
  82. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_cga.py +0 -0
  83. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_collection.py +0 -0
  84. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_coords.py +0 -0
  85. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_default_impl.py +0 -0
  86. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_delaunay.py +0 -0
  87. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_delegated.py +0 -0
  88. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_dlls.py +0 -0
  89. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_doctests.py +0 -0
  90. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_empty_polygons.py +0 -0
  91. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_equality.py +0 -0
  92. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_geomseq.py +0 -0
  93. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_geos_err_handler.py +0 -0
  94. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_getitem.py +0 -0
  95. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_hash.py +0 -0
  96. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_invalid_geometries.py +0 -0
  97. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_iterops.py +0 -0
  98. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_linear_referencing.py +0 -0
  99. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_linemerge.py +0 -0
  100. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_linestring.py +0 -0
  101. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_locale.py +0 -0
  102. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_mapping.py +0 -0
  103. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_minimum_rotated_rectangle.py +0 -0
  104. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_multi.py +0 -0
  105. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_multilinestring.py +0 -0
  106. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_multipoint.py +0 -0
  107. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_multipolygon.py +0 -0
  108. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_ndarrays.py +0 -0
  109. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_nearest.py +0 -0
  110. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_operations.py +0 -0
  111. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_operators.py +0 -0
  112. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_parallel_offset.py +0 -0
  113. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_persist.py +0 -0
  114. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_point.py +0 -0
  115. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_polygon.py +0 -0
  116. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_polygonize.py +0 -0
  117. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_polylabel.py +0 -0
  118. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_predicates.py +0 -0
  119. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_prepared.py +0 -0
  120. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_products_z.py +0 -0
  121. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_shared_paths.py +0 -0
  122. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_singularity.py +0 -0
  123. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_snap.py +0 -0
  124. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_split.py +0 -0
  125. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_strtree.py +0 -0
  126. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_styles.py +0 -0
  127. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_svg.py +0 -0
  128. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_transform.py +0 -0
  129. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_union.py +0 -0
  130. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_validation.py +0 -0
  131. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_vectorized.py +0 -0
  132. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_wkt.py +0 -0
  133. {Shapely-1.6.2 → Shapely-1.6.3}/tests/test_xy.py +0 -0
  134. {Shapely-1.6.2 → Shapely-1.6.3}/tests/threading_test.py +0 -0
@@ -1,6 +1,23 @@
1
1
  Changes
2
2
  =======
3
3
 
4
+ 1.6.3 (2017-12-09)
5
+ ------------------
6
+
7
+ - AttributeError is no longer raised when accessing __geo_interface__ of an
8
+ empty polygon (#450).
9
+ - ``asShape`` now handles empty coordinates in mappings as ``shape`` does
10
+ (#542). Please note that ``asShape`` is likely to be deprecated in a future
11
+ version of Shapely.
12
+ - Check for length of LineString coordinates in speed mode, preventing crashes
13
+ when using LineStrings with only one coordinate (#546).
14
+
15
+ 1.6.2 (2017-10-30)
16
+ ------------------
17
+
18
+ - A 1.6.2.post1 release has been made to fix a problem with macosx wheels
19
+ uploaded to PyPI.
20
+
4
21
  1.6.2 (2017-10-26)
5
22
  ------------------
6
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: Shapely
3
- Version: 1.6.2
3
+ Version: 1.6.3
4
4
  Summary: Geometric objects, predicates, and operations
5
5
  Home-page: https://github.com/Toblerity/Shapely
6
6
  Author: Sean Gillies
@@ -242,6 +242,23 @@ Description: =======
242
242
  Changes
243
243
  =======
244
244
 
245
+ 1.6.3 (2017-12-09)
246
+ ------------------
247
+
248
+ - AttributeError is no longer raised when accessing __geo_interface__ of an
249
+ empty polygon (#450).
250
+ - ``asShape`` now handles empty coordinates in mappings as ``shape`` does
251
+ (#542). Please note that ``asShape`` is likely to be deprecated in a future
252
+ version of Shapely.
253
+ - Check for length of LineString coordinates in speed mode, preventing crashes
254
+ when using LineStrings with only one coordinate (#546).
255
+
256
+ 1.6.2 (2017-10-30)
257
+ ------------------
258
+
259
+ - A 1.6.2.post1 release has been made to fix a problem with macosx wheels
260
+ uploaded to PyPI.
261
+
245
262
  1.6.2 (2017-10-26)
246
263
  ------------------
247
264
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: Shapely
3
- Version: 1.6.2
3
+ Version: 1.6.3
4
4
  Summary: Geometric objects, predicates, and operations
5
5
  Home-page: https://github.com/Toblerity/Shapely
6
6
  Author: Sean Gillies
@@ -242,6 +242,23 @@ Description: =======
242
242
  Changes
243
243
  =======
244
244
 
245
+ 1.6.3 (2017-12-09)
246
+ ------------------
247
+
248
+ - AttributeError is no longer raised when accessing __geo_interface__ of an
249
+ empty polygon (#450).
250
+ - ``asShape`` now handles empty coordinates in mappings as ``shape`` does
251
+ (#542). Please note that ``asShape`` is likely to be deprecated in a future
252
+ version of Shapely.
253
+ - Check for length of LineString coordinates in speed mode, preventing crashes
254
+ when using LineStrings with only one coordinate (#546).
255
+
256
+ 1.6.2 (2017-10-30)
257
+ ------------------
258
+
259
+ - A 1.6.2.post1 release has been made to fix a problem with macosx wheels
260
+ uploaded to PyPI.
261
+
245
262
  1.6.2 (2017-10-26)
246
263
  ------------------
247
264
 
@@ -0,0 +1 @@
1
+ 1.6.3
@@ -157,7 +157,7 @@ themselves as instance factories. A few of their intrinsic properties will be
157
157
  discussed in this sections, others in the following sections on operations and
158
158
  serializations.
159
159
 
160
- Instances of `Point`, `LineString`, and `LinearRing` have as their most
160
+ Instances of ``Point``, ``LineString``, and ``LinearRing`` have as their most
161
161
  important attribute a finite sequence of coordinates that determines their
162
162
  interior, boundary, and exterior point sets. A line string can be determined by
163
163
  as few as 2 points, but contains an infinite number of points. Coordinate
@@ -169,8 +169,20 @@ In all constructors, numeric values are converted to type ``float``. In other
169
169
  words, ``Point(0, 0)`` and ``Point(0.0, 0.0)`` produce geometrically equivalent
170
170
  instances. Shapely does not check the topological simplicity or validity of
171
171
  instances when they are constructed as the cost is unwarranted in most cases.
172
- Validating factories are trivially implemented, using the :attr:`is_valid`
173
- predicate, by users that require them.
172
+ Validating factories are easily implemented using the :attr:``is_valid``
173
+ predicate by users that require them.
174
+
175
+ .. note::
176
+
177
+ Shapely is a planar geometry library and `z`, the height
178
+ above or below the plane, is ignored in geometric analysis. There is
179
+ a potential pitfall for users here: coordinate tuples that differ only in
180
+ `z` are not distinguished from each other and their application can result
181
+ in suprisingly invalid geometry objects. For example, ``LineString([(0, 0,
182
+ 0), (0, 0, 1)])`` does not return a vertical line of unit length, but an invalid line
183
+ in the plane with zero length. Similarly, ``Polygon([(0, 0, 0), (0, 0, 1),
184
+ (1, 1, 1)])`` is not bounded by a closed ring and is invalid.
185
+
174
186
 
175
187
  General Attributes and Methods
176
188
  ------------------------------
@@ -0,0 +1 @@
1
+ __version__ = "1.6.3"
@@ -699,7 +699,11 @@ class BaseGeometry(object):
699
699
  return bool(self.impl['disjoint'](self, other))
700
700
 
701
701
  def equals(self, other):
702
- """Returns True if geometries are equal, else False"""
702
+ """Returns True if geometries are equal, else False
703
+
704
+ Refers to point-set equality (or topological equality), and is equivalent to
705
+ (self.within(other) & self.contains(other))
706
+ """
703
707
  return bool(self.impl['equals'](self, other))
704
708
 
705
709
  def intersects(self, other):
@@ -720,12 +724,20 @@ class BaseGeometry(object):
720
724
 
721
725
  def equals_exact(self, other, tolerance):
722
726
  """Returns True if geometries are equal to within a specified
723
- tolerance"""
727
+ tolerance
728
+
729
+ Refers to coordinate equality, which requires coordinates to be equal
730
+ and in the same order for all components of a geometry
731
+ """
724
732
  return bool(self.impl['equals_exact'](self, other, tolerance))
725
733
 
726
734
  def almost_equals(self, other, decimal=6):
727
735
  """Returns True if geometries are equal at all coordinates to a
728
- specified decimal place"""
736
+ specified decimal place
737
+
738
+ Refers to approximate coordinate equality, which requires coordinates be
739
+ approximately equal and in the same order for all components of a geometry.
740
+ """
729
741
  return self.equals_exact(other, 0.5 * 10**(-decimal))
730
742
 
731
743
  def relate_pattern(self, other, pattern):
@@ -71,6 +71,15 @@ class LinearRing(LineString):
71
71
 
72
72
  coords = property(_get_coords, _set_coords)
73
73
 
74
+ def __setstate__(self, state):
75
+ """WKB doesn't differentiate between LineString and LinearRing so we
76
+ need to move the coordinate sequence into the correct geometry type"""
77
+ super(LinearRing, self).__setstate__(state)
78
+ cs = lgeos.GEOSGeom_getCoordSeq(self.__geom__)
79
+ cs_clone = lgeos.GEOSCoordSeq_clone(cs)
80
+ lgeos.GEOSGeom_destroy(self.__geom__)
81
+ self.__geom__ = lgeos.GEOSGeom_createLinearRing(cs_clone)
82
+
74
83
  @property
75
84
  def is_ccw(self):
76
85
  """True is the ring is oriented counter clock-wise"""
@@ -303,13 +312,15 @@ class Polygon(BaseGeometry):
303
312
 
304
313
  @property
305
314
  def __geo_interface__(self):
306
- coords = [tuple(self.exterior.coords)]
307
- for hole in self.interiors:
308
- coords.append(tuple(hole.coords))
315
+ if not self.exterior:
316
+ coords = []
317
+ else:
318
+ coords = [tuple(self.exterior.coords)]
319
+ for hole in self.interiors:
320
+ coords.append(tuple(hole.coords))
309
321
  return {
310
322
  'type': 'Polygon',
311
- 'coordinates': tuple(coords)
312
- }
323
+ 'coordinates': tuple(coords)}
313
324
 
314
325
  def svg(self, scale_factor=1., fill_color=None):
315
326
  """Returns SVG path element for the Polygon geometry.
@@ -30,7 +30,8 @@ class CachingGeometryProxy(object):
30
30
  gtag = self.gtag()
31
31
  if gtag != self._gtag or self._is_empty:
32
32
  self.empty()
33
- self.__geom__, n = self.factory(self.context)
33
+ if len(self.context) > 0:
34
+ self.__geom__, n = self.factory(self.context)
34
35
  self._gtag = gtag
35
36
  return self.__geom__
36
37