def remove_node(node: BaseNode) -> Tuple[Dict[Text, Edge], Dict[int, Edge]]:
    """Remove a node from the network.

  Args:
    node: The node to be removed.

  Returns:
    A tuple of:
      disconnected_edges_by_name: A Dictionary mapping `node`'s axis names to
        the newly broken edges.
      disconnected_edges_by_axis: A Dictionary mapping `node`'s axis numbers
        to the newly broken edges.

  Raises:
    ValueError: If the node isn't in the network.
  """
    disconnected_edges_by_name = {}
    disconnected_edges_by_axis = {}
    for i, name in enumerate(node.axis_names):
        if not node[i].is_dangling() and not node[i].is_trace():
            edge1, edge2 = disconnect(node[i])
            new_disconnected_edge = edge1 if edge1.node1 is not node else edge2
            disconnected_edges_by_axis[i] = new_disconnected_edge
            disconnected_edges_by_name[name] = new_disconnected_edge
    return disconnected_edges_by_name, disconnected_edges_by_axis
Example #2
0
  def disconnect(self,
                 edge: network_components.Edge,
                 dangling_edge_name_1: Optional[Text] = None,
                 dangling_edge_name_2: Optional[Text] = None
                ) -> Tuple[network_components.Edge, network_components.Edge]:
    """Break a edge into two dangling edges.

    Args:
      edge: An edge to break.
      dangling_edge_name_1: Optional name to give the new dangling edge 1.
      dangling_edge_name_2: Optional name to give the new dangling edge 2.

    Returns:
      A tuple of the two new dangling edges.

    Raises:
     ValueError: If input edge is a dangling one.
    """
    return network_components.disconnect(edge, dangling_edge_name_1,
                                         dangling_edge_name_2)