U
    ?h&                     @   sJ   d Z ddlZddlZddlm  mZ ddlm	Z	 ej
ZG dd dZdS )z#
Threshold Graphs
================
    N)graph_could_be_isomorphicc                   @   s   e Z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dd  Zd!d" Zd#d$ Zd%S )&TestGeneratorThresholdc                 C   s   t d}t|sttdd | D s4tt d}t|sLttdd | D shtddddddg}t|rtddddg}t|stt j	|}t|std S )N
   c                 S   s   g | ]\}}|qS  r   .0ndr   r   Z/var/www/html/venv/lib/python3.8/site-packages/networkx/algorithms/tests/test_threshold.py
<listcomp>   s     zMTestGeneratorThreshold.test_threshold_sequence_graph_test.<locals>.<listcomp>c                 S   s   g | ]\}}|qS r   r   r   r   r   r
   r      s              )
nxZ
star_graphnxtis_threshold_graphAssertionErrorZis_threshold_sequencedegreeZcomplete_graph
generatorshavel_hakimi_graph)selfGdegr   r   r
   "test_threshold_sequence_graph_test   s    

z9TestGeneratorThreshold.test_threshold_sequence_graph_testc           	   	   C   s   ddddg}t j|}tt tj|ddd W 5 Q R X t|}t|}d	|dksdt
tj|dd}t|}|d	d
ddgkst
tj|dd}t|}|dddgkst
d	t|dkst
t||st
t||st
t||st
d S )Nr   r   r   Twith_labelscompact Zddidr   r   r	   r   r	   r   ir   r	   r   )r   r   r   pytestraises
ValueErrorr   creation_sequencethreshold_graphjoinr   	uncompactr   )	r   r   r   Zcs0ZH0cs1ZH1cs2ZH2r   r   r
   test_creation_sequences"   s"    



z.TestGeneratorThreshold.test_creation_sequencesc                 C   s`   t ddddddgdddgks$tt dddgdddgksBtttt jdddgs\td S )	Nr	   r"   r   r   r         @      ?       @)r   Zmake_compactr   r%   r&   	TypeErrorr   r   r   r
   test_make_compact9   s    $z(TestGeneratorThreshold.test_make_compactc                 C   s   t dddgddddddgks$tt ddddgddddgksFtt t dddd	gt dddd	gksttttt jd
ddgstd S )Nr   r   r   r	   r"   r   r    r!   r#   r/   r0   r1   )r   r+   r   r%   r&   r2   r3   r   r   r
   test_uncompact>   s    $"z%TestGeneratorThreshold.test_uncompactc                 C   sB   t dddgddddddgks$tttt jddd	gs>td S )
Nr   r   r         ?g      ?g      ?r/   r0   r1   )r   creation_sequence_to_weightsr   r%   r&   r2   r3   r   r   r
   !test_creation_sequence_to_weightsF   s    
  z8TestGeneratorThreshold.test_creation_sequence_to_weightsc              	   C   sl   ddddg}t t tj|ddd W 5 Q R X tj|ddddd	d
gksPttj|dddgkshtd S )Nr   r   r   Tr   r   )r   r	   r   r    r#   r$      )r%   r&   r'   r   weights_to_creation_sequencer   )r   r   r   r   r
   !test_weights_to_creation_sequenceS   s    
z8TestGeneratorThreshold.test_weights_to_creation_sequencec                 C   s&   t  }|dd t|r"td S )Nr   r   )r   Graphadd_edger   find_alternating_4_cycler   )r   r   r   r   r
   test_find_alternating_4_cycle_   s    z4TestGeneratorThreshold.test_find_alternating_4_cyclec                 C   s  ddddg}t j|}tj|dd}dD ](\}}t|||t |||ks*tq*t|d}tdd |D d}||ksti }t|D ]\}	}
||	 d	 }|
||< q|t 	|dksttd
d
d
dd
d
gddddgksttdddgddddgkstt
ttjdddgdds(tt
ttjdddgddsHtt
ttjdddgddshttdddgdddgkstd S )Nr   r   r   Tr   ))r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   c                 S   s   g | ]\}}|qS r   r   )r   vtr   r   r
   r   l   s     z=TestGeneratorThreshold.test_shortest_path.<locals>.<listcomp>r   r	   r"   r/   r0   r1   ab)r   r   r   r   r(   shortest_pathr   shortest_path_length	enumerateZ"single_source_shortest_path_lengthr%   r&   r2   r'   )r   r   r   r,   r   mZsplZspl2Zspldjplr   r   r
   test_shortest_pathd   s&    "
&"   z)TestGeneratorThreshold.test_shortest_pathc                 C   s   t dddgdddddddgks&tt ddddddgdddddddgksRtt ddddddddgksrtttt jdd	d
gdstd S )Nr   r   r   r   r	   r"   )r	   r	   r	   r"   r	   r	   r/   r0   r1   )r   rE   r   r%   r&   r2   rD   r3   r   r   r
   test_shortest_path_length|   s$    &


z0TestGeneratorThreshold.test_shortest_path_lengthc                 C   s^   t tdddksttjddddddddddddddg
ksDttttjddsZtd S )Nr   r6   *   seedr	   r"   g      ?)lenr   Zrandom_threshold_sequencer   r%   r&   r'   r3   r   r   r
   test_random_threshold_sequence   s    
z5TestGeneratorThreshold.test_random_threshold_sequencec                 C   s4   t dddddgkstttt jdds0td S Nr   r   r	   r"   )r   right_d_threshold_sequencer   r%   r&   r'   r3   r   r   r
   test_right_d_threshold_sequence   s    z6TestGeneratorThreshold.test_right_d_threshold_sequencec                 C   s4   t dddddgkstttt jdds0td S rQ   )r   left_d_threshold_sequencer   r%   r&   r'   r3   r   r   r
   test_left_d_threshold_sequence   s    z5TestGeneratorThreshold.test_left_d_threshold_sequencec                 C   s.  ddddddddddg
}t j|dd}t |}t |}||ksFtt t dddddddg}|d	d
 dD ksztt dddddddg}|dd
 dD kstt ttd}|dd
 dD kstt d}|dd
 dD kstt d}dd
 dD }tdd t||D dk s*td S )Nr   r9         r   )	thresholdr   r   c                 S   s   g | ]}|d  qS g      ?r   r   sr   r   r
   r      s    zBTestGeneratorThreshold.test_weights_thresholds.<locals>.<listcomp>)r9   r9   r9   r   rV   rV   r   r   r   rW   rW   rW   r   r      r\   r\   c                 S   s   g | ]}|d  qS rY   r   rZ   r   r   r
   r      s    Zddidiiidididic                 S   s   g | ]}|d  qS g?r   rZ   r   r   r
   r      s     )rV   rV   r9   rW   r   r   r   r\   r      r   	   r   c                 S   s   g | ]}|d  qS r]   r   rZ   r   r   r
   r      s     Zddidiiididididc                 S   s   g | ]}|d  qS )   r   rZ   r   r   r
   r      s     )rW   rW   rV   r\   r9   r9   r9   r^   r   r_   r   r   r      c                 s   s   | ]\}}t || V  qd S Nabsr   cr	   r   r   r
   	<genexpr>   s     zATestGeneratorThreshold.test_weights_thresholds.<locals>.<genexpr>+=)	r   r:   r7   r   r+   listrF   sumzip)r   Zwseqcsr-   wsr   r   r
   test_weights_thresholds   s(    



z.TestGeneratorThreshold.test_weights_thresholdsc                 C   s   t dgdgdgdgdgd}|dd |dd |dd |dd |dd t|ddddgksvtt|}t|stt|	 ddddddgksttj
t| d	d
}t||kstd S )Nr   r   r9   rV   rW   )r   r   r   r9   rV   r\   r   Tr   )r   r<   r=   r   r>   r   Zfind_threshold_graphr   sortedZnodesr(   dictr   Zfind_creation_sequence)r   r   ZTGrl   r   r   r
   test_finding_routines   s     
 z,TestGeneratorThreshold.test_finding_routinesc              	   C   s  d}t |}t dt|ks&ttt |tdd | D ksNtt |}|t	t
| ksrtt|d t 
|kstt |}t	t| }tdd t||D tjdddkstt| }t |}td	d t||D d
k stt |ddddddddgks0ttt |d dk sLtt ddks`tt ddksttt ddkstt dddddddgkstt ddddddddgkstd S )Nddiiddidc                 s   s   | ]\}}|V  qd S rb   r   r   r   r   r
   rg      s     zXTestGeneratorThreshold.test_fast_versions_properties_threshold_graphs.<locals>.<genexpr>r   c                 s   s   | ]\}}t || V  qd S rb   rc   re   r   r   r
   rg      s     r   gHz>rc   c                 s   s   | ]\}}t || V  qd S rb   rc   re   r   r   r
   rg      s     rh   r   rV   r\   r^   g!1,?g-q=ZdiiiddigZdidg      Zdddr0   ZdddiiiZdddiiidr9   )r   r)   Zdensityr   r   ro   Zdegree_sequencer   Ztriangle_sequenceri   Z	trianglesvaluesrj   Zcluster_sequenceZ
clusteringrk   r%   ZapproxZbetweenness_centralityZbetweenness_sequenceZeigenvaluesrd   Zdegree_correlation)r   rl   r   tsc1c2b1b2r   r   r
   .test_fast_versions_properties_threshold_graphs   s(    
(

*
"$ zETestGeneratorThreshold.test_fast_versions_properties_threshold_graphsc                 C   s<   t dd}t dd}t |dd}t j|dddd}d S )NrV   r\   r0   r   rM   )r   rT   rR   Zswap_d)r   r[   s1r   r   r
   test_tg_creation_routines   s    z0TestGeneratorThreshold.test_tg_creation_routinesc                    sf   t d  jj}t d d}t|}t|\}} jj fdd|D ddd t	
|}d S )	NnumpyZscipyrr   c                    s   g | ]}  ||qS r   )dot)r   lvnpr   r
   r      s     z<TestGeneratorThreshold.test_eigenvectors.<locals>.<listcomp>r0   g&.>)Zrtol)r%   ZimportorskipZlinalgZeigvalsr   r)   ZeigenvectorsZtestingZassert_allcloser   Zlaplacian_matrix)r   Zeigenvalrl   r   ZtgevalZtgevecZlaplr   r   r
   test_eigenvectors   s    


 z(TestGeneratorThreshold.test_eigenvectorsc                 C   s`   d}t |}tjtjjt j|t ds.tt j|t	 d}t
| t
| ks\td S )Nrr   )Zcreate_using)r   r)   r%   r&   r   	exceptionZNetworkXErrorZDiGraphr   Z
MultiGraphro   edges)r   rl   r   ZMGr   r   r
   test_create_using  s    

z(TestGeneratorThreshold.test_create_usingN)__name__
__module____qualname__r   r.   r4   r5   r8   r;   r?   rJ   rK   rP   rS   rU   rn   rq   ry   r{   r   r   r   r   r   r
   r      s$   r   )__doc__r%   Znetworkxr   Znetworkx.algorithms.thresholdZ
algorithmsrX   r   Z(networkx.algorithms.isomorphism.isomorphr   Zconvert_node_labels_to_integersZcnltir   r   r   r   r
   <module>   s   