test_emptiness.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import math
  2. import numpy as np
  3. import pytest
  4. from shapely import (
  5. GeometryCollection,
  6. LinearRing,
  7. LineString,
  8. MultiLineString,
  9. MultiPoint,
  10. MultiPolygon,
  11. Point,
  12. Polygon,
  13. )
  14. from shapely.geometry import mapping, shape
  15. from shapely.geometry.base import BaseGeometry, EmptyGeometry
  16. def empty_generator():
  17. return iter([])
  18. class TestEmptiness:
  19. def test_empty_class(self):
  20. with pytest.warns(FutureWarning):
  21. g = EmptyGeometry()
  22. assert g.is_empty
  23. def test_empty_base(self):
  24. with pytest.warns(FutureWarning):
  25. g = BaseGeometry()
  26. assert g.is_empty
  27. def test_empty_point(self):
  28. assert Point().is_empty
  29. def test_empty_multipoint(self):
  30. assert MultiPoint().is_empty
  31. def test_empty_geometry_collection(self):
  32. assert GeometryCollection().is_empty
  33. def test_empty_linestring(self):
  34. assert LineString().is_empty
  35. assert LineString(None).is_empty
  36. assert LineString([]).is_empty
  37. assert LineString(empty_generator()).is_empty
  38. def test_empty_multilinestring(self):
  39. assert MultiLineString([]).is_empty
  40. def test_empty_polygon(self):
  41. assert Polygon().is_empty
  42. assert Polygon(None).is_empty
  43. assert Polygon([]).is_empty
  44. assert Polygon(empty_generator()).is_empty
  45. def test_empty_multipolygon(self):
  46. assert MultiPolygon([]).is_empty
  47. def test_empty_linear_ring(self):
  48. assert LinearRing().is_empty
  49. assert LinearRing(None).is_empty
  50. assert LinearRing([]).is_empty
  51. assert LinearRing(empty_generator()).is_empty
  52. def test_numpy_object_array():
  53. geoms = [Point(), GeometryCollection()]
  54. arr = np.empty(2, object)
  55. arr[:] = geoms
  56. def test_shape_empty():
  57. empty_mp = MultiPolygon()
  58. empty_json = mapping(empty_mp)
  59. empty_shape = shape(empty_json)
  60. assert empty_shape.is_empty
  61. @pytest.mark.parametrize(
  62. "geom",
  63. [
  64. Point(),
  65. LineString(),
  66. Polygon(),
  67. MultiPoint(),
  68. MultiLineString(),
  69. MultiPolygon(),
  70. GeometryCollection(),
  71. LinearRing(),
  72. ],
  73. )
  74. def test_empty_geometry_bounds(geom):
  75. """The bounds of an empty geometry is a tuple of NaNs"""
  76. assert len(geom.bounds) == 4
  77. assert all(math.isnan(v) for v in geom.bounds)