
    e!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    p/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/sparse/csgraph/tests/test_matching.py5test_maximum_bipartite_matching_raises_on_dense_inputr      sF    	y	! *1a&1a&)*"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"5E:A"5H=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"5E:A"5H=Arxx|Q'rxx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"5E:A"5H=Arxx-q1rxx|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"5E:A"5H=ArxxR)1-rxx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\     1v1v&'E"5H=A"5E: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    1v1v1v./E"5H=A"5E:Arxx
+Q/rxx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"5H=A"5E:ArxxA'+rxx
+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    q6D!fGFtWf-V<E"5E:A"5H=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 )N2   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    772S!DJGFtWf-X>E"5E:A"5H=AG==?b   G==?b   E%++a.)1- 17A;; AuU[[^,- 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   IINN2BGGBK59A		%%b)I&&r*J99R=DDGGBc"EedD\*+DD99R=DGGBc"EedD\*+Dq4A &a59D99R=DDGGBc"EedD\*+D	B 'qH=ED99R=DGGBc"EedD\*+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    Xx01K9+FGW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   gCw}?gNRDD9?r   r   r   gp?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   gY\?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   gz{!.?r   r   r   goFI%?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   gqfb?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   )gvC?r   r   r   r   r   r   r   g8?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*9Q<89 9 9s   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 8s	   :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rzHK00K288M22MkH=GWw 01}xxGW,< =>FFHJ --KkH=GWw 01rww}-wwrxx&w'78 : ;;B79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    $*ItY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	-,$1N ,.FG H &	9=&	9=)<F&	2&	2VaVaV4CC
39l 8 8F* $+G 


 
	 


 
	
 


 
	 


 
	 uU|U5\
*<uq
)<E%L
)
+ 
	3$  D )+KLH MHr    