
    tKg                        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(                  j+                  de      ej(                  j+                  dg d      d               Zej(                  j+                  de      ej(                  j+                  dg d      d               Zej(                  j+                  de      d        Zej(                  j+                  de      d        Zej(                  j+                  de      d        Zej(                  j+                  de      d        Zej(                  j+                  de      d        Zej(                  j+                  de      d        Zej(                  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(                  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(                  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 y)+    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        y # 1 sw Y   y xY wNr      r
   method)pytestraises	TypeErrornparrayr   graphs    h/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/sparse/csgraph/tests/test_flow.pytest_raises_on_dense_inputr      sO    	y	!1a&1a&)*UAq!UAq8 
"	!	!s   8AA$c                      t        j                  t              5  t        ddgddgg      } t	        | dd       t	        | ddd       d d d        y # 1 sw Y   y xY wr   )r   r   r   r   r   r   s    r   test_raises_on_csc_inputr      sK    	y	!QFQF+,UAq!UAq8 
"	!	!   .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        y # 1 sw Y   y xY w)Nr   g      ?dtyper   r
   r   )r   r   
ValueErrorr   r   float64r   r   s    r   #test_raises_on_floating_point_inputr"      sQ    	z	"QHq!f-RZZ@UAq!UAq8 
#	"	"s   >A!!A*c                      t        j                  t              5  t        g dg dg      } t	        | dd       d d d        y # 1 sw Y   y xY w)N)r   r      )r$   r   r   r   r   r   r   r    r   r   r   s    r   test_raises_on_non_square_inputr&   "   s5    	z	"Iy12UAq! 
#	"	"s   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        y # 1 sw Y   y xY wr   r%   r   s    r   test_raises_when_source_is_sinkr(   (   sK    	z	"QFQF+,UAq!UAq8 
#	"	"r   r   source)r$      c                     t        j                  t              5  t        ddgddgg      }t	        || d|       d d d        y # 1 sw Y   y xY wNr   r   r   r%   )r)   r   r   s      r   (test_raises_when_source_is_out_of_boundsr.   /   sA     
z	"QFQF+,UFAf5 
#	"	"   !AAsinkc                     t        j                  t              5  t        ddgddgg      }t	        |d| |       d d d        y # 1 sw Y   y xY wr-   r%   )r0   r   r   s      r   &test_raises_when_sink_is_out_of_boundsr2   7   sA     
z	"QFQF+,UAtF3 
#	"	"r/   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                  j                         |       y )Nr      r   r   r   r   
flow_valuer   r   r   flowtoarrayr   r   resexpected_flows       r   test_simple_graphr=   ?   so     AA'(E
ua6
2C>>QHHq!fr1g./Msxx'')=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                  j                         |       y )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   sc     	9i89E
ua6
2C>>QHHiZ@AMsxx'')=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                  j                         |       y )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11121102 3E ua6
2C>>RHH8999999:< =M sxx'')=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                  j                         |       y )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
2C>>RHH2334235 6M sxx'')=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                  j                         |       y )	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\      sm     $$$& 'E ua6
2C>>QHHV2884Msxx'')=9r>   c                 l   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 ||j                         z
  }t        |j                  j                  |j                         t        |j                  j                  |j                         t        |j                  j                  |j                         y )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ii1oGXXd58nAw./F771q5)Dgv.q!f=E
uaQv
6C>>QEOO--Msxx}}m&8&89sxx'')>)>?sxx(<(<=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                  |       y)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      s;     	1BHHSVSV,<=A1Aqvv/r>   z
a,expectedr   rF   r@   )rO   r4   r   )r   r+   rO   r   r$   c                 h    t        | t        j                        } t        |       }t	        ||       y Nr   )r   r   r[   r   r   )rm   expectedrev_edge_ptrs      r   test_make_edge_pointersru      s(     	1BHH%A&q)L|X.r>   )r   r   r   r$   r$   c                 h    t        | t        j                        } t        |       }t	        ||       y rr   )r   r   r[   r	   r   )rm   rs   tailss      r   test_make_tailsrx      s'     	1BHH%ANE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      s    ,  / -  7
#999"9 7+:.6 / ,6 7+,4 - ,4 7+: ,: 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>   