| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import pathlib
- import pickle
- import warnings
- from pickle import HIGHEST_PROTOCOL, dumps, loads
- import pytest
- import shapely
- from shapely import wkt
- from shapely.geometry import (
- GeometryCollection,
- LinearRing,
- LineString,
- MultiLineString,
- MultiPoint,
- MultiPolygon,
- Point,
- Polygon,
- box,
- )
- HERE = pathlib.Path(__file__).parent
- TEST_DATA = {
- "point2d": Point([(1.0, 2.0)]),
- "point3d": Point([(1.0, 2.0, 3.0)]),
- "linestring": LineString([(0.0, 0.0), (0.0, 1.0), (1.0, 1.0)]),
- "linearring": LinearRing([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]),
- "polygon": Polygon([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]),
- "multipoint": MultiPoint([(1.0, 2.0), (3.0, 4.0), (5.0, 6.0)]),
- "multilinestring": MultiLineString(
- [[(0.0, 0.0), (1.0, 1.0)], [(1.0, 2.0), (3.0, 3.0)]]
- ),
- "multipolygon": MultiPolygon([box(0, 0, 1, 1), box(2, 2, 3, 3)]),
- "geometrycollection": GeometryCollection([Point(1.0, 2.0), box(0, 0, 1, 1)]),
- "emptypoint": wkt.loads("POINT EMPTY"),
- "emptypolygon": wkt.loads("POLYGON EMPTY"),
- }
- TEST_NAMES, TEST_GEOMS = zip(*TEST_DATA.items())
- @pytest.mark.parametrize("geom1", TEST_GEOMS, ids=TEST_NAMES)
- def test_pickle_round_trip(geom1):
- data = dumps(geom1, HIGHEST_PROTOCOL)
- with warnings.catch_warnings():
- warnings.simplefilter("error")
- geom2 = loads(data)
- assert geom2.has_z == geom1.has_z
- assert type(geom2) is type(geom1)
- assert geom2.geom_type == geom1.geom_type
- assert geom2.wkt == geom1.wkt
- @pytest.mark.parametrize(
- "fname", (HERE / "data").glob("*.pickle"), ids=lambda fname: fname.name
- )
- def test_unpickle_pre_20(fname):
- from shapely.testing import assert_geometries_equal
- geom_type = fname.name.split("_")[0]
- expected = TEST_DATA[geom_type]
- with open(fname, "rb") as f:
- with pytest.warns(UserWarning, match="may be removed in a future version"):
- result = pickle.load(f)
- assert_geometries_equal(result, expected)
- if __name__ == "__main__":
- datadir = HERE / "data"
- datadir.mkdir(exist_ok=True)
- shapely_version = shapely.__version__
- print(shapely_version)
- print(shapely.geos_version)
- for name, geom in TEST_DATA.items():
- with open(datadir / f"{name}_{shapely_version}.pickle", "wb") as f:
- pickle.dump(geom, f)
|