
    Vh                         d Z ddlZddlmZmZmZ ddlmZm	Z	 ddgZ
 ed       ej                  d	      ded
fd              ZeZy)z+Current-flow closeness centrality measures.    N)CGInverseLaplacianFullInverseLaplacianSuperLUInverseLaplacian)not_implemented_forreverse_cuthill_mckee_ordering!current_flow_closeness_centralityinformation_centralitydirectedweight)
edge_attrsluc                 H   t        j                  |       st        j                  d      t        t        t
        d}| j                         }t        t        |             }t        j                  | t        t        |t        |                        }t        j                  |d      }|j                         }t        j                  |t        |      |      j                  d      }	|	j!                  |      }	 ||   |	d|      }
|D ]g  }|
j#                  |      }|D ]O  }||xx   |j%                  |      d|j%                  |      z  z
  z  cc<   ||xx   |j%                  |      z  cc<   Q i |j'                         D ci c]  \  }}||   d|z   c}}S c c}}w )	a  Compute current-flow closeness centrality for nodes.

    Current-flow closeness centrality is variant of closeness
    centrality based on effective resistance between nodes in
    a network. This metric is also known as information centrality.

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

    weight : None or string, optional (default=None)
      If None, all edge weights are considered equal.
      Otherwise holds the name of the edge attribute used as weight.
      The weight reflects the capacity or the strength of the
      edge.

    dtype: data type (default=float)
      Default data type for internal matrices.
      Set to np.float32 for lower memory consumption.

    solver: string (default='lu')
       Type of linear solver to use for computing the flow matrix.
       Options are "full" (uses most memory), "lu" (recommended), and
       "cg" (uses least memory).

    Returns
    -------
    nodes : dictionary
       Dictionary of nodes with current flow closeness centrality as the value.

    See Also
    --------
    closeness_centrality

    Notes
    -----
    The algorithm is from Brandes [1]_.

    See also [2]_ for the original definition of information centrality.

    References
    ----------
    .. [1] Ulrik Brandes and Daniel Fleischer,
       Centrality Measures Based on Current Flow.
       Proc. 22nd Symp. Theoretical Aspects of Computer Science (STACS '05).
       LNCS 3404, pp. 533-544. Springer-Verlag, 2005.
       https://doi.org/10.1007/978-3-540-31856-9_44

    .. [2] Karen Stephenson and Marvin Zelen:
       Rethinking centrality: Methods and examples.
       Social Networks 11(1):1-37, 1989.
       https://doi.org/10.1016/0378-8733(89)90016-6
    zGraph not connected.)fullr   cgg        )nodelistr   csc   )widthdtype   )nxis_connectedNetworkXErrorr   r   r   number_of_nodeslistr   relabel_nodesdictziprangefromkeyslaplacian_matrixasformatastypeget_rowitemitems)Gr   r   solver
solvernameNorderingHbetweennessLC2vcolwnodevalues                   e/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_closeness.pyr   r      ss   r ??1566$% J
 	
A2156H 	DXuQx!89:A--3'K	A
Aa@II%PA	A	F	AQe	4B *jjm 	*ANchhqkAO;;NNchhqk)N	**
 :E9J9J9LM+$HTNAI%MMMs   F)__doc__networkxr   *networkx.algorithms.centrality.flow_matrixr   r   r   networkx.utilsr   r   __all___dispatchablefloatr   r	        r5   <module>r?      sh    1  
 O.0H
I Z X&04E$ MN ' !MN` ; r>   