U
    9vf	  ã                   @   sD   d Z ddlZdddgZejdd„ ƒZejdd„ ƒZejdd„ ƒZdS )	z8
Functions for identifying isolate (degree zero) nodes.
é    NÚ
is_isolateÚisolatesÚnumber_of_isolatesc                 C   s   |   |¡dkS )a-  Determines whether a node is an isolate.

    An *isolate* is a node with no neighbors (that is, with degree
    zero). For directed graphs, this means no in-neighbors and no
    out-neighbors.

    Parameters
    ----------
    G : NetworkX graph

    n : node
        A node in `G`.

    Returns
    -------
    is_isolate : bool
       True if and only if `n` has no neighbors.

    Examples
    --------
    >>> G = nx.Graph()
    >>> G.add_edge(1, 2)
    >>> G.add_node(3)
    >>> nx.is_isolate(G, 2)
    False
    >>> nx.is_isolate(G, 3)
    True
    r   ©Zdegree)ÚGÚn© r   ú?/tmp/pip-unpacked-wheel-_lngutwb/networkx/algorithms/isolate.pyr   	   s    c                 C   s   dd„ |   ¡ D ƒS )aÐ  Iterator over isolates in the graph.

    An *isolate* is a node with no neighbors (that is, with degree
    zero). For directed graphs, this means no in-neighbors and no
    out-neighbors.

    Parameters
    ----------
    G : NetworkX graph

    Returns
    -------
    iterator
        An iterator over the isolates of `G`.

    Examples
    --------
    To get a list of all isolates of a graph, use the :class:`list`
    constructor::

        >>> G = nx.Graph()
        >>> G.add_edge(1, 2)
        >>> G.add_node(3)
        >>> list(nx.isolates(G))
        [3]

    To remove all isolates in the graph, first create a list of the
    isolates, then use :meth:`Graph.remove_nodes_from`::

        >>> G.remove_nodes_from(list(nx.isolates(G)))
        >>> list(G)
        [1, 2]

    For digraphs, isolates have zero in-degree and zero out_degre::

        >>> G = nx.DiGraph([(0, 1), (1, 2)])
        >>> G.add_node(3)
        >>> list(nx.isolates(G))
        [3]

    c                 s   s   | ]\}}|d kr|V  qdS )r   Nr   )Ú.0r   Údr   r   r	   Ú	<genexpr>U   s      zisolates.<locals>.<genexpr>r   ©r   r   r   r	   r   *   s    +c                 C   s   t dd„ t| ƒD ƒƒS )a\  Returns the number of isolates in the graph.

    An *isolate* is a node with no neighbors (that is, with degree
    zero). For directed graphs, this means no in-neighbors and no
    out-neighbors.

    Parameters
    ----------
    G : NetworkX graph

    Returns
    -------
    int
        The number of degree zero nodes in the graph `G`.

    c                 s   s   | ]
}d V  qdS )é   Nr   )r
   Úvr   r   r	   r   k   s     z%number_of_isolates.<locals>.<genexpr>)Úsumr   r   r   r   r	   r   X   s    )Ú__doc__ZnetworkxZnxÚ__all__Ú	_dispatchr   r   r   r   r   r   r	   Ú<module>   s   

 
-