o
    ]Zh$                     @   s   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d Z	dd Z
d	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejd%d&d'gd(d) ZdS )*z7Tests for the :mod:`networkx.algorithms.triads` module.    N)defaultdict)samplec                  C   sF   t g d} t  t |  W d    d S 1 sw   Y  d S )N)      )r      )r      )nxDiGraphpytestdeprecated_callall_tripletsG r   T/var/www/auris/lib/python3.10/site-packages/networkx/algorithms/tests/test_triads.pytest_all_triplets_deprecated   s   
"r   c                  C   sH   t jdt jd} t  t |  W d    d S 1 sw   Y  d S )Nr   Zcreate_using)r	   
path_graphr
   r   r   random_triadr   r   r   r   test_random_triad_deprecated   s   
"r   c                  C   s   t  } | 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 | }||ksHJ dS )"Tests the triadic_census function.
Z01Z02Z03Z04Z05Z12Z1651Z56Z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actualr   r   r   test_triadic_census   sJ   	

r0   c                  C   sL   t  } |  } tdD ]}tt|  d}| |}t |s#J qdS )zTests the is_triad functiond   r   N)	r	   karate_club_graphto_directedranger   sortednodessubgraphis_triad)r   ir6   G2r   r   r   test_is_triad2   s   
r;   c                     sh   t  } | g d dd tdD  dd  D  dd t | D }t fdd|D s2J d	S )
 Tests the all_triplets function.r   c              	   S   H   g | ] }t |d  dD ]}t |d  dD ]}| d| d| qqqS r      ,r4   .0r9   jkr   r   r   
<listcomp>@       
z%test_all_triplets.<locals>.<listcomp>r?   c                 S   s   g | ]	}t |d qS r@   )setsplitrC   xr   r   r   rF   F       c                 S   s   g | ]}t |qS r   )rI   rK   r   r   r   rF   G   s    c                 3   &    | ] t  fd dD V  qdS )c                 3   s    | ]}| kV  qd S Nr   )rC   s1s2r   r   	<genexpr>H       z.test_all_triplets.<locals>.<genexpr>.<genexpr>NanyrC   r.   rQ   r   rS   H      $ z$test_all_triplets.<locals>.<genexpr>N)r	   r
   r,   r4   r   all)r   r/   r   rX   r   test_all_triplets<   s   r[   c                     sf   t    g d dd tdD  fddD tt  } tfdd| D s1J dS )	r<   r   c              	   S   r=   r>   rA   rB   r   r   r   rF   O   rG   z#test_all_triads.<locals>.<listcomp>r?   c                    s   g | ]
}  |d qS rH   )r7   rJ   rK   r   r   r   rF   U   s    c                 3   rN   )c                 3   s    | ]	}t | V  qd S rO   r	   Zis_isomorphic)rC   ZG1r:   r   r   rS   W       z,test_all_triads.<locals>.<genexpr>.<genexpr>NrU   rW   rX   r]   r   rS   W   rY   z"test_all_triads.<locals>.<genexpr>N)r	   r
   r,   r4   list
all_triadsrZ   )r/   r   )r   r.   r   test_all_triadsK   s   ra   c                  C   s  t g g g d} t | dksJ t dgg g d} t | dks%J t ddg} t | dks5J t dgdgg d} t | d	ksIJ t dd
g} t | dksYJ t ddg} t | dksiJ t g d} t | dksyJ t g d} t | dksJ t g d} t | dksJ t g d} t | dksJ t g d} t | dksJ t g d} t | dksJ t g d} t | dksJ t g d} t | dksJ t g d} t | dksJ t g d } t | d!ks
J d"S )#zTests the triad_type function.)r   r   r   r#   r   r   r   r   r   r   r&   r   r    r   r   r!   r   r+   )rb   r   r   rd   r(   )rb   re   r   r"   )rb   r   rc   r   )rb   r   r   r   r%   )rb   re   rf   rc   r'   )rb   re   rf   rd   r*   )rb   re   rc   r   r   )rb   re   rc   rd   r   )rb   re   rd   r   rc   r   )rb   re   r   rd   rc   rf   r)   N)r	   r
   
triad_typer   r   r   r   test_triad_typeZ   s@   rh   c            	         s   t  } | g d t | }tt}|D ]}t |}|| | qt | }t	|
 t	|
 ks8J | D ]\}}|| }|D ] t fdd|D sUJ qFq<dS )r<   r   c                 3   s    | ]	}t  |V  qd S rO   r\   )rC   ear   r   rS      r^   z&test_triads_by_type.<locals>.<genexpr>N)r	   r
   r,   r`   r   r_   rg   appendtriads_by_typerI   keysitemsrV   )	r   r`   r.   Ztriadnamer/   Ztri_typeZ	actual_GsZexpected_Gsr   rj   r   test_triads_by_type   s   


rq   c                  C   s~   t  } |  } tdD ]}t t | sJ qt  } d}tjt j	|d t |  W d   dS 1 s8w   Y  dS )zTests the random_triad functionr1   z at least 3 nodes to form a triadmatchN)
r	   r2   r3   r4   r8   r   r
   r   raisesZNetworkXError)r   r9   msgr   r   r   test_random_triad   s   "rv   c                  C   sN   t jdt jd} ddi}dD ]}t j| |d}|dd | D ks$J qd S )	Nabcr   r+   r   )rk   bcabacbcrw   Znodelistc                 S      i | ]\}}|d kr||qS r   r   rC   typZcntr   r   r   
<dictcomp>       z;test_triadic_census_short_path_nodelist.<locals>.<dictcomp>r	   r   r
   r-   ro   )r   r.   nltriad_censusr   r   r   'test_triadic_census_short_path_nodelist   s   r   c                  C   s   t jdt jd} d}tjt|d t | g d W d    n1 s$w   Y  tjt|d t | g d W d    d S 1 sDw   Y  d S )N   r   z3nodelist includes duplicate nodes or nodes not in Grr   )r   r   r   r   )r   r   rk   r   )r	   r   r
   r   rt   
ValueErrorr-   )r   ru   r   r   r   +test_triadic_census_correct_nodelist_values   s   "r   c                  C   s   t t jdt jd} i dd |  D ksJ t t jdt jd} i dd |  D ks0J t t jdt jd} i dd |  D ksHJ t t d	g} i d
d |  D ks^J d S )Nr   r   c                 S   r~   r   r   r   r   r   r   r      r   z3test_triadic_census_tiny_graphs.<locals>.<dictcomp>r   c                 S   r~   r   r   r   r   r   r   r      r   r   c                 S   r~   r   r   r   r   r   r   r      r   r   c                 S   r~   r   r   r   r   r   r   r      r   )r	   r-   Zempty_graphr
   ro   )tcr   r   r   test_triadic_census_tiny_graphs   s   r   c                     s   t jdt jd} ddi}| D ]}|  }||| t |}|dd | D ks,J qt jdt jd} t |  | D ]}| || q<t | }| fdd|D ksWJ d S )	Nrw   r   r+   r   c                 S   r~   r   r   r   r   r   r   r      r   z1test_triadic_census_selfloops.<locals>.<dictcomp>Zabcdec                       i | ]	}|t  | qS r   lenrC   tttbtr   r   r      rM   )r	   r   r
   copyZadd_edger-   ro   rm   )ZGGr.   nr   r   r   r   r   test_triadic_census_selfloops   s   


r   c                  C   sB   t jdt jd} ddd}t | }|dd | D ksJ d S )Nabcdr   r   r   r+   c                 S   r~   r   r   r   r   r   r   r      r   z1test_triadic_census_four_path.<locals>.<dictcomp>r   )r   r.   r   r   r   r   test_triadic_census_four_path   s   

r   c                  C   s   t jdt jd} ddd}ddd}t j| dgd}|dd	 | D ks'J t j| d
gd}|dd	 | D ks<J t j| dgd}|dd	 | D ksQJ t j| dgd}|dd	 | D ksfJ d S )Nr   r   r   r   r   rk   r}   c                 S   r~   r   r   r   r   r   r   r      r   z:test_triadic_census_four_path_nodelist.<locals>.<dictcomp>rx   c                 S   r~   r   r   r   r   r   r   r      r   ry   c                 S   r~   r   r   r   r   r   r   r      r   dc                 S   r~   r   r   r   r   r   r   r      r   r   )r   Zexpected_endZexpected_midZa_triad_censusZb_triad_censusZc_triad_censusZd_triad_censusr   r   r   &test_triadic_census_four_path_nodelist   s   

r   c                  C   s   t  } | 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}dd |D }|  D ]}t j| |gd}|D ]}||  || 7  < qTqH| D ]\}}||  d  < qf||ksyJ dS )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                 S   s   i | ]}|d qS r   r   )rC   rE   r   r   r   r      s    z0test_triadic_census_nodelist.<locals>.<dictcomp>r}   N)r	   r
   r,   r6   r-   ro   )r   r.   r/   nodeZnode_triad_censusZ	triad_keyrE   vr   r   r   test_triadic_census_nodelist   sX   	
r   Nr   
   c                    s  t j| dddd}t |}t |fdd|D }||ks"J |D ] t j| hd} fdd|D }||ks>J q$t|d	D ]tt j|d}fd
d|D }||ksbJ qEt|dD ]tt j|d}fdd|D }||ksJ qid S )Ng333333?T*   )Zdirectedseedc                    r   r   r   r   r   r   r   r     rM   z7test_triadic_census_on_random_graph.<locals>.<dictcomp>r}   c              	      ,   i | ]}|t  fd d|g D qS )c                 3   s    | ]	} |v rd V  qdS )r   Nr   rC   t)r   r   r   rS     r^   Atest_triadic_census_on_random_graph.<locals>.<dictcomp>.<genexpr>sumgetr   )r   r   r   r   r     s   , r   c              	      r   )c                 3   *    | ]}t  fd d|D rdV  qdS )c                 3       | ]}| v V  qd S rO   r   rC   r   nsr   r   rS     rT   Ktest_triadic_census_on_random_graph.<locals>.<dictcomp>.<genexpr>.<genexpr>r   NrU   r   r   r   r   rS        ( r   r   r   r   r   r   r   r          r   c              	      r   )c                 3   r   )c                 3   r   rO   r   r   r   r   r   rS     rT   r   r   NrU   r   r   r   r   rS     r   r   r   r   r   r   r   r     r   )r	   Zbinomial_graphr-   rm   	itertoolscombinationsrI   )r   r   Ztc1Ztc2r   )r   r   r   r   #test_triadic_census_on_random_graph  s0   

r   )__doc__r   collectionsr   randomr   r   Znetworkxr	   r   r   r0   r;   r[   ra   rh   rq   rv   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   <module>   s0    
+	!