U
    Gvf                     @   s  d dl Zd dlmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZmZmZ ddgZdd	 Zd
d Zdd Zdd Zdd Zejdeejddddgdd Zejdeejddddgdd Zejdedd Zejdedd Zejded d! Zejded"d# Zejded$d% Zejded&d' Zd(d) Zejd*g gg fd gd ggg fd+d dgd d d gd dd ggd+dd d dgfd,d-d.gd/d0d1gd d d ggd,d-d.d/d0d1d d gfgd2d3 Zejd4g gg fd ggg fd+ggd gfd d+gd5d ggd+d gfd+d dgd d dgd/d0d ggd dd/d+dgfgd6d7 Z ejd4g gg fd ggg fd+ggd gfd d+gd5d ggd d+gfd+d dgd d dgd/d0d ggd d d+ddgfgd8d9 Z!dS ):    N)assert_array_equal)
csr_matrix
csc_matrix)maximum_flow)_add_reverse_edges_make_edge_pointers_make_tailsedmonds_karpZdinicc               	   C   sL   t t8 tddgddgg} t| dd t| dddd W 5 Q R X d S Nr      r	   method)pytestraises	TypeErrornparrayr   graph r   H/tmp/pip-unpacked-wheel-96ln3f52/scipy/sparse/csgraph/tests/test_flow.pytest_raises_on_dense_input   s    r   c               	   C   sJ   t t6 tddgddgg} t| dd t| dddd W 5 Q R X d S r
   )r   r   r   r   r   r   r   r   r   test_raises_on_csc_input   s    r   c               	   C   sP   t t< tddgddggtjd} t| dd t| dddd W 5 Q R X d S )Nr   g      ?dtyper   r	   r   )r   r   
ValueErrorr   r   Zfloat64r   r   r   r   r   #test_raises_on_floating_point_input   s    r   c               	   C   s>   t t* tdddgdddgg} t| dd W 5 Q R X d S )Nr   r      r   r   r   r   r   r   r   r   r   test_raises_on_non_square_input"   s    r   c               	   C   sJ   t t6 tddgddgg} t| dd t| dddd W 5 Q R X d S r
   r   r   r   r   r   test_raises_when_source_is_sink(   s    r    r   sourcer      c              	   C   s>   t t* tddgddgg}t|| d|d W 5 Q R X d S Nr   r   r   r   )r!   r   r   r   r   r   (test_raises_when_source_is_out_of_bounds/   s    r%   sinkc              	   C   s>   t t* tddgddgg}t|d| |d W 5 Q R X d S r$   r   )r&   r   r   r   r   r   &test_raises_when_sink_is_out_of_bounds7   s    r'   c                 C   s\   t ddgddgg}t|dd| d}|jdks2ttddgddgg}t|j | d S )Nr      r   r   	r   r   
flow_valueAssertionErrorr   r   r   flowtoarrayr   r   resexpected_flowr   r   r   test_simple_graph?   s
    r2   c                 C   st   t dddgdddgdddgg}t|dd| d}|jdks>ttdddgdddgdddgg}t|j | d S )Nr   r(   r#   r   r   r*   r/   r   r   r   test_bottle_neck_graphJ   s
     "r4   c                 C   sd  t ddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgg}t|dd| d}|jdksttddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgg}t|j | d S )Nr   
      r      ir*   r/   r   r   r   test_backwards_flowU   s*    r8   c                 C   s   t ddddddgddddddgddddddgdddddd	gdddd
ddgddddddgg}t|dd| d}|jdkszttddddddgddddddgddddddgddddddgdddd
ddgddddddgg}t|j | d S )Nr         r5            	   r7   r6   r(   r         iii   ir*   r/   r   r   r   #test_example_from_clrs_chapter_26_1p   s"    rC   c                 C   sr   t ddddgddddgddddgddddgg}t|dd| d}|jdksNttjdtjd}t|j	 | d S )Nr   r(   r>   r#   r   )r<   r<   r   )
r   r   r+   r,   r   zerosint32r   r-   r.   r/   r   r   r   test_disconnected_graph   s    


rF   c                 C   s   d}t d|}t tt||d g }t j|d t jd}t|||f||fd}t|d|d | d}|j	dksxt
||  }t|jj|j t|jj|j t|jj|j d S )Ni r   r   )shaper   r   )r   Zaranger   listrangeZonesrE   r   r   r+   r,   Z	transposer   r-   dataindicesindptr)r   nrK   rL   rJ   r   r0   r1   r   r   r   "test_add_reverse_edges_large_graph   s    rN   c               	   C   sJ   t dddgdddgdddgg} t| dd}t  |j W 5 Q R X d S )Nr   r(   r#   r   )r   r   r   Zdeprecated_callZresidual)r   r0   r   r   r   (test_residual_raises_deprecation_warning   s     
rO   za,b_data_expectedr   r>      r6   r<   r(      c                 C   s4   t | tjt| t| fd} t| }t|j| dS )zRTest that the reversal of the edges of the input graph works
    as expected.
    )r   rG   N)r   r   rE   lenr   r   rJ   )aZb_data_expectedbr   r   r   test_add_reverse_edges   s    	rU   z
a,expectedr5   c                 C   s$   t | tjd} t| }t|| d S Nr   )r   r   rE   r   r   )rS   expectedZrev_edge_ptrr   r   r   test_make_edge_pointers   s    rX   c                 C   s$   t | tjd} t| }t|| d S rV   )r   r   rE   r   r   )rS   rW   tailsr   r   r   test_make_tails   s    rZ   )"Znumpyr   Znumpy.testingr   r   Zscipy.sparser   r   Zscipy.sparse.csgraphr   Zscipy.sparse.csgraph._flowr   r   r   methodsr   r   r   r   r    markZparametrizer%   r'   r2   r4   r8   rC   rF   rN   rO   rU   rX   rZ   r   r   r   r   <module>   sj   







(.
	
(

(