o
    3ήc:                     @   s0  d dl Z d dlZd dlZd dlmZ d dlmZmZ ej	ej
ejejejgZd;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)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d8 Z(G d9d: d:Z)dS )<    N)flow)local_edge_connectivitylocal_node_connectivity2   c                 c   s^    d}	 t jdddd}t |rt |sd}|V  n|| kr*d|  d}t||d	7 }q)
Nr   Td   gq=
ףp?*   seedzTried z times: no suitable Graph.   )nxfast_gnp_random_graphis_connectedis_biconnected	Exception)max_attemptsattemptsGmsg r   _/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/connectivity/tests/test_connectivity.py_generate_no_biconnected   s   r   c                  C   s   t d} | ddg t d}|g d t  }tD ]:}t|d}d|j }t j| fi |dks:J |t j|fi |dksIJ |t j|fi |d	ksXJ |qd S )
N   r
   r   r
      )r   r   )r   r   )r   r   r   r   	flow_funcAssertion failed in function: r
   g@r   )r   
path_graphadd_edges_fromGraph
flow_funcsdict__name__average_node_connectivity)G1G2G3r   kwargserrmsgr   r   r   test_average_connectivity'   s   


 r+   c                  C   s>   t g d} tD ]}d|j }t | dksJ |q	d S )N)r   r   r
      r   g      ?)r   DiGraphr"   r$   r%   r   r   r*   r   r   r   "test_average_connectivity_directed9   s
   r0   c                  C   sP   t  } tD ] }tdD ]}t| }d|j }tj||ddks$J |qqd S )Nr   r   r   r
   )r   r"   rangenextr$   r   node_connectivity)Ggenr   ir   r*   r   r   r   test_articulation_points@   s   r6   c                  C   sR  t  } | g d tD ]}t|d}d|j }dt| ddfi |ks*J |dt j| ddfi |ks;J |dt| ddfi |ksKJ |dt j	| ddfi |ks\J |dt j| fi |kskJ |dt j	| fi |kszJ ||t
ju rdt j| ddfddi|ksJ |qdt j| ddfddi|ksJ |qd S )	N))r
      r   r   r,   )r7   r   )r7      r   )r   r8   )r   r8   )r      )r-   r9   )r8      )r8   	   )r9   r:   )r9   
   )r:      )r;   r<   )r;   r=   )r<   r=   r   r   r   r
   r=   r7   cutoff)r   r!   r    r"   r#   r$   r   edge_connectivityr   r3   r   preflow_push)r   r   r)   r*   r   r   r   test_brandes_erlebachI   s"   
 " "
((rA   c                  C   s   t t dt d} | d tddD ]}| d| qt | t d} | |  d  tddD ]}| d| q6tD ]"}d|j }dt j	| |dksVJ |dt j
| |dkscJ |qAd S )	Nr   r9   r   r
   r<   r   r   r   )r   disjoint_unioncomplete_graphremove_noder1   add_edgeorderr"   r$   r3   r?   )r   r5   r   r*   r   r   r   test_white_harary_1s   s   
rG   c                  C   s   t t dt d} | dd dtt |  ksJ tD ]"}d|j }dt j	| |dks6J |dt j
| |dksCJ |q!d S )Nr   r   r   r   r
   r   )r   rB   rC   rE   mincore_numbervaluesr"   r$   r3   r?   r/   r   r   r   test_white_harary_2   s   rK   c                  C   s   t dddD ]R} tD ]M}t| }d|j }| d tj||dks&J || d tj| |dks7J || d tj||dksFJ || d tj| |dksWJ |q
qd S )Nr-      r   r
   r   )r1   r"   r   rC   r$   r3   to_directedr?   )nr   r   r*   r   r   r   test_complete_graphs   s$   




rO   c                  C   sj   t dddD ],} t| }tD ]"}d|j }dtj||dks$J |dtj||dks1J |qqd S )Nr-      r   r   r   )r1   r   empty_graphr"   r$   r3   r?   )kr   r   r*   r   r   r   test_empty_graphs   s   
rS   c                  C   V   t  } tD ]"}d|j }dt j| |dksJ |dt j| |dks(J |qd S Nr   r   r   )r   petersen_graphr"   r$   r3   r?   r/   r   r   r   test_petersen      rW   c                  C   rT   rU   )r   tutte_graphr"   r$   r3   r?   r/   r   r   r   
test_tutte   rX   rZ   c                  C   rT   rU   )r   dodecahedral_graphr"   r$   r3   r?   r/   r   r   r   test_dodecahedral   rX   r\   c                  C   rT   )Nr   r   r   )r   octahedral_graphr"   r$   r3   r?   r/   r   r   r   test_octahedral   rX   r^   c                  C   rT   )Nr   r-   r   )r   icosahedral_graphr"   r$   r3   r?   r/   r   r   r   test_icosahedral   rX   r`   c               	   C   2   t d} tD ]}tjt jt j| dd|d qd S Nr   r<   r
   r   r   r   r"   pytestraisesNetworkXErrorr3   r   r   r   r   r   test_missing_source      
rh   c               	   C   ra   Nr   r
   r<   r   rc   rg   r   r   r   test_missing_target   ri   rk   c               	   C   ra   rb   r   r   r"   rd   re   rf   r?   rg   r   r   r   test_edge_missing_source   ri   rm   c               	   C   ra   rj   rl   rg   r   r   r   test_edge_missing_target   ri   rn   c                  C   n   t  } t | g d t | ddg tD ]}d|j }t | dks)J |t | dks4J |qd S N)r
   r7   r   r   r-   r   r   )r   r.   add_pathr"   r$   r3   r?   r/   r   r   r   test_not_weakly_connected      rr   c                  C   ro   rp   )r   r!   rq   r"   r$   r3   r?   r/   r   r   r   test_not_connected   rs   rt   c                  C   s   t jdt  d} t d }tD ]\}d|j }dt j| |dks'J |dt| dd|dks5J |dt j| dd|dksDJ |dt j||dksQJ |dt|dd|dks_J |dt j|dd|dksnJ |qd S )Nr<   create_usingr   r
   r   r   r7   )r   cycle_graphr.   rM   r"   r$   r?   r   )r   Dr   r*   r   r   r   test_directed_edge_connectivity  s    ry   c               
   C   sf   t d} ttfD ]'}tD ]"}|tju rqdD ]}|| dd||d}||ks.J d|j qqq	d S )Nr-   )r   r7   r
   r   r   )r   r>   zcutoff error in )r   rC   r   r   r"   r   r@   r$   )r   
local_funcr   r>   resultr   r   r   test_cutoff  s   

r|   c                  C   s&   t d} tjt jt| dd| d d S )Nr-   r   r   )	auxiliary)r   rC   rd   re   rf   r   )r   r   r   r   test_invalid_auxiliary   s   
r~   c                  C   4   t d} t jt jfD ]}tjt j|| dd qd S )Nr-   r   )sr   rC   r3   r?   rd   re   rf   r   interface_funcr   r   r   test_interface_only_source%     
r   c                  C   r   )Nr-   r   )tr   r   r   r   r   test_interface_only_target+  r   r   c                  C   s@   t jt jt jg} | D ]}| }t |d t |ksJ q
d S )Nr   )r   r_   r]   r[   stoer_wagnerr?   )graph_funcs
graph_funcr   r   r   r   +test_edge_connectivity_flow_vs_stoer_wagner1  s
   r   c                   @   s`   e Zd Ze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 )TestAllPairsNodeConnectivityc              	   C   s   t d| _t jdt  d| _t d| _t jdt  d| _t jdddd| _	t jddddd| _
t d	| _t d
| _t d| _| j| j| j| j| j	| j
| j| j| jg	| _d S )Nr9   ru      g?r   r   T)directedr	   rL   r<   r-   )r   r   pathr.   directed_pathrw   cycledirected_cyclegnp_random_graphgnpdirected_gnprC   K20K10K5G_list)clsr   r   r   setup_class9  s&   
z(TestAllPairsNodeConnectivity.setup_classc                 C   st   t | j}|D ]}||  D ]
\}}|dksJ qqt | j}|D ]}||  D ]
\}}|dks6J q,q$d S )Nr7   r
   )r   all_pairs_node_connectivityr   itemsr   selfK_undirsourcetargetrR   K_dirr   r   r   test_cyclesP  s   z(TestAllPairsNodeConnectivity.test_cyclesc                 C   sX   | j | j| jfD ]!}t|}|D ]}||  D ]\}}|t|d ks'J qqqd S )Nr
   )r   r   r   r   r   r   len)r   r   Kr   r   rR   r   r   r   test_completeZ  s   
z*TestAllPairsNodeConnectivity.test_completec                 C   s   t | j}|D ]}||  D ]
\}}|dksJ qqt | j}|D ]}||  D ]\}}||k r;|dks:J q,|dksAJ q,q$d S )Nr
   r   )r   r   r   r   r   r   r   r   r   
test_pathsa  s   z'TestAllPairsNodeConnectivity.test_pathsc                 C   s8   t d}g d}t j||d}t|t|ksJ d S )Nr-   r   r7   r   nbunch)r   rC   r   r   )r   r   r   Cr   r   r   "test_all_pairs_connectivity_nbunchn  s   
z?TestAllPairsNodeConnectivity.test_all_pairs_connectivity_nbunchc                    s8   t  }t | t fddt|dD sJ d S )Nc                 3   s$    | ]\}}d  | | kV  qdS )r-   Nr   ).0uvr   r   r   	<genexpr>w  s   " zWTestAllPairsNodeConnectivity.test_all_pairs_connectivity_icosahedral.<locals>.<genexpr>r7   )r   r_   r   all	itertoolscombinations)r   r   r   r   r   'test_all_pairs_connectivity_icosahedralt  s   
&zDTestAllPairsNodeConnectivity.test_all_pairs_connectivity_icosahedralc                 C   s   t  }g d}t || dd |D }t|dD ]\}}t ||| || |< || |< qt |}tdd | D tdd | D ksNJ d S )Nr   r
   r7   r   c                 S      i | ]}|i qS r   r   r   rN   r   r   r   
<dictcomp>}      zLTestAllPairsNodeConnectivity.test_all_pairs_connectivity.<locals>.<dictcomp>r7   c                 s        | ]\}}|t |fV  qd S Nsortedr   rR   r   r   r   r   r         zKTestAllPairsNodeConnectivity.test_all_pairs_connectivity.<locals>.<genexpr>)	r   r!   rq   r   r   r3   r   r   r   r   r   nodesAr   r   r   r   r   r   test_all_pairs_connectivityy  s   $
z8TestAllPairsNodeConnectivity.test_all_pairs_connectivityc                 C   s   t  }g d}t || dd |D }t|dD ]\}}t ||||| |< qt |}tdd | D tdd | D ksHJ d S )Nr   c                 S   r   r   r   r   r   r   r   r     r   zUTestAllPairsNodeConnectivity.test_all_pairs_connectivity_directed.<locals>.<dictcomp>r7   c                 s   r   r   r   r   r   r   r   r     r   zTTestAllPairsNodeConnectivity.test_all_pairs_connectivity_directed.<locals>.<genexpr>)	r   r.   rq   r   permutationsr3   r   r   r   r   r   r   r   $test_all_pairs_connectivity_directed  s   
zATestAllPairsNodeConnectivity.test_all_pairs_connectivity_directedc                 C   s   t d}g d}dd |D }t|dD ]\}}t ||| || |< || |< qt j||d}tdd | D tdd | D ksKJ d S )	Nr-   r   c                 S   r   r   r   r   r   r   r   r     r   z`TestAllPairsNodeConnectivity.test_all_pairs_connectivity_nbunch_combinations.<locals>.<dictcomp>r7   r   c                 s   r   r   r   r   r   r   r   r     r   z_TestAllPairsNodeConnectivity.test_all_pairs_connectivity_nbunch_combinations.<locals>.<genexpr>)r   rC   r   r   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   /test_all_pairs_connectivity_nbunch_combinations  s   
$zLTestAllPairsNodeConnectivity.test_all_pairs_connectivity_nbunch_combinationsc                 C   s   t d}g d}dd |D }t|dD ]\}}t ||| || |< || |< qt j|t|d}tdd | D tdd | D ksMJ d S )	Nr-   r   c                 S   r   r   r   r   r   r   r   r     r   zXTestAllPairsNodeConnectivity.test_all_pairs_connectivity_nbunch_iter.<locals>.<dictcomp>r7   r   c                 s   r   r   r   r   r   r   r   r     r   zWTestAllPairsNodeConnectivity.test_all_pairs_connectivity_nbunch_iter.<locals>.<genexpr>)	r   rC   r   r   r3   r   iterr   r   r   r   r   r   'test_all_pairs_connectivity_nbunch_iter  s   
$zDTestAllPairsNodeConnectivity.test_all_pairs_connectivity_nbunch_iterN)r$   
__module____qualname__classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   8  s    

r   )r   )*r   rd   networkxr   networkx.algorithmsr    networkx.algorithms.connectivityr   r   boykov_kolmogorovdinitzedmonds_karpr@   shortest_augmenting_pathr"   r   r+   r0   r6   rA   rG   rK   rO   rS   rW   rZ   r\   r^   r`   rh   rk   rm   rn   rr   rt   ry   r|   r~   r   r   r   r   r   r   r   r   <module>   sL    
	*	

