Ë
    âQ(h_.  ã                   ó  — 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
 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j2                  j5                  dg d¢«      d„ «       Zej2                  j5                  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ej2                  j<                  d#„ «       Zd$„ Z  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j2                  j5                  d9e"«      d:„ «       Z#y);é    )ÚproductN)Úassert_array_equalÚassert_equal)Ú	csr_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    úf/var/www/skyplay_api_hub/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_augmentationr0   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_columnsr3   ?   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#   r2   r%   r&   s      r   ÚAtest_maximum_bipartite_matching_graph_with_more_columns_than_rowsr6   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é   é   é   é   é   é   rE   r*   é   é
   rG   é   rB   rC   é   rG   rK   é   é   rE   r*   é   r*   rK   rL   rB   rC   rD   rE   rF   rG   rE   r*   rH   rI   rG   rJ   rB   rC   rK   rG   rK   rL   rM   rE   r*   rN   r*   rK   rL   )r   rG   é   rI   rI   rN   rM   rE   rE   rF   é   é   é    é#   rS   é(   é-   é/   rV   é0   r?   )rM   rP   r8   r   r   r   r$   rK   r   r   )	r   ÚonesÚintr   r   ÚsumÚzipÚranger9   )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é*   rP   r   Úcsr)ÚoffsetsÚformatr@   r   r   r   F)r   ÚrandomÚseedr   rX   ÚpermutationÚarangerY   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                 óz   — t        || f«      }t        |«      \  }}t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚y )Nr   )r   r	   Úlen)Únum_rowsÚnum_colsÚbiadjacencyÚrow_indÚcol_inds        r   Ú+test_min_weight_full_matching_trivial_graphrƒ   ˜   sD   € ä˜X xÐ0Ó1€KÜ9¸+ÓFÑ€GˆWÜˆw‹<˜1ÒÐÐÜˆw‹<˜1ÒÐÑr    r€   )r   r   r   )r   r   r   r5   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r#   r   r   )r   r   r   )r   r#   r   r   r#   rG   c                 óˆ   — t        j                  t        «      5  t        t	        | «      «       d d d «       y # 1 sw Y   y xY w©N)r   r   Ú
ValueErrorr	   r   ©r€   s    r   Ú1test_min_weight_full_matching_infeasible_problemsrˆ       s6   € ô 
�‰”zÓ	"ñ CÜ*¬9°[Ó+AÔB÷C÷ Cñ Cús	   š8¸A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 «       y # 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   )Ú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÷ 9ñ 9ús   Á3BÂBc                  óŒ   — t        j                  t        «      5  t        d«      } t	        | «       d d d «       y # 1 sw Y   y xY w)N))r#   r   r*   )r   r   r   )r   r#   r*   )r   ÚwarnsÚUserWarningr   r	   r‡   s    r   Ú!test_explicit_zero_causes_warningr“   ä   s6   € ä	�‰”kÓ	"ñ 8ÜÐ AÓBˆÜ*¨;Ô7÷8÷ 8ñ 8ús	   š:ºA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¤   )rI   rI   rH   )é	   rH   r   )r¦   rO   é   )rI   r   rO   )rI   rI   rH   rB   )r¦   rH   r   r   )r¦   rO   r§   rI   )rI   r   r§   rI   ÚinfrO   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   Úscipy.sparse.csgraphr   r	   r   r   r'   r+   r.   r0   r3   r6   r=   r_   r{   ÚmarkÚparametrizerƒ   rˆ   r�   Úthread_unsafer“   rŸ   Ú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ò
39ðl ‡�×Ññ8ó ð8òFñ* $+Øˆ€Gò Ú
Ú
ð
ò 
ð	ò Ú
Ú
ð
ò 
ð	ò
 Ú
Ú
ð
ò 
ð	ò Ú
Ú
ð
ò 
ð	ð ‰u�U‹|™U 5›\Ð
*Ù�‹<™˜u› qÐ
)Ù�‹<˜™E %›LÐ
)ð
+ò 
ð	ð3ó$Ð  ðD ‡�×ÑÐ)Ð+KÓLñHó MñHr    