o
    h{	                     @   s$   d Z ddlZdgZejdd ZdS )z(Function for computing walks in a graph.    Nnumber_of_walksc                    sZ   ddl }|dk rtd| tj dd}|j| | fddt D }|S )a  Returns the number of walks connecting each pair of nodes in `G`

    A *walk* is a sequence of nodes in which each adjacent pair of nodes
    in the sequence is adjacent in the graph. A walk can repeat the same
    edge and go in the opposite direction just as people can walk on a
    set of paths, but standing still is not counted as part of the walk.

    This function only counts the walks with `walk_length` edges. Note that
    the number of nodes in the walk sequence is one more than `walk_length`.
    The number of walks can grow very quickly on a larger graph
    and with a larger walk length.

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

    walk_length : int
        A nonnegative integer representing the length of a walk.

    Returns
    -------
    dict
        A dictionary of dictionaries in which outer keys are source
        nodes, inner keys are target nodes, and inner values are the
        number of walks of length `walk_length` connecting those nodes.

    Raises
    ------
    ValueError
        If `walk_length` is negative

    Examples
    --------

    >>> G = nx.Graph([(0, 1), (1, 2)])
    >>> walks = nx.number_of_walks(G, 2)
    >>> walks
    {0: {0: 1, 1: 0, 2: 1}, 1: {0: 0, 1: 2, 2: 0}, 2: {0: 1, 1: 0, 2: 1}}
    >>> total_walks = sum(sum(tgts.values()) for _, tgts in walks.items())

    You can also get the number of walks from a specific source node using the
    returned dictionary. For example, number of walks of length 1 from node 0
    can be found as follows:

    >>> walks = nx.number_of_walks(G, 1)
    >>> walks[0]
    {0: 0, 1: 1, 2: 0}
    >>> sum(walks[0].values())  # walks from 0 of length 1
    1

    Similarly, a target node can also be specified:

    >>> walks[0][1]
    1

    r   Nz"`walk_length` cannot be negative: )weightc                    s*   i | ]\ }| fd dt D qS )c                    s   i | ]\}}|  |qS  )item).0v_idxv)poweru_idxr   m/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/networkx/algorithms/walks.py
<dictcomp>L   s    z.number_of_walks.<locals>.<dictcomp>.<dictcomp>)	enumerate)r   uGr	   )r
   r   r   K   s    z#number_of_walks.<locals>.<dictcomp>)numpy
ValueErrornxadjacency_matrixlinalgmatrix_powertoarrayr   )r   walk_lengthnpAresultr   r   r   r      s   :)__doc__networkxr   __all___dispatchabler   r   r   r   r   <module>   s
    