o
    3ήc(!                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ dZej	ej
ejejejgZdd Zdd Zd	d
 Zejjdd Zdd Zdd Zdd Zdd Zdd Zd,ddZdd Zdd Zdd Zejjd d! Zd"d# Zd$d% Z d&d' Z!d(d) Z"d*d+ Z#dS )-    N)flow)_is_separating_set   c            	      C   sf  t jt ddgdd} t | d}dd | D }|d |d f|d |d	 f|d
 |d f|d |d ffD ]w}|  d }t  }t | |} | |d |d  | ||d  t 	d}t | |} | |d |d  | |d |d  | |d |d  t | |} | |d  }| 
|d  |D ]
}| |d | q| |d |d  q9| S )N   labelslabel_attributec                 S      i | ]\}}||qS  r
   .0kvr
   r
   [/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/connectivity/tests/test_kcutsets.py
<dictcomp>       z#graph_example_1.<locals>.<dictcomp>r   r      r   r   r   r   r      r   r   r   r   r   r   r   r   r         r      r      
         nxconvert_node_labels_to_integers
grid_graphget_node_attributesitemsorderpetersen_graphdisjoint_unionadd_edgecomplete_graphremove_node)	Grlabelsr   nodesnew_nodePKnbrsnbrr
   r
   r   graph_example_1   s6   
r7   c            
      C   s~  t jt ddgdd} t | d}dd | D }|d |d f|d |d	 ffD ]w}|  d
 }t  }t | |} | |d
 |d  | ||d
  t 	d}t | |} | |d |d  | |d |d  | |d |d  t | |} | |d  }| 
|d  |D ]
}| |d | q| |d |d  q+|d |d f|d |d ffD ]}|  d
 }t  }t | |} | |d
 |d  | ||d
  t 	d}t | |} | |d |d  | |d |d  | |d |d  t | |} | |d  }| 
|d  |D ]}| |d | q| |d  }	| 
|d  |	D ]}| |d | q0q| S )Nr   r   r   c                 S   r	   r
   r
   r   r
   r
   r   r   C   r   z.torrents_and_ferraro_graph.<locals>.<dictcomp>r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"      r   r   r   r   	      r#   )
r/   r0   r   r1   r2   r3   r4   r5   r6   nbrs2r
   r
   r   torrents_and_ferraro_graph>   sX   $
$
r<   c              	   C   sz   t | D ]5}t|dk rq| |}t |}t |}t|tD ]}|t|ks-J t 	t 
| |g r9J q#qd S )Nr   )r$   connected_componentslensubgraphnode_connectivityall_node_cuts	itertoolsisliceMAX_CUTSETS_TO_TESTis_connectedrestricted_view)r/   ccGc	node_connall_cutscutr
   r
   r   _check_separating_sets{   s   


rL   c                  C      t  } t|  d S N)r<   rL   r/   r
   r
   r   test_torrents_and_ferraro_graph   s   rP   c                  C   rM   rN   )r7   rL   rO   r
   r
   r   test_example_1   s   rQ   c                  C   s   t jdddd} t|  d S )Nd   g?*   seed)r$   gnp_random_graphrL   rO   r
   r
   r   test_random_gnp   s   rW   c                  C   s"   ddg} t j| dd}t| d S )N)   P   g?)rY      g333333?rS   rT   )r$   random_shell_graphrL   )constructorr/   r
   r
   r   
test_shell   s   r]   c                  C   s<   t jdddd} t t | }|t | t| d S )NrR   r   H   )triesrU   )r$   random_powerlaw_tree_sequenceGraphconfiguration_modelremove_edges_fromselfloop_edgesrL   )deg_seqr/   r
   r
   r   test_configuration   s   rf   c                  C   s   t  } t|  d S rN   )r$   karate_club_graphrL   rO   r
   r
   r   test_karate   s   rh   2   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   TrR   gq=
ףp?rS   rT   zTried z times: no suitable Graph.r   )r$   fast_gnp_random_graphrE   is_biconnected	Exception)max_attemptsattemptsr/   msgr
   r
   r   _generate_no_biconnected   s   rp   c                  C   sT   t  } tdD ] }t| }tdd t|D }t|D ]}||v s&J qqd S )Nr   c                 s   s    | ]}|hV  qd S rN   r
   )r   ar
   r
   r   	<genexpr>   s    z+test_articulation_points.<locals>.<genexpr>)rp   rangenextlistr$   articulation_pointsrA   )Ggenir/   rv   rK   r
   r
   r   test_articulation_points   s   ry   c                  C   sH   t dd} ddhddhddhdd	hg}t | D ]}||v s!J qd S )
Nr   )r   r   r   r   )r   r   r   )r   r   )r   r   r   )r$   grid_2d_graphrA   )r/   solutionrK   r
   r
   r   test_grid_2d_graph   s
   r|   c                  C   s.   t jdddd} t | }tt jt| d S )NrR   g{Gz?rS   rT   )r$   rj   rA   pytestraisesNetworkXErrorrt   )r/   cutsr
   r
   r   test_disconnected_graph   s   
r   c               
   C   s   t ddt dg} | D ]0}t |}tD ]&}t j||d}t|tD ]}|t	|ks/J t 
t ||g r;J q%qqd S )Nr   r   )	flow_func)r$   rz   cycle_graphr@   
flow_funcsrA   rB   rC   rD   r>   rE   rF   )graphsr/   rI   r   rJ   rK   r
   r
   r   test_alternative_flow_functions   s   
r   c                  C   s    t d} t| h dsJ d S )Nr      r   r   r   r   )r$   r-   r   rO   r
   r
   r   %test_is_separating_set_complete_graph   s   
r   c                  C   s6   dD ]} t | }t||jd}t||hsJ qd S )N)r   r       key)r$   
star_graphmaxdegreer   )rx   r/   max_degree_noder
   r
   r   test_is_separating_set   s
   
r   c                  C   s   t  } ttt | td}| |}ddhddhddhddhddhg}tt |}t|t|krItt 	| td	|  td
|  t|t|ksSJ |D ]}||v s]J qUd S )Nr       !   r   r   r   r      z
Solution: zResult: )
r$   rg   r   ru   biconnected_componentsr>   r?   rA   printinfo)r4   bccr/   r{   r   rK   r
   r
   r   test_non_repeated_cuts   s   
"r   c                  C   sh   t d} ddhddhddhddhddhg}tt | }t|t|ks'J |D ]}||v s1J q)d S )Nr   r   r   r   r   r   )r$   r   ru   rA   r>   r/   r{   r   rK   r
   r
   r   test_cycle_graph      
"r   c                  C   sh   t d} h dh dh dh dh dg}tt | }t|t|ks'J |D ]}||v s1J q)d S )Nr   r   >   r   r   r   r   >   r   r   r   r   >   r   r   r   r   >   r   r   r   r   )r$   r-   ru   rA   r>   r   r
   r
   r   test_complete_graph  r   r   )ri   )$rB   r}   networkxr$   networkx.algorithmsr   )networkx.algorithms.connectivity.kcutsetsr   rD   boykov_kolmogorovdinitzedmonds_karppreflow_pushshortest_augmenting_pathr   r7   r<   rL   markslowrP   rQ   rW   r]   rf   rh   rp   ry   r|   r   r   r   r   r   r   r   r
   r
   r
   r   <module>   sB   %=

	

	