From 297ae4340cbbce5b820c322bee5349ed91eee8c1 Mon Sep 17 00:00:00 2001 From: Sean Gillies Date: Sat, 13 Mar 2021 16:11:42 -0700 Subject: [PATCH] Swap order of geom and value in initdata Add tests of storing an enumeration --- shapely/strtree.py | 6 +++--- tests/test_strtree.py | 19 ++++++++++++++++--- tests/test_strtree_nearest.py | 4 ++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/shapely/strtree.py b/shapely/strtree.py index ff177c4c1..58ccb57c3 100644 --- a/shapely/strtree.py +++ b/shapely/strtree.py @@ -133,15 +133,15 @@ def _iteritems(self, initdata): geom = obj value = obj else: - geom, value = obj + value, geom = obj if not geom.is_empty: - yield geom, value + yield value, geom def _init_tree(self, initdata): if initdata: node_capacity = 10 self._tree = lgeos.GEOSSTRtree_create(node_capacity) - for geom, value in self._iteritems(initdata): + for value, geom in self._iteritems(initdata): lgeos.GEOSSTRtree_insert( self._tree, geom._geom, ctypes.py_object(value) ) diff --git a/tests/test_strtree.py b/tests/test_strtree.py index f56337452..edd87f248 100644 --- a/tests/test_strtree.py +++ b/tests/test_strtree.py @@ -27,6 +27,19 @@ def test_query(geoms, query_geom, num_results): assert len(results) == num_results +@requires_geos_342 +@pytest.mark.parametrize("geoms", [[Point(i, i) for i in range(10)]]) +@pytest.mark.parametrize( + "query_geom,expected", + [(Point(2, 2).buffer(0.99), [2]), (Point(2, 2).buffer(1.0), [1, 2, 3])], +) +def test_query_idx_values(geoms, query_geom, expected): + with pytest.warns(ShapelyDeprecationWarning): + tree = STRtree(enumerate(geoms)) + results = tree.query(query_geom) + assert sorted(results) == sorted(expected) + + @requires_geos_342 @pytest.mark.parametrize("geoms", [[Point(i, i) for i in range(10)]]) @pytest.mark.parametrize( @@ -55,7 +68,7 @@ def callback(value): ) def test_query_cb_str(geoms, values, query_geom, num_results): with pytest.warns(ShapelyDeprecationWarning): - tree = STRtree(zip(geoms, values)) + tree = STRtree(zip(values, geoms)) results = [] @@ -76,7 +89,7 @@ def callback(value): ) def test_query_cb_dict(geoms, values, query_geom, num_results): with pytest.warns(ShapelyDeprecationWarning): - tree = STRtree(zip(geoms, values)) + tree = STRtree(zip(values, geoms)) results = [] @@ -159,7 +172,7 @@ def test_pickle_persistence(): Don't crash trying to use unpickled GEOS handle. """ with pytest.warns(ShapelyDeprecationWarning): - tree = STRtree([(Point(i, i).buffer(0.1), "Hi!") for i in range(3)]) + tree = STRtree([("Hi!", Point(i, i).buffer(0.1)) for i in range(3)]) pickled_strtree = pickle.dumps(tree) unpickle_script_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "unpickle-strtree.py") diff --git a/tests/test_strtree_nearest.py b/tests/test_strtree_nearest.py index 45ef25399..b71d6a60a 100644 --- a/tests/test_strtree_nearest.py +++ b/tests/test_strtree_nearest.py @@ -44,5 +44,5 @@ def test_nearest_geom(geoms, query_geom): @pytest.mark.parametrize("query_geom", [Point(0, 0.4)]) def test_nearest_value(geoms, values, query_geom): with pytest.warns(ShapelyDeprecationWarning): - tree = STRtree(zip(geoms, values)) - tree.nearest(query_geom) == "Ahoy!" \ No newline at end of file + tree = STRtree(zip(values, geoms)) + tree.nearest(query_geom) == "Ahoy!"