
    \Mh                         d Z ddlZddlmZ ddgZ ed           ed          ej        d                                     Z ed           ed          ej        d	                                     ZdS )
z
Communicability.
    N)not_implemented_forcommunicabilitycommunicability_expdirected
multigraphc           
      P   ddl }t          |           }t          j        | |          }d||dk    <   |j                            |          \  }}|                    |          }t          t          |t          t          |                                        }i }| D ]}	i ||	<   | D ]|}
d}||	         }||
         }t          t          |                    D ]3}||dd|f         |         |dd|f         |         z  ||         z  z  }4t          |          ||	         |
<   }|S )a  Returns communicability between all pairs of nodes in G.

    The communicability between pairs of nodes in G is the sum of
    walks of different lengths starting at node u and ending at node v.

    Parameters
    ----------
    G: graph

    Returns
    -------
    comm: dictionary of dictionaries
        Dictionary of dictionaries keyed by nodes with communicability
        as the value.

    Raises
    ------
    NetworkXError
       If the graph is not undirected and simple.

    See Also
    --------
    communicability_exp:
       Communicability between all pairs of nodes in G  using spectral
       decomposition.
    communicability_betweenness_centrality:
       Communicability betweenness centrality for each node in G.

    Notes
    -----
    This algorithm uses a spectral decomposition of the adjacency matrix.
    Let G=(V,E) be a simple undirected graph.  Using the connection between
    the powers  of the adjacency matrix and the number of walks in the graph,
    the communicability  between nodes `u` and `v` based on the graph spectrum
    is [1]_

    .. math::
        C(u,v)=\sum_{j=1}^{n}\phi_{j}(u)\phi_{j}(v)e^{\lambda_{j}},

    where `\phi_{j}(u)` is the `u\rm{th}` element of the `j\rm{th}` orthonormal
    eigenvector of the adjacency matrix associated with the eigenvalue
    `\lambda_{j}`.

    References
    ----------
    .. [1] Ernesto Estrada, Naomichi Hatano,
       "Communicability in complex networks",
       Phys. Rev. E 77, 036111 (2008).
       https://arxiv.org/abs/0707.0756

    Examples
    --------
    >>> G = nx.Graph([(0, 1), (1, 2), (1, 5), (5, 4), (2, 4), (2, 3), (4, 3), (3, 6)])
    >>> c = nx.communicability(G)
    r   N           )numpylistnxto_numpy_arraylinalgeighexpdictziprangelenfloat)GnpnodelistAwvecexpwmappingcuvspqjs                  g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/algorithms/communicability_alg.pyr   r      sA   v AwwH
!X&&AAa3hKY^^AFAs66!99D3xs8}}!5!56677G
A  ! 	 	AA
A
A3x==)) ; ;SAYq\C1IaL047::AhhAaDGG	 H    c           
         ddl }t          |           }t          j        | |          }d||dk    <   |j                            |          }t          t          |t          t          |                                        }i }| D ]8}i ||<   | D ].}t          |||         ||         f                   ||         |<   /9|S )a  Returns communicability between all pairs of nodes in G.

    Communicability between pair of node (u,v) of node in G is the sum of
    walks of different lengths starting at node u and ending at node v.

    Parameters
    ----------
    G: graph

    Returns
    -------
    comm: dictionary of dictionaries
        Dictionary of dictionaries keyed by nodes with communicability
        as the value.

    Raises
    ------
    NetworkXError
        If the graph is not undirected and simple.

    See Also
    --------
    communicability:
       Communicability between pairs of nodes in G.
    communicability_betweenness_centrality:
       Communicability betweenness centrality for each node in G.

    Notes
    -----
    This algorithm uses matrix exponentiation of the adjacency matrix.

    Let G=(V,E) be a simple undirected graph.  Using the connection between
    the powers  of the adjacency matrix and the number of walks in the graph,
    the communicability between nodes u and v is [1]_,

    .. math::
        C(u,v) = (e^A)_{uv},

    where `A` is the adjacency matrix of G.

    References
    ----------
    .. [1] Ernesto Estrada, Naomichi Hatano,
       "Communicability in complex networks",
       Phys. Rev. E 77, 036111 (2008).
       https://arxiv.org/abs/0707.0756

    Examples
    --------
    >>> G = nx.Graph([(0, 1), (1, 2), (1, 5), (5, 4), (2, 4), (2, 3), (4, 3), (3, 6)])
    >>> c = nx.communicability_exp(G)
    r   Nr	   r
   )scipyr   r   r   r   expmr   r   r   r   r   )	r   spr   r   expAr   r   r    r!   s	            r&   r   r   ]   s    p AwwH
!X&&AAa3hK9>>!D3xs8}}!5!56677G
A : :! 	: 	:ADWQZ!7899AaDGG	:Hr'   )	__doc__networkxr   networkx.utilsr   __all___dispatchabler   r    r'   r&   <module>r3      s         . . . . . .3
4 Z  \""L L  #" ! L^ Z  \""C C  #" ! C C Cr'   