@@ -1528,7 +1528,6 @@ defmodule Graph do
15281528 defp prune_edge_index (
15291529 % __MODULE__ {
15301530 multigraph: true ,
1531- edge_index: edge_index ,
15321531 edges: meta ,
15331532 partition_by: partition_by
15341533 } = g ,
@@ -1548,14 +1547,14 @@ defmodule Graph do
15481547 v1_key = { v1_id , edge_p }
15491548 v2_key = { v2_id , edge_p }
15501549
1551- edge_index =
1552- edge_index
1550+ updated_edge_index =
1551+ acc . edge_index
15531552 |> Map . delete ( v1_key )
15541553 |> Map . delete ( v2_key )
15551554
15561555 % __MODULE__ {
15571556 acc
1558- | edge_index: edge_index
1557+ | edge_index: updated_edge_index
15591558 }
15601559 end )
15611560 end )
@@ -1564,7 +1563,6 @@ defmodule Graph do
15641563 defp prune_edge_index (
15651564 % __MODULE__ {
15661565 multigraph: true ,
1567- edge_index: edge_index ,
15681566 edges: meta ,
15691567 partition_by: partition_by
15701568 } = g ,
@@ -1584,25 +1582,47 @@ defmodule Graph do
15841582
15851583 edge_partitions = partition_by . ( edge )
15861584
1585+ edge_key = { v1_id , v2_id }
1586+
15871587 Enum . reduce ( edge_partitions , g , fn edge_p , acc ->
15881588 partition =
1589- edge_index
1589+ acc . edge_index
15901590 |> Map . get ( edge_p , % { } )
1591- |> Map . reject ( fn { k , v } ->
1592- ( k == v1_id and MapSet . member? ( v , { v1_id , v2_id } ) ) or
1593- ( k == v2_id and MapSet . member? ( v , { v1_id , v2_id } ) )
1591+ |> Enum . reduce ( % { } , fn { k , v } , new_partition ->
1592+ cond do
1593+ k == v1_id ->
1594+ remaining = MapSet . delete ( v , edge_key )
1595+
1596+ if MapSet . size ( remaining ) > 0 do
1597+ Map . put ( new_partition , k , remaining )
1598+ else
1599+ new_partition
1600+ end
1601+
1602+ k == v2_id ->
1603+ remaining = MapSet . delete ( v , edge_key )
1604+
1605+ if MapSet . size ( remaining ) > 0 do
1606+ Map . put ( new_partition , k , remaining )
1607+ else
1608+ new_partition
1609+ end
1610+
1611+ true ->
1612+ Map . put ( new_partition , k , v )
1613+ end
15941614 end )
15951615
1596- edge_index =
1616+ updated_edge_index =
15971617 if not Enum . empty? ( partition ) do
1598- Map . put ( edge_index , edge_p , partition )
1618+ Map . put ( acc . edge_index , edge_p , partition )
15991619 else
1600- Map . delete ( edge_index , edge_p )
1620+ Map . delete ( acc . edge_index , edge_p )
16011621 end
16021622
16031623 % __MODULE__ {
16041624 acc
1605- | edge_index: edge_index
1625+ | edge_index: updated_edge_index
16061626 }
16071627 end )
16081628 end
0 commit comments