o
    3ήc                     @   sX   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dedfd	dZeZdS )
z+Current-flow closeness centrality measures.    N)CGInverseLaplacianFullInverseLaplacianSuperLUInverseLaplacian)not_implemented_forreverse_cuthill_mckee_ordering!current_flow_closeness_centralityinformation_centralitydirectedluc              	      s  t | s
t dtttd}|  }tt|  t 	| t
t t|}t
|d}| }t j|t||dd}||}|| |d|d}	|D ]&}
|	|
}|D ]}||
  ||
 d||   7  < ||  ||
 7  < qWqN|D ]
}
d||
  ||
< qw fd	d
| D S )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        )nodelistweightcsc   )widthdtype   c                    s   i | ]	\}} | |qS  r   ).0kvorderingr   \/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/centrality/current_flow_closeness.py
<dictcomp>]   s    z5current_flow_closeness_centrality.<locals>.<dictcomp>)nxis_connectedNetworkXErrorr   r   r   number_of_nodeslistr   relabel_nodesdictziprangefromkeyslaplacian_matrixasformatastypeget_rowitems)Gr   r   solver
solvernamenHbetweennessLC2r   colwr   r   r   r      s.   
8


 )__doc__networkxr   *networkx.algorithms.centrality.flow_matrixr   r   r   networkx.utilsr   r   __all__floatr   r   r   r   r   r   <module>   s    R