def prune_clade(self, node_id):
        """Prune `node_id` and the edges and nodes that are tipward of it.
        Caller must delete the edge to node_id."""
        to_del_nodes = [node_id]
        while bool(to_del_nodes):
            node_id = to_del_nodes.pop(0)
            self._flag_node_as_del_and_del_in_by_target(node_id)
            ebsd = self._edge_by_source.get(node_id)
            if ebsd is not None:
                child_edges = list(ebsd.values())
                to_del_nodes.extend([i['@target'] for i in child_edges])
                del self._edge_by_source[
                    node_id]
def prune_clade ( self , node_id ) : to_del_nodes = [ node_id ] while bool ( to_del_nodes ) : node_id = to_del_nodes . pop ( 0 ) self . _flag_node_as_del_and_del_in_by_target ( node_id ) ebsd = self . _edge_by_source . get ( node_id ) if ebsd is not None : child_edges = list ( ebsd . values ( ) ) to_del_nodes . extend ( [ i [ '@target' ] for i in child_edges ] ) del self . _edge_by_source [ node_id ]
Prune `node_id` and the edges and nodes that are tipward of it.
        Caller must delete the edge to node_id.