SergeiShumilin / differentiable-voronoi

Differentiable Voronoi tessellation on PyTorch for various tasks
3 stars 0 forks source link

assertion find_the_commn_side..(regions1, regions2) #3

Open Steven-LeMoal opened 1 month ago

Steven-LeMoal commented 1 month ago

In def differentiable_voronoi when boundaries is not None, clipped_vertices_dict could sometimes result in empty tensor (tensor([], size=(0, 2))).

One solution to not catch the assertion in calc_lengths_of_voronoi_edges_adjacent_to_vertices_to_crop in find_the_common_side_of_the_two_voronoi_regions(region1, region2) is to update the function like this:

from --->

def calc_lengths_of_voronoi_edges_adjacent_to_vertices_to_crop(edges,
                                                               clipped_vertices_dict,
                                                               edges_unique):
    lengths_of_voronoi_edges = torch.zeros(len(edges_unique))
    edges_to_delete = np.full(len(edges_unique), False)

    for e in edges:
        i, j = edges_unique[e]
        region1 = clipped_vertices_dict[i]
        region2 = clipped_vertices_dict[j]

        is_adjacent, length = find_the_common_side_of_the_two_voronoi_regions(region1, region2)
        if is_adjacent:
            lengths_of_voronoi_edges[e] = length
        else:
            edges_to_delete[e] = True
    return lengths_of_voronoi_edges, edges_to_delete

to --->

def calc_lengths_of_voronoi_edges_adjacent_to_vertices_to_crop(edges,
                                                               clipped_vertices_dict,
                                                               edges_unique):
    lengths_of_voronoi_edges = torch.zeros(len(edges_unique))
    edges_to_delete = np.full(len(edges_unique), False)

    for e in edges:
        i, j = edges_unique[e]
        region1 = clipped_vertices_dict[i]
        region2 = clipped_vertices_dict[j]

        if region1.nelement() == 0 or region2.nelement() == 0:
            edges_to_delete[e] = True
            continue

        is_adjacent, length = find_the_common_side_of_the_two_voronoi_regions(region1, region2)
        if is_adjacent:
            lengths_of_voronoi_edges[e] = length
        else:
            edges_to_delete[e] = True
    return lengths_of_voronoi_edges, edges_to_delete
SergeiShumilin commented 1 month ago

Thank you, Steven!

Could you please provide the scenario when clipped_vertices_dict is returned as an empty tensor?