o
    	h&                     @   s  d dl Zd dlmZ d dlZd dlmZ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g ddd Zejdeejdg d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ejded&d' Zejd(g gg fd gd ggg fg d)g d*g d+gg d,fg d-g d.g d*gg d/fgd0d1 Z ejd2g gg fd ggg fd3ggd gfd d3gd4d ggd3d gfg d)g d5g d6gg d7fgd8d9 Z!ejd2g gg fd ggg fd3ggd gfd d3gd4d ggd d3gfg d)g d5g d6gg d:fgd;d< Z"dS )=    N)assert_array_equal)	csr_array	csc_array
csr_matrix)maximum_flow)_add_reverse_edges_make_edge_pointers_make_tailsedmonds_karpdinicc                  C   sb   t t" tddgddgg} t| dd t| dddd W d    d S 1 s*w   Y  d S Nr      r
   method)pytestraises	TypeErrornparrayr   graph r   X/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/sparse/csgraph/tests/test_flow.pytest_raises_on_dense_input   s
   "r   c                  C   s`   t t! tddgddgg} t| dd t| dddd W d    d S 1 s)w   Y  d S r   )r   r   r   r   r   r   r   r   r   test_raises_on_csc_input   
   "r   c                  C   sf   t t$ tddgddggtjd} t| dd t| dddd W d    d S 1 s,w   Y  d S )Nr   g      ?dtyper   r
   r   )r   r   
ValueErrorr   r   float64r   r   r   r   r   #test_raises_on_floating_point_input   s
   "r    c                  C   sP   t t tg dg dg} t| dd W d    d S 1 s!w   Y  d S )N)r   r      )r!   r   r   r   r   r   r   r   r   r   r   r   r   r   test_raises_on_non_square_input"   s   "r#   c                  C   s`   t t! tddgddgg} t| dd t| dddd W d    d S 1 s)w   Y  d S r   r"   r   r   r   r   test_raises_when_source_is_sink(   r   r$   r   source)r!      c                 C   sT   t t tddgddgg}t|| d|d W d    d S 1 s#w   Y  d S Nr   r   r   r"   )r%   r   r   r   r   r   (test_raises_when_source_is_out_of_bounds/      "r)   sinkc                 C   sT   t t tddgddgg}t|d| |d W d    d S 1 s#w   Y  d S r(   r"   )r+   r   r   r   r   r   &test_raises_when_sink_is_out_of_bounds7   r*   r,   c                 C   s\   t ddgddgg}t|dd| d}|jdksJ tddgddgg}t|j | d S )Nr      r   r   r   r   
flow_valuer   r   r   flowtoarrayr   r   resexpected_flowr   r   r   test_simple_graph?   s
   r6   c                 C   sd   t ddgddgg}tt|dd| djt sJ tddgddgg}tt|dd| djts0J d S )Nr   r-   r   r   )r   
isinstancer   r1   r   )r   r   r   r   r   test_return_typeJ   s    r8   c                 C   sh   t g dg dg dg}t|dd| d}|jdksJ tg dg d	g d
g}t|j | d S )N)r   r-   r   r   r   r'   r   r   r   r   r!   r   r'   r   r'   r   )r   r'   )r   r<   r   r/   r3   r   r   r   test_bottle_neck_graphR   s
   r=   c                 C   s   t g dg dg dg dg dg dg dg dg}t|dd	| d
}|jdks+J tg dg dg dg dg dg dg dg dg}t|j | d S )N)r   
   r   r   r>   r   r   r   )r   r   r>   r   r   r   r   r   )r   r   r   r>   r   r   r   r   )r   r   r   r   r   r   r   r>   )r   r   r   r>   r   r>   r   r   )r   r   r   r   r   r   r>   r   )r   r   r   r   r   r   r   r   r      r      )r   r>   r   r   r   r   r   )r   rA   r   r>   r   r   r   r   )r   r   rA   r   r   r   r   r>   )rA   r   r   r   r   r>   r   r   )r   r   r   r   rA   r   r>   r   )r   r   r   r   r   rA   r   r>   )r   r   r   rA   r   r   rA   r   r/   r3   r   r   r   test_backwards_flow]   s*   
rB   c              	   C   s   t g dg dg dg dg dg dg}t|dd| d	}|jd
ks%J tg dg dg dg dg dg dg}t|j | d S )N)r         r   r   r   )r   r   r>      r   r   )r      r   r      r   )r   r   	   r   r   r@   )r   r   r   r?   r   rF   )r   r   r   r   r   r   r   r-   r      )r   rE      r   r   r   )r   r   rE   r   r   )r   r   r   rJ   r   )r   rK   r   r   i   )r   r   rL   r?   r   rF   )r   r   r   ir   r/   r3   r   r   r   #test_example_from_clrs_chapter_26_1x   s"   
rO   c                 C   sb   t g dg dg dg dg}t|dd| d}|jdksJ tjdtjd}t|j | d S )	N)r   r-   r   r   )r   r   r   r   )r   r   rH   r'   r   r'   r   )rF   rF   r   )	r   r   r0   r   zerosint32r   r1   r2   r3   r   r   r   test_disconnected_graph   s   rR   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s<J ||
  }t|jj|j t|jj|j t|jj|j d S )Ni r   r   )shaper   r   )r   aranger   listrangeonesrQ   r   r   r0   	transposer   r1   dataindicesindptr)r   nrZ   r[   rY   r   r4   r5   r   r   r   "test_add_reverse_edges_large_graph   s   r]   za,b_data_expected)r   r   r!   r:   r;   )r   r!   r   r   r'   )rH      r?   )rF   r-      )rH   r^   r?   rF   r-   r_   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   rS   N)r   r   rQ   lenr   r   rY   )ab_data_expectedbr   r   r   test_add_reverse_edges   s   	rd   z
a,expectedr   r>   r9   )rF   r-   r   )r   r'   rF   r   r!   c                 C   $   t | tjd} t| }t|| d S Nr   )r   r   rQ   r   r   )ra   expectedrev_edge_ptrr   r   r   test_make_edge_pointers      ri   )r   r   r   r!   r!   c                 C   re   rf   )r   r   rQ   r	   r   )ra   rg   tailsr   r   r   test_make_tails   rj   rl   )#numpyr   numpy.testingr   r   scipy.sparser   r   r   scipy.sparse.csgraphr   scipy.sparse.csgraph._flowr   r   r	   methodsr   r   r    r#   r$   markparametrizer)   r,   r6   r8   r=   rB   rO   rR   r]   rd   ri   rl   r   r   r   r   <module>   sn    





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