
    ިsg                     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           ]/var/www/html/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_sparsifiers.py_test_spannerr      s   , qwwy>S1111  <1zz!Q1:a=(AaDGFO;;;< 2221VDEO"11'&IJNWWY O 	OAO#_Q-?(?%a(+w9KA9N/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 KKM!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jjAE*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jjAE*G!Wa jjBU+G!Wb!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15)jjAhU;G!Wa1jjBxe<G!Wb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%0AjjAE*G!Wa jjBU+G!Wb!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%0A15)jjAhU;G!Wa1jjBxe<G!Wb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/1B1B21FGAjjAE*G!Wa jjBU+G!Wb!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	" NN


1a  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   