a
    h                     @   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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&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d.d/ Zejd0g gg fd ggg fd1ggd gfd d1gd2d ggd1d gfg d'g d3g d4gg d5fgd6d7 Zejd0g gg fd ggg fd1ggd gfd d1gd2d ggd d1gfg d'g d3g d4gg d8fgd9d: 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   s`   t tB tddgddgg} t| dd t| dddd W d    n1 sR0    Y  d S Nr      r	   method)pytestraises	TypeErrornparrayr   graph r   `/var/www/html/assistant/venv/lib/python3.9/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    n1 sP0    Y  d S r
   )r   r   r   r   r   r   r   r   r   test_raises_on_csc_input   s    r   c                  C   sd   t tF tddgddggtjd} t| dd t| dddd W d    n1 sV0    Y  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   sN   t t0 tg dg dg} t| dd W d    n1 s@0    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    n1 sP0    Y  d S r
   r   r   r   r   r   test_raises_when_source_is_sink(   s    r    r   source)r      c                 C   sR   t t4 tddgddgg}t|| d|d W d    n1 sD0    Y  d S Nr   r   r   r   )r!   r   r   r   r   r   (test_raises_when_source_is_out_of_bounds/   s    r%   sinkc                 C   sR   t t4 tddgddgg}t|d| |d W d    n1 sD0    Y  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s2J 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
    r1   c                 C   sh   t g dg dg dg}t|dd| d}|jdks8J 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   r5   r   r*   r.   r   r   r   test_bottle_neck_graphJ   s
    r6   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sVJ 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   r7   r   r   r   )r   r   r7   r   r   r   r   r   )r   r   r   r7   r   r   r   r   )r   r   r   r   r   r   r   r7   )r   r   r   r7   r   r7   r   r   )r   r   r   r   r   r   r7   r   )r   r   r   r   r   r   r   r   r      r      )r   r7   r   r   r   r   r   )r   r:   r   r7   r   r   r   r   )r   r   r:   r   r   r   r   r7   )r:   r   r   r   r   r7   r   r   )r   r   r   r   r:   r   r7   r   )r   r   r   r   r   r:   r   r7   )r   r   r   r:   r   r   r:   r   r*   r.   r   r   r   test_backwards_flowU   s*    
r;   c              	   C   s   t g dg dg dg dg dg dg}t|dd| d	}|jd
ksJJ 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   r7      r   r   )r      r   r      r   )r   r   	   r   r   r9   )r   r   r   r8   r   r?   )r   r   r   r   r   r   r   r(   r      )r   r>      r   r   r   )r   r   r>   r   r   )r   r   r   rC   r   )r   rD   r   r   i   )r   r   rE   r8   r   r?   )r   r   r   ir   r*   r.   r   r   r   #test_example_from_clrs_chapter_26_1p   s"    
rH   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   rA   r#   r   r#   r   )r?   r?   r   )	r   r   r+   r   Zzerosint32r   r,   r-   r.   r   r   r   test_disconnected_graph   s    rJ   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sxJ ||
  }t|jj|j t|jj|j t|jj|j d S )Ni r   r   )shaper   r   )r   Zaranger   listrangeZonesrI   r   r   r+   Z	transposer   r,   dataindicesindptr)r   nrO   rP   rN   r   r/   r0   r   r   r   "test_add_reverse_edges_large_graph   s    rR   za,b_data_expected)r   r   r   r3   r4   )r   r   r   r   r#   )rA      r8   )r?   r(      )rA   rS   r8   r?   r(   rT   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   rK   N)r   r   rI   lenr   r   rN   )aZb_data_expectedbr   r   r   test_add_reverse_edges   s    	rX   z
a,expectedr   r7   r2   )r?   r(   r   )r   r#   r?   r   r   c                 C   s$   t | tjd} t| }t|| d S Nr   )r   r   rI   r   r   )rV   expectedZrev_edge_ptrr   r   r   test_make_edge_pointers   s    r[   )r   r   r   r   r   c                 C   s$   t | tjd} t| }t|| d S rY   )r   r   rI   r   r   )rV   rZ   tailsr   r   r   test_make_tails   s    r]   )!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'   r1   r6   r;   rH   rJ   rR   rX   r[   r]   r   r   r   r   <module>   sh   



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