o
    Ö­j&  ã                   @   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   úa/var/www/html/CropPilot/venv/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   iíÿÿÿéüÿÿÿr   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    





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