
    h$                         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S rS rS rS r\R2                  R5                  SSS/5      S 5       rg)z7Tests for the :mod:`networkx.algorithms.triads` module.    N)defaultdict)samplec                      [         R                  " / SQ5      n [        R                  " 5          [         R                  " U 5        S S S 5        g ! , (       d  f       g = f)N)      )r      )r	      )nxDiGraphpytestdeprecated_callall_tripletsGs    W/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/tests/test_triads.pytest_all_triplets_deprecatedr      s5    


+,A				!
 
"	!	!s   A
Ac                      [         R                  " S[         R                  S9n [        R                  " 5          [         R
                  " U 5        S S S 5        g ! , (       d  f       g = f)Nr	   create_using)r   
path_graphr   r   r   random_triadr   s    r   test_random_triad_deprecatedr      s:    
abjj1A				!
 
"	!	!s   A
A'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 5      nX:X  d   eg)"Tests the triadic_census function.
01020304051216515665030Tr   120Cr   210r   120U012	   102r	   021U111U003   030C021D201111D300120D021CN)r   r   add_edges_fromtriadic_census)r   expectedactuals      r   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   irE   G2s       r   test_is_triadrJ   2   s`    
A	A3Zvaggi(!,ZZ{{2 r>   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  n[	        UR                  S5      5      PM     snm[         R                  " U 5       Vs/ s H  n[	        U5      PM     nn[        U4S jU 5       5      (       d   egs  snnnf s  snf s  snf ) Tests the all_triplets function.r      r   ,c              3   P   >^#    U  H  m[        U4S  jT 5       5      v   M     g7f)c              3   ,   >#    U  H	  oT:H  v   M     g 7fN ).0s1s2s     r   	<genexpr>.test_all_triplets.<locals>.<genexpr>.<genexpr>H   s     /h8h   Nany)rS   rU   r;   s    @r   rV   $test_all_triplets.<locals>.<genexpr>H   s     A&Bs/h///&   "&N)r   r   r9   rC   setsplitr   allr   rH   jkxr<   r;   s         @r   test_all_tripletsrd   <   s    


AQR qAq1uaAq1uaA #Qqc1# ! 	  	H ,448aAGGCL!84H ooa010c!f0F1A&AAAAA 51s   AC7$C>D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 )rL   r   rM   r   rN   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rQ   r   is_isomorphic)rS   G1rI   s     r   rV   ,test_all_triads.<locals>.<genexpr>.<genexpr>W   s!     ?h2##B++h   $'NrY   )rS   rI   r;   s    @r   rV   "test_all_triads.<locals>.<genexpr>W   s     Q&Bs?h???&r\   N)	r   r   r9   rC   rF   r^   list
all_triadsr_   r`   s         @r   test_all_triadsrp   K   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   r0   r   r+   r   r   r   r   r3   r   r-   r   r   r.   r   r8   )rr   r   r   rt   r5   )rr   ru   r   r/   )rr   r   rs   r'   )rr   r   r   r   r2   )rr   ru   rv   rs   r4   )rr   ru   rv   rt   r7   )rr   ru   rs   r   r*   )rr   ru   rs   rt   r(   )rr   ru   rt   r   rs   r)   )rr   ru   r   rt   rs   rv   r6   N)r   r   
triad_typer   s    r   test_triad_typerx   Z   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$$$r>   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)rL   r   c              3   R   >#    U  H  n[         R                  " TU5      v   M     g 7frQ   rh   )rS   eas     r   rV   &test_triads_by_type.<locals>.<genexpr>   s!     C{!r''1--{rl   N)r   r   r9   ro   r   rn   rw   appendtriads_by_typer]   keysitemsrZ   )
r   ro   r;   triadnamer<   tri_type	actual_Gsexpected_Gsr|   s
            @r   test_triads_by_typer      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   .r>   c                     [         R                  " 5       n U R                  5       n [        S5       H4  n[         R                  " [         R
                  " U 5      5      (       a  M4   e   [         R                  " 5       n Sn[        R                  " [         R                  US9   [         R
                  " U 5        SSS5        g! , (       d  f       g= f)zTests the random_triad functionr@   z at least 3 nodes to form a triadmatchN)
r   rA   rB   rC   rG   r   r   r   raisesNetworkXError)r   rH   msgs      r   test_random_triadr      s    
A	A3Z{{2??1-....  	

A
,C	r''s	3
 
4	3	3s   #C
C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abcr   r8   r   )r|   bcabacbcr   nodelistr   r   r   r   r:   r   )r   r;   nltriad_censustypcnts         r   'test_triadic_census_short_path_nodelistr      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   r   z3nodelist includes duplicate nodes or nodes not in Gr   )r   r   r   r	   )r   r   r|   r	   )r   r   r   r   r   
ValueErrorr:   )r   r   s     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   r   r   r   r   )r   r:   empty_graphr   r   )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 )Nr   r   r8   r   r   abcde)	r   r   r   copyadd_edger:   r   r   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abcdr   r   r+   r8   r   r   )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   r   r   r   r   r|   r   r   r   r   dr   )	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U Vs0 s H  o"S_M     nnU R                  5        H/  n[         R                  " X/S9nU H  nX6==   XV   -  ss'   M     M1     UR                  5        H  u  p'X2==   S-  ss'   M     X:X  d   egs  snf )r   r   r'   r   r(   r   r)   r   r*   r+   r,   r-   r	   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r   N)r   r   r9   rE   r:   r   )r   r;   rb   r<   nodenode_triad_census	triad_keyvs           r   test_triadic_census_nodelistr      sf   


AQR 	q 		
 	q 	q 	 	 	q 	 	 	q 	 	q 	  	!H$ %%HqdHF%	--a&A!I!2!== " 
 	a	  &s   C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seedr   c              3   8   >#    U  H  nTU;   d  M  S v   M     g7f)r   NrR   )rS   tr   s     r   rV   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rQ   rR   rS   r   nss     r   rV   @test_triadic_census_on_random_graph.<locals>.<genexpr>.<genexpr>       5Iq!2gqrX   r   NrY   rS   r   r   s     r   rV   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rQ   rR   r   s     r   rV   r     r   rX   r   NrY   r   s     r   rV   r     r   r   )
r   binomial_graphr:   r   r   sumget	itertoolscombinationsr]   )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   r=   rJ   rd   rp   rx   r   r   r   r   r   r   r   r   r   markparametrizer   rR   r>   r   <module>r      s    =  #   4BR(%VD"
V-B1"RXB q"g& 'r>   