+
    �°³j)  ã                   óJ  € R t ^ RIt^ RIHt . ROt]! R4      ]! R4      ]P                  RR/R l4       4       4       t]! R4      ]! R4      ]P                  RR/R l4       4       4       t]! R4      ]! R4      ]P                  R	 4       4       4       t	]P                  R
 4       t
R# )z5
Subraph centrality and communicability betweenness.
N)Únot_implemented_forÚdirectedÚ
multigraphÚ
normalizedFc               ó4  € ^ RI p\        V 4      p\        P                  ! W4      p^WDR8g  &   VP                  P                  V4      p\        \        VP                  4       4      pV'       d   WfP                  4       ,          p\        \        W64      4      pV# )a„  Returns the subgraph centrality for each node of G.

Subgraph centrality  of a node `n` is the sum of weighted closed
walks of all lengths starting and ending at node `n`. The weights
decrease with path length. Each closed walk is associated with a
connected subgraph ([1]_).

Parameters
----------
G: graph
normalized : bool
    If True, normalize the centrality values using the largest eigenvalue of the
    adjacency matrix so that the centrality values are generally between 0 and 1.

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

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

See Also
--------
subgraph_centrality:
    Alternative algorithm of the subgraph centrality for each node of G.

Notes
-----
This version of the algorithm exponentiates the adjacency matrix.

The subgraph centrality of a node `u` in G can be found using
the matrix exponential of the adjacency matrix of G [1]_,

.. math::

    SC(u)=(e^A)_{uu} .

Examples
--------
(Example from [1]_)

>>> G = nx.Graph(
...     [
...         (1, 2),
...         (1, 5),
...         (1, 8),
...         (2, 3),
...         (2, 8),
...         (3, 4),
...         (3, 6),
...         (4, 5),
...         (4, 7),
...         (5, 6),
...         (6, 7),
...         (7, 8),
...     ]
... )
>>> sc = nx.subgraph_centrality_exp(G)
>>> print([f"{node} {sc[node]:0.2f}" for node in sorted(sc)])
['1 3.90', '2 3.90', '3 3.64', '4 3.71', '5 3.64', '6 3.71', '7 3.64', '8 3.90']
>>> sc = nx.subgraph_centrality(G, normalized=True)
>>> print([f"{node} {sc[node]:0.3f}" for node in sorted(sc)])
['1 0.194', '2 0.194', '3 0.181', '4 0.184', '5 0.181', '6 0.184', '7 0.181', '8 0.194']

References
----------
.. [1] Ernesto Estrada, Juan A. Rodriguez-Velazquez,
   "Subgraph centrality in complex networks",
   Physical Review E 71, 056103 (2005).
   https://arxiv.org/abs/cond-mat/0504730

Ng        )ÚscipyÚlistÚnxÚto_numpy_arrayÚlinalgÚexpmÚmapÚfloatÚdiagonalÚmaxÚdictÚzip)ÚGr   ÚspÚnodelistÚAÚexpAÚvaluesÚscs   &$      Úl/home/luca/screen-checking/.venv/lib/python3.14/site-packages/networkx/algorithms/centrality/subgraph_alg.pyÚsubgraph_centrality_expr      su   € ó` ä�A‹w€HÜ
×Ò˜!Ó&€Aà€Aˆ3�h�KØ�9‰9�>‰>˜!Ó€DÜ”˜Ÿ™›Ó(€FßØŸ*™*›,Õ&ˆä	Œc�(Ó#Ó	$€BØ€Ió    c          	     ó´  € ^ RI p\        V 4      p\        P                  ! W4      p^WBP	                  V4      &   VP
                  P                  V4      w  rVVP                  V4      ^,          pV'       d'   VP                  WUP                  4       ,
          4      pMVP                  V4      pWx,          p	\        \        V\        \        V	4      4      4      p
V
# )a   Returns subgraph centrality for each node in G.

Subgraph centrality  of a node `n` is the sum of weighted closed
walks of all lengths starting and ending at node `n`. The weights
decrease with path length. Each closed walk is associated with a
connected subgraph ([1]_).

Parameters
----------
G: Graph
normalized : bool
    If True, normalize the centrality values using the largest eigenvalue of the
    adjacency matrix so that the centrality values are generally between 0 and 1.

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

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

See Also
--------
subgraph_centrality_exp:
    Alternative algorithm of the subgraph centrality for each node of G.

Notes
-----
This version of the algorithm computes eigenvalues and eigenvectors
of the adjacency matrix.

Subgraph centrality of a node `u` in G can be found using
a spectral decomposition of the adjacency matrix [1]_,

.. math::

   SC(u)=\sum_{j=1}^{N}(v_{j}^{u})^2 e^{\lambda_{j}},

where `v_j` is an eigenvector of the adjacency matrix `A` of G
corresponding to the eigenvalue `\lambda_j`.

Examples
--------
(Example from [1]_)

>>> G = nx.Graph(
...     [
...         (1, 2),
...         (1, 5),
...         (1, 8),
...         (2, 3),
...         (2, 8),
...         (3, 4),
...         (3, 6),
...         (4, 5),
...         (4, 7),
...         (5, 6),
...         (6, 7),
...         (7, 8),
...     ]
... )
>>> sc = nx.subgraph_centrality(G)
>>> print([f"{node} {sc[node]:0.2f}" for node in sorted(sc)])
['1 3.90', '2 3.90', '3 3.64', '4 3.71', '5 3.64', '6 3.71', '7 3.64', '8 3.90']
>>> sc = nx.subgraph_centrality(G, normalized=True)
>>> print([f"{node} {sc[node]:0.3f}" for node in sorted(sc)])
['1 0.194', '2 0.194', '3 0.181', '4 0.184', '5 0.181', '6 0.184', '7 0.181', '8 0.194']

References
----------
.. [1] Ernesto Estrada, Juan A. Rodriguez-Velazquez,
   "Subgraph centrality in complex networks",
   Physical Review E 71, 056103 (2005).
   https://arxiv.org/abs/cond-mat/0504730

N)Únumpyr   r	   r
   Únonzeror   ÚeighÚarrayÚexpr   r   r   r   r   )r   r   Únpr   r   ÚwÚvÚvsquareÚexpwÚxgr   s   &$         r   Úsubgraph_centralityr)   o   s    € óf ä�A‹w€HÜ
×Ò˜!Ó&€Aà€A‡j�j�ƒmÑØ�9‰9�>‰>˜!Ó�D€AØ�h‰h�q‹k˜QÕ€GßØ�v‰v�aŸ%™%›'•kÓ"‰à�v‰v�a‹yˆØ	�€Bä	Œc�(œC¤ r›NÓ+Ó	,€BØ€Ir   c                ó~  € ^ RI p^ RIp\        V 4      p\        V4      p\        P
                  ! W4      p^WQP                  V4      &   VP                  P                  V4      p\        \        V\        V4      4      4      p/ pV  FË  p	Wy,          p
WZR3,          P                  4       pVRV
3,          P                  4       p^ WZR3&   ^ VRV
3&   WbP                  P                  V4      ,
          V,          p^ WÚR3&   ^ VRV
3&   WÑP                  VP                  V4      4      ,          p\        VP                  4       4      W‰&   WµV
R3&   WÅRV
3&   KÍ  	  \        V4      pV^8”  dR   RVR,
          ^,          VR,
          ,
          ,          pVP!                  4        UUu/ uF  w  ppVVV,          bK  	  pppV# u uppi )aQ  Returns subgraph communicability for all pairs of nodes in G.

Communicability betweenness measure makes use of the number of walks
connecting every pair of nodes as the basis of a betweenness centrality
measure.

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

Returns
-------
nodes : dictionary
    Dictionary of nodes with communicability betweenness as the value.

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

Notes
-----
Let `G=(V,E)` be a simple undirected graph with `n` nodes and `m` edges,
and `A` denote the adjacency matrix of `G`.

Let `G(r)=(V,E(r))` be the graph resulting from
removing all edges connected to node `r` but not the node itself.

The adjacency matrix for `G(r)` is `A+E(r)`,  where `E(r)` has nonzeros
only in row and column `r`.

The subraph betweenness of a node `r`  is [1]_

.. math::

     \omega_{r} = \frac{1}{C}\sum_{p}\sum_{q}\frac{G_{prq}}{G_{pq}},
     p\neq q, q\neq r,

where
`G_{prq}=(e^{A}_{pq} - (e^{A+E(r)})_{pq}`  is the number of walks
involving node r,
`G_{pq}=(e^{A})_{pq}` is the number of closed walks starting
at node `p` and ending at node `q`,
and `C=(n-1)^{2}-(n-1)` is a normalization factor equal to the
number of terms in the sum.

The resulting `\omega_{r}` takes values between zero and one.
The lower bound cannot be attained for a connected
graph, and the upper bound is attained in the star graph.

References
----------
.. [1] Ernesto Estrada, Desmond J. Higham, Naomichi Hatano,
   "Communicability Betweenness in Complex Networks"
   Physica A 388 (2009) 764-774.
   https://arxiv.org/abs/0905.4102

Examples
--------
>>> G = nx.Graph([(0, 1), (1, 2), (1, 5), (5, 4), (2, 4), (2, 3), (4, 3), (3, 6)])
>>> cbc = nx.communicability_betweenness_centrality(G)
>>> print([f"{node} {cbc[node]:0.2f}" for node in sorted(cbc)])
['0 0.03', '1 0.45', '2 0.51', '3 0.45', '4 0.40', '5 0.19', '6 0.03']
N:NNNg      ð?)r   r   r   Úlenr	   r
   r   r   r   r   r   ÚrangeÚcopyÚdiagr   ÚsumÚitems)r   r#   r   r   Únr   r   ÚmappingÚcbcr%   ÚiÚrowÚcolÚBÚorderÚscaleÚnodeÚvalues   &                 r   Ú&communicability_betweenness_centralityr<   Ô   sˆ  € óH Ûä�A‹w€HÜˆH‹€AÜ
×Ò˜!Ó&€Aà€A‡j�j�ƒmÑØ�9‰9�>‰>˜!Ó€DÜ”3�x¤ q£Ó*Ó+€GØ
€CÛˆà�JˆØ�1��g�l‰l‹nˆØ��1��g�l‰l‹nˆØˆˆQˆ$‰Øˆˆ!ˆQˆ$‰Ø—I‘I—N‘N 1Ó%Õ%¨Õ-ˆàˆˆQˆ$‰Øˆˆ!ˆQˆ$‰Ø	�W‰W�R—W‘W˜Q“ZÓ Õ ˆÜ�q—u‘u“w“ˆ‰àˆ!ˆQˆ$‰Øˆ!ˆQˆ$‹ñ ô" �‹H€EØˆq„yØ˜ �¨Õ)¨U°S­[Õ9Õ:ˆØ69·i±i´kÔB±k¡{ t¨Uˆt�U˜U•]Ò"±kˆÑBØ€Jùó Cs   ÆF9c                óF   € \        \        V 4      P                  4       4      # )uC  Returns the Estrada index of a the graph G.

The Estrada Index is a topological index of folding or 3D "compactness" ([1]_).

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

Returns
-------
estrada index: float

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

Notes
-----
Let `G=(V,E)` be a simple undirected graph with `n` nodes  and let
`\lambda_{1}\leq\lambda_{2}\leq\cdots\lambda_{n}`
be a non-increasing ordering of the eigenvalues of its adjacency
matrix `A`. The Estrada index is ([1]_, [2]_)

.. math::
    EE(G)=\sum_{j=1}^n e^{\lambda _j}.

References
----------
.. [1] E. Estrada, "Characterization of 3D molecular structure",
   Chem. Phys. Lett. 319, 713 (2000).
   https://doi.org/10.1016/S0009-2614(00)00158-5
.. [2] JosÃ© Antonio de la PeÃ±aa, Ivan Gutman, Juan Rada,
   "Estimating the Estrada index",
   Linear Algebra and its Applications. 427, 1 (2007).
   https://doi.org/10.1016/j.laa.2007.06.020

Examples
--------
>>> G = nx.Graph([(0, 1), (1, 2), (1, 5), (5, 4), (2, 4), (2, 3), (4, 3), (3, 6)])
>>> ei = nx.estrada_index(G)
>>> print(f"{ei:0.5}")
20.55
)r/   r)   r   )r   s   &r   Úestrada_indexr>   ;  s   € ô\ Ô" 1Ó%×,Ñ,Ó.Ó/Ð/r   )r   r)   r<   r>   )Ú__doc__Únetworkxr	   Únetworkx.utilsr   Ú__all__Ú_dispatchabler   r)   r<   r>   © r   r   Ú<module>rE      sè   ðñó Ý .ò€ñ �ZÓ Ù�\Ó"Ø×ÑðY¨Uó Yó ó #ó !ðYñx �ZÓ Ù�\Ó"Ø×Ñð_¨ó _ó ó #ó !ð_ñD �ZÓ Ù�\Ó"Ø×Ññaó ó #ó !ðaðH ×Ññ-0ó ò-0r   