Ë
    0Ò^jU0  ã                   óà  — d dl mZ d dlZd dlmZmZ d dlZd dlm	Z	m
Z
mZ d dlmZmZ d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej4                  j7                  dg d¢«      d„ «       Zej4                  j7                  dg d¢g d¢g d¢gg d¢g d¢g d¢gg d¢g d¢g d¢gg d¢g d¢gg d¢g d¢gdd gdd gd d ggg«      d!„ «       Zd"„ Zd#„ Zd$„ Z  e! ed%dgg d&¢g d'¢g d(¢gg d)¢fg d*¢g d+¢g d,¢gg d-¢fg d.¢g d/¢g d0¢gg d1¢fg d2¢g d3¢g d4¢gg d5¢fd6 e"d7«       e"d7«      g e"d7«       e"d7«      dg e"d7«      d8 e"d7«      ggg d1¢fg«      «      Z#ej4                  j7                  d9e#«      d:„ «       Z$y);é    )ÚproductN)Úassert_array_equalÚassert_equal)Ú	csr_arrayÚ	coo_arrayÚdiags_array)Úmaximum_bipartite_matchingÚ"min_weight_full_bipartite_matchingc                  ó¬   — t        j                  t        «      5  t        j                  ddgddgg«      } t        | «       d d d «       y # 1 sw Y   y xY w)Nr   é   )ÚpytestÚraisesÚ	TypeErrorÚnpÚarrayr	   )Úgraphs    ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/scipy/sparse/csgraph/tests/test_matching.pyÚ5test_maximum_bipartite_matching_raises_on_dense_inputr      sF   € Ü	�‰”yÓ	!ñ *Ü—‘˜1˜a˜& 1 a &Ð)Ó*ˆÜ" 5Ô)÷*÷ *ñ *ús   š'A
Á
Ac                  ó¨   — t        d«      } t        | d¬«      }t        | d¬«      }t        j                  g «      }t	        ||«       t	        ||«       y )N©r   r   Úrow©Ú	perm_typeÚcolumn©r   r	   r   r   r   ©r   ÚxÚyÚexpected_matchings       r   Ú+test_maximum_bipartite_matching_empty_graphr       sH   € Ü�fÓ€EÜ" 5°EÔ:€AÜ" 5°HÔ=€AÜŸ™ ›ÐÜÐ(¨!Ô,ÜÐ(¨!Õ,ó    c                  óÎ   — t        d«      } t        | d¬«      }t        | d¬«      }t        t        j                  g «      |«       t        t        j                  ddg«      |«       y )N©é   r   r   r   r   éÿÿÿÿ©r   r	   r   r   r   ©r   r   r   s      r   Ú4test_maximum_bipartite_matching_empty_left_partitionr(      sM   € Ü�fÓ€EÜ" 5°EÔ:€AÜ" 5°HÔ=€AÜ”r—x‘x “| QÔ'Ü”r—x‘x  R Ó)¨1Õ-r!   c                  óÎ   — t        d«      } t        | d¬«      }t        | d¬«      }t        t        j                  g d¢«      |«       t        t        j                  g «      |«       y )N©r   é   r   r   r   )r%   r%   r%   r&   r'   s      r   Ú5test_maximum_bipartite_matching_empty_right_partitionr,   $   sI   € Ü�fÓ€EÜ" 5°EÔ:€AÜ" 5°HÔ=€AÜ”r—x‘x¢Ó-¨qÔ1Ü”r—x‘x “| QÕ'r!   c                  óÒ   — t        d«      } t        | d¬«      }t        | d¬«      }t        t        j                  ddg«      |«       t        t        j                  ddg«      |«       y )N©r$   r$   r   r   r   r%   r&   r'   s      r   Ú3test_maximum_bipartite_matching_graph_with_no_edgesr/   ,   sR   € Ü�fÓ€EÜ" 5°EÔ:€AÜ" 5°HÔ=€AÜ”r—x‘x  R Ó)¨1Ô-Ü”r—x‘x  R Ó)¨1Õ-r!   c                  ó¸   — t        ddgddgg«      } t        | d¬«      }t        | d¬«      }t        j                  ddg«      }t	        ||«       t	        ||«       y )Nr   r   r   r   r   r   r   s       r   Ú>test_maximum_bipartite_matching_graph_that_causes_augmentationr1   4   s\   € ô ˜˜1�v  1˜vÐ&Ó'€EÜ" 5°HÔ=€AÜ" 5°EÔ:€AÜŸ™ ! Q Ó(ÐÜÐ(¨!Ô,ÜÐ(¨!Õ,r!   c                  óä   — t        ddgddgddgg«      } t        | d¬«      }t        | d¬«      }t        t        j                  g d¢«      |«       t        t        j                  ddg«      |«       y )Nr   r   r   r   r   ©r   r%   r   r$   r&   r'   s      r   ÚAtest_maximum_bipartite_matching_graph_with_more_rows_than_columnsr4   ?   sa   € Ü˜˜1�v  1˜v¨¨1 vÐ.Ó/€EÜ" 5°HÔ=€AÜ" 5°EÔ:€AÜ”r—x‘x¢
Ó+¨QÔ/Ü”r—x‘x  A Ó'¨Õ+r!   c                  óÞ   — t        g d¢g d¢g«      } t        | d¬«      }t        | d¬«      }t        t        j                  ddg«      |«       t        t        j                  g d¢«      |«       y )	N)r   r   r   ©r   r   r   r   r   r   r   r$   r3   r&   r'   s      r   ÚAtest_maximum_bipartite_matching_graph_with_more_columns_than_rowsr7   G   sS   € Ü’y¢)Ð,Ó-€EÜ" 5°HÔ=€AÜ" 5°EÔ:€AÜ”r—x‘x  A Ó'¨Ô+Ü”r—x‘x¢
Ó+¨QÕ/r!   c                  óÎ   — ddg} ddg}g d¢}t        | ||fd¬«      }t        |d¬«      }t        |d¬«      }t        j                  ddg«      }t	        ||«       t	        ||«       y )	Nr   r   )r   r   r$   r.   ©Úshaper   r   r   r   )ÚdataÚindicesÚindptrr   r   r   r   s          r   Ú=test_maximum_bipartite_matching_explicit_zeros_count_as_edgesr>   O   sm   € Øˆqˆ6€DØ�!ˆf€GÚ€FÜ�t˜W fÐ-°VÔ<€EÜ" 5°EÔ:€AÜ" 5°HÔ=€AÜŸ™ ! Q Ó(ÐÜÐ(¨!Ô,ÜÐ(¨!Õ,r!   c                  óâ  — t        j                  dt        ¬«      } g d¢}g d¢}t        | ||fd¬«      }t	        |d¬«      }t	        |d	¬«      }|d
k7  j                  «       dk(  sJ ‚|d
k7  j                  «       dk(  sJ ‚t        t        |j                  d   «      |«      D ]  \  }}|d
k7  sŒ|||f   rŒJ ‚ t        |t        |j                  d   «      «      D ]  \  }}|d
k7  sŒ|||f   rŒJ ‚ y )Né2   ©Údtype)2é   é   é   é   é   é   rF   r+   é   é
   rH   é   rC   rD   é   rH   rL   é   é   rF   r+   é   r+   rL   rM   rC   rD   rE   rF   rG   rH   rF   r+   rI   rJ   rH   rK   rC   rD   rL   rH   rL   rM   rN   rF   r+   rO   r+   rL   rM   )r   rH   é   rJ   rJ   rO   rN   rF   rF   rG   é   é   é    é#   rT   é(   é-   é/   rW   é0   r@   )rN   rQ   r9   r   r   r   r%   rL   r   r   )	r   ÚonesÚintr   r	   ÚsumÚzipÚranger:   )r;   r<   r=   r   r   r   ÚuÚvs           r   Ú5test_maximum_bipartite_matching_feasibility_of_resultr`   [   sú   € ä�7‰7�2œSÔ!€DòJ€Gò€Fä�t˜W fÐ-°XÔ>€EÜ" 5°EÔ:€AÜ" 5°HÔ=€AØ�‰G�=‰=‹?˜bÒ Ð Ð Ø�‰G�=‰=‹?˜bÒ Ð Ð ä”E˜%Ÿ+™+ a™.Ó)¨1Ó-ò ‰ˆˆ1Ø�‹7Ø˜˜A˜“;Ð�;ðô �A”u˜UŸ[™[¨™^Ó,Ó-ò ‰ˆˆ1Ø�‹7Ø˜˜A˜“;Ð�;ñr!   c                  óø  — t         j                  j                  d«       t        t        j                  d«      dd¬«      } t         j                  j                  d«      }t         j                  j                  d«      }t        j                  d«      }|}t        j                  dt        ¬«      }t        |||ff«      }|}t        j                  d«      }t        j                  dt        ¬«      }	t        |	||ff«      }
|| z  |
z  }t        |d¬«      }t        j                  d«      }|}t        j                  dt        ¬«      }t        |||ff«      }||z  }t        |d	¬«      }|}t        j                  d«      }t        j                  dt        ¬«      }	t        |	||ff«      }
||
z  }t        t        |j                  «       dk(  «      d
«       t        t        |j                  «       dk(  «      d
«       y )Né*   rQ   r   Úcsr)ÚoffsetsÚformatrA   r   r   r   F)r   ÚrandomÚseedr   rY   ÚpermutationÚarangerZ   r   r	   r   ÚanyÚdiagonal)ÚAÚ	rand_permÚ
rand_perm2ÚRrowÚRcolÚRdataÚRmatÚCrowÚCcolÚCdataÚCmatÚBÚpermÚC1Úperm2ÚC2s                   r   ÚFtest_matching_large_random_graph_with_one_edge_incident_to_each_vertexr|   q   s•  € Ü‡I�I‡N�N�2ÔÜ”B—G‘G˜B“K¨°5Ô9€AÜ—	‘	×%Ñ% bÓ)€IÜ—‘×&Ñ& rÓ*€Jä�9‰9�R‹=€DØ€DÜ�G‰G�BœcÔ"€EÜ�e˜d D˜\Ð*Ó+€Dà€DÜ�9‰9�R‹=€DÜ�G‰G�BœcÔ"€EÜ�e˜d D˜\Ð*Ó+€Dàˆq‰�4‰€Aô & a°5Ô9€DÜ�9‰9�R‹=€DØ€DÜ�G‰G�BœcÔ"€EÜ�e˜d D˜\Ð*Ó+€DØ	�‰€Bô ' q°HÔ=€EØ€DÜ�9‰9�R‹=€DÜ�G‰G�BœcÔ"€EÜ�e˜d D˜\Ð*Ó+€DØ	
ˆT‰€Bô ”�R—[‘[“] aÑ'Ó(¨%Ô0Ü”�R—[‘[“] aÑ'Ó(¨%Õ0r!   znum_rows,num_cols)r   r#   r*   c                 óð   — t        || f«      }t        || f«      }t        |«      \  }}t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        |«      \  }}t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚y )Nr   )r   r   r
   Úlen)Únum_rowsÚnum_colsÚbiadjacencyÚbiadjacency1Úrow_indÚcol_indÚrow_ind1Úcol_ind1s           r   Ú+test_min_weight_full_matching_trivial_graphr‡   ˜   s†   € ä˜X xÐ0Ó1€KÜ˜h¨Ð1Ó2€Lä9¸+ÓFÑ€GˆWÜˆw‹<˜1ÒÐÐÜˆw‹<˜1ÒÐÐä;¸LÓIÑ€HˆhÜˆx‹=˜AÒÐÐÜˆx‹=˜AÒÐÑr!   r�   )r   r   r   )r   r   r   r6   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r$   r   r   )r   r   r   )r   r$   r   r   r$   rH   c                 ó  — t        j                  t        «      5  t        t	        | «      «       d d d «       t        j                  t        «      5  t        t        | «      «       d d d «       y # 1 sw Y   Œ@xY w# 1 sw Y   y xY w©N)r   r   Ú
ValueErrorr
   r   r   ©r�   s    r   Ú1test_min_weight_full_matching_infeasible_problemsrŒ   ¦   sn   € ô 
�‰”zÓ	"ñ CÜ*¬9°[Ó+AÔB÷Cä	�‰”zÓ	"ñ CÜ*¬9°[Ó+AÔB÷Cð C÷Cð Cú÷Cð Cús   šA.ÁA:Á.A7Á:Bc                  óÂ  — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g«      } t        j                  t        d¬«      5  t        t        | «      «       d d d «       t        j                  t        d¬«      5  t        t        | «      «       d d d «       y # 1 sw Y   ŒBxY w# 1 sw Y   y xY w)N)ç        rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   çü©ñÒMbP?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   r�   )rŽ   g»ì|ä{ë½?rŽ   rŽ   gCðÏw}‹?gN•RDD9³?rŽ   rŽ   rŽ   g½­p¢ÈÀç?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   g<(@¹òé?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   gI}þ 7èê?rŽ   rŽ   rŽ   rŽ   gÇ	vˆ?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   gV¾€ÁâŽê?rŽ   rŽ   rŽ   gÛY‰³\½?rŽ   rŽ   rŽ   gü!‘«š¼?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )gj]8J=È?rŽ   gÉ$]ë}¤?rŽ   rŽ   rŽ   rŽ   rŽ   gâ¦«à\Hè?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   gYI!åæ?rŽ   rŽ   rŽ   rŽ   rŽ   g³ðÿ$œ?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )g-™ Oé?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   gˆö-J;ûÂ?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   gzm�)Ô»?rŽ   rŽ   rŽ   gËz{!.Šì?rŽ   rŽ   rŽ   güoFI%°?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   g-Æe�nä?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   g¸ÐðÁÆÐç?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   gÂÅâ§7¹?rŽ   rŽ   gýqÒfbÛÇ?g¹]!¹Ñ?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   g‡Ÿæ�kç?rŽ   rŽ   gT#P¹Ý?g:àãáw²Ø?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   )gvÁCÅöâÒ?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   gŽŒ8»¾¸?rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   rŽ   zno full matching exists)Úmatch)r   Úasarrayr   r   rŠ   r
   r   r   )Úas    r   Ú.test_min_weight_full_matching_large_infeasibler“   ¶   s   € ä
�
‰
ò	Bò	Bò	Bò	Bò	Bò	Bò	Bò	Bò	Bò	"ò	Eò	Eò	ò	Jò	Jò	Jò	Eò	Bò	Eò	Fò	Gò	Eð[/
ó /	€Aô` 
�‰”zÐ)BÔ	Cñ 9Ü*¬9°Q«<Ô8÷9ä	�‰”zÐ)BÔ	Cñ 9Ü*¬9°Q«<Ô8÷9ð 9÷9ð 9ú÷9ð 9ús   Á3C	Â+CÃ	CÃCc                  ó  — t        d«      } t        j                  t        «      5  t	        | «       d d d «       t        j                  t        «      5  t	        | j                  «       «       d d d «       y # 1 sw Y   ŒExY w# 1 sw Y   y xY w)N))r$   r   r+   )r   r   r   )r   r$   r+   )r   r   ÚwarnsÚUserWarningr
   Útocoor‹   s    r   Ú!test_explicit_zero_causes_warningr˜   î   sr   € ÜÐ=Ó>€KÜ	�‰”kÓ	"ñ 8Ü*¨;Ô7÷8ä	�‰”kÓ	"ñ @Ü*¨;×+<Ñ+<Ó+>Ô?÷@ð @÷8ð 8ú÷@ð @ús   ¥A5ÁBÁ5A>ÂB
c           
      ó:  — |\  }}|dk(  }| ||«      z  }|t        j                  |«      z  } | ||¬«      \  }}t        |t        j                  |«      «       t        |t        j                  |||f   «      j	                  «       «       |j
                  } | ||¬«      \  }}t        |t        j                  |«      «       t        t        j                  |«      t        j                  t        j                  |||f   «      «      j	                  «       «       y )Nr%   )Úmaximize)r   r   r   ÚsortÚflattenÚT)	ÚsolverÚ
array_typeÚsignÚ	test_caseÚcost_matrixÚexpected_costrš   rƒ   r„   s	            r   Ú linear_sum_assignment_assertionsr¤   ø   sõ   € ð "+Ñ€K�Ø�r‰z€HØ™ KÓ0Ñ0€KØœ2Ÿ8™8 MÓ2Ñ2€Má˜k°HÔ=Ñ€GˆWÜ�w¤§¡¨Ó 0Ô1Ü�}Ü—x‘x ¨G°WÐ,<Ñ =Ó>×FÑFÓHôJð —-‘-€KÙ˜k°HÔ=Ñ€GˆWÜ�w¤§¡¨Ó 0Ô1Ü”r—w‘w˜}Ó-Ü—w‘wœrŸx™xØ& w°Ð'7Ñ8ó :ó ;ß;B¹7»9õFr!   r%   )é�  é–   r¥   )r¥   éÂ  éX  )é,  éá   r©   )r¦   r¥   r©   )r¥   r¦   r¥   r   )r¥   r§   r¨   r$   )r©   rª   r©   r+   )r¦   r$   r©   )rJ   rJ   rI   )é	   rI   r   )r«   rP   é   )rJ   r   rP   )rJ   rJ   rI   rC   )r«   rI   r   r   )r«   rP   r¬   rJ   )rJ   r   r¬   rJ   ÚinfrP   zsign,test_casec                 ó0   — t        t        t        | |«       y r‰   )r¤   r
   r   )r    r¡   s     r   Ú*test_min_weight_full_matching_small_inputsr¯   /  s   € ä$Ü*¬I°t¸YõHr!   )%Ú	itertoolsr   Únumpyr   Únumpy.testingr   r   r   Úscipy.sparser   r   r   Úscipy.sparse.csgraphr	   r
   r   r    r(   r,   r/   r1   r4   r7   r>   r`   r|   ÚmarkÚparametrizer‡   rŒ   r“   r˜   r¤   ÚlistÚfloatÚ linear_sum_assignment_test_casesr¯   © r!   r   ú<module>r»      sø  ðÝ ã ß :Û ç :Ñ :÷ò
*ò-ò.ò(ò.ò-ò,ò0ò	-òò,$1ðN ‡�×ÑÐ,Ò.FÓGñ
ó Hð
ð ‡�×Ñ˜â&ª	²9Ð=Ú&ª	²9Ð=Ú)ª<ºÐFÚ&ª	Ð2Ú&ª	Ð2Ø ˜V a¨ V¨a°¨VÐ4ðóñCóðCò59òp@òFñ* $(©Øˆ€Gò Ú
Ú
ð
ò 
ð	ò Ú
Ú
ð
ò 
ð	ò
 Ú
Ú
ð
ò 
ð	ò Ú
Ú
ð
ò 
ð	ð ‰u�U‹|™U 5›\Ð
*Ù�‹<™˜u› qÐ
)Ù�‹<˜™E %›LÐ
)ð
+ò 
ð	ð3ó)ó $Ð  ðD ‡�×ÑÐ)Ð+KÓLñHó MñHr!   