
    fi                         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dS )z4Unit tests for the sparsifier computation functions.    N)py_random_state   c                    t          |                                           t          |                                          k    sJ |                                D ]K\  }}|                     ||          sJ |r,||         |         |         | |         |         |         k    sJ Lt	          t          j        | |                    }t	          t          j        ||                    }|                                 D ]J}|                                 D ]3}||v r-|||         v r#||         |         |||         |         z  k    sJ 4Kd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_lengths           /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/networkx/algorithms/tests/test_sparsifiers.py_test_spannerr      sb   , qwwyy>>S111111  < <1zz!Q 	<1:a=(AaDGFO;;;; 221VDDDEEO"1'&IIIJJNWWYY O O 	O 	OAO##_Q-?(?(?%a(+w9KA9N/NNNNN	OO O       c                     |                                  D ](\  }}|                                | |         |         d<   )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   s       r   _assign_random_weightsr   2   sF     		 * *1 KKMM!Q* *r   c                      t          j        d          } t          j        | dt                    }| j        D ]\  }}|                    ||          sJ dS )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   sf    
"AjAE***G & &11%%%%%%& &r   c                      t          j        d          } t          j        | dt                    }t	          | |d           t          j        | dt                    }t	          | |d           dS )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   sh    
"AjAE***G!Wa   j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           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'   s     r   $test_spanner_weighted_complete_graphr+   X   s    
"A15))))jAhU;;;G!Wa1111jBxe<<<G!Wb222222r   c                      t          j        ddt                    } t          j        | dt                    }t	          | |d           t          j        | dt                    }t	          | |d           dS )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   so    
B%000AjAE***G!Wa   j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           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'   s     r   test_spanner_weighted_gnp_graphr1   o   s    
B%000A15))))jAhU;;;G!Wa1111jBxe<<<G!Wb222222r   c                  ,   t          j        t          j        d          t          j        d                    } t          j        | dt                    }t          | |d           t          j        | dt                    }t          | |d           dS )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   {   s    
"+B//1B21F1FGGAjAE***G!Wa   jBU+++G!Wb!!!!!r   c                      t          j        t                    5  t          j                    } t          j        | d           ddd           dS # 1 swxY w Y   dS )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

1a                 s   )AAA)N)__doc__r6   networkxr   networkx.utilsr   r"   r   r   r#   r(   r+   r/   r1   r4   r:    r   r   <module>r?      s    : :      * * * * * *	$O $O $O $ON * * * *"& & &" " "	3 	3 	3" " "	3 	3 	3" " "    r   