o
    3ήc                      @   s   d dl Z d dlZd dlmZ d dlmZ ejejej	ej
ejg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,d- Z!dS ).    N)flow)pairwisec                    s   t  fddt|D S )Nc                 3   s     | ]\}}| | v V  qd S N ).0uvGr   a/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/connectivity/tests/test_disjoint_paths.py	<genexpr>   s    zis_path.<locals>.<genexpr>)allr   )r
   pathr   r	   r   is_path   s   r   c                 C   sh   |sdS |D ]	}t | |sJ qdd |D }tdd |D }ttjdd |D  }||kr2dS dS )NFc                 S   s   g | ]}t t|qS r   )listr   )r   pr   r   r   
<listcomp>   s    z+are_edge_disjoint_paths.<locals>.<listcomp>c                 s   s    | ]}t |V  qd S r   )len)r   er   r   r   r      s    z*are_edge_disjoint_paths.<locals>.<genexpr>c                 S   s   g | ]}t |qS r   )set)r   esr   r   r   r      s    T)r   sumr   r   union)r
   pathsr   paths_edgesnum_of_edgesnum_unique_edgesr   r   r   are_edge_disjoint_paths   s   r   c                    st   |sdS |D ]	}t | |sJ q|d d |d d h t fdd|D }t fdd|D }||kr8dS dS )	NFr   c                    s"   g | ]}|D ]}| vr|qqS r   r   r   r   nstr   r   r   (      " z+are_node_disjoint_paths.<locals>.<listcomp>c                    s"   h | ]}|D ]}| vr|qqS r   r   r   r!   r   r   	<setcomp>)   r#   z*are_node_disjoint_paths.<locals>.<setcomp>T)r   r   )r
   r   r   num_of_nodesnum_unique_nodesr   r!   r   are_node_disjoint_paths!   s   r'   c                  C   s   t  } | g d tD ]W}t|d}d|j }tt j| ddfi |}t| |s0J |t 	| ddt
|ks?J |tt j| ddfi |}t| |sUJ |t | ddt
|ksdJ |qd S )N))AB)r(   D)r(   F)r(   r
   )r)   C)r)   r*   )r)   r
   )r,   r*   )r,   E)r,   Z)r*   r-   )r*   r+   )r-   r+   )r-   r.   )r+   r.   )r
   r.   	flow_funcAssertion failed in function: r(   r.   )nxGraphadd_edges_from
flow_funcsdict__name__r   edge_disjoint_pathsr   edge_connectivityr   node_disjoint_pathsr'   node_connectivity)r
   r0   kwargserrmsg
edge_paths
node_pathsr   r   r   test_graph_from_pr_2053/   s   
 r@   c                  C      t  } tD ]W}t|d}d|j }tt j| ddfi |}t| |s)J |t | ddt	|ks8J |tt j
| ddfi |}t| |sNJ |t | ddt	|ks]J |qd S )Nr/   r1   MediciStrozzi)r2   florentine_families_graphr5   r6   r7   r   r8   r   r9   r   r:   r'   r;   r
   r0   r<   r=   edge_dpathsnode_dpathsr   r   r   test_florentine_familiesR      
 rH   c                  C   rA   )Nr/   r1   r   !   )r2   karate_club_graphr5   r6   r7   r   r8   r   r9   r   r:   r'   r;   rE   r   r   r   test_karatea   rI   rL   c                  C      t  } tD ]M}t|d}d|j }tt j| ddfi |}t| |s)J |dt|ks3J |tt j	| ddfi |}t
| |sIJ |dt|ksSJ |qd S )Nr/   r1   r         )r2   petersen_graphr5   r6   r7   r   r8   r   r   r:   r'   rE   r   r   r   test_petersen_disjoint_pathsp      
rQ   c                  C   rM   )Nr/   r1   r         )r2   octahedral_graphr5   r6   r7   r   r8   r   r   r:   r'   rE   r   r   r   test_octahedral_disjoint_paths   rR   rV   c                  C   rM   )Nr/   r1   r   rN   rS   r2   icosahedral_graphr5   r6   r7   r   r8   r   r   r:   r'   rE   r   r   r   test_icosahedral_disjoint_paths   rR   rY   c                  C   s   t  } tD ]V}t|d}d|j }dD ]F}||d< tt j| ddfi |}t| |s1J ||t|ks;J |tt j	| ddfi |}t
| |sQJ ||t|ks[J |qqd S )Nr/   r1   )   rT   cutoffr   rN   rW   )r
   r0   r<   r=   r[   rF   rG   r   r   r   test_cutoff_disjoint_paths   s   
r\   c                  C   N   t tj td} tt| dd W d    d S 1 s w   Y  d S NrT   
      pytestraisesr2   NetworkXError
path_graphr   r8   r	   r   r   r   test_missing_source_edge_paths      
"rf   c                  C   r]   r^   rb   rc   r2   rd   re   r   r:   r	   r   r   r   test_missing_source_node_paths   rg   ri   c                  C   r]   NrT   r`   r_   ra   r	   r   r   r   test_missing_target_edge_paths   rg   rk   c                  C   r]   rj   rh   r	   r   r   r   test_missing_target_node_paths   rg   rl   c                  C   l   t tj& t } t| g d t| ddg tt| dd W d    d S 1 s/w   Y  d S N)r`   rZ   rO   rT   rS   r`   )rb   rc   r2   NetworkXNoPathDiGraphadd_pathr   r8   r	   r   r   r   test_not_weakly_connected_edges      "rr   c                  C   rm   rn   )rb   rc   r2   ro   rp   rq   r   r:   r	   r   r   r   test_not_weakly_connected_nodes   rs   rt   c                  C   rm   rn   )rb   rc   r2   ro   r3   rq   r   r8   r	   r   r   r   test_not_connected_edges   rs   ru   c                  C   rm   rn   )rb   rc   r2   ro   r3   rq   r   r:   r	   r   r   r   test_not_connected_nodes   rs   rv   c                  C   f   t tj# t } | d t| ddg tt| dd W d    d S 1 s,w   Y  d S Nr`   rT   rS   )	rb   rc   r2   ro   r3   add_noderq   r   r8   r	   r   r   r   test_isolated_edges      
"rz   c                  C   rw   rx   )	rb   rc   r2   ro   r3   ry   rq   r   r:   r	   r   r   r   test_isolated_nodes   r{   r|   c                  C   sR   t tj td} ttj| dd| d W d    d S 1 s"w   Y  d S )NrS   r   rO   )	auxiliary)rb   rc   r2   rd   complete_graphr   r:   r	   r   r   r   test_invalid_auxiliary   s   
"r   )"rb   networkxr2   networkx.algorithmsr   networkx.utilsr   boykov_kolmogorovedmonds_karpdinitzpreflow_pushshortest_augmenting_pathr5   r   r   r'   r@   rH   rL   rQ   rV   rY   r\   rf   ri   rk   rl   rr   rt   ru   rv   rz   r|   r   r   r   r   r   <module>   s>    	#