o
    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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   Y/var/www/vscode/kcb/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   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.
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actualr   r   r   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   ir@   G2r   r   r   test_is_triad2   s   
rE   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      ,r>   .0rC   jkr   r   r   
<listcomp>@       
z%test_all_triplets.<locals>.<listcomp>rI   c                 S   s   g | ]	}t |d qS rJ   )setsplitrM   xr   r   r   rP   F       c                 S   s   g | ]}t |qS r   )rS   rU   r   r   r   rP   G   s    c                 3   &    | ] t  fd dD V  qdS )c                 3   s    | ]}| kV  qd S Nr   )rM   s1s2r   r   	<genexpr>H       z.test_all_triplets.<locals>.<genexpr>.<genexpr>NanyrM   r8   r[   r   r]   H      $ z$test_all_triplets.<locals>.<genexpr>N)r	   r
   r6   r>   r   all)r   r9   r   rb   r   test_all_triplets<   s   re   c                     sf   t    g d dd tdD  fddD tt  } tfdd| D s1J dS )	rF   r   c              	   S   rG   rH   rK   rL   r   r   r   rP   O   rQ   z#test_all_triads.<locals>.<listcomp>rI   c                    s   g | ]
}  |d qS rR   )rA   rT   rU   r   r   r   rP   U   s    c                 3   rX   )c                 3   s    | ]	}t | V  qd S rY   r	   is_isomorphic)rM   G1rD   r   r   r]   W       z,test_all_triads.<locals>.<genexpr>.<genexpr>Nr_   ra   rb   ri   r   r]   W   rc   z"test_all_triads.<locals>.<genexpr>N)r	   r
   r6   r>   list
all_triadsrd   )r9   r   )r   r8   r   test_all_triadsK   s   rm   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   r0   r   r*   r   r   r+   r   r5   )rn   r   r   rp   r2   )rn   rq   r   r,   )rn   r   ro   r$   )rn   r   r   r   r/   )rn   rq   rr   ro   r1   )rn   rq   rr   rp   r4   )rn   rq   ro   r   r'   )rn   rq   ro   rp   r%   )rn   rq   rp   r   ro   r&   )rn   rq   r   rp   ro   rr   r3   N)r	   r
   
triad_typer   r   r   r   test_triad_typeZ   s@   rt   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 )rF   r   c                 3   s    | ]	}t  |V  qd S rY   rf   )rM   ear   r   r]      rj   z&test_triads_by_type.<locals>.<genexpr>N)r	   r
   r6   rl   r   rk   rs   appendtriads_by_typerS   keysitemsr`   )	r   rl   r8   triadnamer9   tri_type	actual_Gsexpected_Gsr   rv   r   test_triads_by_type   s   


r   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 functionr;   z at least 3 nodes to form a triadmatchN)
r	   r<   r=   r>   rB   r   r
   r   raisesNetworkXError)r   rC   msgr   r   r   test_random_triad   s   "r   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   r5   r   )rw   bcabacbcr   nodelistc                 S      i | ]\}}|d kr||qS r   r   rM   typcntr   r   r   
<dictcomp>       z;test_triadic_census_short_path_nodelist.<locals>.<dictcomp>r	   r   r
   r7   r{   )r   r8   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 Gr   )r   r   r   r   )r   r   rw   r   )r	   r   r
   r   r   
ValueErrorr7   )r   r   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	   r7   empty_graphr
   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,J qt jdt jd} t |  | D ]}| || q<t | }| fdd|D ksWJ d S )	Nr   r   r5   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rM   tttbtr   r   r      rW   )r	   r   r
   copyadd_edger7   r{   ry   )GGr8   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(   r5   c                 S   r   r   r   r   r   r   r   r      r   z1test_triadic_census_four_path.<locals>.<dictcomp>r   )r   r8   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   rw   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/   r0   r1   r2   r3   r4   r5   c                 S   s   i | ]}|d qS r   r   )rM   rO   r   r   r   r      s    z0test_triadic_census_nodelist.<locals>.<dictcomp>r   N)r	   r
   r6   r@   r7   r{   )r   r8   r9   nodenode_triad_census	triad_keyrO   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     rW   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   rM   t)r   r   r   r]     rj   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 rY   r   rM   r   nsr   r   r]     r^   Ktest_triadic_census_on_random_graph.<locals>.<dictcomp>.<genexpr>.<genexpr>r   Nr_   r   r   r   r   r]        ( r   r   r   r   r   r   r   r          r   c              	      r   )c                 3   r   )c                 3   r   rY   r   r   r   r   r   r]     r^   r   r   Nr_   r   r   r   r   r]     r   r   r   r   r   r   r   r     r   )r	   binomial_graphr7   ry   	itertoolscombinationsrS   )r   r   tc1tc2r   )r   r   r   r   #test_triadic_census_on_random_graph  s0   

r   )__doc__r   collectionsr   randomr   r   networkxr	   r   r   r:   rE   re   rm   rt   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r   <module>   s0    
+	!