U
    ?h"                     @   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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  } | ddddddddd	d
g
 ddddddddddddddddd}t | }||ksbtdS )"Tests the triadic_census function.01020304051216515665      r   	         030T120C210120U012102021U111U003030C021D201111D300120D021CN)nxDiGraphadd_edges_fromtriadic_censusAssertionError)Gexpectedactual r-   W/var/www/html/venv/lib/python3.8/site-packages/networkx/algorithms/tests/test_triads.pytest_triadic_census   s*    
r/   c                  C   sL   t  } |  } tdD ].}tt|  d}| |}t |st	qdS )zTests the is_triad functiond   r   N)
r%   karate_club_graphto_directedranger   sortednodessubgraphis_triadr)   )r*   ir5   G2r-   r-   r.   test_is_triad&   s    
r:   c                     sx   t  } | ddddddddd	d
g
 dd tdD  dd  D  dd t | D }t fdd|D sttdS ) Tests the all_triplets function.r   r   r   r   r	   r
   r   r   r   r   c              	   S   sH   g | ]@}t |d  dD ],}t |d  dD ]}| d| d| q(qqS r      ,r3   .0r8   jkr-   r-   r.   
<listcomp>4   s     z%test_all_triplets.<locals>.<listcomp>r=   c                 S   s   g | ]}t |d qS r>   )setsplitrA   xr-   r-   r.   rD   :   s     c                 S   s   g | ]}t |qS r-   )rF   rH   r-   r-   r.   rD   ;   s     c                 3   s$   | ] t  fd dD V  qdS )c                 3   s   | ]}| kV  qd S Nr-   )rA   s1s2r-   r.   	<genexpr><   s     z.test_all_triplets.<locals>.<genexpr>.<genexpr>NanyrA   r+   rL   r.   rN   <   s     z$test_all_triplets.<locals>.<genexpr>N)r%   r&   r'   r3   Zall_tripletsallr)   )r*   r,   r-   rR   r.   test_all_triplets0   s    rT   c                     sv   t    ddddddddd	d
g
 dd tdD  fddD tt  } tfdd| D srtdS )r;   r   r   r   r   r	   r
   r   r   r   r   c              	   S   sH   g | ]@}t |d  dD ],}t |d  dD ]}| d| d| q(qqS r<   r?   r@   r-   r-   r.   rD   C   s     z#test_all_triads.<locals>.<listcomp>r=   c                    s   g | ]}  |d qS rE   )r6   rG   rH   r*   r-   r.   rD   I   s     c                 3   s$   | ] t  fd dD V  qdS )c                 3   s   | ]}t | V  qd S rJ   r%   Zis_isomorphic)rA   ZG1r9   r-   r.   rN   K   s     z,test_all_triads.<locals>.<genexpr>.<genexpr>NrO   rQ   rR   rW   r.   rN   K   s     z"test_all_triads.<locals>.<genexpr>N)r%   r&   r'   r3   list
all_triadsrS   r)   )r,   r-   )r*   r+   r.   test_all_triads?   s    rZ   c                  C   sN  t g g g d} t | dks$tt dgg g d} t | dksJtt ddg} t | dksjtt dgdgg d} t | d	kstt dd
g} t | dkstt ddg} t | dkstt ddd
g} t | dkstt dddg} t | dkstt dddg} t | dks<tt dddg} t | dks`tt ddddg} t | dkstt dddd
g} t | dkstt ddddg} t | dkstt dddd
g} t | dkstt ddd
ddg} t | dks tt dddd
ddg} t | dksJt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   r$   )r   r   r!   r   r   )r   r   r   r    r#   r   r   r   r"   N)r%   r&   
triad_typer)   rU   r-   r-   r.   test_triad_typeN   s@    r]   c            	         s   t  } | ddddddddd	d
g
 t | }tt}|D ]}t |}|| | q<t | }t	|
 t	|
 kst| D ]4\}}|| }|D ] t fdd|D stqqdS )r;   r   r   r   r   r	   r
   r   r   r   r   c                 3   s   | ]}t  |V  qd S rJ   rV   )rA   ear-   r.   rN      s     z&test_triads_by_type.<locals>.<genexpr>N)r%   r&   r'   rY   r   rX   r\   appendtriads_by_typerF   keysr)   itemsrP   )	r*   rY   r+   Ztriadnamer,   Ztri_typeZ	actual_GsZexpected_Gsr-   r_   r.   test_triads_by_typey   s    


rf   c                  C   s6   t  } |  } tdD ]}t t | stqdS )zTests the random_triad functionr0   N)r%   r1   r2   r3   r7   Zrandom_triadr)   )r*   r8   r-   r-   r.   test_random_triad   s    rg   c                  C   sN   t jdt jd} ddi}dD ],}t j| |d}|dd | D kstqd S )	NabcZcreate_usingr$   r   )r`   bcabacbcrh   Znodelistc                 S   s   i | ]\}}|d kr||qS r   r-   rA   typZcntr-   r-   r.   
<dictcomp>   s       z;test_triadic_census_short_path_nodelist.<locals>.<dictcomp>r%   
path_graphr&   r(   rd   r)   )r*   r+   nltriad_censusr-   r-   r.   'test_triadic_census_short_path_nodelist   s
    rx   c               	   C   st   t jdt jd} d}tjt|d t | ddddg W 5 Q R X tjt|d t | ddddg W 5 Q R X d S )	N   ri   z3nodelist includes duplicate nodes or nodes not in G)matchr   r   r   r`   )r%   ru   r&   pytestZraises
ValueErrorr(   )r*   msgr-   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s0tt t jdt jd} i dd |  D ks`tt t jdt jd} i dd |  D kstt t d	g} i d
d |  D kstd S )Nr   ri   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       z3test_triadic_census_tiny_graphs.<locals>.<dictcomp>r   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       r   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       r[   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       )r%   r(   Zempty_graphr&   rd   r)   )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tqt jdt jd} t |  | D ]}| || qxt | }| fdd|D kstd S )	Nrh   ri   r$   r   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       z1test_triadic_census_selfloops.<locals>.<dictcomp>Zabcdec                    s   i | ]}|t  | qS r-   lenrA   tttbtr-   r.   rs      s      )	r%   ru   r&   copyZadd_edger(   rd   r)   rb   )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>td S )Nabcdri   r   r   r$   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       z1test_triadic_census_four_path.<locals>.<dictcomp>rt   )r*   r+   rw   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sNtt j| d
gd}|dd	 | D ksxtt j| dgd}|dd	 | D kstt j| dgd}|dd	 | D kstd S )Nr   ri   r   r   r   r`   ro   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       z:test_triadic_census_four_path_nodelist.<locals>.<dictcomp>rj   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       rk   c                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       dc                 S   s   i | ]\}}|d kr||qS rp   r-   rq   r-   r-   r.   rs      s       rt   )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  } | ddddddddd	d
g
 ddddddddddddddddd}dd |D }|  D ]2}t j| |gd}|D ]}||  || 7  < qzqb| D ]\}}||  d  < q||kstdS )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 rp   r-   )rA   rC   r-   r-   r.   rs      s      z0test_triadic_census_nodelist.<locals>.<dictcomp>ro   N)r%   r&   r'   r5   r(   rd   r)   )r*   r+   r,   nodeZnode_triad_censusZ	triad_keyrC   vr-   r-   r.   test_triadic_census_nodelist   s6    r   Nry   
   c                    s  t j| dddd}t |}t |fdd|D }||ksDt|D ]4 t j| hd} fdd|D }||ksHtqHt|d	D ]:tt j|d}fd
d|D }||kstqt|dD ]:tt j|d}fdd|D }||kstqd S )Ng333333?T*   )Zdirectedseedc                    s   i | ]}|t  | qS r-   r   r   r   r-   r.   rs      s      z8test_triandic_census_on_random_graph.<locals>.<dictcomp>ro   c              	      s,   i | ]$}|t  fd d|g D qS )c                 3   s   | ]} |krd V  qdS )r   Nr-   rA   t)r   r-   r.   rN      s      Btest_triandic_census_on_random_graph.<locals>.<dictcomp>.<genexpr>sumgetr   )r   r   r-   r.   rs      s      r   c              	      s,   i | ]$}|t  fd d|g D qS )c                 3   s(   | ] }t  fd d|D rdV  qdS )c                 3   s   | ]}| kV  qd S rJ   r-   rA   r   nsr-   r.   rN     s     Ltest_triandic_census_on_random_graph.<locals>.<dictcomp>.<genexpr>.<genexpr>r   NrO   r   r   r-   r.   rN     s      r   r   r   r   r   r-   r.   rs     s     r   c              	      s,   i | ]$}|t  fd d|g D qS )c                 3   s(   | ] }t  fd d|D rdV  qdS )c                 3   s   | ]}| kV  qd S rJ   r-   r   r   r-   r.   rN     s     r   r   NrO   r   r   r-   r.   rN     s      r   r   r   r   r-   r.   rs     s     )r%   Zbinomial_graphr(   rb   r)   	itertoolscombinationsrF   )r   r*   Ztc1Ztc2r-   )r   r   r   r.   $test_triandic_census_on_random_graph   s.    

r   )__doc__r   collectionsr   randomr   r{   Znetworkxr%   r/   r:   rT   rZ   r]   rf   rg   rx   r~   r   r   r   r   r   markZparametrizer   r-   r-   r-   r.   <module>   s*   
+	!