
    sh                          S r SSKrSSKJr  SSKJr  SSKrSSK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\R*                  R-                  SSS/5      S 5       rg)z7Tests for the :mod:`networkx.algorithms.triads` module.    N)defaultdict)samplec                      [         R                  " 5       n U R                  / SQ5        0 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS
_SS_SS_SS_SS_SS_n[         R                  " U 5      nX:X  d   eg)"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      y/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/networkx/algorithms/tests/test_triads.pytest_triadic_censusr/      s    


AQR 	q 		
 	q 	q 	 	 	q 	 	 	q 	 	q 	  	!H$ q!F    c                     [         R                  " 5       n U R                  5       n [        S5       HT  n[	        [        U R                  5       5      S5      nU R                  U5      n[         R                  " U5      (       a  MT   e   g)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<   &   s`    
A	A3Zvaggi(!,ZZ{{2 r0   c                    ^ [         R                  " 5       n U R                  / SQ5        [        S5       VVVs/ s H;  n[        US-   S5        H$  n[        US-   S5        H  nU SU SU 3PM     M&     M=     snnnmT Vs/ s H"  o@R	                  UR                  S5      5      PM$     snm[        [         R                  " U 5      5      n[        U4S jU 5       5      (       d   egs  snnnf s  snf )zTests the all_triads function.r      r   ,c              3   P   >^#    U  H  m[        U4S  jT 5       5      v   M     g7f)c              3   R   >#    U  H  n[         R                  " UT5      v   M     g 7fNr'   is_isomorphic).0G1r;   s     r.   	<genexpr>,test_all_triads.<locals>.<genexpr>.<genexpr><   s!     ?h2##B++h   $'Nany)rE   r;   r,   s    @r.   rG   "test_all_triads.<locals>.<genexpr><   s     Q&Bs?h???&s   "&N)	r'   r(   r)   r5   r8   splitlist
all_triadsall)r+   r:   jkxr-   r,   s         @r.   test_all_triadsrT   0   s    


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

1773<((;H"--"#FQ&QQQQQ <s   AC,)C3c                     [         R                  " / / / S.5      n [         R                  " U 5      S:X  d   e[         R                  " S// / S.5      n [         R                  " U 5      S:X  d   e[         R                  " SS/5      n [         R                  " U 5      S:X  d   e[         R                  " S/S// S.5      n [         R                  " U 5      S	:X  d   e[         R                  " SS
/5      n [         R                  " U 5      S:X  d   e[         R                  " SS/5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / SQ5      n [         R                  " U 5      S:X  d   e[         R                  " / S Q5      n [         R                  " U 5      S!:X  d   eg")#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&   )rV   r   r   rX   r#   )rV   rZ   rY   r   )rV   rY   rW   r   )rV   rY   r   r   r    )rV   rZ   r[   rW   r"   )rV   rZ   r[   rX   r%   )rV   rZ   rW   rY   r   )rV   rZ   rW   rX   r   )rV   rZ   rX   rY   rW   r   )rV   rZ   rY   rX   rW   r[   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                     ^	 [         R                  " 5       n U R                  / SQ5        [         R                  " U 5      n[	        [
        5      nU H,  n[         R                  " U5      nX$   R                  U5        M.     [         R                  " U 5      n[        UR                  5       5      [        UR                  5       5      :X  d   eUR                  5        H.  u  pgX&   nU H  m	[        U	4S jU 5       5      (       a  M   e   M0     g )Nr   c              3   R   >#    U  H  n[         R                  " TU5      v   M     g 7frB   rC   )rE   eas     r.   rG   &test_triads_by_type.<locals>.<genexpr>w   s!     C{!r''1--{rI   )r'   r(   r)   rO   r   rN   r\   appendtriads_by_typesetkeysitemsrK   )
r+   rO   r,   triadnamer-   tri_type	actual_Gsexpected_Gsra   s
            @r.   test_triads_by_typerm   j   s    


AQRq!J4 H}}U#e$  q!Fv{{}X]]_!5555%||~(AC{CCCCC   .r0   c                      [         R                  " S[         R                  S9n SS0nS HI  n[         R                  " XS9nXR	                  5        VVs0 s H  u  pEUS:  d  M  XE_M     snn:X  a  MI   e   g s  snnf )Nabccreate_usingr&   r   )ra   bcabacbcro   nodelistr   r'   
path_graphr(   r*   rg   )r+   r,   nltriad_censustypcnts         r.   'test_triadic_census_short_path_nodelistr   z   so    
e"**5A{H6((85G5G5IU5ISSTWHCH5IUUUU 7Us   A8
$A8
c                  ~   [         R                  " S[         R                  S9n Sn[        R                  " [
        US9   [         R                  " U / SQ5        S S S 5        [        R                  " [
        US9   [         R                  " U / SQ5        S S S 5        g ! , (       d  f       NJ= f! , (       d  f       g = f)N   rp   z3nodelist includes duplicate nodes or nodes not in G)match)r   r   r   r   )r   r   ra   r   )r'   rz   r(   pytestraises
ValueErrorr*   )r+   msgs     r.   +test_triadic_census_correct_nodelist_valuesr      st    
abjj1A
@C	z	-
!\* 
.	z	-
!^, 
.	- 
.	-	-	-s   B:B.
B+.
B<c                  l   [         R                  " [         R                  " S[         R                  S95      n 0 U R	                  5        VVs0 s H  u  pUS:  d  M  X_M     snn:X  d   e[         R                  " [         R                  " S[         R                  S95      n 0 U R	                  5        VVs0 s H  u  pUS:  d  M  X_M     snn:X  d   e[         R                  " [         R                  " S[         R                  S95      n 0 U R	                  5        VVs0 s H  u  pUS:  d  M  X_M     snn:X  d   e[         R                  " [         R                  " S/5      5      n 0 U R	                  5        VVs0 s H  u  pUS:  d  M  X_M     snn:X  d   eg s  snnf s  snnf s  snnf s  snnf )Nr   rp   r   r   rY   )r'   r*   empty_graphr(   rg   )tcr}   r~   s      r.   test_triadic_census_tiny_graphsr      sE   			2>>!"**E	FB288:A:xsq(#(:AAAA			2>>!"**E	FB288:A:xsq(#(:AAAA			2>>!"**E	FB288:A:xsq(#(:AAAA			2::vh/	0B288:A:xsq(#(:AAAA BAAAs0   FF6F$F$ F*0F*>F0F0c            	      d   [         R                  " S[         R                  S9n SS0nU  Hl  nU R                  5       nUR	                  X"5        [         R
                  " U5      nXR                  5        VVs0 s H  u  pVUS:  d  M  XV_M     snn:X  a  Ml   e   [         R                  " S[         R                  S9n [         R                  " U 5      nU  H  nU R	                  X"5        M     [         R
                  " U 5      nXD Vs0 s H  o[        Xx   5      _M     sn:X  d   eg s  snnf s  snf )Nro   rp   r&   r   r   abcde)	r'   rz   r(   copyadd_edger*   rg   rd   len)	GGr,   nr+   r   r}   r~   tbttts	            r.   test_triadic_census_selfloopsr      s    	u2::	6B{HGGI	

1q!XXZKZ37HCHZKKKK	  
wRZZ	8B


B
C
A 			2	BR0Rrc#'l"R0000 L 1s   7D'
D'
D-c                      [         R                  " S[         R                  S9n SSS.n[         R                  " U 5      nXR	                  5        VVs0 s H  u  p4US:  d  M  X4_M     snn:X  d   eg s  snnf )Nabcdrp   r   r   r&   r   ry   )r+   r,   r|   r}   r~   s        r.   test_triadic_census_four_pathr      se    
f2::6A!$H$$Q'L1C1C1EQ1EXSq1EQQQQQs   A2"A2c                     [         R                  " S[         R                  S9n SSS.nSSS.n[         R                  " U S/S9nXR	                  5        VVs0 s H  u  pEUS:  d  M  XE_M     snn:X  d   e[         R                  " U S	/S9nX&R	                  5        VVs0 s H  u  pEUS:  d  M  XE_M     snn:X  d   e[         R                  " U S
/S9nX'R	                  5        VVs0 s H  u  pEUS:  d  M  XE_M     snn:X  d   e[         R                  " U S/S9nXR	                  5        VVs0 s H  u  pEUS:  d  M  XE_M     snn:X  d   eg s  snnf s  snnf s  snnf s  snnf )Nr   rp   r   r   r   ra   rw   r   rr   rs   dry   )	r+   expected_endexpected_mida_triad_censusr}   r~   b_triad_censusc_triad_censusd_triad_censuss	            r.   &test_triadic_census_four_path_nodelistr      sU   
f2::6Aa(La(L&&qC59N5I5I5KW5KsUVwHCH5KWWWW&&qC59N5I5I5KW5KsUVwHCH5KWWWW&&qC59N5I5I5KW5KsUVwHCH5KWWWW&&qC59N5I5I5KW5KsUVwHCH5KWWWW XWWWs0   E'EE/E'E7E/E!?E!c                     [         R                  " 5       n U R                  / SQ5        0 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS
_SS_SS_SS_SS_SS_n[        R	                  US5      nU R                  5        H/  n[         R                  " X/S9nU H  nX%==   XE   -  ss'   M     M1     UR                  5        H  u  pgX&==   S-  ss'   M     X:X  d   eg)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   rw   N)r'   r(   r)   dictfromkeysr7   r*   rg   )r+   r,   r-   nodenode_triad_census	triad_keyrR   vs           r.   test_triadic_census_nodelistr      s[   


AQR 	q 		
 	q 	q 	 	 	q 	 	 	q 	 	q 	  	!H$ ]]8Q'F	--a&A!I!2!== " 
 	a	 r0   Nr   
   c                   ^^ [         R                  " U SSSS9n[         R                  " U5      n[         R                  " U5      nU Vs0 s H  oD[	        X4   5      _M     nnX%:X  d   eU HU  m[         R                  " UT1S9nU Vs0 s H(  oD[        U4S jUR                  U/ 5       5       5      _M*     nnX%:X  a  MU   e   [        R                  " US5       H_  m[        T5      m[         R                  " UTS9nU Vs0 s H(  oD[        U4S jUR                  U/ 5       5       5      _M*     nnX%:X  a  M_   e   [        R                  " US	5       H_  m[        T5      m[         R                  " UTS9nU Vs0 s H(  oD[        U4S
 jUR                  U/ 5       5       5      _M*     nnX%:X  a  M_   e   g s  snf s  snf s  snf s  snf )Ng333333?T*   )directedseedrw   c              3   8   >#    U  H  nTU;   d  M  S v   M     g7f)r   N )rE   tr   s     r.   rG   6test_triadic_census_on_random_graph.<locals>.<genexpr>   s     </QQ!Vqq/s   
	r   c              3   `   >#    U  H#  n[        U4S  jU 5       5      (       d  M  Sv   M%     g7f)c              3   ,   >#    U  H	  oT;   v   M     g 7frB   r   rE   r   nss     r.   rG   @test_triadic_census_on_random_graph.<locals>.<genexpr>.<genexpr>        5Iq!2gq   r   NrJ   rE   r   r   s     r.   rG   r            J!#5Iq5I2IAA   .	.r   c              3   `   >#    U  H#  n[        U4S  jU 5       5      (       d  M  Sv   M%     g7f)c              3   ,   >#    U  H	  oT;   v   M     g 7frB   r   r   s     r.   rG   r      r   r   r   NrJ   r   s     r.   rG   r      r   r   )
r'   binomial_graphr*   rd   r   sumget	itertoolscombinationsre   )r   r+   tc1r   r   tc2r   r   s         @@r.   #test_triadic_census_on_random_graphr      s   
!S4b9A


A
C


A
C&)
*cs37|cC
*::QC0GJKs3<#''"b/<<<sKzz 
 $$Q*WB/UX
UXrJswwr2JJJUX 	 
 zz + $$Q*WB/UX
UXrJswwr2JJJUX 	 
 zz +! +
 L

s   
F:	/F?/G=/G	)__doc__r   collectionsr   randomr   r   networkxr'   r/   r<   rT   r]   rm   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   