
    h                     R    S r SSKJr  SSKrS/r\R                  " SS9SS j5       rg)	z;Functions for computing the harmonic centrality of a graph.    )partialNharmonic_centralitydistance)
edge_attrsc                 >   [        Ub  U R                  U5      OU R                  5      n[        Ub  U R                  U5      OU R                  5      nU Vs0 s H  oDS_M     nnSn[        U5      [        U5      :  a4  SnX1p1[        R
                  " U 5      (       a  [        R                  " U SS9n [        [        R                  XS9nU HG  nU" U5      n	UR                  U	5       H'  nX   n
U
S:X  a  M  XV(       a  UOU==   SU
-  -  ss'   M)     MI     U$ s  snf )a  Compute harmonic centrality for nodes.

Harmonic centrality [1]_ of a node `u` is the sum of the reciprocal
of the shortest path distances from all other nodes to `u`

.. math::

    C(u) = \sum_{v \neq u} \frac{1}{d(v, u)}

where `d(v, u)` is the shortest-path distance between `v` and `u`.

If `sources` is given as an argument, the returned harmonic centrality
values are calculated as the sum of the reciprocals of the shortest
path distances from the nodes specified in `sources` to `u` instead
of from all nodes to `u`.

Notice that higher values indicate higher centrality.

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

nbunch : container (default: all nodes in G)
  Container of nodes for which harmonic centrality values are calculated.

sources : container (default: all nodes in G)
  Container of nodes `v` over which reciprocal distances are computed.
  Nodes not in `G` are silently ignored.

distance : edge attribute key, optional (default=None)
  Use the specified edge attribute as the edge distance in shortest
  path calculations.  If `None`, then each edge will have distance equal to 1.

Returns
-------
nodes : dictionary
  Dictionary of nodes with harmonic centrality as the value.

See Also
--------
betweenness_centrality, load_centrality, eigenvector_centrality,
degree_centrality, closeness_centrality

Notes
-----
If the 'distance' keyword is set to an edge attribute key then the
shortest-path length will be computed using Dijkstra's algorithm with
that edge attribute as the edge weight.

References
----------
.. [1] Boldi, Paolo, and Sebastiano Vigna. "Axioms for centrality."
       Internet Mathematics 10.3-4 (2014): 222-262.
r   FT)copy)weight   )
setnbunch_iternodeslennxis_directedreverser   shortest_path_lengthintersection)Gnbunchr   sourcesu
centrality
transposedsplvdistds              Y/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/centrality/harmonic.pyr   r   
   s   t &*<v&!''JFG,?!--(QWWMG &'1Q$J'J
6{S\!
!>>!

15)A
"))1
>C1v$$T*AAAvJqA.!a%7.	 +  % (s   D)NNN)__doc__	functoolsr   networkxr   __all___dispatchabler        r   <module>r&      s7    A   
! Z(N )Nr%   