
    (ph&                        S SK rS SKJr  S SKrS SKJrJrJr  S SK	J
r
  S SKJrJrJr  SS/rS rS	 rS
 rS rS r\R*                  R-                  S\5      \R*                  R-                  S/ SQ5      S 5       5       r\R*                  R-                  S\5      \R*                  R-                  S/ SQ5      S 5       5       r\R*                  R-                  S\5      S 5       r\R*                  R-                  S\5      S 5       r\R*                  R-                  S\5      S 5       r\R*                  R-                  S\5      S 5       r\R*                  R-                  S\5      S 5       r\R*                  R-                  S\5      S 5       r\R*                  R-                  S\5      S 5       r\R*                  R-                  S/ // 4S /S /// 4/ SQ/ SQ/ SQ// SQ4/ SQ/ S Q/ SQ// S!Q4/5      S" 5       r \R*                  R-                  S#/ // 4S /// 4S$//S /4S S$/S%S //S$S /4/ SQ/ S&Q/ S'Q// S(Q4/5      S) 5       r!\R*                  R-                  S#/ // 4S /// 4S$//S /4S S$/S%S //S S$/4/ SQ/ S&Q/ S'Q// S*Q4/5      S+ 5       r"g),    N)assert_array_equal)	csr_array	csc_array
csr_matrix)maximum_flow)_add_reverse_edges_make_edge_pointers_make_tailsedmonds_karpdinicc                      [         R                  " [        5         [        R                  " SS/SS//5      n [        U SS5        [        U SSSS9  S S S 5        g ! , (       d  f       g = fNr      r   method)pytestraises	TypeErrornparrayr   graphs    W/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/csgraph/tests/test_flow.pytest_raises_on_dense_inputr      sO    	y	!1a&1a&)*UAq!UAq8 
"	!	!s   6A
A(c                      [         R                  " [        5         [        SS/SS//5      n [	        U SS5        [	        U SSSS9  S S S 5        g ! , (       d  f       g = fr   )r   r   r   r   r   r   s    r   test_raises_on_csc_inputr      sK    	y	!Aq6Aq6*+UAq!UAq8 
"	!	!   +A
Ac                      [         R                  " [        5         [        SS/SS//[        R
                  S9n [        U SS5        [        U SSSS9  S S S 5        g ! , (       d  f       g = f)Nr   g      ?dtyper   r   r   )r   r   
ValueErrorr   r   float64r   r   s    r   #test_raises_on_floating_point_inputr#      sQ    	z	"As8aV,BJJ?UAq!UAq8 
#	"	"s   8A
A*c                      [         R                  " [        5         [        / SQ/ SQ/5      n [	        U SS5        S S S 5        g ! , (       d  f       g = f)N)r   r      )r%   r   r   r   r   r   r   r!   r   r   r   s    r   test_raises_on_non_square_inputr'   "   s5    	z	"9i01UAq! 
#	"	"s   A
Ac                      [         R                  " [        5         [        SS/SS//5      n [	        U SS5        [	        U SSSS9  S S S 5        g ! , (       d  f       g = fr   r&   r   s    r   test_raises_when_source_is_sinkr)   (   sK    	z	"Aq6Aq6*+UAq!UAq8 
#	"	"r   r   source)r%      c                     [         R                  " [        5         [        SS/SS//5      n[	        X SUS9  S S S 5        g ! , (       d  f       g = fNr   r   r   r&   )r*   r   r   s      r   (test_raises_when_source_is_out_of_boundsr/   /   s?     
z	"Aq6Aq6*+UAf5 
#	"	"   A
Asinkc                     [         R                  " [        5         [        SS/SS//5      n[	        USXS9  S S S 5        g ! , (       d  f       g = fr.   r&   )r1   r   r   s      r   &test_raises_when_sink_is_out_of_boundsr3   7   s?     
z	"Aq6Aq6*+UAt3 
#	"	"r0   c                     [        SS/SS//5      n[        USSU S9nUR                  S:X  d   e[        R                  " SS/SS//5      n[        UR                  R                  5       U5        g )Nr      r   r   r   r   
flow_valuer   r   r   flowtoarrayr   r   resexpected_flows       r   test_simple_graphr>   ?   so     1v1v&'E
ua6
2C>>QHHq!fr1g./Msxx'')=9    c           	          [        SS/SS//5      n[        [        USSU S9R                  [         5      (       d   e[	        SS/SS//5      n[        [        USSU S9R                  [        5      (       d   eg )Nr   r5   r   r   )r   
isinstancer   r9   r   )r   r   s     r   test_return_typerB   J   sx    1v1v&'El5!Qv>CCYOOOOAA'(El5!Qv>CCZPPPPr?   c                     [        / SQ/ SQ/ SQ/5      n[        USSU S9nUR                  S:X  d   e[        R                  " / SQ/ S	Q/ S
Q/5      n[        UR                  R                  5       U5        g )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   sc     y)Y78E
ua6
2C>>QHHiZ@AMsxx'')=9r?   c                 *   [        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        USS	U S
9nUR                  S:X  d   e[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        UR                  R                  5       U5        g )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000100/1 2E ua6
2C>>RHH8999999:< =M sxx'')=9r?   c           	         [        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        USSU S	9nUR                  S
:X  d   e[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        UR                  R                  5       U5        g )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
2C>>RHH2334235 6M sxx'')=9r?   c                     [        / SQ/ SQ/ SQ/ SQ/5      n[        USSU S9nUR                  S:X  d   e[        R                  " S[        R
                  S9n[        UR                  R                  5       U5        g )	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`      sm     |###% &E ua6
2C>>QHHV2884Msxx'')=9r?   c                 \   Sn[         R                  " SU5      n[         R                  " [        [	        U5      5      US-
  /-   5      n[         R
                  " US-
  [         R                  S9n[        XBU4X4S9n[        USUS-
  U S9nUR                  S:X  d   eXUR                  5       -
  n[        UR                  R                  UR                  5        [        UR                  R                  UR                  5        [        UR                  R                  UR                  5        g )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ii1oGXXd58nAw./F771q5)Dtf-aV<E
uaQv
6C>>QOO--Msxx}}m&8&89sxx'')>)>?sxx(<(<=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                     [        U [        R                  [        U 5      [        U 5      4S9n [	        U 5      n[        UR                  U5        g)zJTest 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      s;     	!288CFCF+;<A1Aqvv/r?   z
a,expectedr   rJ   rD   )rS   r5   r   )r   r,   rS   r   r%   c                 `    [        U [        R                  S9n [        U 5      n[	        X!5        g Nr   )r   r   r_   r	   r   )rq   expectedrev_edge_ptrs      r   test_make_edge_pointersry      s&     	!288$A&q)L|.r?   )r   r   r   r%   r%   c                 `    [        U [        R                  S9n [        U 5      n[	        X!5        g rv   )r   r   r_   r
   r   )rq   rw   tailss      r   test_make_tailsr|      s%     	!288$ANEu'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 -  7
#999"9 7+:.6 / ,6 7+,4 - ,4 7+: ,: 7+Q ,Q 7+: ,: 7+: ,:4 7+: ,:* 7+
: ,
: 7+> ,> ,T2JcA3ZI&8I&(@A	/C D
0D
0 T2JcUBKcUQCL!fr1gAI&8( // T2JcUBKcUQCL!fr1gAI&8( ((r?   