
    doidD                     .   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  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_c                  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   r2   r3   )r   r!   r&   r,   r1   r   r   7   &   r   r   r   )r   r"   r!   r   r2   r   r   S   r       8   r   )r   r#   r'   r-   r   r4   r6   r   r$   r,      P   )r   r    r(   r   r3   r5   r    r$   r   r1   '   !   )r   r$   r)   r.   r   r   r7   r,   r1   r   F   V   )r   r   r   r/   r2   r   r8   r9   r;   r=   r      )r   r   r*   r0   r3   r   r   r:   r<   r>   r?   r   r   )   r2   r      r            r   r7      r,   r   )nparrayshape)ABnopt_perms       j/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_quadratic_assignment.pychr12crN      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                   6    \ rS rSrSrS rS rS rS rS 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   rA   rB   rE   )r   r   r   rE   )r   r   r   r   )r   r   r   r   )r   rB   rE   rB   )r   rE   r   rE   )r   r   rE   r   Frngmaximizemethodoptionsr   r   rE   rA   r   Tfaqr   )r   rE   rA   r   r-   )r   rA   r   rE   )	rF   randomr   r   rY   r   funcol_indrG   selfrV   rI   rJ   ress        rM   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rO   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 )NrT   )r   r2   rC   rD   )r2   r   r2   r   )rC   r2   r   rE   )rD   r   rE   r   )r   r   rC   rB   )r   r   r2   rE   )rC   r2   r   r2   )rB   rE   r2   r   FrU   rX   r\      )r   r   rA   rE      r[   Ti  )rE   rA   r   r   )	rF   r]   r   rG   r   rY   r   r^   r_   r`   s        rM   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9rO   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 )NrT   rV   rX   +  R  TrU   i! iL )rB   rC   r   )partial_matchrV   r   r   )r   r   )rF   r]   r   rN   r   rY   r   r^   r   _scorer_   rG   asarrayTarangelennitempty)	ra   rV   rI   rJ   rL   rb   	seed_costseedrt   s	            rM   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 rO   c                     [        5       u  pn[        R                  " [        5         [	        XU R
                  SS0S9  S S S 5        g ! , (       d  f       g = f)Nz	ekki-ekkiTrX   )rN   pytestwarnsr   r   rY   )ra   rI   rJ   rL   s       rM   test_unknown_options#QAPCommonTests.test_unknown_options   s=    h\\/* dkk*5t)<> +**s   A		
A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   rB   rB   zUse of `RandomState`*matchr   FrU   rX   z The NumPy global RNG was seeded*rW   z!The behavior when the rng option*)rF   rq   reshaperz   r{   DeprecationWarningr]   RandomStater   rY   FutureWarningrv   )ra   rI   rJ   rV   s       rM    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__rc   rh   rw   r|   r   __static_attributes__r   rO   rM   rQ   rQ   2   s$     EL:<%!N>HrO   rQ   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 )NrT   maxiterr2   rZ   shuffle_inputTrk   rl   
randomized)rV   P0r   )rF   r]   r   rN   rr   r   r   rs   r   r^   onesfloat_doubly_stochastic)ra   rV   rI   rJ   rL   rK   rb   Ks           rM   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()()rO   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)NrE   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-mrB   rA   rA   )g?皙?333333?)r   g333333?r   )r   r   gffffff?z%`P0` matrix must be doubly stochasticrA   )rF   identityrz   raises
ValueErrorr   	TypeErrorr   )ra   rI   rJ   r   s       rM   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   rY   r   r   r   r   rO   rM   r   r      s    F*2'rO   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sizerV   rX   )r   r]   r   rY   r   rs   )ra   rK   rV   rI   rJ   res1res2s          rM   test_deterministicTest2opt.test_deterministic
  s    (#JJQFJ#JJQFJ##AuclS(#JJQFJ#JJQFJ##AuclSTXXtxx(rO   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 )Nr2   rT   r   rV   rX   )rV   partial_guessrE   rB   )rV   r   rm   r   )rF   r]   r   r   rY   rG   rq   r_   rp   r   rs   r   )ra   rK   rV   rI   rJ   r   guessr   fixr   res3s              rM   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}-rO   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   rA   r   r2   rE   rX   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 numberrB   z-`partial_guess` column entries must be uniquerE   rE   )_range_matrixrz   r   r   r   rF   r   rY   r]   randr   )ra   _rms     rM   r   'Test2opt.test_specific_input_validation-  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   rY   r   r   r   r   r   rO   rM   r   r     s    F).*-rO   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   )rA   rB   r   z`B` must be squarez!`A` and `B` must have exactly two)rA   rA   rA   z*`A` and `B` matrices must be of equal sizer   z.`partial_match` can have only as many seeds asrA   rm   r2   rE   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 numberrB   z-`partial_match` column entries must be uniquer   )r   rz   r   r   r   r]   r   rF   r   r   r   )ra   rV   r   s      rM   test_common_input_validation(TestQAPOnce.test_common_input_validationa  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   rO   rM   r   r   ]  s    GrO   r   c                     [         R                  " X45      n[        U5       H   n[         R                  " U 5      US S 2U4'   M"     U$ )N)rF   zerosrangerq   )abmatis       rM   r   r     s:    
((A6
C1XIIaLAqD	 JrO   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   rF   absall)Pr   max_itercrP_epsits          rM   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"  LrO   )gMbP?)rz   numpyrF   numpy.randomr   scipy.optimizer   r   scipy.optimize._qapr   rn   numpy.testingr   r   rN   markfilterwarningsrQ   r   r   r   r   r   r   rO   rM   <module>r      s      $ @ 5 /"J OPKH KH QKH\Cn CLS~ Sl OPJ J QJZrO   