
    Ug                     
   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 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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_matrix
csc_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    c/var/www/surfInsights/venv3-11/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QFQF+,,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QHq!f-RZ@@@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	"	" " "IIIyyy122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QFQF+,,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QFQF+,,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%   )r0   r   r   s      r   &test_raises_when_sink_is_out_of_boundsr2   7   s     
z	"	" 4 4QFQF+,,UAtF33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4r/   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     AA'((E
ua6
2
2
2C>QHq!fr1g.//Msx''))=99999    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   r4   r   r   r   r+   r   r   r   r   r$   r   r+   r   r+   r   )r   r+   )r   rC   r   r6   r:   s       r   test_bottle_neck_graphrD   J   s     			999iii899E
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   rF   r   r   r   )r   r   rF   r   r   r   r   r   )r   r   r   rF   r   r   r   r   )r   r   r   r   r   r   r   rF   )r   r   r   rF   r   rF   r   r   )r   r   r   r   r   r   rF   r   )r   r   r   r   r   r   r   r   r      r      )r   rF   r   r   r   r   r   )r   rI   r   rF   r   r   r   r   )r   r   rI   r   r   r   r   rF   )rI   r   r   r   r   rF   r   r   )r   r   r   r   rI   r   rF   r   )r   r   r   r   r   rI   r   rF   )r   r   r   rI   r   r   rI   r   r6   r:   s       r   test_backwards_flowrJ   U   s    2221111111112221111110002 3 3E 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   rF      r   r   )r      r   r      r   )r   r   	   r   r   rH   )r   r   r   rG   r   rO   )r   r   r   r   r   r   r   r4   r      )r   rN      r   r   r   )r   r   rN   r   r   )r   r   r   rS   r   )r   rT   r   r   i   )r   r   rU   rG   r   rO   )r   r   r   ir   r6   r:   s       r   #test_example_from_clrs_chapter_26_1rX   p   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   r4   r   r   )r   r   r   r   )r   r   rQ   r+   r   r+   r   )rO   rO   r   )	r   r   r7   r   zerosint32r   r8   r9   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   r7   	transposer   r8   dataindicesindptr)r   nre   rf   rd   r   r;   r<   s           r   "test_add_reverse_edges_large_graphrh      s    	Ai1ooGXd588nnAw.//F71q5)))Dgv.q!f===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$   rA   rB   )r   r$   r   r   r+   )rQ      rG   )rO   r4      )rQ   ri   rG   rO   r4   rj   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   r^   N)r   r   r[   lenr   r   rd   )ab_data_expectedbs      r   test_add_reverse_edgesrp      sP     	1BHSVVSVV,<===A1Aqv/////r>   z
a,expectedr   rF   r@   )rO   r4   r   )r   r+   rO   r   r$   c                 z    t          | t          j                  } t          |           }t	          ||           d S Nr   )r   r   r[   r   r   )rm   expectedrev_edge_ptrs      r   test_make_edge_pointersru      s;     	1BH%%%A&q))L|X.....r>   )r   r   r   r$   r$   c                 z    t          | t          j                  } t          |           }t	          ||           d S rr   )r   r   r[   r	   r   )rm   rs   tailss      r   test_make_tailsrx      s9     	1BH%%%ANNEuh'''''r>   )!numpyr   numpy.testingr   r   scipy.sparser   r   scipy.sparse.csgraphr   scipy.sparse.csgraph._flowr   r   r	   methodsr   r   r"   r&   r(   markparametrizer.   r2   r=   rD   rJ   rX   r\   rh   rp   ru   rx    r>   r   <module>r      sR       , , , , , ,  / / / / / / / / - - - - - -          7
#9 9 99 9 99 9 9" " "9 9 9 7++:::..6 6 /. ,+6 7++,,4 4 -, ,+4 7++: : ,+: 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>   