§
    ¡é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Ý”˜1˜a˜& 1 a &Ð)Ñ*Ô*ˆÝ�U˜A˜qÑ!Ô!Ð!Ý�U˜A˜q¨Ð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 ˜F Q¨ FÐ+Ñ,Ô,ˆÝ�U˜A˜qÑ!Ô!Ð!Ý�U˜A˜q¨Ð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 ˜H q¨! fÐ-µR´ZÐ@Ñ@Ô@ˆÝ�U˜A˜qÑ!Ô!Ð!Ý�U˜A˜q¨Ð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Ñ	"Ô	"ð "ð "Ý˜I˜I˜I y y yÐ1Ñ2Ô2ˆÝ�U˜A˜qÑ!Ô!Ð!ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð "ð "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 ˜F Q¨ FÐ+Ñ,Ô,ˆÝ�U˜A˜qÑ!Ô!Ð!Ý�U˜A˜q¨Ð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 ˜F Q¨ FÐ+Ñ,Ô,ˆÝ�U˜F A¨fÐ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 ˜F Q¨ FÐ+Ñ,Ô,ˆÝ�U˜A˜t¨FÐ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Ý
�u˜a ¨6Ð
2Ñ
2Ô
2€CØŒ>˜QÒÐÐÐÝ”H˜q !˜f r¨1 gÐ.Ñ/Ô/€MÝ�s”x×'Ò'Ñ)Ô)¨=Ñ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“   € õ ˜	˜	˜	 9 9 9¨i¨i¨iÐ8Ñ9Ô9€EÝ
�u˜a ¨6Ð
2Ñ
2Ô
2€CØŒ>˜QÒÐÐÐÝ”H˜i˜i˜i¨¨¨°Z°Z°ZÐ@ÑAÔA€MÝ�s”x×'Ò'Ñ)Ô)¨=Ñ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ô 3€Eõ �u˜a ¨6Ð
2Ñ
2Ô
2€CØŒ>˜RÒÐÐÐÝ”HÐ8Ð8Ð8Ø9Ð9Ð9Ø9Ð9Ð9Ø9Ð9Ð9Ø9Ð9Ð9Ø9Ð9Ð9Ø9Ð9Ð9Ø:Ð:Ð:ð<ñ =ô =€Mõ �s”x×'Ò'Ñ)Ô)¨=Ñ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   iíÿÿÿéüÿÿÿr   r6   r:   s       r   Ú#test_example_from_clrs_chapter_26_1rX   p   së   € õ
 Ð,Ð,Ð,Ø,Ð,Ð,Ø+Ð+Ð+Ø+Ð+Ð+Ø*Ð*Ð*Ø*Ð*Ð*ð,ñ -ô -€Eõ �u˜a ¨6Ð
2Ñ
2Ô
2€CØŒ>˜RÒÐÐÐÝ”HÐ2Ð2Ð2Ø3Ð3Ð3Ø3Ð3Ð3Ø4Ð4Ð4Ø2Ð2Ð2Ø3Ð3Ð3ð5ñ 6ô 6€Mõ �s”x×'Ò'Ñ)Ô)¨=Ñ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õ �u˜a ¨6Ð
2Ñ
2Ô
2€CØŒ>˜QÒÐÐÐÝ”H˜V­2¬8Ð4Ñ4Ô4€MÝ�s”x×'Ò'Ñ)Ô)¨=Ñ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˜˜1‰oŒo€GÝŒX•d�5 ™8œ8‘n”n¨¨A© wÑ.Ñ/Ô/€FÝŒ7�1�q‘5¥¤Ð)Ñ)Ô)€DÝ˜˜g vÐ.°q¸!°fÐ=Ñ=Ô=€EÝ
�u˜a  Q¡¨vÐ
6Ñ
6Ô
6€CØŒ>˜QÒÐÐÐØ˜EŸOšOÑ-Ô-Ñ-€MÝ�s”x”} mÔ&8Ñ9Ô9Ð9Ý�s”xÔ'¨Ô)>Ñ?Ô?Ð?Ý�s”x”¨Ô(<Ñ=Ô=Ð=Ð=Ð=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   € õ 	�1�BœH­S°©V¬VµS¸±V´VÐ,<Ð=Ñ=Ô=€AÝ˜1ÑÔ€AÝ�q”v˜Ñ/Ô/Ð/Ð/Ð/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;   € õ 	�1�BœHÐ%Ñ%Ô%€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   € õ 	�1�BœHÐ%Ñ%Ô%€AÝ˜‰NŒN€EÝ�u˜hÑ'Ô'Ð'Ð'Ð'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Ñ+Ô+ð>ð >ñ ,Ô+ð>ð „×ÒÐ,Ø€Tˆ2€JØ€cˆAˆ3€Z�ÐØ€i€i���˜I˜I˜IÐ&¨¨¨Ð8Ø€i€i���˜I˜I˜IÐ&Ð(@Ð(@Ð(@ÐAð	/Cñ Dô Dð
0ð 0ñDô Dð
0ð „×Ò˜Ø€Tˆ2€JØ€c€UˆB€KØ€c€UˆQˆC€LØˆ!€fˆr�1ˆgÐ˜˜A˜ÐØ€i€i���˜I˜I˜IÐ&¨¨¨Ð8ð(ñ ô ð/ð /ñô ð/ð „×Ò˜Ø€Tˆ2€JØ€c€UˆB€KØ€c€UˆQˆC€LØˆ!€fˆr�1ˆgÐ˜˜A˜ÐØ€i€i���˜I˜I˜IÐ&¨¨¨Ð8ð(ñ ô ð(ð (ñô ð(ð (ð (r>   