
    (phD                     2   S SK r S SKrS SKJr  S SKJrJr  S SKJ	r
  S SKJrJrJr  S r\ R                   R#                  S5       " S S	5      5       r " S
 S\5      r " S S\5      r\ R                   R#                  S5       " S S5      5       rS rSS jrg)    N)default_rng)quadratic_assignmentOptimizeWarning)_calc_score)assert_equalassert_assert_warnsc                  T   / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/n / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n[         R                  " U 5      [         R                  " U5      pU R                  S   n[         R                  " / SQ5      S/U-  -
  nXU4$ )N)r   Z   
   r   r   r   r   r   r   r   r   r   )r   r   r      r   r   r   r   r   r   r   r   )r   r   r   r   +   r   r   r   r   r   r   r   )r   r   r   r   r   X   r   r   r   r   r   r   )r   r   r   r   r   r      r   r   r   r   r   )r   r   r   r   r   r   r      r   r   r   r   )r   r   r   r   r   r   r   r      r   r   r   )r   r   r   r   r   r   r   r   r   `   r   r   )r   r   r   r   r   r   r   r   r   r      r   )r   r   r   r   r   r   r   r   r   r   r   %   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   $   6   r   ;   H   	   "   O      .   _   )r   r   I   #   r   :      N   r!   ,   r   r   )r   r    r      r   a   r"   B   E   =   r   ?   )r   r!   r&   r   ]      r   (   r   0   D   U   )r   r   r   r,   r   @      r   L   r   r3   r4   )r   r"   r'   r-   r2   r   r   7   &   r   r   r   )r   r#   r"   r   r3   r   r   S   r!      8   r   )r   r$   r(   r.   r   r5   r7   r   r%   r-      P   )r   r!   r)   r   r4   r6   r!   r%   r   r2   '   !   )r   r%   r*   r/   r   r   r8   r-   r2   r   F   V   )r   r   r   r0   r3   r   r9   r:   r<   r>   r      )r   r   r+   r1   r4   r   r   r;   r=   r?   r@   r   r   )   r3   r      r            r   r8      r-   r   )nparrayshape)ABnopt_perms       a/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_quadratic_assignment.pychr12crO      s    ......-.-.--	A 	777756577757	A 88A;q	
Axx?@A37JH>    z1ignore:The NumPy global RNG was seeded by callingc                       \ rS rSrSrS rS rS r\R                  R                  S 5       r\R                  R                  S 5       rSrg	)
QAPCommonTests2   z.
Base class for `quadratic_assignment` tests.
c                    [         R                  R                  S5      n/ SQ/ SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/ SQ/n[        X#U R                  US	S
.S9n[        UR                  S5        [        UR                  [         R                  " / SQ5      5        [        X#U R                  USS
.S9nU R                  S:X  aC  [        UR                  S5        [        UR                  [         R                  " / SQ5      5        OB[        UR                  S5        [        UR                  [         R                  " / SQ5      5        [        X#U R                  USS
.S9  g )N   mX)Ec )r   rB   rC   rF   )r   r   r   rF   )r   r   r   r   )r   r   r   r   )r   rC   rF   rC   )r   rF   r   rF   )r   r   rF   r   Frngmaximizemethodoptionsr   r   rF   rB   r   Tfaqr   )r   rF   rB   r   r.   )r   rB   r   rF   )	rG   randomr   r   rZ   r   funcol_indrH   selfrW   rJ   rK   ress        rN   test_accuracy_1QAPCommonTests.test_accuracy_1;   s   ii##$78
 
 #136E+JL 	SWWb!S[["((<"89"136D+IK ;;%"%bhh|&<="%bhh|&<=Q$++-0d%C	ErP   c                    [         R                  R                  S5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ S	Q/5      n[	        X#U R
                  US
S.S9nU R
                  S:X  aC  [        UR                  S5        [        UR                  [         R                  " / SQ5      5        OB[        UR                  S5        [        UR                  [         R                  " / SQ5      5        [	        X#U R
                  USS.S9n[        UR                  S5        [        UR                  [         R                  " / SQ5      5        g )NrU   )r   r3   rD   rE   )r3   r   r3   r   )rD   r3   r   rF   )rE   r   rF   r   )r   r   rD   rC   )r   r   r3   rF   )rD   r3   r   r3   )rC   rF   r3   r   FrV   rY   r]      )r   r   rB   rF      r\   Ti  )rF   rB   r   r   )	rG   r^   r   rH   r   rZ   r   r_   r`   ra   s        rN   test_accuracy_2QAPCommonTests.test_accuracy_2a   s   ii##$78HHl"""$ %
 HHl"""$ %
 #136E+JL ;;%#&bhh|&<=#&bhh|&<="136D+IK 	SWWc"S[["((<"89rP   c                 2   [         R                  R                  S5      n[        5       u  p#n[	        X#U R
                  SU0S9n[        SUR                  s=:*  =(       a    S:  Os  5        [        UR                  [        X#UR                  5      5        [	        X#U R
                  USS.S9n[        SUR                  s=:*  =(       a    S	:  Os  5        [        UR                  [        X#UR                  5      5        [         R                  " / S
Q5      n[         R                  " XdU   /5      R                  n[	        X#U R
                  XqS.S9n[        SUR                  s=:*  =(       a    S:  Os  5        [        UR                  U   XF   5        [         R                  " [         R                  " [        U5      5      U/5      R                  n[	        X#U R
                  XqS.S9n[        UR                  US S 2S4   R                  5        [        UR                  S5        [        UR                   S5        [         R"                  " S5      n[	        XU R
                  SU0S9n[        UR                   S5        [        UR                  S5        g )NrU   rW   rY   +  R  TrV   i! iL )rC   rD   r   )partial_matchrW   r   r   )r   r   )rG   r^   r   rO   r   rZ   r   r_   r   _scorer`   rH   asarrayTarangelennitempty)	rb   rW   rJ   rK   rM   rc   	seed_costseedru   s	            rN   test_accuracy_3QAPCommonTests.test_accuracy_3   s   ii##$78h #1,13<9((5()SWWfQ3;;78 #136D+IK((5()SWWfQ3;;78 HHZ(	zz9y&9:;=="1=A+NP((5()S[[+X-@A zz299SV,h78::"1=A+NPS[[$q!t*,,/SWWe$SWWa   "5,13<9SWWa SWWa rP   c                 V   ^ ^^ [        5       u  mmnUUU 4S jn[        [        U5        g )Nc                  6   > [        T TTR                  SS0S9  g )Nz	ekki-ekkiTrY   )r   rZ   )rJ   rK   rb   s   rN   f.QAPCommonTests.test_unknown_options.<locals>.f   s     Adkk*5t)<>rP   )rO   r	   r   )rb   rM   r|   rJ   rK   s   `  @@rN   test_unknown_options#QAPCommonTests.test_unknown_options   s!    1h	> 	_a(rP   c           	         [         R                  " S5      R                  S5      n[         R                  " S5      R                  S5      n[        R                  " [
        SS9   [         R                  R                  S5      n[        XU R                  USS.S9  S S S 5        [        R                  " [        S	S9   [         R                  R                  S5        [        XU R                  S
S0S9  S S S 5        [        R                  " [        SS9   [        XU R                  SSS.S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       NZ= f! , (       d  f       g = f)Nr   rC   rC   zUse of `RandomState`*matchr   FrV   rY   z The NumPy global RNG was seeded*rX   z!The behavior when the rng option*)rG   rr   reshapepytestwarnsDeprecationWarningr^   RandomStater   rZ   FutureWarningrw   )rb   rJ   rK   rW   s       rN    test_deprecation_future_warnings/QAPCommonTests.test_deprecation_future_warnings   s    IIbM!!&)IIbM!!&)\\,4KL))''*C dkk14%)HJ M
 \\-/QRIINN1 dkk*4e)<> S
 \\-/RS dkk12)FH TS ML
 SR
 TSs$   $8D7=7EE7
E
E
E' N)__name__
__module____qualname____firstlineno____doc__rd   ri   rx   r   markthread_unsafer~   r   __static_attributes__r   rP   rN   rR   rR   2   sW     EL:<%!N [[) ) [[H HrP   rR   c                   $    \ rS rSrSrS rS rSrg)TestFAQ   r]   c                 V   [         R                  R                  S5      n[        5       u  p#n[	        U5      n[        X#SS0S9n[        UR                  S5        [        X#SS0S9n[        SUR                  s=:*  =(       a    S:  Os  5        [        X#US	S
.S9n[        SUR                  s=:*  =(       a    S:  Os  5        [         R                  " XU45      [        U5      -  n[        U5      n[        X#SU0S9n[        SUR                  s=:*  =(       a
    S:  5        g s  5        g )NrU   maxiterr3   r[   shuffle_inputTrl   rm   
randomized)rW   P0r   )rG   r^   r   rO   rs   r   r   rt   r   r_   onesfloat_doubly_stochastic)rb   rW   rJ   rK   rM   rL   rc   Ks           rN   test_optionsTestFAQ.test_options   s    ii##$78hF #1)Q@SWWa  #1/41HI((5() #1L1QR((5() GGQFOeAh&q!"1$;((5()()rP   c           	         [         R                  " S5      nUn[        R                  " [        SS9   [        XSS0S9  S S S 5        [        R                  " [        SS9   [        XSS	0S9  S S S 5        [        R                  " [        S
S9   [        XSS	0S9  S S S 5        [        R                  " [        5         [        XSS0S9  S S S 5        [        R                  " [        SS9   [        [         R                  " S5      [         R                  " S5      S[         R                  " S5      0S9  S S S 5        / SQ/ SQ/ SQ/n[        R                  " [        SS9   [        [         R                  " S5      [         R                  " S5      SU0S9  S S S 5        g ! , (       d  f       GNh= f! , (       d  f       GNL= f! , (       d  f       GN0= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)NrF   zInvalid 'P0' parameterr   r   r^   r   z$'maxiter' must be a positive integerr   z'tol' must be a positive floattolg      ?z1`P0` matrix must have shape m' x m', where m'=n-mrC   rB   rB   )g?皙?333333?)r   g333333?r   )r   r   gffffff?z%`P0` matrix must be doubly stochasticrB   )rG   identityr   raises
ValueErrorr   	TypeErrorr   )rb   rJ   rK   r   s       rN   test_specific_input_validation&TestFAQ.test_specific_input_validation   s   KKN ]]:-EF h/?@ G]]"HJ 	2?J ]]:-MN r{; O
 ]]9% 	3/?@ & ]]IK !AArwwv/K  ]]"IK AAq	K K5 GFJ J ON
 &%K KK KsH   F  F2G=G+A
G(!6G9 
F/2
G
G
G%(
G69
Hr   N)r   r   r   r   rZ   r   r   r   r   rP   rN   r   r      s    F*2'rP   r   c                   *    \ rS rSrSrS rS rS rSrg)Test2opti
  2optc                 P   Sn[        S5      nUR                  X4S9nUR                  X4S9n[        X4U R                  SU0S9n[        S5      nUR                  X4S9nUR                  X4S9n[        X4U R                  SU0S9n[	        UR
                  UR
                  5        g )N   i<2sizerW   rY   )r   r^   r   rZ   r   rt   )rb   rL   rW   rJ   rK   res1res2s          rN   test_deterministicTest2opt.test_deterministic  s    (#JJQFJ#JJQFJ##AuclS(#JJQFJ#JJQFJ##AuclSTXXtxx(rP   c           	         Sn[         R                  R                  S5      nUR                  X4S9nUR                  X4S9n[        X4U R                  SU0S9n[         R
                  " [         R                  " S5      UR                  /5      R                  n[        X4U R                  X&S.S9nSS/n[         R
                  " [         R                  " S5      U   UR                  U   /5      R                  n	[        X4U R                  X&U	S	.S9n
[        UR                  XS
-   -  S-  :g  5        [        UR                  XS
-   -  S-  5        [        U
R                  US-
  US
-
  -  S-  5        g )Nr3   rU   r   rW   rY   )rW   partial_guessrF   rC   )rW   r   rn   r   )rG   r^   r   r   rZ   rH   rr   r`   rq   r   rt   r   )rb   rL   rW   rJ   rK   r   guessr   fixr   res3s              rN   test_partial_guessTest2opt.test_partial_guess  sA   ii##$78JJQFJ#JJQFJ##A-2CL:"))A,5688#A47,PR!f"))A,s+T\\#->?@BB#A47>C-EF 	AsGAI%&TXXqA#wqy)TXX!ac{1}-rP   c                 8   [         n[        R                  " [        SS9   [	        [
        R                  " S5      [
        R                  " S5      U R                  SU" SS5      0S9  S S S 5        [        R                  " [        SS9   [	        [
        R                  " S5      [
        R                  " S5      U R                  S[        SS5      0S9  S S S 5        [        R                  " [        S	S9   [	        [
        R                  " S5      [
        R                  " S5      U R                  S[
        R                  R                  SSS5      0S9  S S S 5        [        R                  " [        S
S9   [	        [
        R                  " S5      [
        R                  " S5      U R                  SS[        SS5      -  0S9  S S S 5        [        R                  " [        SS9   [	        [
        R                  " S5      [
        R                  " S5      U R                  SS[        SS5      -  0S9  S S S 5        [        R                  " [        SS9   [	        [
        R                  " S5      [
        R                  " S5      U R                  S[
        R                  " S5      0S9  S S S 5        g ! , (       d  f       GNQ= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN+= f! , (       d  f       N= f! , (       d  f       g = f)Nz0`partial_guess` can have only as many entries asr   rB   r   r3   rF   rY   z%`partial_guess` must have two columnsz%`partial_guess` must have exactly twoz%`partial_guess` must contain only posr   z0`partial_guess` entries must be less than numberrC   z-`partial_guess` column entries must be uniquerF   rF   )_range_matrixr   r   r   r   rG   r   rZ   r^   randr   )rb   _rms     rN   r   'Test2opt.test_specific_input_validation0  sC   ]]HJ !QQ(,*93q!9)EGJ ]]"IK AAt{{(-1*=>K ]]"IK AAt{{("))..Aq*ABK ]]"IK AAt{{("}Q/B*BCK ]]HJ !AAt{{(!mAq.A*ABJ ]]EG !AAt{{("''&/:G GIJ JK KK KK KJ JG GsM   AJ2	AK5A K6AK(%AK:AL2
K
K
K%(
K7:
L
Lr   N)	r   r   r   r   rZ   r   r   r   r   r   rP   rN   r   r   
  s    F).*-rP   r   c                       \ rS rSrS rSrg)TestQAPOncei`  c                    [        S5      n[        R                  " [        SS9   [	        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [        SS9   [	        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [        SS9   [	        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [        S	S9   [	        UR                  S5      UR                  S
5      5        S S S 5        [        n[        R                  " [        SS9   [	        [        R                  " S5      [        R                  " S5      SU" SS5      0S9  S S S 5        [        R                  " [        SS9   [	        [        R                  " S5      [        R                  " S5      S[        SS5      0S9  S S S 5        [        R                  " [        SS9   [	        [        R                  " S5      [        R                  " S5      S[        R
                  R                  SSS5      0S9  S S S 5        [        R                  " [        SS9   [	        [        R                  " S5      [        R                  " S5      SS[        SS5      -  0S9  S S S 5        [        R                  " [        SS9   [	        [        R                  " S5      [        R                  " S5      SS[        SS5      -  0S9  S S S 5        [        R                  " [        SS9   [	        [        R                  " S5      [        R                  " S5      S[        R                  " S5      0S9  S S S 5        g ! , (       d  f       GNb= f! , (       d  f       GN(= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNb= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN]= f! , (       d  f       GN= f! , (       d  f       g = f)Ninn z`A` must be squarer   )rB   rC   r   z`B` must be squarez!`A` and `B` must have exactly two)rB   rB   rB   z*`A` and `B` matrices must be of equal sizer   z.`partial_match` can have only as many seeds asrB   rn   r3   rF   r   z%`partial_match` must have two columnsz%`partial_match` must have exactly twoz%`partial_match` must contain only posr   z0`partial_match` entries must be less than numberrC   z-`partial_match` column entries must be uniquer   )r   r   r   r   r   r^   r   rG   r   r   r   )rb   rW   r   s      rN   test_common_input_validation(TestQAPOnce.test_common_input_validationd  s<   (#]]:-AB 

6"

6" C
 ]]:-AB 

6"

6" C ]]"EG 

9%

9%G ]]BD !

6"

6"D ]]FH !QQ*93q!9)EGH ]]"IK AA(-1*=>K ]]"IK AA("))..Aq*ABK ]]"IK AA("}Q/B*BCK ]]HJ !AA(!mAq.A*ABJ ]]EG !AA("''&/:G G} CB
 CBG GD DH HK KK KK KJ JG Gs|   +N+1+N==+O	+O!=O39A PAPAP)4AP;A
Q+
N:=
O
O!
O03
P
P
P&)
P8;
Q

Qr   N)r   r   r   r   r   r   r   rP   rN   r   r   `  s    GrP   r   c                     [         R                  " X45      n[        U5       H   n[         R                  " U 5      US S 2U4'   M"     U$ )N)rG   zerosrangerr   )abmatis       rN   r   r     s:    
((A6
C1XIIaLAqD	 JrP   c                    SnSU R                  SS9-  nSX-  -  nU n[        U5       H  n[        R                  " UR                  SS9S-
  5      U:  R	                  5       (       a?  [        R                  " UR                  SS9S-
  5      U:  R	                  5       (       a    U$ SX@-  -  nSX-  -  nUS S 2S 4   U -  U-  nM     U$ )Ni  r   r   )axis)sumr   rG   absall)Pr   max_itercrP_epsits          rN   r   r     s     H	AEEqEMA	QUAEHoVVEII1I%)*S05577		q	)A-.499;; L	 KK!T'
Q"  LrP   )gMbP?)r   numpyrG   numpy.randomr   scipy.optimizer   r   scipy.optimize._qapr   ro   numpy.testingr   r   r	   rO   r   filterwarningsrR   r   r   r   r   r   r   rP   rN   <module>r      s      $ @ 5 = ="J OPNH NH QNHbCn CLS~ Sl OPJ J QJZrP   