@@ -1078,7 +1078,23 @@ def CalcMetricsDomain3Clust(
10781078 if shape [1 ] == 1 :
10791079 polygons .append (Polygon (shape [0 ]["coordinates" ][0 ]))
10801080
1081- mpolygons .append (MultiPolygon (polygons ).simplify (3 , preserve_topology = False ))
1081+ # Shapely >=2 may return Polygon or GeometryCollection after simplify;
1082+ # coerce to MultiPolygon comprised of polygonal parts only.
1083+ simplified = MultiPolygon (polygons ).simplify (3 , preserve_topology = False )
1084+ if isinstance (simplified , MultiPolygon ):
1085+ mpolygons .append (simplified )
1086+ elif isinstance (simplified , Polygon ):
1087+ mpolygons .append (MultiPolygon ([simplified ]))
1088+ else :
1089+ # GeometryCollection or other: extract polygonal geometries when available
1090+ if hasattr (simplified , "geoms" ):
1091+ polys = [g for g in simplified .geoms if isinstance (g , Polygon )]
1092+ mpolygons .append (
1093+ MultiPolygon (polys ) if len (polys ) > 0 else MultiPolygon ([])
1094+ )
1095+ else :
1096+ # Fallback to unsimplified geometry if simplify produced a non-multipart type
1097+ mpolygons .append (MultiPolygon (polygons ))
10821098
10831099 region = regionmask .Regions (
10841100 mpolygons ,
@@ -1379,6 +1395,7 @@ def CalcMetricsDomainAR6(pdf, amt, months, bincrates, dat, ref, ref_dir):
13791395 [- 130 , 50 ],
13801396 [- 125.3 , 40 ],
13811397 ]
1398+ # r1, r2 are coordinate lists; wrap each once to Polygon, then MultiPolygon
13821399 vertices = MultiPolygon ([Polygon (r1 ), Polygon (r2 )])
13831400 elif reg == "NWPO" :
13841401 vertices = Polygon ([[139.5 , 0 ], [132 , 5 ], [132 , 20 ], [180 , 25 ], [180 , 0 ]])
@@ -1393,7 +1410,8 @@ def CalcMetricsDomainAR6(pdf, amt, months, bincrates, dat, ref, ref_dir):
13931410 elif reg == "SWPO" :
13941411 r1 = Polygon ([[155 , - 30 ], [155 , - 10 ], [139.5 , 0 ], [180 , 0 ], [180 , - 30 ]])
13951412 r2 = Polygon ([[- 180 , - 30 ], [- 180 , 0 ], [- 135 , - 10 ], [- 135 , - 30 ]])
1396- vertices = MultiPolygon ([Polygon (r1 ), Polygon (r2 )])
1413+ # r1 and r2 are already Polygon objects; build a MultiPolygon directly
1414+ vertices = MultiPolygon ([r1 , r2 ])
13971415 elif reg == "SEPO" :
13981416 vertices = Polygon (
13991417 [
@@ -2083,7 +2101,19 @@ def MedDomain3Clust(d, months, debug=False):
20832101 if shape [1 ] == 1 :
20842102 polygons .append (Polygon (shape [0 ]["coordinates" ][0 ]))
20852103
2086- mpolygons .append (MultiPolygon (polygons ).simplify (3 , preserve_topology = False ))
2104+ simplified = MultiPolygon (polygons ).simplify (3 , preserve_topology = False )
2105+ if isinstance (simplified , MultiPolygon ):
2106+ mpolygons .append (simplified )
2107+ elif isinstance (simplified , Polygon ):
2108+ mpolygons .append (MultiPolygon ([simplified ]))
2109+ else :
2110+ if hasattr (simplified , "geoms" ):
2111+ polys = [g for g in simplified .geoms if isinstance (g , Polygon )]
2112+ mpolygons .append (
2113+ MultiPolygon (polys ) if len (polys ) > 0 else MultiPolygon ([])
2114+ )
2115+ else :
2116+ mpolygons .append (MultiPolygon (polygons ))
20872117
20882118 region = regionmask .Regions (
20892119 mpolygons ,
@@ -2266,7 +2296,7 @@ def MedDomainAR6(d, months):
22662296 elif reg == "SWPO" :
22672297 r1 = Polygon ([[155 , - 30 ], [155 , - 10 ], [139.5 , 0 ], [180 , 0 ], [180 , - 30 ]])
22682298 r2 = Polygon ([[- 180 , - 30 ], [- 180 , 0 ], [- 135 , - 10 ], [- 135 , - 30 ]])
2269- vertices = MultiPolygon ([Polygon ( r1 ), Polygon ( r2 ) ])
2299+ vertices = MultiPolygon ([r1 , r2 ])
22702300 elif reg == "SEPO" :
22712301 vertices = Polygon (
22722302 [
0 commit comments