
    h'                         S r SSKrSSKJr  SSKJr  SS/r\" SS	5      \R                  SS
 j5       5       rS r	\" SS	5      \R                  S 5       5       r
g)z8Algorithms to calculate reciprocity in a directed graph.    N)NetworkXError   )not_implemented_forreciprocityoverall_reciprocity
undirected
multigraphc                     Uc  [        U 5      $ X;   a'  [        [        X5      5      S   nUc  [        S5      eU$ [	        [        X5      5      $ )a  Compute the reciprocity in a directed graph.

The reciprocity of a directed graph is defined as the ratio
of the number of edges pointing in both directions to the total
number of edges in the graph.
Formally, $r = |{(u,v) \in G|(v,u) \in G}| / |{(u,v) \in G}|$.

The reciprocity of a single node u is defined similarly,
it is the ratio of the number of edges in both directions to
the total number of edges attached to node u.

Parameters
----------
G : graph
   A networkx directed graph
nodes : container of nodes, optional (default=whole graph)
   Compute reciprocity for nodes in this container.

Returns
-------
out : dictionary
   Reciprocity keyed by node label.

Notes
-----
The reciprocity is not defined for isolated nodes.
In such cases this function will return None.

   zNot defined for isolated nodes.)r   next_reciprocity_iterr   dict)Gnodesr   s      Q/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/reciprocity.pyr   r      s\    B }"1%% z,Q67: ABB !!+,,    c              #   &  #    U R                  U5      nU Hv  n[        U R                  U5      5      n[        U R                  U5      5      nXE-  n[	        U5      [	        U5      -   nUS:X  a  US4v   M`  S[	        U5      -  U-  nX84v   Mx     g7f)z*Return an iterator of (node, reciprocity).r   Nr   )nbunch_itersetpredecessors
successorslen)	r   r   nnodepredsuccoverlapn_totalr   s	            r   r   r   =   s     	eA1>>$'(1<<%&+d)c$i' a<,c'l*W4K%% s   BBc                     U R                  5       nXR                  5       R                  5       -
  S-  nUS:X  a  [        S5      eX!-  $ )zCompute the reciprocity for the whole graph.

See the doc of reciprocity for the definition.

Parameters
----------
G : graph
   A networkx graph

r   r   zNot defined for empty graphs)number_of_edgesto_undirectedr   )r   
n_all_edgen_overlap_edges      r   r   r   O   sK     ""$J ??#4#D#D#FF!KNQ:;;&&r   )N)__doc__networkxnxr   utilsr   __all___dispatchabler   r   r    r   r   <module>r+      st    >  " '/
0 \<0--  1--`&$ \<0'  1'r   