Ë
    D^(hÌ  ã                   óx   — d Z ddlZddlZddlmZ dZdd„Z ed«      dd„«       Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zy)z4Unit tests for the sparsifier computation functions.é    N)Úpy_random_stateé   c                 ó  — t        | j                  «       «      t        |j                  «       «      k(  sJ ‚|j                  «       D ]5  \  }}| j                  ||«      sJ ‚|sŒ||   |   |   | |   |   |   k(  rŒ5J ‚ t	        t        j                  | |¬«      «      }t	        t        j                  ||¬«      «      }| j                  «       D ]:  }| j                  «       D ]%  }||v sŒ|||   v sŒ||   |   |||   |   z  k  rŒ%J ‚ Œ< y)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           úh/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_sparsifiers.pyÚ_test_spannerr      s  € ô, ˆq�w‰w‹y‹>œS §¡£Ó1Ò1Ð1Ð1ð —‘“ò <‰ˆˆ1Ø�z‰z˜!˜QÔÐÐÚØ˜1‘:˜a‘= Ñ(¨A¨a©D°©G°F©OÓ;Ð;Ð;ð<ô œ2×2Ñ2°1¸VÔDÓE€OÜœ"×1Ñ1°'À&ÔIÓJ€NØ�W‰W‹Yò OˆØ—‘“ò 	OˆAØ�OÒ#¨¨_¸QÑ-?Ò(?Ø% aÑ(¨Ñ+¨w¸ÈÑ9KÈAÑ9NÑ/NÓNÐNÐNñ	OñOó    é   c                 óf   — | j                  «       D ]  \  }}|j                  «       | |   |   d<   Œ  y)aB  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   s5   € ð —‘“	ò *‰ˆˆ1Ø ŸK™K›Mˆˆ!‰ˆQ‰�Òñ*r   c                  ó¶   — t        j                  d«      } t        j                  | dt        ¬«      }| j                  D ]  \  }}|j                  ||«      rŒJ ‚ y)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   sQ   € ä
×Ñ˜"Ó€AÜ�j‰j˜˜A¤EÔ*€Gà—‘ò &‰ˆˆ1Ø×Ñ  1Õ%Ð%Ð%ñ&r   c                  óÒ   — t        j                  d«      } t        j                  | dt        ¬«      }t	        | |d«       t        j                  | dt        ¬«      }t	        | |d«       y)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   sN   € ä
×Ñ˜"Ó€Aä�j‰j˜˜A¤EÔ*€GÜ�!�W˜aÔ ä�j‰j˜˜B¤UÔ+€GÜ�!�W˜bÕ!r   c                  ó   — t        j                  d«      } t        | t        ¬«       t        j                  | ddt        ¬«      }t        | |dd¬«       t        j                  | ddt        ¬«      }t        | |dd¬«       y)	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Ü�!�W˜a¨Õ1ä�j‰j˜˜B x´eÔ<€GÜ�!�W˜b¨Ö2r   c                  óà   — t        j                  ddt        ¬«      } t        j                  | dt        ¬«      }t	        | |d«       t        j                  | dt        ¬«      }t	        | |d«       y)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   sR   € ä
×Ñ˜B ¬%Ô0€Aä�j‰j˜˜A¤EÔ*€GÜ�!�W˜aÔ ä�j‰j˜˜B¤UÔ+€GÜ�!�W˜bÕ!r   c                  ó  — t        j                  ddt        ¬«      } t        | t        ¬«       t        j                  | ddt        ¬«      }t        | |dd¬«       t        j                  | ddt        ¬«      }t        | |dd¬«       y	)
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   sd   € ä
×Ñ˜B ¬%Ô0€AÜ˜1¤5Õ)ä�j‰j˜˜A h´UÔ;€GÜ�!�W˜a¨Õ1ä�j‰j˜˜B x´eÔ<€GÜ�!�W˜b¨Ö2r   c                  ó   — t        j                  t        j                  d«      t        j                  d«      «      } t        j                  | dt        ¬«      }t        | |d«       t        j                  | dt        ¬«      }t        | |d«       y)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   {   sf   € ä
×Ñœ"×+Ñ+¨BÓ/´×1BÑ1BÀ2Ó1FÓG€Aä�j‰j˜˜A¤EÔ*€GÜ�!�W˜aÔ ä�j‰j˜˜B¤UÔ+€GÜ�!�W˜bÕ!r   c                  ó´   — t        j                  t        «      5  t        j                  «       } t        j
                  | d«       ddd«       y# 1 sw Y   yxY w)z+Check whether an invalid stretch is caught.r   N)ÚpytestÚraisesÚ
ValueErrorr   Úempty_graphr   )r   s    r   Útest_spanner_invalid_stretchr:   †   s=   € ä	�‰”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   