ó
    …~i	  ã                   ó:   • 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                 óŠ  • SSK nUS:  a  [        SU 35      e[        R                  " U SS9nUR                  R
                  R                  X15      R                  5       n[        U 5       VVVVs0 s H8  u  pVU[        U 5       VVs0 s H  u  pxX„XW4   R                  5       _M     snn_M:     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)
ÚscipyÚ
ValueErrorÚnxÚadjacency_matrixÚsparseÚlinalgÚmatrix_powerÚtocsrÚ	enumerateÚitem)
ÚGÚwalk_lengthÚspÚAÚpowerÚu_idxÚuÚv_idxÚvÚresults
             ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/networkx/algorithms/walks.pyr   r      s¾   € ót à�QƒÜÐ=¸k¸]ÐKÓLÐLä
×Ò˜A dÑ+€AØ�I‰I×Ñ×)Ñ)¨!Ó9×?Ñ?ÓA€Eô " !œöâ$‰HˆEð 	
¼)ÀA¼,ÔGº,©h¨eˆA�U�\Ñ"×'Ñ'Ó)Ò)¹,ÒGÒGÙ$ð ó ð €Mùó Hùõs   Á1B=
Â B7Â(B=
Â7B=
)Ú__doc__Únetworkxr   Ú__all__Ú_dispatchabler   © ó    r   Ú<module>r!      s/   ðÙ .ã àÐ
€ð ×ÑñDó ñDr    