o
    3ήcv(                     @   s  d dl Z d dlZd dlmZ d dlmZmZ d dlm	Z	 ej
ejejejejgZd2d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$d0d1 Z%dS )3    N)flow)minimum_st_edge_cutminimum_st_node_cutarbitrary_element2   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   W/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/connectivity/tests/test_cuts.py_generate_no_biconnected   s   r   c                  C   sv   t  } tD ]3}d|j }tdD ]&}t| }tj||d}t|dks(J || t	t
|v s7J |qqd S )NAssertion failed in function: r   	flow_func)r   
flow_funcs__name__rangenextr   minimum_node_cutlenpopsetarticulation_points)Ggenr   errmsgir   cutr   r   r   test_articulation_points"   s    r)   c                  C   s>  t  } | g d tD ]}t|d}d|j }dtt j| ddfi |ks-J |t j| fi |}dt|ks@J ||  }|	| t 
|rRJ |dd	ht| ddfi |ksdJ |dd	ht j| ddfi |kswJ |t j| fi |}dt|ksJ ||  }|| t 
|rJ |qd S )
N)r      )r      )r      )r      )r+   r,   )r+      r,   r-   )r,   r/   )r-   r/   )r-      )r.   r1   )r/      )r/   	   )r1   r2   )r1   
   )r2      )r3   r4   )r3   r5   )r4   r5   r   r   r,   r   r5   r+   r/   r1   )r   Graphadd_edges_fromr   dictr   r!   minimum_edge_cutcopyremove_edges_fromr   r   r    remove_nodes_fromr   r   kwargsr&   edge_cutHnode_cutr   r   r   test_brandes_erlebach_book-   s*   
&
$&
rB   c                  C   s4  t t dt d} | d tddD ]}| d| qt | t d} | |  d  tddD ]}| d| q6tD ]V}t|d}d|j	 }t j
| fi |}dt|ksaJ ||  }|| t |rsJ |t j| fi |}dh|ksJ ||  }|| t |rJ |qAd S )	Nr-   r1   r   r   r4   r   r   r,   )r   disjoint_unioncomplete_graphremove_noder   add_edgeorderr   r8   r   r9   r!   r:   r;   r   r    r<   )r   r'   r   r>   r&   r?   r@   rA   r   r   r   test_white_harary_paper]   s,   



rH   c                  C      t  } tD ]W}t|d}d|j }t j| fi |}dt|ks&J ||  }|| t 	|r8J |t j
| fi |}dt|ksKJ ||  }|| t 	|r]J |qd S )Nr   r   r,   )r   petersen_graphr   r8   r   r9   r!   r:   r;   r   r    r<   r=   r   r   r   test_petersen_cutset{      


rK   c                  C   rI   )Nr   r   r-   )r   octahedral_graphr   r8   r   r9   r!   r:   r;   r   r    r<   r=   r   r   r   test_octahedral_cutset   rL   rN   c                  C   rI   )Nr   r   r.   )r   icosahedral_graphr   r8   r   r9   r!   r:   r;   r   r    r<   r=   r   r   r   test_icosahedral_cutset   rL   rP   c                  C   s:   t  } | ddg tD ]}tjt jt j| |d qd S )Nr*   r0   r   )r   r6   r7   r   pytestraisesNetworkXErrorr    r   r   r   r   r   test_node_cutset_exception   s
   rU   c                        t D ]W} d| j }tdD ]J}tjdddd}t|s6tt|}tt	| |
 fdd|D  tj|| d	}t|t|ksJJ ||| t|rXJ |qqd S )
Nr   r,   r         ?r	   r
   c                 3       | ]	} t |fV  qd S Nr   .0cstartr   r   	<genexpr>       z1test_node_cutset_random_graphs.<locals>.<genexpr>r   )r   r   r   r   r   r   iterconnected_componentsr   r   r7   r    node_connectivityr!   r<   r   r&   r'   r   ccscutsetr   r]   r   test_node_cutset_random_graphs      

rg   c                     rV   )
Nr   r,   r   rW   r	   r
   c                 3   rX   rY   r   rZ   r]   r   r   r_      r`   z1test_edge_cutset_random_graphs.<locals>.<genexpr>r   )r   r   r   r   r   r   ra   rb   r   r   r7   r9   edge_connectivityr!   r;   rd   r   r]   r   test_edge_cutset_random_graphs   rh   rj   c                  C   sX   t  } t  }t jt jfD ]}tD ]}tjt j|| |d tjt j|||d qqd S )Nr   )	r   r6   DiGraphr    r9   r   rQ   rR   NetworkXPointlessConcept)r   Dinterface_funcr   r   r   r   test_empty_graphs   s   

ro   c               	   C   s4   t d} tD ]}dtt| dd|dksJ qd S )Nr.   r-   r   r   )r   rD   r   r!   r   rT   r   r   r   test_unbounded   s   
rp   c               
   C   B   t d} t jt jfD ]}tD ]}tjt j|| dd|d qqd S )Nr-   r4   r   r   r   
path_graphr9   r    r   rQ   rR   rS   r   rn   r   r   r   r   test_missing_source      
ru   c               
   C   rq   )Nr-   r   r4   r   rr   rt   r   r   r   test_missing_target   rv   rw   c                  C   \   t  } t | g d t | ddg t jt jfD ]}tD ]}tjt j|| |d qqd S N)r   r+   r,   r-   r.   r   )	r   rk   add_pathr9   r    r   rQ   rR   rS   rt   r   r   r   test_not_weakly_connected      r{   c                  C   rx   ry   )	r   r6   rz   r9   r    r   rQ   rR   rS   rt   r   r   r   test_not_connected  r|   r}   c                  C   sB   t d} t jt jfD ]}tD ]}dt|| |dksJ qqd S Nr.   r-   r   )r   rD   r9   r    r   r!   rt   r   r   r   tests_min_cut_complete  s   
r   c                  C   sJ   t d} |  } t jt jfD ]}tD ]}dt|| |dks!J qqd S r~   )r   rD   to_directedr9   r    r   r!   rt   r   r   r   tests_min_cut_complete_directed  s   
r   c                  C   s@   t  } | g d | g d t| dd}|i ksJ d S )N)r   r   r+   r,   r1   r2   r5      ))r1   r5   )r   r5   )r   r   )r   r2   )r   r   r1   r5   )r   r6   add_nodes_fromr7   r   )r   nodelistr   r   r   tests_minimum_st_node_cut  s
   r   c                  C   s&   t d} tjt jt| dd| d d S )Nr.   r   r,   )	auxiliary)r   rD   rQ   rR   rS   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   rD   r    r9   rQ   rR   rS   r   rn   r   r   r   test_interface_only_source,     
r   c                  C   r   )Nr.   r,   )tr   r   r   r   r   test_interface_only_target2  r   r   )r   )&rQ   networkxr   networkx.algorithmsr    networkx.algorithms.connectivityr   r   networkx.utilsr   boykov_kolmogorovdinitzedmonds_karppreflow_pushshortest_augmenting_pathr   r   r)   rB   rH   rK   rN   rP   rU   rg   rj   ro   rp   ru   rw   r{   r}   r   r   r   r   r   r   r   r   r   r   <module>   sB    
0				