+
    )i                     ^    R t ^ RIHt ^ RIt^ RIHt R.t]P                  RR l4       tR t	R# )z%Node redundancy for bipartite graphs.)combinationsN)NetworkXErrornode_redundancyc                   a  Vf   S p\         ;QJ d    V 3R lV 4       F  '       g   K   RM	  RM! V 3R lV 4       4      '       d   \        R4      hV Uu/ uF  q"\        S V4      bK  	  up# u upi )u  Computes the node redundancy coefficients for the nodes in the bipartite
graph `G`.

The redundancy coefficient of a node `v` is the fraction of pairs of
neighbors of `v` that are both linked to other nodes. In a one-mode
projection these nodes would be linked together even if `v` were
not there.

More formally, for any vertex `v`, the *redundancy coefficient of `v`* is
defined by

.. math::

    rc(v) = \frac{|\{\{u, w\} \subseteq N(v),
    \: \exists v' \neq  v,\: (v',u) \in E\:
    \mathrm{and}\: (v',w) \in E\}|}{ \frac{|N(v)|(|N(v)|-1)}{2}},

where `N(v)` is the set of neighbors of `v` in `G` [1]_.

Parameters
----------
G : graph
    A bipartite graph

nodes : list or iterable (optional)
    Compute redundancy for these nodes. The default is all nodes in G.

Returns
-------
redundancy : dictionary
    A dictionary keyed by node with the node redundancy value.

Examples
--------
Compute the redundancy coefficient of each node in a graph:

>>> from networkx.algorithms import bipartite
>>> G = nx.cycle_graph(4)
>>> rc = bipartite.node_redundancy(G)
>>> rc[0]
1.0

Compute the average redundancy for the graph:

>>> from networkx.algorithms import bipartite
>>> G = nx.cycle_graph(4)
>>> rc = bipartite.node_redundancy(G)
>>> sum(rc.values()) / len(G)
1.0

Compute the average redundancy for a set of nodes:

>>> from networkx.algorithms import bipartite
>>> G = nx.cycle_graph(4)
>>> rc = bipartite.node_redundancy(G)
>>> nodes = [0, 2]
>>> sum(rc[n] for n in nodes) / len(nodes)
1.0

Raises
------
NetworkXError
    If any of the nodes in the graph (or in `nodes`, if specified) has
    (out-)degree less than two (which would result in division by zero,
    according to the definition of the redundancy coefficient).

References
----------
.. [1] Latapy, Matthieu, Clémence Magnien, and Nathalie Del Vecchio (2008).
   Basic notions for the analysis of large two-mode networks.
   Social Networks 30(1), 31--48.

c              3   N   <"   T F  p\        SV,          4      ^8  x  K  	  R# 5i)   N)len).0vGs   & f/var/www/html/photoedit/myenv/lib/python3.14/site-packages/networkx/algorithms/bipartite/redundancy.py	<genexpr>"node_redundancy.<locals>.<genexpr>X   s     
(%Q3qt9q=%s   "%TFzSCannot compute redundancy coefficient for a node that has fewer than two neighbors.)anyr   _node_redundancy)r   nodesr
   s   f& r   r   r      sh    V }
s
(%
(sss
(%
(((2
 	

 055u!1%%u555s   A/c                   a a \        S S,          4      p\        V V3R l\        S S,          ^4       4       4      p^V,          W"^,
          ,          ,          # )a  Returns the redundancy of the node `v` in the bipartite graph `G`.

If `G` is a graph with `n` nodes, the redundancy of a node is the ratio
of the "overlap" of `v` to the maximum possible overlap of `v`
according to its degree. The overlap of `v` is the number of pairs of
neighbors that have mutual neighbors themselves, other than `v`.

`v` must have at least two neighbors in `G`.

c              3      <"   T FB  w  r\        SV,          4      \        SV,          4      ,          S0,
          '       g   K>  ^x  KD  	  R# 5i)   N)set)r	   uwr   r
   s   &  r   r   #_node_redundancy.<locals>.<genexpr>m   s:      -fq#ad)c!A$i2GA31N1N-s   ;A
A)r   sumr   )r   r
   noverlaps   ff  r   r   r   a   sK     	AaD	A $QqT1- G KAQK((    )N)
__doc__	itertoolsr   networkxnxr   __all___dispatchabler   r    r   r   <module>r$      s;    + "  "
 R6 R6j)r   