Skip to content

Commit e3bf52f

Browse files
committed
Minor changes to address Issues posted to github
Added a warning when maup.assign leaves some source geometries unassigned, made some minor syntax changes suggested in github Issues.
1 parent fd996b9 commit e3bf52f

File tree

3 files changed

+18
-12
lines changed

3 files changed

+18
-12
lines changed

maup/assign.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pandas
2+
import warnings
23

34
from .indexed_geometries import IndexedGeometries
45
from .intersections import intersections
@@ -25,7 +26,12 @@ def assign(sources, targets):
2526
)
2627
assignment.update(assignments_by_area)
2728

28-
# TODO: add a warning here if there are still unassigned source geometries.
29+
# Warn here if there are still unassigned source geometries.
30+
unassigned = sources[assignment.isna()]
31+
if len(unassigned): # skip if done
32+
warnings.warn("Warning: Some units in the source geometry were unassigned.")
33+
34+
2935
return assignment.astype(targets.index.dtype, errors="ignore")
3036

3137

maup/indexed_geometries.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def query(self, geometry):
2424
# (2 x n) array instead of a (1 x n) array, so it's safest to flatten the query
2525
# output before proceeding.
2626
relevant_index_array = self.spatial_index.query(geometry)
27-
relevant_indices = [*set(numpy.ndarray.flatten(relevant_index_array))]
27+
relevant_indices = list(set(relevant_index_array.ravel()))
2828
relevant_geometries = self.geometries.iloc[relevant_indices]
2929
return relevant_geometries
3030

maup/smart_repair.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ def smart_repair(geometries_df, snapped=True, snap_precision=9, fill_gaps=True,
263263
c_ind = component_areas_sorted[i][0]
264264
this_fragment = reconstructed_df.loc[g_ind, "geometry"].geoms[c_ind]
265265
if component_areas_sorted[i][1] < disconnection_threshold*big_area:
266-
possible_intersect_integer_indices = [*set(numpy.ndarray.flatten(spatial_index.query(this_fragment)))]
266+
possible_intersect_integer_indices = list(set(spatial_index.query(this_fragment).ravel()))
267267
possible_intersect_indices = [(index_by_iloc[k]) for k in possible_intersect_integer_indices]
268268

269269
if nest_within_regions is not None:
@@ -415,7 +415,7 @@ def building_blocks(geometries_df, snap_magnitude=None, nest_within_regions=None
415415
# Note that "None" is a possibility, and that each piece will belong to a unique
416416
# region because the regions GeoDataFrame/GeoSeries MUST be clean.
417417
if nest_within_regions is not None:
418-
possible_region_integer_indices = [*set(numpy.ndarray.flatten(r_spatial_index.query(pieces_df.loc[i, "geometry"])))]
418+
possible_region_integer_indices = list(set(r_spatial_index.query(pieces_df.loc[i, "geometry"]).ravel()))
419419
possible_region_indices = [r_index_by_iloc[k] for k in possible_region_integer_indices]
420420

421421
for j in possible_region_indices:
@@ -426,7 +426,7 @@ def building_blocks(geometries_df, snap_magnitude=None, nest_within_regions=None
426426
# contained in. If region boundaries are included, then while determining which
427427
# geometries each piece is contained in, omit any geometries that are
428428
# assigned to a region other than the one the piece is contained in.
429-
possible_geom_integer_indices = [*set(numpy.ndarray.flatten(g_spatial_index.query(pieces_df.loc[i, "geometry"])))]
429+
possible_geom_integer_indices = list(set(g_spatial_index.query(pieces_df.loc[i, "geometry"]).ravel()))
430430
possible_geom_indices = [g_index_by_iloc[k] for k in possible_geom_integer_indices]
431431

432432
for j in possible_geom_indices:
@@ -558,7 +558,7 @@ def reconstruct_from_overlap_tower(geometries_df, overlap_tower, nested=False):
558558
o_index_by_iloc = dict((i, list(overlaps_df.index)[i]) for i in range(len(overlaps_df)))
559559

560560
for g_ind in geometries_disconnected_df.index:
561-
possible_overlap_integer_indices = [*set(numpy.ndarray.flatten(o_spatial_index.query(geometries_disconnected_df.loc[g_ind, "geometry"])))]
561+
possible_overlap_integer_indices = list(set(o_spatial_index.query(geometries_disconnected_df.loc[g_ind, "geometry"]).ravel()))
562562
possible_overlap_indices_0 = [o_index_by_iloc[k] for k in possible_overlap_integer_indices]
563563
possible_overlap_indices = list(set(possible_overlap_indices_0) & set(overlaps_df_unused_indices))
564564

@@ -593,7 +593,7 @@ def reconstruct_from_overlap_tower(geometries_df, overlap_tower, nested=False):
593593
for o_ind in overlaps_df_unused_indices:
594594
this_overlap = overlaps_df.loc[o_ind, "geometry"]
595595
shared_perimeters = []
596-
possible_geom_integer_indices = [*set(numpy.ndarray.flatten(g_spatial_index.query(this_overlap)))]
596+
possible_geom_integer_indices = list(set(g_spatial_index.query(this_overlap).ravel()))
597597
possible_geom_indices = [g_index_by_iloc[k] for k in possible_geom_integer_indices]
598598

599599
for g_ind in possible_geom_indices:
@@ -616,7 +616,7 @@ def reconstruct_from_overlap_tower(geometries_df, overlap_tower, nested=False):
616616
this_overlap = orphaned_overlaps[o_ind][0]
617617
this_overlap_polygon_indices = orphaned_overlaps[o_ind][1]
618618
shared_perimeters = []
619-
possible_geom_integer_indices = [*set(numpy.ndarray.flatten(g_spatial_index.query(this_overlap)))]
619+
possible_geom_integer_indices = list(set(g_spatial_index.query(this_overlap).ravel()))
620620
possible_geom_indices = [g_index_by_iloc[k] for k in possible_geom_integer_indices]
621621

622622
for g_ind in possible_geom_indices:
@@ -653,7 +653,7 @@ def drop_bad_holes(reconstructed_df, holes_df, fill_gaps_threshold):
653653
hole_indices_to_drop_aat = []
654654
for h_ind in holes_df.index:
655655
this_hole = holes_df.loc[h_ind, "geometry"]
656-
possible_intersect_integer_indices = [*set(numpy.ndarray.flatten(spatial_index.query(this_hole)))]
656+
possible_intersect_integer_indices = list(set(spatial_index.query(this_hole).ravel()))
657657
possible_intersect_indices = [(index_by_iloc[k]) for k in possible_intersect_integer_indices]
658658
actual_intersect_indices = [g_ind for g_ind in possible_intersect_indices if not this_hole.intersection(reconstructed_df.loc[g_ind, "geometry"]).is_empty]
659659

@@ -1211,7 +1211,7 @@ def small_rook_to_queen(geometries_df, min_rook_length):
12111211
poly_to_remove = polys_to_remove_list[a_ind]
12121212

12131213
# Identify geometries that might intersect this polygon.
1214-
possible_geom_integer_indices = [*set(numpy.ndarray.flatten(g_spatial_index.query(poly_to_remove)))]
1214+
possible_geom_integer_indices = list(set(g_spatial_index.query(poly_to_remove).ravel()))
12151215
possible_geom_indices = [g_index_by_iloc[k] for k in possible_geom_integer_indices]
12161216

12171217
# Use the boundaries of these geometries together with the boundary of the disk to
@@ -1236,7 +1236,7 @@ def small_rook_to_queen(geometries_df, min_rook_length):
12361236
pieces_df["polygon indices"] = [set() for x in range(len(pieces_df.index))]
12371237

12381238
for i in pieces_df.index:
1239-
temp_possible_geom_integer_indices = [*set(numpy.ndarray.flatten(g_spatial_index.query(pieces_df.loc[i, "geometry"])))]
1239+
temp_possible_geom_integer_indices = list(set(g_spatial_index.query(pieces_df.loc[i, "geometry"]).ravel()))
12401240
temp_possible_geom_indices = [g_index_by_iloc[k] for k in temp_possible_geom_integer_indices]
12411241

12421242
for j in temp_possible_geom_indices:
@@ -1327,7 +1327,7 @@ def construct_hole_boundaries(geometries_df, holes_df):
13271327
this_hole_segments = segments(this_hole.boundary)
13281328
this_hole_segments_used = []
13291329

1330-
possible_geom_integer_indices = [*set(numpy.ndarray.flatten(g_spatial_index.query(holes_df.loc[h_ind, "geometry"])))]
1330+
possible_geom_integer_indices = list(set(g_spatial_index.query(holes_df.loc[h_ind, "geometry"]).ravel()))
13311331
possible_geom_indices = [g_index_by_iloc[k] for k in possible_geom_integer_indices]
13321332

13331333
for g_ind in possible_geom_indices:

0 commit comments

Comments
 (0)