
    _Mh&                     V   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 Zd	 Zd
 Zd Zd Zej                            de          ej                            dg d          d                         Zej                            de          ej                            dg d          d                         Zej                            de          d             Zej                            de          d             Zej                            de          d             Zej                            de          d             Zej                            de          d             Zej                            de          d             Zej                            de          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"             Z ej                            d#g gg fd ggg fd$ggd gfd d$gd%d ggd$d gfg dg d&g d'gg d(fg          d)             Z!ej                            d#g gg fd ggg fd$ggd gfd d$gd%d ggd d$gfg dg d&g d'gg d*fg          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                      t          j        t                    5  t          j        ddgddgg          } t          | dd           t          | ddd           d d d            d S # 1 swxY w Y   d S Nr      r   method)pytestraises	TypeErrornparrayr   graphs    d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/sparse/csgraph/tests/test_flow.pytest_raises_on_dense_inputr      s    	y	!	! 9 91a&1a&)**UAq!!!UAq88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   ?A&&A*-A*c                      t          j        t                    5  t          ddgddgg          } t	          | dd           t	          | ddd           d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r   r   s    r   test_raises_on_csc_inputr      s    	y	!	! 9 9Aq6Aq6*++UAq!!!UAq88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9   :A!!A%(A%c                      t          j        t                    5  t          ddgddggt          j                  } t          | dd           t          | ddd           d d d            d S # 1 swxY w Y   d S )Nr   g      ?dtyper   r   r   )r   r   
ValueErrorr   r   float64r   r   s    r   #test_raises_on_floating_point_inputr#      s    	z	"	" 9 9As8aV,BJ???UAq!!!UAq88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   AA--A14A1c                      t          j        t                    5  t          g dg dg          } t	          | dd           d d d            d S # 1 swxY w Y   d S )N)r   r      )r%   r   r   r   r   r   r   r!   r   r   r   s    r   test_raises_on_non_square_inputr'   "   s    	z	"	" " "999iii011UAq!!!" " " " " " " " " " " " " " " " " "s   'AAAc                      t          j        t                    5  t          ddgddgg          } t	          | dd           t	          | ddd           d d d            d S # 1 swxY w Y   d S r   r&   r   s    r   test_raises_when_source_is_sinkr)   (   s    	z	"	" 9 9Aq6Aq6*++UAq!!!UAq88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9r   r   source)r%      c                     t          j        t                    5  t          ddgddgg          }t	          || d|           d d d            d S # 1 swxY w Y   d S Nr   r   r   r&   )r*   r   r   s      r   (test_raises_when_source_is_out_of_boundsr/   /   s     
z	"	" 6 6Aq6Aq6*++UFAf55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6   )AAAsinkc                     t          j        t                    5  t          ddgddgg          }t	          |d| |           d d d            d S # 1 swxY w Y   d S r.   r&   )r1   r   r   s      r   &test_raises_when_sink_is_out_of_boundsr3   7   s     
z	"	" 4 4Aq6Aq6*++UAtF33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4r0   c                     t          ddgddgg          }t          |dd|           }|j        dk    sJ t          j        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_flows       r   test_simple_graphr>   ?   s     1v1v&''E
ua6
2
2
2C>QHq!fr1g.//Msx''))=99999    c                    t          ddgddgg          }t          t          |dd|           j        t                     sJ t	          ddgddgg          }t          t          |dd|           j        t                    sJ d S )Nr   r5   r   r   )r   
isinstancer   r9   r   )r   r   s     r   test_return_typerB   J   s    1v1v&''El5!Qv>>>CYOOOOOAA'((El5!Qv>>>CZPPPPPPPr?   c                     t          g dg dg dg          }t          |dd|           }|j        dk    sJ t          j        g dg d	g d
g          }t          |j                                        |           d S )N)r   r5   r   r   r   r,   r   r   r   r   r%   r   r,   r   r,   r   )r   r,   )r   rG   r   r7   r;   s       r   test_bottle_neck_graphrH   R   s     yyy)))YYY788E
ua6
2
2
2C>QHiiiZZZ@AAMsx''))=99999r?   c                 :   t          g dg dg dg dg dg dg dg dg          }t          |dd	| 
          }|j        dk    sJ t          j        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   rJ   r   r   r   )r   r   rJ   r   r   r   r   r   )r   r   r   rJ   r   r   r   r   )r   r   r   r   r   r   r   rJ   )r   r   r   rJ   r   rJ   r   r   )r   r   r   r   r   r   rJ   r   )r   r   r   r   r   r   r   r   r      r      )r   rJ   r   r   r   r   r   )r   rM   r   rJ   r   r   r   r   )r   r   rM   r   r   r   r   rJ   )rM   r   r   r   r   rJ   r   r   )r   r   r   r   rM   r   rJ   r   )r   r   r   r   r   rM   r   rJ   )r   r   r   rM   r   r   rM   r   r7   r;   s       r   test_backwards_flowrN   ]   s    111000000000111000000///1 2 2E ua6
2
2
2C>RH888999999999999999999:::< = =M sx''))=99999r?   c           	      "   t          g dg dg dg dg dg dg          }t          |dd| 	          }|j        d
k    sJ t          j        g dg dg dg dg dg dg          }t          |j                                        |           d S )N)r         r   r   r   )r   r   rJ      r   r   )r      r   r      r   )r   r   	   r   r   rL   )r   r   r   rK   r   rS   )r   r   r   r   r   r   r   r5   r      )r   rR      r   r   r   )r   r   rR   r   r   )r   r   r   rW   r   )r   rX   r   r   i   )r   r   rY   rK   r   rS   )r   r   r   ir   r7   r;   s       r   #test_example_from_clrs_chapter_26_1r\   x   s    
 ++++++******))))))+ , ,E ua6
2
2
2C>RH2223333334442223335 6 6M sx''))=99999r?   c                 
   t          g dg dg dg dg          }t          |dd|           }|j        dk    sJ t          j        dt          j                  }t          |j                                        |           d S )	N)r   r5   r   r   )r   r   r   r   )r   r   rU   r,   r   r,   r   )rS   rS   r   )	r   r   r8   r   zerosint32r   r9   r:   r;   s       r   test_disconnected_graphr`      s     |||#||#||#||% & &E ua6
2
2
2C>QHV28444Msx''))=99999r?   c                 >   d}t          j        d|          }t          j        t          t	          |                    |dz
  gz             }t          j        |dz
  t           j                  }t          |||f||f          }t          |d|dz
  |           }|j	        dk    sJ ||
                                z
  }t          |j        j        |j                   t          |j        j        |j                   t          |j        j        |j                   d S )Ni r   r   )shaper   r   )r   aranger   listrangeonesr_   r   r   r8   	transposer   r9   dataindicesindptr)r   nri   rj   rh   r   r<   r=   s           r   "test_add_reverse_edges_large_graphrl      s    	Ai1ooGXd588nnAw.//F71q5)))DtWf-aV<<<E
uaQv
6
6
6C>QEOO---Msx}m&8999sx')>???sx(<=====r?   za,b_data_expected)r   r   r%   rE   rF   )r   r%   r   r   r,   )rU      rK   )rS   r5      )rU   rm   rK   rS   r5   rn   r   r   c                     t          | t          j        t          |           t          |           f          } t	          |           }t          |j        |           dS )zRTest that the reversal of the edges of the input graph works
    as expected.
    )r    rb   N)r   r   r_   lenr   r   rh   )ab_data_expectedbs      r   test_add_reverse_edgesrt      sP     	!28CFFCFF+;<<<A1Aqv/////r?   z
a,expectedr   rJ   rD   )rS   r5   r   )r   r,   rS   r   r%   c                 z    t          | t          j                  } t          |           }t	          ||           d S Nr   )r   r   r_   r	   r   )rq   expectedrev_edge_ptrs      r   test_make_edge_pointersry      s;     	!28$$$A&q))L|X.....r?   )r   r   r   r%   r%   c                 z    t          | t          j                  } t          |           }t	          ||           d S rv   )r   r   r_   r
   r   )rq   rw   tailss      r   test_make_tailsr|      s9     	!28$$$ANNEuh'''''r?   )#numpyr   numpy.testingr   r   scipy.sparser   r   r   scipy.sparse.csgraphr   scipy.sparse.csgraph._flowr   r	   r
   methodsr   r   r#   r'   r)   markparametrizer/   r3   r>   rB   rH   rN   r\   r`   rl   rt   ry   r|    r?   r   <module>r      s       , , , , , ,  9 9 9 9 9 9 9 9 9 9 - - - - - -          7
#9 9 99 9 99 9 9" " "9 9 9 7++:::..6 6 /. ,+6 7++,,4 4 -, ,+4 7++: : ,+: 7++Q Q ,+Q 7++: : ,+: 7++: : ,+:4 7++: : ,+:* 7++
: 
: ,+
: 7++> > ,+> ,T2JcA3ZiiIII&8iiIII&(@(@(@A	/C D D
0 0D D
0 T2JcUBKcUQCL!fr1gAiiIII&8(  / / / T2JcUBKcUQCL!fr1gAiiIII&8(  ( ( ( ( (r?   