
    e!h&                        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*                  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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_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        y # 1 sw Y   y xY wNr      r   method)pytestraises	TypeErrornparrayr   graphs    l/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/sparse/csgraph/tests/test_flow.pytest_raises_on_dense_inputr      sX    	y	! 91a&1a&)*UAq!UAq89 9 9s   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      sT    	y	! 9Aq6Aq6*+UAq!UAq89 9 9   .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#      sZ    	z	" 9As8aV,BJJ?UAq!UAq89 9 9s   >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'   "   s>    	z	" "9i01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)   (   sT    	z	" 9Aq6Aq6*+UAq!UAq89 9 9r   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/   /   sJ     
z	" 6Aq6Aq6*+UFAf56 6 6   !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&   )r1   r   r   s      r   &test_raises_when_sink_is_out_of_boundsr3   7   sJ     
z	" 4Aq6Aq6*+UAtF3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                  j                         |       y )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                     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 y )Nr   r5   r   r   )r   
isinstancer   r9   r   )r   r   s     r   test_return_typerB   J   sr    1v1v&'El5!Qv>CCYOOOAA'(El5!Qv>CCZ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                  j                         |       y )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                 ,   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   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           	         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   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                    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   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                 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   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tWf-aV<E
uaQv
6C>>QEOO--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                     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    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                 h    t        | t        j                        } t        |       }t	        ||       y Nr   )r   r   r_   r	   r   )rq   expectedrev_edge_ptrs      r   test_make_edge_pointersry      s(     	!288$A&q)L|X.r?   )r   r   r   r%   r%   c                 h    t        | t        j                        } t        |       }t	        ||       y rv   )r   r   r_   r
   r   )rq   rw   tailss      r   test_make_tailsr|      s'     	!288$ANE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 -  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?   