66from hypothesis import HealthCheck , given , settings
77from hypothesis .strategies import (
88 builds ,
9- composite ,
9+ composite , # Preferably avoid. Shrinking composite strategies is slow.
1010 floats ,
1111 integers ,
1212 just ,
@@ -153,19 +153,17 @@ def test_MultiPoint_roundtrips(
153153 assert actual .oid == expected .oid
154154
155155
156- @composite
157- def multipointM (draw ):
158- N = draw (PointsLengths )
159- return shp .MultiPointM (
160- points = draw (coords_2D_list (min_size = N , max_size = N )),
161- m = draw (lists (ms , min_size = N , max_size = N )),
162- oid = oid ,
163- )
164156
157+ def multipointM_from_xyms (point_ms : tuple [float , float , float | None ], oid_ : int ) -> shp .MultiPointM :
158+ x_vals , y_vals , m_vals = zip (* point_ms )
159+ xy_vals = zip (x_vals , y_vals )
160+ return shp .MultiPointM (points = list (xy_vals ), m = list (m_vals ), oid = oid_ )
161+
162+ multipointM = builds (multipointM_from_xyms , lists (tuples (xs , ys , ms ), min_size = 1 ), oid )
165163
166164@pytest .mark .hypothesis
167165@settings (suppress_health_check = [HealthCheck .too_slow , HealthCheck .data_too_large ])
168- @given (expected = multipointM () , i = integers (min_value = 1 ))
166+ @given (expected = multipointM , i = integers (min_value = 1 ))
169167def test_MultiPointM_roundtrips (
170168 expected : shp .MultiPointM ,
171169 i : int ,
@@ -188,20 +186,17 @@ def test_MultiPointM_roundtrips(
188186 assert actual .oid == expected .oid
189187
190188
191- @composite
192- def multipointZ (draw ):
193- N = draw (PointsLengths )
194- return shp .MultiPointZ (
195- points = draw (coords_2D_list (min_size = N , max_size = N )),
196- z = draw (lists (zs , min_size = N , max_size = N )),
197- m = draw (lists (ms , min_size = N , max_size = N )),
198- oid = oid ,
199- )
189+ def multipointZ_from_xyzms (pointz_ms : tuple [float , float , float , float | None ], oid_ : int ) -> shp .MultiPointZ :
190+ x_vals , y_vals , z_vals , m_vals = zip (* pointz_ms )
191+ xy_vals = zip (x_vals , y_vals )
192+ return shp .MultiPointZ (points = list (xy_vals ), z = list (z_vals ), m = list (m_vals ), oid = oid_ )
193+
194+ multipointz = builds (multipointZ_from_xyzms , lists (tuples (xs , ys , zs , ms ), min_size = 1 ), oid )
200195
201196
202197@pytest .mark .hypothesis
203198@settings (suppress_health_check = [HealthCheck .too_slow , HealthCheck .data_too_large ])
204- @given (expected = multipointZ () , i = integers (min_value = 1 ))
199+ @given (expected = multipointz , i = integers (min_value = 1 ))
205200def test_MultiPointZ_roundtrips (
206201 expected : shp .MultiPointZ ,
207202 i : int ,
@@ -382,19 +377,28 @@ def test_PolygonZ_roundtrips(
382377 assert actual .oid == expected .oid
383378
384379part_types = sampled_from (range (6 )) # 0: Triangle Strip, ..., 5: Ring
385- @composite
386- def multipatches (draw ):
387- N = draw (PointsLengths )
388- p_types = draw (lists (part_types , min_size = N , max_size = N ))
389- patches = draw (lists (lists (tuples (xs , ys , zs , ms ), min_size = 1 ), min_size = N , max_size = N ))
390- return shp .MultiPatch (lines = patches , partTypes = p_types , oid = oid )
391380
381+ def multipatch_from_xyzms_and_types (
382+ xyzms_and_types : list [tuple [list [tuple [float , float , float , float | None ]], int ]],
383+ oid : int ,
384+ ) -> shp .MultiPatch :
385+ xyzm_vals , p_types = zip (* xyzms_and_types )
386+ return shp .MultiPatch (lines = xyzm_vals , partTypes = p_types , oid = oid )
392387
388+ multipatches = builds (
389+ multipatch_from_xyzms_and_types ,
390+ lists (tuples (lists (tuples (xs , ys , zs , ms ), min_size = 1 ), part_types ), min_size = 1 ), oid )
391+ # @composite
392+ # def multipatches(draw):
393+ # N = draw(PointsLengths)
394+ # p_types = draw(lists(part_types, min_size=N, max_size=N))
395+ # patches = draw(lists(lists(tuples(xs, ys, zs, ms), min_size=1), min_size=N, max_size=N))
396+ # return shp.MultiPatch(lines = patches, partTypes = p_types, oid=oid)
393397
394398
395399@pytest .mark .hypothesis
396400@settings (suppress_health_check = [HealthCheck .too_slow , HealthCheck .data_too_large ])
397- @given (expected = multipatches () , i = integers (min_value = 1 ))
401+ @given (expected = multipatches , i = integers (min_value = 1 ))
398402def test_MultiPatch_roundtrips (
399403 expected : shp .MultiPatch ,
400404 i : int ,
0 commit comments