
    sh#                         S SK r S SKJrJr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)    N)chainislicetee)inf)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          y/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/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            r2   	   )r   r   r   add_edgeG)clsr5   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?   r@   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"   rA   .TestCycles.test_cycle_basis.<locals>.<genexpr>.        /BqB   r)   r/   r,   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr;   rK   rM   s     r"   rA   rO   1   rP   rQ   r3   c              3   8   #    U  H  n[        U5      v   M     g 7fr;   rK   rM   s     r"   rA   rO   4   rP   rQ   ABCc              3   8   #    U  H  n[        U5      v   M     g 7fr;   rK   rM   s     r"   rA   rO   9   s     4GqGrQ   )ABC)r5   r   cycle_basisrL   r   rE   r5   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DiGraphrZ   rE   r5   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ra   )r   rb   r   rc   
MultiGraphrZ   re   s      r"   test_cycle_basis3TestCycles.test_cycle_basis3A   s;    ]]2445A1%B 655rh   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+   r2   r   r   r   r   )r   cycle_graphupdaterD   rZ   relabel_nodesget)rE   r5   cbGpermr   cycr@   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   r0   r*   c              3   8   #    U  H  n[        U5      v   M     g 7fr;   rK   rM   s     r"   rA   8TestCycles.test_cycle_basis_self_loop.<locals>.<genexpr>W   rP   rQ   r   r   r   r*   )r   r*   r+   )r   r*   r0   N)r   r   r   rZ   rL   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;   rG   r=   rcrN   rE   s     r"   rA   0TestCycles.test_simple_cycles.<locals>.<genexpr>a   !     F2Rt11!R882   ")r   rd   rL   simple_cyclesr   rC   )rE   edgesr5   cccarN   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   rE   r5   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 )NrF   r   )r   rd   r   r   r   r   rE   r5   rN   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"   rA   6TestCycles.test_simple_cycles_small.<locals>.<genexpr>z   r   r   )r   rd   r   rL   r   r   rG   rC   )rE   r5   r   r   rN   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   rd   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   rd   rD   r4   )rE   kr5   r@   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   )rD   r   r   r   r   r   )rE   r   r5   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=   rrN   rE   s     r"   rA   ;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=   rN   r   rE   s     r"   rA   r      s!     Ib455b!<<br   )rD   r   rL   r   r   recursive_simple_cyclesr   rC   )rE   r   r5   r   rccrN   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+   rn   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"   rA   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"   rA   r      s!     E"Qt11"a88"r   )r   rd   add_edges_fromrL   r   r   r   rC   )rE   r5   r   r   r   rN   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__classmethodr7   rG   r^   rf   rk   rw   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)iterablerF   r   s      r"   pairwiser      s     x=DADMq9r$   c           	      @    [        [        U [        U S5      5      5      $ Nr   )r   r   r   rN   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Srg)TestCycleEnumeration   c                 .    [         R                  " U 5      $ r;   )r   complete_graphr@   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"   rA   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   )	rE   r   rN   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                    Uc'  U(       a  [         R                  O[         R                  n[        [	        [        U5      5      5      n[        R                  " S5      nUR                  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UX45        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UX45        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 )N*   T)copyr  r   z	expected z cycles, got expectedr   z, is valid but not in the expected cycle set!)r   chordless_cyclesr   r   rD   r   randomRandomshuffledictr   rq   r   r  
isinstanceintr   values)rE   r   expected_cyclesr  r  	algorithmrelabelrnglabelunlabelhedgesetparamscycle_cacherN   xr   r   s                     r"   check_cycle_algorithm*TestCycleEnumeration.check_cycle_algorithm  s    /8++b>N>NI uSV}%mmBGS_%s7'QD1''*#%1>"1''A./0a!*aJ0Bb+z:| ( os++;?2"0c+>N=OP  )J#-.:aq:A.Bb+z:| * { '')"%aS(TU  * ' 1 /s   F:F?c           	      R    [        X5       H  u  pgU R                  UUUUUS9  M     g )N)r  r  r  )r   r  )rE   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.   rV   r   ))r   r   r*   r+   r   Tr  r*   r  r  r   )r   rd   r   rD   r4   r  r   )rE   r   r  rN   s       r"   $test_directed_chordless_cycle_digons9TestCycleEnumeration.test_directed_chordless_cycle_digonsP  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  UR                  / SQ5        S/S/SS//nU R                  XSS9  g )	N))r   r   r   r   r   r   r*   Tr&  )r%  r   r   r   r+   r-   )r   rj   r  r   )rE   r5   r  s      r"   +test_chordless_cycles_multigraph_self_loops@TestCycleEnumeration.test_chordless_cycles_multigraph_self_loops]  sg    MM:;3*""1"F	9:3aV,""1"Fr$   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-   r3   r1   r+   )r   r   r*   r+   r-   )r+   r-   r.   r0   r1   r-   r.   r0   r1   r2   )r.  r+   r1   r/  r0  r'  r.  r/  c              3   N   #    U  H  n[        U5        H  o!U4v   M
     M     g 7fr;   rD   )r=   r>   js      r"   rA   PTestCycleEnumeration.test_directed_chordless_cycle_undirected.<locals>.<genexpr>}  s     Cy!%(Q1v(vy   #%r   )r   rd   r  r   rD   r4   remove_edge)rE   r   r  s      r"   (test_directed_chordless_cycle_undirected=TestCycleEnumeration.test_directed_chordless_cycle_undirectedf  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  r1   r+   r2   rV   )
r   rd   r   rD   r  r   r4   appendr   r6  rE   r5   r  rN   s       r"   test_chordless_cycles_directed3TestCycleEnumeration.test_chordless_cycles_directed  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  )rD   r   r"  )rE   r@   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"   rA   MTestCycleEnumeration.test_directed_chordless_loop_blockade.<locals>.<genexpr>  s     1y!1vy   r   Tr&  r   rA  c              3   (   #    U  H  oU4v   M
     g 7fr;   r<   rF  s     r"   rA   rG    s     9AQrH  r   r*   )r   rd   rD   r   r  MultiDiGraphr   )rE   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*   r:  )r   r   r-   r   r   #   8   T   x         r+   rA  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   rM   s     r"   rA   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-   NrW  rM   s     r"   rA   hTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.four_cycles.<locals>.<genexpr>  rY  rZ  r[  r\  s     r"   four_cyclesUTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.four_cycles  r`  ra  )r   r   r   r+      -   i      iz  iv  i  r   r-   rg  )r   r   r.   r   rP  i  i=	  r2   )r   r   r   r   r1   %      i  rD   r   r"  r   )rE   r@   r  r  r^  r   re  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&  rV   )r   rj   r   rD   r  r   rJ  )rE   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-   r:  Tr&  r;  r1   r+   r2   )r-   r+   r1   r2   r3   r      )r   r   r   rD   r  r   r4   r<  r=  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&  r;  d   )r   r   rD   r4   r  r   rd   )rE   r@   r5   vr>   r  r  rN   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;   r2  )r=   r  ys      r"   rA   MTestCycleEnumeration.test_simple_cycles_acyclic_tournament.<locals>.<genexpr>O  s     Bx!qA1vvxr5  Tr&  r   rA  r;  )r   rd   rD   r  )rE   r@   r5   r   s       r"   %test_simple_cycles_acyclic_tournament:TestCycleEnumeration.test_simple_cycles_acyclic_tournamentM  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 )Nr2   r-   rV   )r+   ry     r:  >   r   r   r*   r+   r-   r.   r0   r1   r-   r.   r0   r1   r2   r3   r   rt  r2   r3   r   rt  r:        rg  
r   r   r*   r+   r-   rt  r   r3   r2   r1   
r-   r.   r0   r1   r2   rg  r  r  r:  rt  r   r   r*   r+   r-   rt  r:  r  r  rg  r2   r1   r0   )r:  r   r  r*   r  r-   rg  r2   r   )
r   ro   r   rD   r  r4   add_pathrp   r   r   )rE   testGcyc1cyc2cyc3r  s         r"   test_simple_cycles_graph-TestCycleEnumeration.test_simple_cycles_graphW  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   rA  r   r*   r   )r   rd   rD   r   r<  	enumerater  r   )rE   dr  r@   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   rA  )r   ro   rd   r   r   r	  )rE   r5   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)NrV   )r   rb   
ValueErrorr   rd   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*   rg  )r   r   r-   r   r   rN  rO  rP  rQ  rR  rS  i  il  Tr&  rm  )rE   r@   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+  r7  r>  rB  rK  rn  rq  ru  r{  r  r  r  r  r  r  r   r<   r$   r"   r   r      s    $ $ 2 2 , ,P: 5v "WG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)   ))rV   r   r   rn   rn   r   r+   r   )nodesr   )r6   s    r"   r7   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   rb   	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   r4   r   r  r  rE   r5   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   r4   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   rn   r   rd   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   rn   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   rd   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   rj   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   rJ  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   rd   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   rJ  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   rJ  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   rJ  r   rb   r  r  r  r   s     r"   test_multidigraph_original(TestFindCycle.test_multidigraph_original0  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   rd   r   rb   r  r  r  r   r   r   )rE   r5   r  s      r"   test_dagTestFindCycle.test_dag>  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)rn   r   r   r   r   r   r   r   r   r*   )r   rd   r   r   rb   r  r  r   r  s       r"   test_prev_explored TestFindCycle.test_prev_exploredF  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   rd   r   r   rb   r  r  r   s     r"   test_no_cycleTestFindCycle.test_no_cycleX  sT     JJL	9:b(("--1Eb(("--;r$   r<   N)r   r   r   r   r   r7   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;   rK   )rF   r   s     r"   assert_basis_equalr  a  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)TestMinimumCycleBasisie  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   r4   diamond_graph)r6   Ts     r"   r7   !TestMinimumCycleBasis.setup_classf  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  rE   mcbs     r"   test_unweighted_diamond-TestMinimumCycleBasis.test_unweighted_diamondm  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_diamondq  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)	rD   r   erdos_renyi_graphnumber_of_nodesnumber_of_edgesnumber_connected_componentsr  r   r#   )rE   ntrialr	  rgnnodesnedgesncompr  s           r"   test_dimensionality)TestMinimumCycleBasis.test_dimensionalityu  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rV  rW  )r=   cycles     r"   rA   <TestMinimumCycleBasis.test_complete_graph.<locals>.<genexpr>  s     4u3u:?s   )r   r   r  r   r#   )rE   cgr  s      r"   test_complete_graph)TestMinimumCycleBasis.test_complete_graph  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  )rE   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-   r3   r1   r.   r   )r   r*   r+   r-   r   )r   r0   r2   r.   r   )r-   r+   r2   r.   r   )r   r0   r3   r-   r   )r   r*   r1   r.   r   c              3   ,   >#    U  H	  oT;   v   M     g 7fr;   r<   r=   rN   r  s     r"   rA   <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=   urz  r5   s      r"   rA   r$    s!     V4UDAqzz!''4Us    #T)cyclic)	r   petersen_graphr   r  r   r   utilsr   r#   )rE   r  rN   r5   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 )Nr2   r3   r   r  r  )r   r   add_weighted_edges_fromr   ro   r  r#   )rE   Nr  r(  rz  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"   rA   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"   rA   r6    r%  r&  )r   ro   r/  r   r  r   r   )rE   r5   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   r7   r  r  r  r  r  r,  r1  r8  r   r<   r$   r"   r  r  e  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  )r5   r  r-   r.   r0   r   r  r  ))r   r0   )r   r2   )r   r3   )r   r2   )r*   r2   )r*   r3   )r-   r3   )r.   r3   )r0   r2   )r0   r3   )r1   r2   r+   c                 <    [         R                  " U5      U:X  d   eg r;   )r   girth)rE   r5   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   rD   r>  r   r<   r$   r"   r;  r;    s    [[#^^q! !$#__"##BR0#6^^B%XXeKa1;uQ|3LMNPQR !	
>'?>'r$   r;  )r
  	itertoolsr   r   r   mathr   r   networkxr   %networkx.algorithms.traversal.edgedfsr   r   r#   r&   r   r   r   r   r   r   r  r  r  r;  r<   r$   r"   <module>rL     s}     ( (    B-eF eFP,%59p
 p
pI< I<X"O/ O/d!' !'r$   