
    Vh                          d Z ddlZddlmZ ddlmZ ddlZddlZd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zej*                  j-                  dddg      d        Zy)z7Tests for the :mod:`networkx.algorithms.triads` module.    N)defaultdict)samplec                      t        j                         } | j                  g d       i ddddddddd	d
dddddddddddd
dddddddddd}t        j                  |       }||k(  sJ y)"Tests the triadic_census function.
01020304051216515665030T   120C   210r   120U012	   102   021U111U003   030C021D201111D300120D021CN)nxDiGraphadd_edges_fromtriadic_census)Gexpectedactuals      U/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/tests/test_triads.pytest_triadic_censusr/      s    


AQR 	q 		
 	q 	q 	 	 	q 	 	 	q 	 	q 	  	!H$ q!Fv    c                     t        j                         } | j                         } t        d      D ]M  }t	        t        | j                               d      }| j                  |      }t        j                  |      rMJ  y)zTests the is_triad functiond   r   N)	r'   karate_club_graphto_directedranger   sortednodessubgraphis_triad)r+   ir7   G2s       r.   test_is_triadr<   &   sc    
A	A3Z vaggi(!,ZZ{{2r0   c                     t        j                         } | j                  g d       t        d      D cg c]4  }t        |dz   d      D ]   }t        |dz   d      D ]  }| d| d|  " 6 c}}}D cg c]"  }| j	                  |j                  d            $ c}t        t        j                  |             }t        fd|D              sJ yc c}}}w c c}w )zTests the all_triads function.r      r   ,c              3   H   K   | ]  t        fd D                yw)c              3   J   K   | ]  }t        j                  |        y wNr'   is_isomorphic).0G1r;   s     r.   	<genexpr>z,test_all_triads.<locals>.<genexpr>.<genexpr><   s     ?2##B+?    #Nany)rE   r;   r,   s    @r.   rG   z"test_all_triads.<locals>.<genexpr><   s     QBs?h??Qs   "N)	r'   r(   r)   r5   r8   splitlist
all_triadsall)r+   r:   jkxr-   r,   s         @r.   test_all_triadsrR   0   s    


AQR q q1ua q1ua	  #Qqc1#H 3;;Q

1773<(;H"--"#FQ&QQQQ <s   9C:'C c                  6   t        j                  g g g d      } t        j                  |       dk(  sJ t        j                  dgg g d      } t        j                  |       dk(  sJ t        j                  ddg      } t        j                  |       dk(  sJ t        j                  dgdgg d      } t        j                  |       d	k(  sJ t        j                  dd
g      } t        j                  |       dk(  sJ t        j                  ddg      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d      } t        j                  |       dk(  sJ t        j                  g d       } t        j                  |       d!k(  sJ y")#zTests the triad_type function.)r   r   r   r   r   r   r   r   r   r   r!   r   r   r   r   r   r   r   r&   )rT   r   r   rV   r#   )rT   rX   rW   r   )rT   rW   rU   r   )rT   rW   r   r   r    )rT   rX   rY   rU   r"   )rT   rX   rY   rV   r%   )rT   rX   rU   rW   r   )rT   rX   rU   rV   r   )rT   rX   rV   rW   rU   r   )rT   rX   rW   rV   rU   rY   r$   N)r'   r(   
triad_type)r+   s    r.   test_triad_typer[   ?   s    	

rbR()A==u$$$


srb)*A==u$$$


FF#$A==v%%%


ssr*+A==u$$$


FF#$A==v%%%


FF#$A==v%%%


+,A==v%%%


+,A==v%%%


+,A==v%%%


+,A==v%%%


34A==u$$$


34A==v%%%


34A==v%%%


34A==v%%%


;<A==u$$$


CDA==u$$$r0   c                    	 t        j                         } | j                  g d       t        j                  |       }t	        t
              }|D ]+  }t        j                  |      }||   j                  |       - t        j                  |       }t        |j                               t        |j                               k(  sJ |j                         D ]'  \  }}||   }|D ]  	t        	fd|D              rJ  ) y )Nr   c              3   J   K   | ]  }t        j                  |        y wrB   rC   )rE   eas     r.   rG   z&test_triads_by_type.<locals>.<genexpr>w   s     C!r''1-CrH   )r'   r(   r)   rM   r   rL   rZ   appendtriads_by_typesetkeysitemsrJ   )
r+   rM   r,   triadnamer-   tri_type	actual_Gsexpected_Gsr_   s
            @r.   test_triads_by_typerj   j   s    


AQRq!J4 H %}}U#e$% q!Fv{{}X]]_!5555%||~ D)x( 	DAC{CCCC	DDr0   c                      t        j                  dt         j                        } ddi}dD ]H  }t        j                  | |      }||j	                         D ci c]  \  }}|dkD  s|| c}}k(  rHJ  y c c}}w )Nabccreate_usingr&   r   )r_   bcabacbcrl   nodelistr   r'   
path_graphr(   r*   rd   )r+   r,   nltriad_censustypcnts         r.   'test_triadic_census_short_path_nodelistr|   z   sv    
e"**5A{H6 V((R8\5G5G5IUcSSTWCHUUUUVUs   A8
(A8
c                  r   t        j                  dt         j                        } d}t        j                  t
        |      5  t        j                  | g d       d d d        t        j                  t
        |      5  t        j                  | g d       d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)N   rm   z3nodelist includes duplicate nodes or nodes not in G)match)r   r   r   r   )r   r   r_   r   )r'   rw   r(   pytestraises
ValueErrorr*   )r+   msgs     r.   +test_triadic_census_correct_nodelist_valuesr      s    
abjj1A
@C	z	- +
!\*+	z	- -
!^,- -+ +- -s   B!?B-!B*-B6c                  N   t        j                  t        j                  dt         j                              } i | j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ t        j                  t        j                  dt         j                              } i | j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ t        j                  t        j                  dt         j                              } i | j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ t        j                  t        j                  dg            } i | j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ y c c}}w c c}}w c c}}w c c}}w )Nr   rm   r   r   rW   )r'   r*   empty_graphr(   rd   )tcrz   r{   s      r.   test_triadic_census_tiny_graphsr      s=   			2>>!"**E	FB288:AxsCq#s(AAAA			2>>!"**E	FB288:AxsCq#s(AAAA			2>>!"**E	FB288:AxsCq#s(AAAA			2::vh/	0B288:AxsCq#s(AAAA BAAAs0   FF4FFF)F3F!F!c            	      Z   t        j                  dt         j                        } ddi}| D ]h  }| j                         }|j	                  ||       t        j
                  |      }||j                         D ci c]  \  }}|dkD  s|| c}}k(  rhJ  t        j                  dt         j                        } t        j                  |       }| D ]  }| j	                  ||        t        j
                  |       }||D ci c]  }|t        ||          c}k(  sJ y c c}}w c c}w )Nrl   rm   r&   r   r   abcde)	r'   rw   r(   copyadd_edger*   rd   ra   len)	GGr,   nr+   r   rz   r{   tbttts	            r.   test_triadic_census_selfloopsr      s
   	u2::	6B{H LGGI	

1aq!RXXZKc37CHKKKK	L 
wRZZ	8B


B
C 
Aq			2	BR0r"c#b'l"0000 L 1s   :D"
D"
D(c                      t        j                  dt         j                        } ddd}t        j                  |       }||j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ y c c}}w )Nabcdrm   r   r   r&   r   rv   )r+   r,   ry   rz   r{   s        r.   test_triadic_census_four_pathr      sc    
f2::6A!$H$$Q'L1C1C1EQXS#qSQQQQQs   A0"A0c                     t        j                  dt         j                        } ddd}ddd}t        j                  | dg      }||j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ t        j                  | d	g      }||j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ t        j                  | d
g      }||j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ t        j                  | dg      }||j	                         D ci c]  \  }}|dkD  s|| c}}k(  sJ y c c}}w c c}}w c c}}w c c}}w )Nr   rm   r   r   r   r_   rt   r   ro   rp   drv   )	r+   expected_endexpected_mida_triad_censusrz   r{   b_triad_censusc_triad_censusd_triad_censuss	            r.   &test_triadic_census_four_path_nodelistr      sM   
f2::6Aa(La(L&&qC59N^5I5I5KWcsUVwCHWWWW&&qC59N^5I5I5KWcsUVwCHWWWW&&qC59N^5I5I5KWcsUVwCHWWWW&&qC59N^5I5I5KWcsUVwCHWWWW XWWWs0   E*E#E1E*E8E1E?Ec                     t        j                         } | j                  g d       i ddddddddd	d
dddddddddddd
dddddddddd}t        j	                  |d      }| j                         D ]1  }t        j                  | |g      }|D ]  }||xx   ||   z  cc<    3 |j                         D ]  \  }}||xx   dz  cc<    ||k(  sJ y)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   rt   N)r'   r(   r)   dictfromkeysr7   r*   rd   )r+   r,   r-   nodenode_triad_census	triad_keyrP   vs           r.   test_triadic_census_nodelistr      sv   


AQR 	q 		
 	q 	q 	 	 	q 	 	 	q 	 	q 	  	!H$ ]]8Q'F	 >--a4&A! 	>I9!29!==	>>
  1q	a	vr0   Nr~   
   c                    t        j                  | ddd      }t        j                  |      }t        j                  |      }|D ci c]  }|t	        ||          }}||k(  sJ |D ]S  t        j                  |h      }|D ci c]'  }|t        fd|j                  |g       D              ) }}||k(  rSJ  t        j                  |d      D ]]  t              t        j                  |      }|D ci c]'  }|t        fd|j                  |g       D              ) }}||k(  r]J  t        j                  |d	      D ]]  t              t        j                  |      }|D ci c]'  }|t        fd
|j                  |g       D              ) }}||k(  r]J  y c c}w c c}w c c}w c c}w )Ng333333?T*   )directedseedrt   c              3   ,   K   | ]  }|v sd   yw)r   N )rE   tr   s     r.   rG   z6test_triadic_census_on_random_graph.<locals>.<genexpr>   s     <QQ!Vq<s   	r   c              3   L   K   | ]  }t        fd |D              sd  yw)c              3   &   K   | ]  }|v  
 y wrB   r   rE   r   nss     r.   rG   z@test_triadic_census_on_random_graph.<locals>.<genexpr>.<genexpr>        5I!a2g5I   r   NrI   rE   r   r   s     r.   rG   z6test_triadic_census_on_random_graph.<locals>.<genexpr>        J!#5Iq5I2IAJ   $$r   c              3   L   K   | ]  }t        fd |D              sd  yw)c              3   &   K   | ]  }|v  
 y wrB   r   r   s     r.   rG   z@test_triadic_census_on_random_graph.<locals>.<genexpr>.<genexpr>   r   r   r   NrI   r   s     r.   rG   z6test_triadic_census_on_random_graph.<locals>.<genexpr>   r   r   )
r'   binomial_graphr*   ra   r   sumget	itertoolscombinationsrb   )r   r+   tc1r   r   tc2r   r   s         @@r.   #test_triadic_census_on_random_graphr      s   
!S4b9A


A
C


A
C&)
*2s3r7|
*C
*#:: QC0GJKr3<#''"b/<<<KKczz
 $$Q* WB/UX
OQBJswwr2JJJ
 
 czz $$Q* WB/UX
OQBJswwr2JJJ
 
 czz! +
 L

s   
F.
,F3 ,F86,F=)__doc__r   collectionsr   randomr   r   networkxr'   r/   r<   rR   r[   rj   r|   r   r   r   r   r   r   markparametrizer   r   r0   r.   <module>r      s    =  #   4R(%VD V-B1"RXB q"g& 'r0   