
    h{	                     :    S r SSKrS/r\R                  S 5       rg)z(Function for computing walks in a graph.    Nnumber_of_walksc                 r   SSK nUS:  a  [        SU 35      e[        R                  " U SS9nUR                  R                  UR                  5       U5      n[        U 5       VVVVs0 s H5  u  pVU[        U 5       VVs0 s H  u  pxXR                  XW5      _M     snn_M7     n	nnnnU	$ s  snnf s  snnnnf )a7  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: )weight)	numpy
ValueErrornxadjacency_matrixlinalgmatrix_powertoarray	enumerateitem)
Gwalk_lengthnpApoweru_idxuv_idxvresults
             K/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/walks.pyr   r      s    t Q=k]KLL
Ad+A II""199;<E "!$HE 	
	!EHEAzz%''EE$   M Fs   (B1
?B+B1
+B1
)__doc__networkxr   __all___dispatchabler        r   <module>r       s/    . 
 F Fr   