o
    ˷e                     @   s|   d Z ddlZddlZddlmZ dZdddZedddd	Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )z4Unit tests for the sparsifier computation functions.    N)py_random_state   c                 C   s   t |  t | ksJ | D ] \}}| ||sJ |r2|| | | | | | | ks2J qttj| |d}ttj||d}|  D ]#}|  D ]}||v rk||| v rk|| | ||| |  kskJ qOqIdS )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_length r   a/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/algorithms/tests/test_sparsifiers.py_test_spanner
   s   $ r      c                 C   s*   |   D ]\}}| | | | d< qdS )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   r   r   r   _assign_random_weights1   s   r   c                  C   s>   t d} t j| dtd}| jD ]\}}|||sJ qdS )z&Test a trivial spanner with stretch 1.   r   r   N)r   complete_graphr   _seedr   r	   )r   r   r   r   r   r   r   test_spanner_trivialC   s
   
r   c                  C   sF   t d} t j| dtd}t| |d t j| dtd}t| |d dS )z9Test spanner construction on a complete unweighted graph.r      r   
   N)r   r   r   r   r   r   r   r   r   r   &test_spanner_unweighted_complete_graphL   s
   
r#   c                  C   s^   t d} t| td t j| ddtd}t| |ddd t j| ddtd}t| |ddd dS )	z7Test spanner construction on a complete weighted graph.r   r   r    r   r   r   r   r!   N)r   r   r   r   r   r   r"   r   r   r   $test_spanner_weighted_complete_graphW   s   
r%   c                  C   sL   t jddtd} t j| dtd}t| |d t j| dtd}t| |d dS )z5Test spanner construction on an unweighted gnp graph.r   皙?r   r    r!   N)r   gnp_random_graphr   r   r   r"   r   r   r   !test_spanner_unweighted_gnp_graphc   s
   r(   c                  C   sd   t jddtd} t| td t j| ddtd}t| |ddd t j| ddtd}t| |ddd d	S )
z3Test spanner construction on an weighted gnp graph.r   r&   r   r    r   r$   r   r!   N)r   r'   r   r   r   r   r"   r   r   r   test_spanner_weighted_gnp_graphn   s   r)   c                  C   sT   t t dt d} t j| dtd}t| |d t j| dtd}t| |d dS )z2Test spanner construction on a disconnected graph.r!   r    r   N)r   disjoint_unionr   r   r   r   r"   r   r   r   *test_spanner_unweighted_disconnected_graphz   s
   r+   c                  C   sD   t t t } t| d W d   dS 1 sw   Y  dS )z+Check whether an invalid stretch is caught.r   N)pytestraises
ValueErrorr   empty_graphr   )r   r   r   r   test_spanner_invalid_stretch   s   "r0   )N)__doc__r,   networkxr   networkx.utilsr   r   r   r   r   r#   r%   r(   r)   r+   r0   r   r   r   r   <module>   s    
'	