o
    ˷e"                     @   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   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.
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actual r,   \/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/algorithms/tests/test_triads.pytest_triadic_census   sJ   	

r.   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)   ir4   G2r,   r,   r-   test_is_triad&   s   
r9   c                     sl   t  } | g d dd tdD  dd  D  tdd t | D }t fdd|D s4J 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      ,r2   .0r7   jkr,   r,   r-   
<listcomp>4       
z%test_all_triplets.<locals>.<listcomp>r=   c                 S   s   g | ]	}t |d qS r>   )setsplitrA   xr,   r,   r-   rD   :       c                 s   s    | ]}t |V  qd S N)rG   rI   r,   r,   r-   	<genexpr>;       z$test_all_triplets.<locals>.<genexpr>c                    s"   g | ] t  fd dD qS )c                    s   g | ]}| kqS r,   r,   )rA   s1s2r,   r-   rD   <   s    z0test_all_triplets.<locals>.<listcomp>.<listcomp>anyrA   r*   rP   r-   rD   <   s   " N)r%   r&   r'   r2   listall_tripletsall)r)   r+   r,   rU   r-   test_all_triplets0   s   rY   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<   r?   r@   r,   r,   r-   rD   C   rE   z#test_all_triads.<locals>.<listcomp>r=   c                    s   g | ]
}  |d qS rF   )r5   rH   rI   r)   r,   r-   rD   I   s    c                 3   s&    | ] t  fd dD V  qdS )c                    s   g | ]}t | qS r,   r%   is_isomorphic)rA   G1r8   r,   r-   rD   K   s    z-test_all_triads.<locals>.<genexpr>.<listcomp>NrR   rT   rU   r^   r-   rM   K   s   $ z"test_all_triads.<locals>.<genexpr>N)r%   r&   r'   r2   rV   
all_triadsrX   )r+   r,   )r)   r*   r-   test_all_triads?   s   r`   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   r$   )ra   r   r   rc   r!   )ra   re   rd   r   )ra   rd   rb   r   )ra   rd   r   r   r   )ra   re   rf   rb   r    )ra   re   rf   rc   r#   )ra   re   rb   rd   r   )ra   re   rb   rc   r   )ra   re   rc   rd   rb   r   )ra   re   rd   rc   rb   rf   r"   N)r%   r&   
triad_typerZ   r,   r,   r-   test_triad_typeN   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 rL   r[   )rA   ear,   r-   rM          z&test_triads_by_type.<locals>.<genexpr>N)r%   r&   r'   r_   r   rV   rg   appendtriads_by_typerG   keysitemsrS   )	r)   r_   r*   triadnamer+   tri_type	actual_Gsexpected_Gsr,   rj   r-   test_triads_by_typey   s   


rv   c                  C   s6   t  } |  } tdD ]}t t | sJ qdS )zTests the random_triad functionr/   N)r%   r0   r1   r2   r6   random_triad)r)   r7   r,   r,   r-   test_random_triad   s
   rx   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abccreate_usingr$   r   )rk   bcabacbcry   nodelistc                 S      i | ]\}}|d kr||qS r   r,   rA   typcntr,   r,   r-   
<dictcomp>       z;test_triadic_census_short_path_nodelist.<locals>.<dictcomp>r%   
path_graphr&   r(   rp   )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   rz   z3nodelist includes duplicate nodes or nodes not in G)match)r   r   r   r   )r   r   rk   r   )r%   r   r&   pytest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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   rz   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   rd   c                 S   r   r   r,   r   r,   r,   r-   r      r   )r%   r(   empty_graphr&   rp   )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 )	Nry   rz   r$   r   c                 S   r   r   r,   r   r,   r,   r-   r      r   z1test_triadic_census_selfloops.<locals>.<dictcomp>abcdec                       i | ]	}|t  | qS r,   lenrA   tttbtr,   r-   r      rK   )r%   r   r&   copyadd_edger(   rp   rn   )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abcdrz   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   rz   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>r|   c                 S   r   r   r,   r   r,   r,   r-   r      r   r}   c                 S   r   r   r,   r   r,   r,   r-   r      r   dc                 S   r   r   r,   r   r,   r,   r-   r      r   r   )r)   expected_endexpected_mida_triad_censusb_triad_censusc_triad_census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,   )rA   rC   r,   r,   r-   r      s    z0test_triadic_census_nodelist.<locals>.<dictcomp>r   N)r%   r&   r'   r4   r(   rp   )r)   r*   r+   nodenode_triad_census	triad_keyrC   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*   )directedseedc                    r   r,   r   r   r   r,   r-   r      rK   z8test_triandic_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,   rA   t)r   r,   r-   rM      rl   Btest_triandic_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 rL   r,   rA   r   nsr,   r-   rM     rN   Ltest_triandic_census_on_random_graph.<locals>.<dictcomp>.<genexpr>.<genexpr>r   NrR   r   r   r,   r-   rM        ( r   r   r   r   r   r,   r-   r          r   c              	      r   )c                 3   r   )c                 3   r   rL   r,   r   r   r,   r-   rM     rN   r   r   NrR   r   r   r,   r-   rM     r   r   r   r   r   r,   r-   r     r   )r%   binomial_graphr(   rn   	itertoolscombinationsrG   )r   r)   tc1tc2r,   )r   r   r   r-   $test_triandic_census_on_random_graph   s0   

r   )__doc__r   collectionsr   randomr   r   networkxr%   r.   r9   rY   r`   rh   rv   rx   r   r   r   r   r   r   r   markparametrizer   r,   r,   r,   r-   <module>   s,    
+	!