
    _Mh_.                     ,   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j                            dg d          d             Zej                            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j        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j                            d9e"          d:             Z#dS );    )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            d S # 1 swxY w Y   d S )Nr      )pytestraises	TypeErrornparrayr   )graphs    h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/sparse/csgraph/tests/test_matching.py5test_maximum_bipartite_matching_raises_on_dense_inputr      s    	y	!	! * *1a&1a&)**"5)))* * * * * * * * * * * * * * * * * *s   *AAAc                      t          d          } t          | d          }t          | d          }t          j        g           }t	          ||           t	          ||           d S )Nr   r   row	perm_typecolumnr   r   r   r   r   r   xyexpected_matchings       r   +test_maximum_bipartite_matching_empty_graphr      si    fE"5E:::A"5H===A(!,,,(!,,,,,    c                      t          d          } t          | d          }t          | d          }t          t          j        g           |           t          t          j        ddg          |           d S )N   r   r   r   r   r   r   r   r   r   r   r   r   s      r   4test_maximum_bipartite_matching_empty_left_partitionr'      so    fE"5E:::A"5H===Arx||Q'''rxR))1-----r    c                      t          d          } t          | d          }t          | d          }t          t          j        g d          |           t          t          j        g           |           d S )Nr      r   r   r   )r$   r$   r$   r%   r&   s      r   5test_maximum_bipartite_matching_empty_right_partitionr+   $   so    fE"5E:::A"5H===Arx--q111rx||Q'''''r    c                      t          d          } t          | d          }t          | d          }t          t          j        ddg          |           t          t          j        ddg          |           d S )Nr#   r#   r   r   r   r$   r%   r&   s      r   3test_maximum_bipartite_matching_graph_with_no_edgesr.   ,   su    fE"5E:::A"5H===ArxR))1---rxR))1-----r    c                      t          ddgddgg          } t          | d          }t          | d          }t          j        ddg          }t	          ||           t	          ||           d S )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          |           d S )Nr   r   r   r   r   r   r$   r   r#   r%   r&   s      r   Atest_maximum_bipartite_matching_graph_with_more_rows_than_columnsr3   ?   s    1v1v1v.//E"5H===A"5E:::Arx


++Q///rxA''+++++r    c                     t          g dg dg          } t          | d          }t          | d          }t          t          j        ddg          |           t          t          j        g d          |           d S )	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   s    yyy))),--E"5H===A"5E:::ArxA''+++rx


++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	          ||           d S )	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   s    q6D!fGYYFtWf-V<<<E"5E:::A"5H===A!Q(((!,,,(!,,,,,r    c                  0   t          j        dt                    } g d}g d}t          | ||fd          }t	          |d          }t	          |d	          }|d
k                                    dk    sJ |d
k                                    dk    sJ t          t          |j        d                   |          D ]\  }}|d
k    r|||f         sJ t          |t          |j        d                             D ]\  }}|d
k    r|||f         sJ d S )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_   [   sN   72S!!!DJ J JG  FtWf-X>>>E"5E:::A"5H===AG==??b    G==??b    E%+a.))1--  177A;AuU[^,,--  177A; r    c                  \   t           j                            d           t          t          j        d          dd          } t           j                            d          }t           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          |                                dk              d
           t          t          |                                dk              d
           d S )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   INN2BGBKK5999A	%%b))I&&r**J9R==DDGBc"""EedD\*++DD9R==DGBc"""EedD\*++Dq4A &a5999D9R==DDGBc"""EedD\*++D	B 'qH===ED9R==DGBc"""EedD\*++D	
TB R[[]]a'((%000R[[]]a'((%00000r    znum_rows,num_cols)r   r"   r)   c                     t          || f          }t          |          \  }}t          |          dk    sJ t          |          dk    sJ d S )Nr   )r   r	   len)num_rowsnum_colsbiadjacencyrow_indcol_inds        r   +test_min_weight_full_matching_trivial_graphr      sZ    Xx011K9+F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            d S # 1 swxY w Y   d S N)r   r   
ValueErrorr	   r   r   s    r   1test_min_weight_full_matching_infeasible_problemsr      s     
z	"	" C C*9[+A+ABBBC C C C C C C C C C C C C C C C C Cs   AAAc                  R   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            d S # 1 swxY w Y   d S )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      s0   

	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	" 	" 	"	E 	E 	E	E 	E 	E	 	 		J 	J 	J	J 	J 	J	J 	J 	J	E 	E 	E	B 	B 	B	E 	E 	E	F 	F 	F	G 	G 	G	E 	E 	E[/
 /	 /	A` 
z)B	C	C	C 9 9*9Q<<8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   2BB #B c                      t          j        t                    5  t          d          } t	          |            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   warnsUserWarningr   r	   r   s    r   !test_explicit_zero_causes_warningr      s    	k	"	" 8 8 ABB*;7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   AA
A
c           
      t   |\  }}|dk    }| ||          z  }|t          j        |          z  } | ||          \  }}t          |t          j        |                     t          |t          j        |||f                                                              |j        } | ||          \  }}t          |t          j        |                     t          t          j        |          t          j        t          j        |||f                                                                        d S )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      sH    "+KrzHK000K28M222MvkH===GWw 0 0111}xGW,< =>>FFHHJ J J -KvkH===GWw 0 0111rw}--wrx&w'78 :  : ; ;;B799F F F F 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                 >    t          t          t          | |           d S r   )r   r	   r   )r   r   s     r   *test_min_weight_full_matching_small_inputsr   $  s,    $*ItYH H H H 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 0 0	- 	- 	-  ,$1 $1 $1N ,.F.F.FGG  HG &YY			999=&YY			999=)\\<<<F&YY			2&YY			2VaVaV4 C C C
39 39 39l 8 8 8F F F* $+7G //
//
//
 
	 








 
	
 ++
))
))
 
	 //
,,
--
 
	 uuU||UU5\\
*5<<uq
)5<<EE%LL
)
+ 
	3$ $  D )+KLLH H MLH H Hr    