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
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)