
    Vh                     |    d dl Z d dlZ G d d      Zd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zy)    Nc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestConfigurationModelzLUnit tests for the :func:`~networkx.configuration_model`
    function.

    c                 N    t        j                  g       }t        |      dk(  sJ y)z:Tests that an empty degree sequence yields the null graph.r   N)nxconfiguration_modellenselfGs     Y/home/dcms/DCMS/lib/python3.12/site-packages/networkx/generators/tests/test_degree_seq.pytest_empty_degree_sequencez1TestConfigurationModel.test_empty_degree_sequence   s"    ""2&1v{{    c                 |    t        j                  g d      }t        |      dk(  sJ |j                         dk(  sJ y)zSTests that a degree sequence of all zeros yields the empty
        graph.

        )r   r   r      r   N)r   r   r   number_of_edgesr	   s     r   test_degree_zeroz'TestConfigurationModel.test_degree_zero   s;    
 ""9-1v{{  "a'''r   c           
         g d}t        j                  |d      }t        d |j                         D        d      g dk(  sJ t        d |j                  t	        t        |                  D        d      g dk(  sJ y)	zjTests that the degree sequence of the generated graph matches
        the input degree sequence.

        )   r   r   r   r      r   r      r   r   iNa seedc              3   &   K   | ]	  \  }}|  y wN .0nds      r   	<genexpr>z>TestConfigurationModel.test_degree_sequence.<locals>.<genexpr>!        0TQq0   T)reversec              3   &   K   | ]	  \  }}|  y wr   r   r   s      r   r    z>TestConfigurationModel.test_degree_sequence.<locals>.<genexpr>.   s     CTQqCr"   N)r   r   sorteddegreeranger   )r
   deg_seqr   s      r   test_degree_sequencez+TestConfigurationModel.test_degree_sequence   s    
 4""7:0QXXZ0$? D
 
 	
 
 CQXXeCL.A%BCTR W
 
 	
 
r   c                 (   dgdz  }t        j                  |d      }t        j                  |d      }t        j                  ||      sJ t        j                  |d      }t        j                  |d      }t        j                  ||      sJ y)zZTests that each call with the same random seed generates the
        same graph.

        r        r   
   N)r   r   is_isomorphic)r
   r(   G1G2s       r   test_random_seedz'TestConfigurationModel.test_random_seed<   s    
 #(##G$7##G$7B'''##G"5##G"5B'''r   c                     t        j                  t        j                        5  t        j                  g t        j
                                ddd       y# 1 sw Y   yxY w)zyTests that attempting to create a configuration model graph
        using a directed graph yields an exception.

        create_usingN)pytestraisesr   NetworkXNotImplementedr   DiGraphr
   s    r   test_directed_disallowedz/TestConfigurationModel.test_directed_disallowedI   sE    
 ]]2445 	B""2BJJLA	B 	B 	Bs   *AA c                     t        j                  t        j                        5  t        j                  ddg       ddd       y# 1 sw Y   yxY w)zTTests that a degree sequence whose sum is odd yields an
        exception.

        r   r   N)r5   r6   r   NetworkXErrorr   r9   s    r   test_odd_degree_sumz*TestConfigurationModel.test_odd_degree_sumQ   s=    
 ]]2++, 	+""Aq6*	+ 	+ 	+s   AAN)
__name__
__module____qualname____doc__r   r   r)   r1   r:   r=   r   r   r   r   r      s'    

( 
D(B+r   r   c                      t        j                  t        j                        5  g d} g d}t        j                  | |       d d d        y # 1 sw Y   y xY w)N)
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r5   r6   r   r<   directed_configuration_model)zinzouts     r   )test_directed_configuration_raise_unequalrF   Z   sC    	r''	( 3,-
''T23 3 3s   AAc                  T    t        j                  g g d      } t        |       dk(  sJ y )Nr   r   r   rC   r   r   s    r   !test_directed_configuration_modelrJ   a   s&    
''BQ7Aq6Q;;r   c                  \    t        j                  ddgddgd      } t        |       dk(  sJ y )Nr   r   r   r   rH   rI   s    r   (test_simple_directed_configuration_modelrL   f   s.    
''AAQ?Aq6Q;;r   c                  n    g } t        j                  |       }t        |j                               i k(  sJ y r   )r   expected_degree_graphdictr&   )r(   r   s     r    test_expected_degree_graph_emptyrP   k   s0    G
  )A
r!!!r   c                  D   g d} t        j                  | d      }t        |      dk(  sJ t        j                  | d      }t        j                  ||      sJ t        j                  | d      }t        j                  | d      }t        j                  ||      sJ y )Nr   r   r   r   r   r   r   r   r   r   r   r   r,   r   r+   r-   )r   rN   r   r.   r(   r/   r0   s      r   test_expected_degree_graphrT   r   s    2G		!	!'	5Br7b==		!	!'	5BB###		!	!'	3B		!	!'	3BB###r   c                      g d} t        j                  | dd      }t        j                  | dd      }t        j                  ||      sJ t        |      dk(  sJ y )NrR   r,   F)r   	selfloopsr+   r   rN   r.   r   rS   s      r   $test_expected_degree_graph_selfloopsrX      sU    2G		!	!'	FB		!	!'	FBB###r7b==r   c                      g d} t        j                  | d      }t        j                  | d      }t        j                  ||      sJ t        |      dk(  sJ y )N)r-   r   r   r   r   r,   r   r   rW   rS   s      r   test_expected_degree_graph_skewrZ      sQ    G		!	!'	5B		!	!'	5BB###r7a<<r   c                     t        j                  g       } t        |       dk(  sJ g d}t        j                  t         j
                  t         j                  |       g d}t        j                  t         j
                  t         j                  |       g d}t        j                  |      } t        j                  |      } g d}t        j                  t         j
                  t         j                  |       g d}t        j                  |      } t        j                  t         j
                  t         j                  |t        j                                y )Nr   r,   r   r   r   r   r   r   r   r   r   r   )Ar   r   r   r   r   r   r   r   r   r   )r      r   r   r   r   r   r   )   r   r^   r^   r   r   r   r   )r-   r   r   r   r   r   r   r   r   r   r   r3   )r   havel_hakimi_graphr   r5   r6   r<   r   r8   )r   zs     r   test_havel_hakimi_constructionrb      s    
b!Aq6Q;;,A
MM"""B$9$91=+A
MM"""B$9$91= A
a A
q!A A
MM"""B$9$91=*A
a A
MM"""B$9$912::<Xr   c                     d\  } }d|z  }t        |      D ]  }t        j                   ||dz   z  d d      }|j                         D  cg c]  \  } }|	 }} }|j	                         D  cg c]  \  } }|	 }} }t        j
                  ||      }|j                         D  cg c]  \  } }|	 }	} }|j	                         D  cg c]  \  } }|	 }
} }t        |      t        |	      k(  sJ t        |      t        |
      k(  rJ  g d}g d}t        j                  t        j                  j                  t        j
                  ||       g d}g d}t        j
                  ||      }d	 |j	                         D        }
d
 |j                         D        }	t        |      t        |
      k(  sJ t        |      t        |	      k(  sJ g d}t        j                  t        j                  j                  t        j
                  ||       g d}t        j                  t        j                  j                  t        j
                  ||       y c c}} w c c}} w c c}} w c c}} w )N)d   r-   g      ?r   Tr\   )
g   f   rf   rf   rf   rf   rf   rf   rf   rf   
r   r   r   r   r   r   r   r   r   r^   )
r   r   r   r   r   r   r   r   r   r   c              3   &   K   | ]	  \  }}|  y wr   r   r   s      r   r    z-test_directed_havel_hakimi.<locals>.<genexpr>   s     +41aQ+r"   c              3   &   K   | ]	  \  }}|  y wr   r   r   s      r   r    z-test_directed_havel_hakimi.<locals>.<genexpr>   s     )$!QA)r"   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   )r'   r   erdos_renyi_graph	in_degree
out_degreedirected_havel_hakimi_graphr%   r5   r6   	exceptionr<   )r   rpir/   r   din1dout1r0   din2dout2doutdins                r   test_directed_havel_hakimiry      s   DAqaA1X .!!!Q!a%[$= lln-da--!}}/tq!//++D%8 lln-da--!}}/tq!//d|vd|+++e}u---. 0D
<C
MM",,,,b.L.LcSWX)D
(C		'	'T	2B+2==?+E)",,.)D$<6%=(((#;&,&&&
(C
MM",,,,b.L.LcSWX
,C
MM",,,,b.L.LcSWX3 ./-/s   
I,I$II$c                     g d} t        j                  |       }t        |      t        |       k(  sJ t        t        |j	                                     t        |       dz  k(  sJ t        j                  t         j                  t         j                  | t        j                                g d} t        j                  t         j                  t         j                  |        y )Nrg   r   r3   r   r   r   r   r   r   r   r   r   r   r^   )
r   degree_sequence_treer   listedgessumr5   r6   r<   r8   )ra   r   s     r   test_degree_sequence_treer      s    &A
"Aq6SVtAGGI3q6A:---
MM
"1112::< 	*A
MM"""B$;$;Q?r   c                      g d} t        j                  | d      }| t        d |j                         D              k(  sJ y )N)r   r   r   r   *   r   c              3   &   K   | ]	  \  }}|  y wr   r   r   s      r   r    z4test_random_degree_sequence_graph.<locals>.<genexpr>   r!   r"   )r   random_degree_sequence_graphr%   r&   )r   r   s     r   !test_random_degree_sequence_graphr      s8    A
''3A0QXXZ00000r   c                  r    g d} t        j                  t        j                  t        j                  |        y )Nr{   )r5   r6   r   NetworkXUnfeasibler   )ra   s    r   'test_random_degree_sequence_graph_raiser      s#    )A
MM"'')H)H!Lr   c                  4   t        j                  ddd      } | j                         D cg c]  \  }}|	 }}}t        j                  |d      }|j                         D cg c]  \  }}|	 }}}t	        |      t	        |      k(  sJ y c c}}w c c}}w )Nrd   皙?r   r   )r   fast_gnp_random_graphr&   r   r%   )r/   r   r   d1r0   d2s         r   !test_random_degree_sequence_larger      s    		!	!#s	4B			$1!	$B	$		(	("	5B			$1!	$B	$":### 
%	$s   B%Bc                      t        j                  ddd      } d | j                         D        }t        j                  |d      }t	        |      dkD  sJ y )Nrd   r   r   r   c              3   &   K   | ]	  \  }}|  y wr   r   r   s      r   r    z7test_random_degree_sequence_iterator.<locals>.<genexpr>   s     	$1!	$r"   r   )r   r   r&   r   r   )r/   r   r0   s      r   $test_random_degree_sequence_iteratorr      sH    		!	!#s	4B	$			$B		(	("	5Br7Q;;r   )r5   networkxr   r   rF   rJ   rL   rP   rT   rX   rZ   rb   ry   r   r   r   r   r   r   r   r   <module>r      sc     Q+ Q+h3

"$Y,YD@1M
$r   