
    hx                         S SK JrJrJr  S SKJr  S SKJr  S SKrS SK	r
S SKJrJr  S r " S S5      rS	 rS
 rS rS rS r " S S5      r " S S5      rS r " S S5      r " S S5      rg)    )chainislicetee)inf)shuffleN)FORWARDREVERSEc                    [        U 5      S:X  a  g [        R                  " S5      n[        R                  " S5      n[        R                  " 5       nU  H  n[        R
                  " X45        M     [        R                  " USS9nUR                  R                  UR                  5       S SS9nUR                  S   U-
  [        U 5      :X  d   eg )	Nr   numpyscipyT)orientedF)tol	hermitian   )lenpytestimportorskipnxGraph	add_cycleincidence_matrixlinalgmatrix_ranktoarrayshape)basisnpspHbincranks          W/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/tests/test_cycles.pycheck_independentr$      s    
5zQ			W	%B			W	%B

A
Q 


a$
/C99  DE JD99Q<$#e*,,,    c                   ~    \ rS rSr\S 5       rS rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rSrg)
TestCycles   c                     [         R                  " 5       n[         R                  " U/ SQ5        [         R                  " U/ SQ5        [         R                  " U/ SQ5        UR                  SS5        Xl        g )Nr   r         r   r,         r   r            r3   	   )r   r   r   add_edgeG)clsr6   s     r#   setup_classTestCycles.setup_class   sJ    HHJ
Q%
Q%
Q(	

1ar%   c                    ^^^ [        U5      m[        T5      T:w  a  gX-   m[        UUU4S j[        T5       5       5      $ )NFc              3   8   >#    U  H  nTXT-    T:H  v   M     g 7fN ).0ir    lns     r#   	<genexpr>3TestCycles.is_cyclic_permutation.<locals>.<genexpr>)   s     7h1QQ<1$hs   )r   anyrange)selfar    r@   rA   s     `@@r#   is_cyclic_permutation TestCycles.is_cyclic_permutation$   s6    Fq6Q;E7eAh777r%   c                 F   U R                   n[        R                  " US5      n[        S U 5       5      nU/ SQ/ SQ/ SQ/:X  d   e[        R                  " US5      n[        S U 5       5      nU/ SQ/ SQ/ SQ/:X  d   e[        R                  " US5      n[        S	 U 5       5      nU/ SQ/ SQ/ SQ/:X  d   e[        R                  " US
5        [        R                  " US5      n[        S US S  5       5      [        US   5      /-   nU/ SQ/ SQ/ SQ/ SQ/:X  d   eg )Nr   c              3   8   #    U  H  n[        U5      v   M     g 7fr<   sortedr>   cs     r#   rB   .TestCycles.test_cycle_basis.<locals>.<genexpr>.        /BqB   r*   r0   r-   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr<   rL   rN   s     r#   rB   rP   1   rQ   rR   r4   c              3   8   #    U  H  n[        U5      v   M     g 7fr<   rL   rN   s     r#   rB   rP   4   rQ   rR   ABCc              3   8   #    U  H  n[        U5      v   M     g 7fr<   rL   rN   s     r#   rB   rP   9   s     4GqGrR   )ABC)r6   r   cycle_basisrM   r   rF   r6   cysort_cys       r#   test_cycle_basisTestCycles.test_cycle_basis+   s   FF^^Aq!/B//<,GGGG^^Aq!/B//<,GGGG^^Aq!/B//<,GGGG
Q^^Aq!4BsG44r"v7GG<,XXXXr%   c                     [         R                  " [        R                  5         [        R                  " 5       n[        R
                  " US5      nS S S 5        g ! , (       d  f       g = fNr   )r   raisesr   NetworkXNotImplementedDiGraphr[   rF   r6   r]   s      r#   test_cycle_basis2TestCycles.test_cycle_basis2<   s;    ]]2445

A1%B 655   -A
A)c                     [         R                  " [        R                  5         [        R                  " 5       n[        R
                  " US5      nS S S 5        g ! , (       d  f       g = frb   )r   rc   r   rd   
MultiGraphr[   rf   s      r#   test_cycle_basis3TestCycles.test_cycle_basis3A   s;    ]]2445A1%B 655ri   c                    [         R                  " S5      nUR                  [         R                  " [        SS5      5      5        [         R                  " U5      nSSS.n[         R
                  " X5      n[         R                  " U5       VVs/ s H#  oU Vs/ s H  ocR                  Xf5      PM     snPM%     nnnX':X  d   eg s  snf s  snnf )Nr/   r,   r3   r   r   r   r   )r   cycle_graphupdaterE   r[   relabel_nodesget)rF   r6   cbGpermr   cycrA   cbHs           r#   test_cycle_basis_ordered#TestCycles.test_cycle_basis_orderedF   s    NN1	a,-nnQ|Q%8:q8IJ8I,1,8IJzz -Js   	C
C3C
C
c                    [         R                  " 5       n[         R                  " U/ SQ5        [         R                  " U/ SQ5        [         R                  " U5      n[	        S U 5       5      nUS// SQ/ SQ/ SQ/:X  d   eg)	z-Tests the function for graphs with self loopsr*   )r   r   r1   r+   c              3   8   #    U  H  n[        U5      v   M     g 7fr<   rL   rN   s     r#   rB   8TestCycles.test_cycle_basis_self_loop.<locals>.<genexpr>W   rQ   rR   r   r   r   r+   )r   r+   r,   )r   r+   r1   N)r   r   r   r[   rM   r\   s       r#   test_cycle_basis_self_loop%TestCycles.test_cycle_basis_self_loopQ   s`    HHJ
Q%
Q%^^A/B//A3	9i@@@@r%   c                   ^ ^ / SQn[         R                  " U5      n[        [         R                  " U5      5      nS// SQSS/SS/S//n[	        U5      [	        U5      :X  d   eU H   m[        UU 4S jU 5       5      (       a  M    e   g )N)r   r   r   r   r   r+   r   r+   r+   r   r+   r   )r+   r+   r   r}   r+   r   c              3   H   >#    U  H  nTR                  TU5      v   M     g 7fr<   rH   r>   rcrO   rF   s     r#   rB   0TestCycles.test_simple_cycles.<locals>.<genexpr>a   !     F2Rt11!R882   ")r   re   rM   simple_cyclesr   rD   )rF   edgesr6   cccarO   s   `    @r#   test_simple_cyclesTestCycles.test_simple_cyclesZ   s~    HJJuB$$Q'(c9q!fq!fqc22w#b'!!!AF2FFFFF r%   c                     [         R                  " S/5      n[        [         R                  " U5      5      S//:X  d   eg )Nr   r   )r   r   listr   rF   r6   s     r#   test_simple_cycles_singleton'TestCycles.test_simple_cycles_singletonc   s4    HHfXB$$Q'(aSE111r%   c                     [         R                  " 5       n[         R                  " USS/5        [        [         R                  " U5      5      n[        U5      S:X  d   eg )NrG   r   )r   re   r   r   r   r   rF   r6   rO   s      r#   test_unsortableTestCycles.test_unsortableg   sF     JJL
Qa!!!!$%1v{{r%   c                   ^ ^ [         R                  " 5       n[         R                  " U/ SQ5        [        [         R                  " U5      5      m[        T5      S:X  d   eT R                  TS   / SQ5      (       d   e[         R                  " U/ SQ5        [        [         R                  " U5      5      n[        U5      S:X  d   e/ SQ/ SQ/nU H   m[        UU 4S jU 5       5      (       a  M    e   g )N)r   r+   r,   r   r   )
         r+   c              3   H   >#    U  H  nTR                  TU5      v   M     g 7fr<   r   r   s     r#   rB   6TestCycles.test_simple_cycles_small.<locals>.<genexpr>z   r   r   )r   re   r   rM   r   r   rH   rD   )rF   r6   r   r   rO   s   `   @r#   test_simple_cycles_small#TestCycles.test_simple_cycles_smallo   s    JJL
Q	"2##A&'1v{{))!A$	::::
Q%B$$Q'(2w!||&AF2FFFFF r%   c                 x    [         R                  " 5       n[        [         R                  " U5      5      / :X  d   eg r<   )r   re   r   r   r   s     r#   test_simple_cycles_empty#TestCycles.test_simple_cycles_empty|   s+    JJLB$$Q'(B...r%   c                 x   [         R                  " 5       n[        SUS-   5       H)  nUR                  SU5        UR                  X1S-   5        M+     UR                  SU-  S-   S5        [        US-   SU-  S-   5       H/  nUR                  USU-  S-   5        UR                  X3S-   5        M1     UR                  SU-  S-   US-   5        [        SU-  S-   SU-  S-   5       H3  nUR                  SU-  S-   U5        UR                  USU-  S-   5        M5     UR                  SU-  S-   SU-  S-   5        U$ )Nr+   r   r,   )r   re   rE   r5   )rF   kr6   rA   s       r#   worst_case_graphTestCycles.worst_case_graph   s*    JJLq!a%AJJq!JJqa%  ! 	


1q519a q1ua!eai(AJJq!a%!)$JJqa%  ) 	


1q519a!e$q1uqy!a%!),AJJq1uqy!$JJq!a%!)$ - 	


1q519a!eai(r%   c                     [        SS5       HG  nU R                  U5      n[        [        [        R
                  " U5      5      5      nUSU-  :X  a  MG   e   g )Nr,   r   )rE   r   r   r   r   r   )rF   r   r6   r@   s       r#   test_worst_case_graph TestCycles.test_worst_case_graph   sL    q"A%%a(AD))!,-.AA:: r%   c                   ^ ^^ [        SS5       H  nT R                  U5      n[        [        R                  " U5      5      n[        [        R
                  " U5      5      n[        U5      [        U5      :X  d   eU H   m[        UU 4S jU 5       5      (       a  M    e   U H   m[        UU 4S jU 5       5      (       a  M    e   M     g )Nr+   r   c              3   H   >#    U  H  nTR                  TU5      v   M     g 7fr<   r   )r>   rrO   rF   s     r#   rB   ;TestCycles.test_recursive_simple_and_not.<locals>.<genexpr>   s!     IS455a;;Sr   c              3   H   >#    U  H  nTR                  TU5      v   M     g 7fr<   r   r>   rO   r   rF   s     r#   rB   r      s!     Ib455b!<<br   )rE   r   rM   r   r   recursive_simple_cyclesr   rD   )rF   r   r6   r   rccrO   r   s   `    @@r#   test_recursive_simple_and_not(TestCycles.test_recursive_simple_and_not   s    q"A%%a(A((+,B33A67Cr7c#h&&&ISIIIII IbIIIII  r%   c                   ^ ^^ [         R                  " 5       n/ SQnUR                  U5        [        [         R                  " U5      5      n[        U5      S:X  d   e[        [         R                  " U5      5      n[        U5      [        U5      :X  d   eU H   m[        UU 4S jU 5       5      (       a  M    e   U H   m[        UU 4S jU 5       5      (       a  M    e   g )N)r   )r   r,   ro   )r   r,   r   )r+   r.   r,   r+   r,   r.   )r.   r   )r.   r   r.   r/   r/   r   r/   r   )r/   r+   )r/   r,   r(   c              3   H   >#    U  H  nTR                  TU5      v   M     g 7fr<   r   r   s     r#   rB   ATestCycles.test_simple_graph_with_reported_bug.<locals>.<genexpr>   s!     G3Rt11!R883r   c              3   H   >#    U  H  nTR                  TU5      v   M     g 7fr<   r   r   s     r#   rB   r      s!     E"Qt11"a88"r   )r   re   add_edges_fromrM   r   r   r   rD   )rF   r6   r   r   r   rO   r   s   `    @@r#   #test_simple_graph_with_reported_bug.TestCycles.test_simple_graph_with_reported_bug   s    JJL
" 	
B$$Q'(2w"}}R//232w#c("""AG3GGGGG BE"EEEEE r%   r=   N)__name__
__module____qualname____firstlineno__classmethodr8   rH   r_   rg   rl   rx   r~   r   r   r   r   r   r   r   r   r   __static_attributes__r=   r%   r#   r'   r'      se     8Y"&
&
	AG2G/$	JFr%   r'   c                 J    [        U 5      u  p[        US 5        [        X5      $ r<   )r   nextzip)iterablerG   r    s      r#   pairwiser      s     x=DADMq9r%   c           	      @    [        [        U [        U S5      5      5      $ Nr   )r   r   r   rO   s    r#   cycle_edgesr      s    E!VAq\*++r%   c                 *    [        [        U 5      5      $ r<   )	frozensetr   r   s    r#   directed_cycle_edgesetr      s    [^$$r%   c                     [        U 5      S:X  a  [        [        U 5      5      $ [        [        [        [        U 5      5      5      $ r   r   r   r   mapr   s    r#   undirected_cycle_edgesetr      s2    
1v{Q((SKN344r%   c                     [        U 5      S::  a  [        [        U 5      5      $ [        [        [        [        U 5      5      5      $ )Nr+   r   r   s    r#   multigraph_cycle_edgesetr      s2    
1v{Q((YA788r%   c                       \ rS rSr\S 5       r\S 5       r\S 5       rS r   SS jr	   SS jr
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestCycleEnumeration   c                 .    [         R                  " U 5      $ r<   )r   complete_graphrA   s    r#   KTestCycleEnumeration.K   s      ##r%   c                 J    [         R                  " U 5      R                  5       $ r<   )r   r   to_directedr   s    r#   DTestCycleEnumeration.D   s      #//11r%   c                 z    U R                  5       (       a  [        $ U R                  5       (       a  [        $ [        $ r<   )is_directedr   is_multigraphr   r   )gs    r#   edgeset_function%TestCycleEnumeration.edgeset_function   s,    ==??))__++++r%   c	                   ^ Ub   [        U5      U:  a  [        SU SU 35      eUS:X  a"  X4;   a  [        SU S35      e[        U5      XC'   O&X4;   a  UR                  U5        O[        SU S35      e[	        U4S jU 5       5      (       d  [        U SU S	35      eU(       aC  [        TR                  U5      R                  5      [        U5      :  a  [        U S
U S35      eg g )Ncomputed cycle z exceeds length bound computedz has already been found!zexpected cycle z was not computedc              3   B   >#    U  H  nTR                   " U6 v   M     g 7fr<   has_edge)r>   er   s     r#   rB   3TestCycleEnumeration.check_cycle.<locals>.<genexpr>  s     .2a1::q>2s   z claimed cycle z is not a cycle of gz cycle z is not chordless)r   RuntimeErrortuplepopallsubgraphr   )	rF   r   rO   escachesource
original_clength_bound	chordlesss	    `       r#   check_cycle TestCycleEnumeration.check_cycle   s    #A(=!*-CL>R  Z{"%j\1IJ  "*-	{		""_ZL@Q#RSS.2...(/*5IJ  QZZ]001CF:&<MNOO ;9r%   Nc                 P   Uc'  U(       a  [         R                  O[         R                  n[        [	        [        U5      5      5      n[        U5        [        [        X5      5      n[        [        Xa5      5      n[         R                  " XSS9n	U R                  U	5      n
0 nUb  X;S'   0 nU" U	40 UD6 H5  nU Vs/ s H  oU   PM	     nnU
" U5      nU R                  XUUSXU5        M7     [        U[        5      (       a*  [        U5      U:w  a  [        SU S[        U5       35      eg U H5  nU Vs/ s H  oU   PM	     nnU
" U5      nU R                  XUUSXU5        M7     [        U5      (       a%  UR                  5        H  n[        SU S	35      e   g g s  snf s  snf )
NT)copyr   r   z	expected z cycles, got expectedr   z, is valid but not in the expected cycle set!)r   chordless_cyclesr   r   rE   r   r   dictr   rr   r   r  
isinstanceintr   values)rF   r   expected_cyclesr   r  	algorithmrelabellabelunlabelhedgesetparamscycle_cacherO   xr   r   s                    r#   check_cycle_algorithm*TestCycleEnumeration.check_cycle_algorithm  s    /8++b>N>NI uSV}%S_%s7'QD1''*#%1>"1''A./0a!*aJ0Bb+z:Y ( os++;?2"0c+>N=OP  )J#-.:aq:A.Bb+z:Y * { '')"%aS(TU  * ' 1 /s   <F6F#c           	      R    [        X5       H  u  pgU R                  UUUUUS9  M     g )N)r   r  r  )r   r  )rF   g_familycycle_countsr   r  r  r   
num_cycless           r#   (check_cycle_enumeration_integer_sequence=TestCycleEnumeration.check_cycle_enumeration_integer_sequence>  s7     !8MA&&)## '  9r%   c                    [         R                  " 5       n[         R                  " U[        S5      5        [         R                  " U[        S5      S S S2   5        UR	                  SS5        / SQnU R                  XSS9  U R                  XSSS9  U Vs/ s H  n[        U5      S:  d  M  UPM     nnU R                  XSS	S9  g s  snf )
Nr/   rW   r   ))r   r   r+   r,   r   Tr  r+   r  r   r   )r   re   r   rE   r5   r  r   )rF   r   r  rO   s       r#   $test_directed_chordless_cycle_digons9TestCycleEnumeration.test_directed_chordless_cycle_digonsO  s    JJL
Qa!
Qa2'	

1a8""1"F""1TU"V&5DoQ!1oD""1TU"V Es   C.Cc                    [         R                  " / SQ5      nSS/nU R                  XSS9  [         R                  " 5       n[         R                  " U[	        S5      5        [         R                  " U[	        SS5      5        UR                  S	S
5        / SQnU R                  XSS9  UR                  S
S	5        / SQnU R                  XSS9  S/nU R                  XSSS9  UR                  S	S
5        SS/nU R                  XSS9  [         R                  " S [	        S5       5       5      n/ nU R                  XSS9  g )N)r   r  r   r   r   r   r   )r   r+   r,   r.   r/   )r   r+   r,   r.   r/   Tr   r/   r.   r4   r2   r,   )r   r   r+   r,   r.   )r,   r.   r/   r1   r2   r.   r/   r1   r2   r3   )r%  r,   r2   r&  r'  r!  r%  r&  c              3   N   #    U  H  n[        U5        H  o!U4v   M
     M     g 7fr<   rE   )r>   r?   js      r#   rB   PTestCycleEnumeration.test_directed_chordless_cycle_undirected.<locals>.<genexpr>s  s     Cy!%(Q1v(vy   #%r   )r   re   r  r   rE   r5   remove_edge)rF   r   r  s      r#   (test_directed_chordless_cycle_undirected=TestCycleEnumeration.test_directed_chordless_cycle_undirected\  s#   JJOP*O<""1"FJJL
Qa!
Qa$	

1aM""1"F	

1aD""1"F!(""1TU"V	a*O<""1"FJJCuRyCC""1"Fr%   c           	         [         R                  " 5       n[         R                  " U[        S5      5        [         R                  " U[        SS5      5        / [        S5      Q/ [        SS5      Q/nU R	                  XSS9  U R	                  X Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  UR                  SS5        UR                  / [        SS	5      Q5        U R	                  XSS9  U R	                  X Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  UR                  SS5        SS/US
'   U R	                  XSS9  U R	                  X Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  UR                  5         UR                  SS5        U R	                  XSS9  U R	                  X Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  g s  snf s  snf s  snf s  snf )Nr/   r.      Tr   r   r  r2   r,   r3   rW   )
r   re   r   rE   r  r   r5   appendr   r-  rF   r6   r  rO   s       r#   test_chordless_cycles_directed3TestCycleEnumeration.test_chordless_cycles_directedw  s   JJL
Qa!
Qa%eAhK5B<1""1$"?""838as1v{83!t 	# 	
 	


1a%1+'""1$"?""838as1v{83!t 	# 	
 	


1a1v""1$"?""838as1v{83!t 	# 	
 		a""1$"?""838as1v{83!t 	# 	
) 4 4 4 4s0   G)
(G)
G.
G.
G3
6G3
G8
G8
c                 @   [        S5       Vs/ s H  oR                  U5      PM     nn[        S5       Vs/ s H  oU-  U-
  S-  PM     nnU R                  X#SS9  [        S5       Vs/ s H  oU-  U-
  S-  PM     nnU R                  X#SS9  g s  snf s  snf s  snf )Nr   r+   Tr   r   )rE   r   r  )rF   rA   r  r  s       r#   &test_directed_chordless_cycle_diclique;TestCycleEnumeration.test_directed_chordless_cycle_diclique  s    ',Ry1y!FF1Iy15:2Y?YEAI!+Y?55 	6 	
 6;2Y?YEAI!+Y?55A 	6 	
 2?
 @s   BB*Bc                    [         R                  " S [        S5       5       5      n[         R                  " U[        S5      5        [        S5       Vs/ s H  o"4PM     nnU R	                  XSS9  U R	                  XSS9  [         R
                  " U5      nUR                  S [        SSS	5       5       5        [        SSS	5       Vs/ s H  o"4PM     nnU R	                  XSS9  g s  snf s  snf )
Nc              3   (   #    U  H  oU4v   M
     g 7fr<   r=   r>   r?   s     r#   rB   MTestCycleEnumeration.test_directed_chordless_loop_blockade.<locals>.<genexpr>  s     1y!1vy   r   Tr   r   r8  c              3   (   #    U  H  oU4v   M
     g 7fr<   r=   r=  s     r#   rB   r>    s     9AQr?  r   r+   )r   re   rE   r   r  MultiDiGraphr   )rF   r   r?   r  s       r#   %test_directed_chordless_loop_blockade:TestCycleEnumeration.test_directed_chordless_loop_blockade  s    JJ1uRy11
Qb	").r3A43""1"F""1A"FOOA	9q"a99).q"a9A49""1"F 4 :s   C)
C.c                    [        SS5       Vs/ s H  oR                  U5      PM     nn/ SQnU R                  X#SS9  S n[        SS5       Vs/ s H  oR                  U5      PM     nnU Vs/ s H  nSU-  PM
     nnU R                  X#SUS9  S n/ S	Qn[        S
S5       Vs/ s H  oR                  U5      PM     nnU R                  X#SUS9  U Vs/ s H  nSU-  PM
     nn[        S
S5       Vs/ s H  oR                  U5      PM     nnU R                  X#SUS9  / SQn[        S
S5       Vs/ s H  oR                  U5      PM     nnU R                  X#5        / SQn[        S5       Vs/ s H  oR                  U5      PM     nnU R                  X#5        g s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nr+   r1  )r   r   r.   r   r   #   8   T   x         r,   r8  c              ;   \   #    S [         R                  " U 40 UD6 5        S h  vN   g  N7f)Nc              3   H   #    U  H  n[        U5      S :X  d  M  Uv   M     g7fr,   Nr   rN   s     r#   rB   fTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.triangles.<locals>.<genexpr>       P#@aCFaK#@   "	"r   r   r   kwargss     r#   	trianglesSTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.triangles  #     P2#3#3A#@#@PPP   ",*,)r   r  c              ;   \   #    S [         R                  " U 40 UD6 5        S h  vN   g  N7f)Nc              3   H   #    U  H  n[        U5      S :X  d  M  Uv   M     g7f)r.   NrN  rN   s     r#   rB   hTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.four_cycles.<locals>.<genexpr>  rP  rQ  rR  rS  s     r#   four_cyclesUTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.four_cycles  rW  rX  )r   r   r   r,      -   i      iz  iv  i  r   r.   r^  )r   r   r/   r   rG  i  i=	  r3   )r   r   r   r   r2   %      i  rE   r   r  r   )rF   rA   r  r  rU  r   r\  s          r#   +test_simple_cycles_notable_clique_sequences@TestCycleEnumeration.test_simple_cycles_notable_clique_sequences  s   ',Q|4|!FF1I|4?55Q 	6 	
	Q (-Q|4|!FF1I|4#+,8aAE8,55Q) 	6 	
	Q A',Q|4|!FF1I|455Q+ 	6 	

 $,,8aAE8,',Q|4|!FF1I|455Q+ 	6 	

 0',Q{3{!FF1I{355hI 2',Qx0x!FF1Ix055hIS 5 5, 5 -4 4
 1s/   F"F'0F,'F1F67F;6G 4Gc                 h   [         R                  " 5       n[         R                  " U[        S5      5        / [        S5      Q/nU R	                  XSS9  [         R                  " U[        S5      5        / [        [        S5      5      QnU R	                  XSS9  [         R                  " U[        S5      5        / nU R	                  XSS9  [         R                  " 5       n[         R                  " U[        S5      5        / [        S5      Q/nU R	                  XSS9  [         R                  " U[        S5      5        U R	                  U/ SS9  [         R                  " U[        S5      5        U R	                  U/ SS9  [         R                  " 5       n[         R                  " U[        S5      5        [         R                  " U[        S5      S S S2   5        / [        [        S5      5      QnU R	                  XSS9  [         R                  " U[        S5      5        U R	                  U/ SS9  g )Nr/   Tr   rW   )r   rk   r   rE   r  r   rA  )rF   r   r  s      r#   1test_directed_chordless_cycle_parallel_multiedgesFTestCycleEnumeration.test_directed_chordless_cycle_parallel_multiedges  s   MMO
Qa!eAhK=""1$"?
Qa!+[q*+""1$"?
Qa!""1$"?OO
Qa!eAhK=""1$"?
Qa!""1bD"9
Qa!""1bD"9OO
Qa!
Qa2'+[q*+""1$"?
Qa!""1bD"9r%   c           	         [         R                  " 5       n[         R                  " U[        S5      5        [         R                  " U[        SS5      5        / [        S5      Q/ [        SS5      Q/nU R	                  XSS9  U R	                  X Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  UR                  SS5        UR                  / [        SS	5      Q5        UR                  / S
Q5        U R	                  XSS9  U R	                  X Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  g s  snf s  snf )Nr/   r.   r1  Tr   r2  r2   r,   r3   )r.   r,   r2   r3   r4   r      )r   r   r   rE   r  r   r5   r3  r4  s       r#   test_chordless_cycles_graph0TestCycleEnumeration.test_chordless_cycles_graph  s   HHJ
Qa!
Qa%eAhK5B<1""1$"?""838as1v{83!t 	# 	
 	


1a%1+'/0""1$"?""838as1v{83!t 	# 	
 4 4s   D;
(D;
E 
-E 
c           
      L   SnUS-  S:X  d   e[         R                  " 5       n[        U5       H;  nUS-  (       d  UR                  X3S-   U-  5        UR                  X3S-   U-  5        M=     / [        SUS5      Q/[        SUS5       VVs/ s H$  n[        XDS-   5       Vs/ s H  oUU-  PM	     snPM&     snn-   nU R	                  X&SS9  U R	                  X& Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  S	nUS-  S:X  d   e[         R                  " 5       n[        U5       H>  nUR                  X3S-   U-  5        US-  (       a  M&  UR                  US-   U-  U5        M@     / [        US-
  S
S
5      Q/[        SUS5       VVs/ s H$  n[        XDS-   5       Vs/ s H  oUU-  PM	     snPM&     snn-   nU R	                  X&SS9  U R	                  X& Vs/ s H  n[        U5      S::  d  M  UPM     snSSS9  g s  snf s  snnf s  snf s  snf s  snnf s  snf )Ni  r+   r   r   r,   Tr   r2  d   )r   r   rE   r5   r  r   re   )rF   rA   r6   vr?   r  r  rO   s           r#   'test_chordless_cycles_giant_hamiltonian<TestCycleEnumeration.test_chordless_cycles_giant_hamiltonian  s#    1uzzHHJqAq5

11uk*JJqq5A+& 
 &eAq!n%&6;Aq!n*
6DE!UO,OqUO,n*
 
 	""1$"?""838as1v{83!t 	# 	
 1uzzJJLqAJJqq5A+&q55

AEQ;* 
 ,eAE2r*+,6;Aq!n0
6DE!UO,OqUO,n0
 
 	""1$"?""838as1v{83!t 	# 	
9 -*

 4* -0

 4sH   H"H0HH
3H
H'H5H!H!
8H!
HHc                 
   Sn[         R                  " S [        U5       5       5      nU R                  U/ 5        U R                  U/ SS9  [        US-   5       H&  nU R                  U/ US9  U R                  U/ USS9  M(     g )Nr   c              3   N   #    U  H  n[        U5        H  o!U4v   M
     M     g 7fr<   r)  )r>   r  ys      r#   rB   MTestCycleEnumeration.test_simple_cycles_acyclic_tournament.<locals>.<genexpr>E  s     Bx!qA1vvxr,  Tr   r   r8  r2  )r   re   rE   r  )rF   rA   r6   r   s       r#   %test_simple_cycles_acyclic_tournament:TestCycleEnumeration.test_simple_cycles_acyclic_tournamentC  s    JJBuQxBB""1b)""1bD"9q1uA&&q"1&=&&q"1&M r%   c                 ,   [         R                  " S5      n[        [        S5      5      nU R	                  X/5        UR                  SS5        [         R                  " U/ SQ5        U R	                  X/5        UR                  [         R                  " [        SS5      5      5        [        [        SS5      5      nU R	                  XU/5        UR                  [         R                  " [        SS5      5      5        [        [        SS5      5      n1 SknU R	                  X5        [        U5      S:X  d   e[         R                  " S5      nUR                  [         R                  " / S	Q5      R                  5        S
nU R	                  X5        g )Nr3   r.   rW   )r,   rp     r1  >   r   r   r+   r,   r.   r/   r1   r2   r.   r/   r1   r2   r3   r4   r   rk  r3   r4   r   rk  r1        r^  
r   r   r+   r,   r.   rk  r   r4   r3   r2   
r.   r/   r1   r2   r3   r^  r  r  r1  rk  r   r   r+   r,   r.   rk  r1  r  r  r^  r3   r2   r1   )r1  r   r  r+   r  r.   r^  r3   r   )
r   rp   r   rE   r  r5   add_pathrq   r   r   )rF   testGcyc1cyc2cyc3r  s         r#   test_simple_cycles_graph-TestCycleEnumeration.test_simple_cycles_graphM  s)   q!U1X""5&1q"
E?+""5&1R^^E!RL12U1b\"""5,7R^^E!RL12U1b\"
 	""538}..., r"R^^$ABHHI"""53r%   c           	      4   [         R                  " 5       n/ n[        S5       HX  n[         R                  " U[        U5      5        UR	                  U5        [        U5       H  u  pEU R                  XUS9  M     MZ     [         R                  " 5       nSn/ n[        S5       Hr  nUR	                  US:  a  UOUS-
  5        US:X  a  M'  [         R                  " U[        XwU-   5      5        Xs-  n[        U5       H  u  pEU R                  XeUS9  M     Mt     g )Nr   r8  r   r+   r   )r   re   rE   r   r3  	enumerater  r   )rF   dr  rA   r   r   r   tops           r#   test_simple_cycles_bounded/TestCycleEnumeration.test_simple_cycles_bounded  s     JJLrALLE!H%OOA!(+**1a*@ ,  HHJrAOOQAAE2AvLLE#Qw/0HC!(+**1a*@ , r%   c                    [         R                  " S5      n[         R                  " S[         R                  S9n[        [         R                  " USS95      / :X  d   e[        [         R                  " USS95      / :X  d   e[        [         R
                  " USS95      / :X  d   e[        [         R
                  " USS95      / :X  d   eg )Nr.   )create_usingr   r8  )r   rp   re   r   r   r  )rF   r6   DGs      r#   %test_simple_cycles_bound_corner_cases:TestCycleEnumeration.test_simple_cycles_bound_corner_cases  s    NN1^^ABJJ7B$$QQ78B>>>B$$Ra89R???B'':;rAAAB'';<BBBr%   c                 >   [         R                  " [        5         [        R                  " 5       n[        R
                  " US5       H  n e   S S S 5        [         R                  " [        5         [        R                  " 5       n[        R
                  " US5       H  n e   S S S 5        [         R                  " [        5         [        R                  " 5       n[        R                  " US5       H  n e   S S S 5        [         R                  " [        5         [        R                  " 5       n[        R                  " US5       H  n e   S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NrW   )r   rc   
ValueErrorr   re   r   r   r  r   s      r#   test_simple_cycles_bound_error3TestCycleEnumeration.test_simple_cycles_bound_error  s   ]]:&

A%%a,u - '
 ]]:&
A%%a,u - '
 ]]:&
A((B/u 0 '
 ]]:&

A((B/u 0 '& '&
 '&
 '&
 '&s/   4E14E,4E=4F
E),
E:=
F
Fc                 V   [        SS5       Vs/ s H  oR                  U5      PM     nn/ SQnU R                  X#SS9  [        S5       Vs/ s H  oU-  U-
  S-  PM     nn[        S5       Vs/ s H  oR                  U5      PM     nnU R                  X#SS9  g s  snf s  snf s  snf )Nr+   r^  )r   r   r.   r   r   rE  rF  rG  rH  rI  rJ  i  il  Tr   rd  )rF   rA   r  r  s       r#   test_chordless_cycles_clique1TestCycleEnumeration.test_chordless_cycles_clique  s    ',Q|4|!FF1I|4I55$ 	6 	

 /4Bi8iUQY1$i8',Ry1y!FF1Iy155$ 	6 	
 5 91s   BB!/B&r=   )NFN)r   r   r   r   staticmethodr   r   r   r  r  r  r"  r.  r5  r9  rB  re  rh  rl  rr  rx  r  r  r  r  r  r   r=   r%   r#   r   r      s    $ $ 2 2 , ,P: 4t "WG6
>

G+JZ#:J
$.
`N14fA4C*
r%   r   c                       \ rS rSr\S 5       rS rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rSrg)TestFindCyclei  c                 (    / SQU l         / SQU l        g )Nr*   ))rW   r   r   ro   ro   r   r,   r   )nodesr   )r7   s    r#   r8   TestFindCycle.setup_class  s     	E	r%   c                     [         R                  " U R                  5      n[        R                  " [         R
                  R                  [         R                  XR                  5        g r<   )	r   r   r   r   rc   	exceptionNetworkXNoCycle
find_cycler  r   s     r#   test_graph_nocycle TestFindCycle.test_graph_nocycle  s6    HHTZZ bll22BMM1jjQr%   c                     [         R                  " U R                  5      nUR                  SS5        [	        [         R
                  " XR                  5      5      n/ SQnX#:X  d   eg )Nr+   r   r   r   r   r   r   r   r5   r   r  r  rF   r6   r  x_s       r#   test_graph_cycleTestFindCycle.test_graph_cycle  sG    HHTZZ 	

1aq**-.%wwr%   c                     [         R                  " U R                  5      nUR                  SS5        [	        [         R
                  " XR                  S S95      n/ SQnX#:X  d   eg )Nr+   r   orientationr  r  r  s       r#   test_graph_orientation_none)TestFindCycle.test_graph_orientation_none  sI    HHTZZ 	

1aq**$?@%wwr%   c                     [         R                  " U R                  5      nUR                  SS5        [	        [         R
                  " XR                  SS95      nSS[        4SS[        4SS[        4/nX#:X  d   eg )Nr+   r   originalr  r   )r   r   r   r5   r   r  r  r   r  s       r#   test_graph_orientation_original-TestFindCycle.test_graph_orientation_original  sb    HHTZZ 	

1aq***EF!Wo1gAw@wwr%   c                     [         R                  " U R                  5      n[        [         R                  " XR
                  5      5      nSS/nX#:X  d   eg )Nr   ro   r   re   r   r   r  r  r  s       r#   test_digraphTestFindCycle.test_digraph  s>    JJtzz"q**-.fwwr%   c                     [         R                  " U R                  5      n[        [         R                  " XR
                  S S95      nSS/nX#:X  d   eg )Nr  r   ro   r  r  s       r#   test_digraph_orientation_none+TestFindCycle.test_digraph_orientation_none  s@    JJtzz"q**$?@fwwr%   c                     [         R                  " U R                  5      n[        [         R                  " XR
                  SS95      nSS[        4SS[        4/nX#:X  d   eg )Nr  r  r   r   r   re   r   r   r  r  r   r  s       r#   !test_digraph_orientation_original/TestFindCycle.test_digraph_orientation_original  sL    JJtzz"q***EF!Wo1g/wwr%   c                     [         R                  " U R                  5      n[        [         R                  " XR
                  5      5      nSS/nUS   US   :X  d   eUS   S S US   S S :X  d   eg )Nr   r   r   )r   r   r   r   r   r+   )r   rk   r   r   r  r  r  s       r#   test_multigraphTestFindCycle.test_multigraph  sk    MM$**%q**-.#tr!u}}tBQx2a5!9$$$r%   c                     [         R                  " U R                  5      n[        [         R                  " XR
                  5      5      nSS/nUS   US   :X  d   eUS   S S US   S S :X  d   eg )Nr  )r   r   r   r   r   r+   )r   rA  r   r   r  r  r  s       r#   test_multidigraphTestFindCycle.test_multidigraph  sk    OODJJ'q**-.#tr!u}}tBQx2a5!9$$$r%   c                     [         R                  " U R                  5      n[        [         R                  " XR
                  SS95      nSS[        4SS[        4/nX#:X  d   eg )Nignorer  r   r   r  r  s       r#   test_digraph_ignore!TestFindCycle.test_digraph_ignore  sL    JJtzz"q**(CD!Wo1g/wwr%   c                     [         R                  " U R                  5      n[        [         R                  " XR
                  SS95      nSS[        4SS[        4/nX#:X  d   eg )Nreverser  r   r   )r   re   r   r   r  r  r	   r  s       r#   test_digraph_reverse"TestFindCycle.test_digraph_reverse  sL    JJtzz"q**)DE!Wo1g/wwr%   c                 (   [         R                  " U R                  5      n[        [         R                  " XR
                  SS95      nSSS[        4SSS[        4/nUS   US   :X  d   eUS   S S US   S S :X  d   eUS   S   US   S   :X  d   eg )Nr  r  r   r   r+   r,   )r   rA  r   r   r  r  r   r  s       r#   test_multidigraph_ignore&TestFindCycle.test_multidigraph_ignore  s    OODJJ'q**(CD!Q 1aG"45tr!u}}tBQx2a5!9$$$tAw"Q%("""r%   c                     [         R                  " / SQ5      n[        [         R                  " U/ SQSS95      nSSS[        4SSS[
        4/nX#:X  d   eg )N)r   r   r   r}   r  r  r   r+   r   )r   rA  r   r  r   r	   r  s       r#   test_multidigraph_ignore2'TestFindCycle.test_multidigraph_ignore2  sM    OO45q)BC!Q 1aG"45wwr%   c                     [         R                  " / SQ5      n[        R                  " [         R                  R
                  [         R                  U/ SQSS9  g )N)r   r   r  )r.   r+   r%  r  r  )r   rA  r   rc   r  r  r  r   s     r#   test_multidigraph_original(TestFindCycle.test_multidigraph_original&  s<    
 OO<=LL((MM"	
r%   c                 *   [         R                  " / SQ5      n[        R                  " [         R                  R
                  [         R                  USS9  [        [         R                  " USS95      nUSS[        4SS[        4SS[        4/:X  d   eg )N)r   r   r   r  r  r  r   r   r+   )
r   re   r   rc   r  r  r  r   r   r	   )rF   r6   r  s      r#   test_dagTestFindCycle.test_dag4  sr    JJ/0LL(("--
	
 qh78aG_q!Wo1gGGGGr%   c                    [         R                  " 5       nUR                  / SQ5        [        R                  " [         R
                  [         R                  USS9  [        [         R                  " US5      5      nSS/nX#:X  d   e[        [         R                  " US5      5      nSS/nX#:X  d   e[        [         R                  " U5      5      nSS/nX#:X  d   eg )N)ro   r   r   r   r   r   r   r   r   r+   )r   re   r   r   rc   r  r  r   r  s       r#   test_prev_explored TestFindCycle.test_prev_explored<  s     JJL	9:b(("--1Eq!$%fwwq!$%fwwq!"fwwr%   c                 "   [         R                  " 5       nUR                  / SQ5        [        R                  " [         R
                  [         R                  USS9  [        R                  " [         R
                  [         R                  U5        g )N)r   r   r  r   r   r  )r   re   r   r   rc   r  r  r   s     r#   test_no_cycleTestFindCycle.test_no_cycleN  sT     JJL	9:b(("--1Eb(("--;r%   r=   N)r   r   r   r   r   r8   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r=   r%   r#   r  r    sm    F FR%%#
H$<r%   r  c                 8    [        U 5      [        U5      :X  d   eg r<   rL   )rG   r    s     r#   assert_basis_equalr  W  s    !9q	!!!r%   c                   T    \ rS rSr\S 5       rS rS rS rS r	S r
S rS	 rS
 rSrg)TestMinimumCycleBasisi[  c                     [         R                  " 5       n[         R                  " U/ SQSS9  UR                  SSSS9  Xl        g )N)r   r+   r,   r.   r   weightr+   r.   r/   )r   r   r   r5   diamond_graph)r7   Ts     r#   r8   !TestMinimumCycleBasis.setup_class\  s5    HHJ
QQ/	

1a
"r%   c                 h    [         R                  " U R                  5      n[        U/ SQ/ SQ/5        g )Nr+   r.   r   )r,   r.   r+   r   minimum_cycle_basisr  r  rF   mcbs     r#   test_unweighted_diamond-TestMinimumCycleBasis.test_unweighted_diamondc  s'    $$T%7%783I 67r%   c                 f    [         R                  " U R                  SS9n[        U/ SQ/ SQ/5        g )Nr  r  r  )r.   r,   r+   r   r  r  s     r#   test_weighted_diamond+TestMinimumCycleBasis.test_weighted_diamondg  s)    $$T%7%7I3L 9:r%   c                 :   Sn[        SSU-   5       H  n[        R                  " SSUS9nUR                  5       nUR	                  5       n[        R
                  " U5      n[        R                  " U5      n[        U5      XT-
  U-   :X  d   e[        U5        M     g )Nr   i  g333333?seed)	rE   r   erdos_renyi_graphnumber_of_nodesnumber_of_edgesnumber_connected_componentsr  r   r$   )rF   ntrialr   rgnnodesnedgesncompr  s           r#   test_dimensionality)TestMinimumCycleBasis.test_dimensionalityk  s    $v.D%%b#D9B'')F'')F2226E((,Cs8v6666c" /r%   c                     [         R                  " S5      n[         R                  " U5      n[        S U 5       5      (       d   e[	        U5        g )Nr/   c              3   >   #    U  H  n[        U5      S :H  v   M     g7frM  rN  )r>   cycles     r#   rB   <TestMinimumCycleBasis.test_complete_graph.<locals>.<genexpr>{  s     4u3u:?s   )r   r   r  r   r$   )rF   cgr  s      r#   test_complete_graph)TestMinimumCycleBasis.test_complete_graphx  sA    q!$$R(444444#r%   c                 l    [         R                  " SS5      n[         R                  " U5      (       a   eg )Nr,   )r   balanced_treer  )rF   tgs     r#   test_tree_graph%TestMinimumCycleBasis.test_tree_graph~  s.    a#))"-----r%   c           	        ^^ [         R                  " 5       m[        [         R                  " T5      5      n/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/m[	        U5      [	        T5      :X  d   e[        U4S jU 5       5      (       d   eU H;  n[        U4S j[         R                  R                  US	S
9 5       5      (       a  M;   e   [        U5        g )N)r.   r4   r2   r/   r   )r   r+   r,   r.   r   )r   r1   r3   r/   r   )r.   r,   r3   r/   r   )r   r1   r4   r.   r   )r   r+   r2   r/   r   c              3   ,   >#    U  H	  oT;   v   M     g 7fr<   r=   r>   rO   r  s     r#   rB   <TestMinimumCycleBasis.test_petersen_graph.<locals>.<genexpr>       .#Q=#   c              3   J   >#    U  H  u  pTR                  X5      v   M     g 7fr<   r   )r>   urq  r6   s      r#   rB   r    s!     V4UDAqzz!''4Us    #T)cyclic)	r   petersen_graphr   r  r   r   utilsr   r$   )rF   r  rO   r6   r  s      @@r#   test_petersen_graph)TestMinimumCycleBasis.test_petersen_graph  s    2))!,-
 3x3x=(((.#..... AVBHH4E4EaPT4E4UVVVVV  	#r%   c           	      |   Sn[         R                  " U5      nUR                  UR                   VVs/ s H	  u  p4X4S4PM     snn5        UR                  [         R                  " U5      R                   VVs/ s H	  u  p4X4S4PM     snn5        [         R
                  " USS9n[        U5        g s  snnf s  snnf )Nr3   r4   r   r  r  )r   r   add_weighted_edges_fromr   rp   r  r$   )rF   Nr  r  rq  r  s         r#   ,test_gh6787_variable_weighted_complete_graphBTestMinimumCycleBasis.test_gh6787_variable_weighted_complete_graph  s    q!
"""((#C($!Q1I(#CD
"""..:K:Q:Q#R:Q$!Q1I:Q#RS$$R9# $D#Rs   B2
9B8
c                   ^ [         R                  " S5      nUR                  SS/SS9  / SQ/ SQ/ SQ/m[        [         R                  " USS95      n[        U5      [        T5      :X  d   e[        U4S	 jU 5       5      (       d   e/ SQ/ SQ/ S
Q/m[        [         R                  " U5      5      n[        U5      [        T5      :X  d   e[        U4S jU 5       5      (       d   eg )Nr.   )r   r+   r   )r   r,   r   distr  )r   r,   r   )r,   r+   r   r   )r   r+   r   c              3   ,   >#    U  H	  oT;   v   M     g 7fr<   r=   r  s     r#   rB   MTestMinimumCycleBasis.test_gh6787_and_edge_attribute_names.<locals>.<genexpr>  r  r  )r,   r+   r   c              3   ,   >#    U  H	  oT;   v   M     g 7fr<   r=   r  s     r#   rB   r-    r  r  )r   rp   r&  r   r  r   r   )rF   r6   r  r  s      @r#   $test_gh6787_and_edge_attribute_names:TestMinimumCycleBasis.test_gh6787_and_edge_attribute_names  s    NN1	!!:z":6!J|Y72))!F;<3x3x=(((.#..... y)42))!,-3x3x=(((.#.....r%   r=   N)r   r   r   r   r   r8   r  r  r
  r  r  r#  r(  r/  r   r=   r%   r#   r  r  [  s<     8;#.(/r%   r  c                      \ rS rSr\R
                  R                  S\R                  " 5       S4\R                  " 5       S4\R                  " 5       S4\R                  " 5       S4\R                  " 5       S4\R                  " SSS9\4\R                  " S5      \4\R                   " \" \" \" S5      5      \" \" SS5      5      5      5      S4\R                   " / S	Q5      S
44	5      S 5       rSrg)	TestGirthi  )r6   r  r.   r/   r1   r   *   r  ))r   r1   )r   r3   )r   r4   )r   r3   )r+   r3   )r+   r4   )r.   r4   )r/   r4   )r1   r3   )r1   r4   )r2   r3   r,   c                 <    [         R                  " U5      U:X  d   eg r<   )r   girth)rF   r6   r  s      r#   
test_girthTestGirth.test_girth  s    @ xx{h&&&r%   r=   N)r   r   r   r   r   markparametrizer   chvatal_graphtutte_graphr!  heawood_graphpappus_graphrandom_labeled_treer   empty_graphr   r   r   rE   r6  r   r=   r%   r#   r2  r2    s    [[#^^q! !$#__"##BR0#6^^B%XXeKa1;uQ|3LMNPQR !	
>'?>'r%   r2  )	itertoolsr   r   r   mathr   randomr   r   networkxr   %networkx.algorithms.traversal.edgedfsr   r	   r$   r'   r   r   r   r   r   r   r  r  r  r2  r=   r%   r#   <module>rE     s}    ( (     B-eF eFP,%59f
 f
\I< I<X"O/ O/d!' !'r%   