ó
    ™“,jÌ  ã                   ó|   • S r SSKrSSKrSSKJr  SrSS jr\" S5      SS j5       rS r	S	 r
S
 rS rS rS rS rg)z4Unit tests for the sparsifier computation functions.é    N)Úpy_random_stateé   c                 ó0  • [        U R                  5       5      [        UR                  5       5      :X  d   eUR                  5        H>  u  pEU R                  XE5      (       d   eU(       d  M&  X   U   U   X   U   U   :X  a  M>   e   [	        [
        R                  " XS95      n[	        [
        R                  " XS95      nU R                  5        H@  nU R                  5        H)  nXF;   d  M
  XVU   ;   d  M  Xt   U   X&U   U   -  ::  a  M)   e   MB     g)aò  Test whether a spanner is valid.

This function tests whether the given spanner is a subgraph of the
given graph G with the same node set. It also tests for all shortest
paths whether they adhere to the given stretch.

Parameters
----------
G : NetworkX graph
    The original graph for which the spanner was constructed.

spanner : NetworkX graph
    The spanner to be tested.

stretch : float
    The proclaimed stretch of the spanner.

weight : object
    The edge attribute to use as distance.
©ÚweightN)ÚsetÚnodesÚedgesÚhas_edgeÚdictÚnxÚshortest_path_length)ÚGÚspannerÚstretchr   ÚuÚvÚoriginal_lengthÚspanner_lengths           Ú¸C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\networkx/algorithms/tests/test_sparsifiers.pyÚ_test_spannerr      s÷   € ô, ˆq�w‰w‹y‹>œS §¡£Ó1Ó1Ð1Ð1ð —‘–‰ˆØ�z‰z˜!×ÑÐÐßˆ6Ø‘:˜a‘= Ñ(¨A©D°©G°F©OÕ;Ð;Ð;ñ  ô œ2×2Ò2°1ÑDÓE€OÜœ"×1Ò1°'ÑIÓJ€NØ�W‰WŽYˆØ—‘–ˆAØÕ#¨¸QÑ-?Õ(?Ø%Ñ(¨Ñ+¨wÈÑ9KÈAÑ9NÑ/NÕNÐNÐNó ò ó    é   c                 óf   • U R                  5        H  u  p#UR                  5       X   U   S'   M     g)a"  Assigns random weights to the edges of a graph.

Parameters
----------

G : NetworkX graph
    The original graph for which the spanner was constructed.

seed : integer, random_state, or None (default)
    Indicator of random number generation state.
    See :ref:`Randomness<randomness>`.
r   N)r
   Úrandom)r   Úseedr   r   s       r   Ú_assign_random_weightsr   2   s,   € ð —‘–	‰ˆØ ŸK™K›Mˆ‰ˆQ‰�Óò r   c                  ó¾   • [         R                  " S5      n [         R                  " U S[        S9nU R                   H  u  p#UR                  X#5      (       a  M   e   g)z&Test a trivial spanner with stretch 1.é   r   ©r   N)r   Úcomplete_graphr   Ú_seedr
   r   )r   r   r   r   s       r   Útest_spanner_trivialr#   D   sK   € ä
×Ò˜"Ó€AÜ�jŠj˜˜A¤EÑ*€Gà—”‰ˆØ×Ñ ×%Ó%Ð%Ð%ò r   c                  óÈ   • [         R                  " S5      n [         R                  " U S[        S9n[	        XS5        [         R                  " U S[        S9n[	        XS5        g)z9Test spanner construction on a complete unweighted graph.r   é   r    é
   N)r   r!   r   r"   r   ©r   r   s     r   Ú&test_spanner_unweighted_complete_graphr(   M   sJ   € ä
×Ò˜"Ó€Aä�jŠj˜˜A¤EÑ*€GÜ�!˜aÔ ä�jŠj˜˜B¤UÑ+€GÜ�!˜bÕ!r   c                  óä   • [         R                  " S5      n [        U [        S9  [         R                  " U SS[        S9n[        XSSS9  [         R                  " U SS[        S9n[        XSSS9  g)	z7Test spanner construction on a complete weighted graph.r   r    r%   r   ©r   r   r   r&   N)r   r!   r   r"   r   r   r'   s     r   Ú$test_spanner_weighted_complete_graphr+   X   s\   € ä
×Ò˜"Ó€AÜ˜1¤5Ò)ä�jŠj˜˜A h´UÑ;€GÜ�!˜a¨Ò1ä�jŠj˜˜B x´eÑ<€GÜ�!˜b¨Ó2r   c                  óÐ   • [         R                  " SS[        S9n [         R                  " U S[        S9n[	        XS5        [         R                  " U S[        S9n[	        XS5        g)z5Test spanner construction on an unweighted gnp graph.r   çš™™™™™Ù?r    r%   r&   N)r   Úgnp_random_graphr"   r   r   r'   s     r   Ú!test_spanner_unweighted_gnp_graphr/   d   sN   € ä
×Ò˜B ¬%Ñ0€Aä�jŠj˜˜A¤EÑ*€GÜ�!˜aÔ ä�jŠj˜˜B¤UÑ+€GÜ�!˜bÕ!r   c                  óì   • [         R                  " SS[        S9n [        U [        S9  [         R                  " U SS[        S9n[        XSSS9  [         R                  " U SS[        S9n[        XSSS9  g	)
z3Test spanner construction on an weighted gnp graph.r   r-   r    r%   r   r*   r   r&   N)r   r.   r"   r   r   r   r'   s     r   Útest_spanner_weighted_gnp_graphr1   o   s`   € ä
×Ò˜B ¬%Ñ0€AÜ˜1¤5Ò)ä�jŠj˜˜A h´UÑ;€GÜ�!˜a¨Ò1ä�jŠj˜˜B x´eÑ<€GÜ�!˜b¨Ó2r   c                  ó  • [         R                  " [         R                  " S5      [         R                  " S5      5      n [         R                  " U S[        S9n[        XS5        [         R                  " U S[        S9n[        XS5        g)z2Test spanner construction on a disconnected graph.r&   r%   r    N)r   Údisjoint_unionr!   r   r"   r   r'   s     r   Ú*test_spanner_unweighted_disconnected_graphr4   {   sb   € ä
×Òœ"×+Ò+¨BÓ/´×1BÒ1BÀ2Ó1FÓG€Aä�jŠj˜˜A¤EÑ*€GÜ�!˜aÔ ä�jŠj˜˜B¤UÑ+€GÜ�!˜bÕ!r   c                  óÄ   • [         R                  " [        5         [        R                  " 5       n [        R
                  " U S5        SSS5        g! , (       d  f       g= f)z+Check whether an invalid stretch is caught.r   N)ÚpytestÚraisesÚ
ValueErrorr   Úempty_graphr   )r   s    r   Útest_spanner_invalid_stretchr:   †   s4   € ä	�Š”zÕ	"Ü�NŠNÓˆÜ
�
Š
�1�aÔ÷ 
#×	"Ö	"ús   ›-AÁ
A)N)Ú__doc__r6   Únetworkxr   Únetworkx.utilsr   r"   r   r   r#   r(   r+   r/   r1   r4   r:   © r   r   Ú<module>r?      sY   ðÙ :ã ã Ý *à	€ô$OñN �Óó*ó ð*ò"&ò"ò	3ò"ò	3ò"ór   