
    ^MhD                     R   d dl Z d dlZd dlmZ d dlmZmZ d dlm	Z
 d dlmZmZmZ d Ze j                            d           G d d	                      Z G d
 de          Z G d de          Ze j                            d           G d d                      Zd ZddZdS )    N)default_rng)quadratic_assignmentOptimizeWarning)_calc_score)assert_equalassert_assert_warnsc                  H   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} 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          j        |          }} | j        d         }t          j        g d          dg|z  z
  }| ||fS )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       n/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_quadratic_assignment.pychr12crO      s=   ..................---...---...------	A 	766777777777555666555777777777555777	A 8A;;qA	
Ax???@@A37JHa>    z1ignore:The NumPy global RNG was seeded by callingc                   x    e Zd ZdZd Zd Zd Zej        j	        d             Z
ej        j	        d             ZdS )QAPCommonTestsz6
    Base class for `quadratic_assignment` tests.
    c                    t           j                            d          }g dg dg dg dg}g dg dg dg dg}t          ||| j        |d	d
          }t          |j        d           t          |j        t          j        g d                     t          ||| j        |dd
          }| j        dk    r?t          |j        d           t          |j        t          j        g d                     n>t          |j        d           t          |j        t          j        g d                     t          ||| j        |dd
           d S )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   rY   r   funcol_indrH   selfrV   rJ   rK   ress        rN   test_accuracy_1zQAPCommonTests.test_accuracy_1;   s   i##$788\\\\\\\\
 \\\\\\\\
 #1a36E+J+JL L L 	SWb!!!S["(<<<"8"8999"1a36D+I+IK K K ;%"%%%bh|||&<&<===="%%%bh|||&<&<===Q$+-0d%C%C	E 	E 	E 	E 	E 	ErP   c                    t           j                            d          }t          j        g dg dg dg dg          }t          j        g dg dg dg d	g          }t	          ||| j        |d
d          }| j        dk    r?t          |j        d           t          |j        t          j        g d                     n>t          |j        d           t          |j        t          j        g d                     t	          ||| j        |dd          }t          |j        d           t          |j        t          j        g d                     d S )NrT   )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   FrU   rX   r\      )r   r   rB   rF      r[   Ti  )rF   rB   r   r   )	rG   r]   r   rH   r   rY   r   r^   r_   r`   s        rN   test_accuracy_2zQAPCommonTests.test_accuracy_2a   s   i##$788Hlll"ll"ll"ll$ % %
 Hlll"ll"ll"ll$ % %
 #1a36E+J+JL L L ;%#&&&bh|||&<&<====#&&&bh|||&<&<==="1a36D+I+IK K K 	SWc"""S["(<<<"8"899999rP   c                    t           j                            d          }t                      \  }}}t	          ||| j        d|i          }t          d|j        cxk    odk     nc            t          |j        t          |||j
                             t	          ||| j        |dd          }t          d|j        cxk    od	k     nc            t          |j        t          |||j
                             t          j        g d
          }t          j        |||         g          j        }t	          ||| j        ||d          }t          d|j        cxk    odk     nc            t          |j
        |         ||                    t          j        t          j        t          |                    |g          j        }t	          ||| j        ||d          }t          |j
        |d d df         j                   t          |j        d           t          |j        d           t          j        d          }t	          ||| j        d|i          }t          |j        d           t          |j        d           d S )NrT   rV   rX   +  R  TrU   i! iL )rC   rD   r   )partial_matchrV   r   r   )r   r   )rG   r]   r   rO   r   rY   r   r^   r   _scorer_   rH   asarrayTarangelennitempty)	ra   rV   rJ   rK   rM   rb   	seed_costseedrr   s	            rN   test_accuracy_3zQAPCommonTests.test_accuracy_3   s   i##$7881h #1a,13<9 9 9((((5(((()))SWfQ3;77888 #1a36D+I+IK K K((((5(((()))SWfQ3;77888 HZZZ((	z9hy&9:;;="1a=A#+N+NP P P((((5(((()))S[+Xi-@AAA z29SVV,,h788:"1a=A#+N+NP P PS[$qqq!t*,///SWe$$$SWa      "5%,13<9 9 9SWa   SWa     rP   c                 h     t                      \  } fd}t          t          |           d S )Nc                  <    t           j        ddi           d S )Nz	ekki-ekkiTrX   )r   rY   )rJ   rK   ra   s   rN   fz.QAPCommonTests.test_unknown_options.<locals>.f   s4     Adk*5t)<> > > > > >rP   )rO   r	   r   )ra   rM   rx   rJ   rK   s   `  @@rN   test_unknown_optionsz#QAPCommonTests.test_unknown_options   sO    1h	> 	> 	> 	> 	> 	> 	> 	_a(((((rP   c           	         t          j        d                              d          }t          j        d                              d          }t          j        t
          d          5  t           j                            d          }t          ||| j	        |dd           d d d            n# 1 swxY w Y   t          j        t          d	          5  t           j                            d           t          ||| j	        d
di           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||| j	        ddd           d d d            d S # 1 swxY w Y   d S )Nr   rC   rC   zUse of `RandomState`*matchr   FrU   rX   z The NumPy global RNG was seeded*rW   z!The behavior when the rng option*)rG   ro   reshapepytestwarnsDeprecationWarningr]   RandomStater   rY   FutureWarningrt   )ra   rJ   rK   rV   s       rN    test_deprecation_future_warningsz/QAPCommonTests.test_deprecation_future_warnings   s`    IbMM!!&))IbMM!!&))\,4KLLL 	J 	J)''**C Adk14%)H)HJ J J J	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J
 \-/QRRR 	> 	>INN1 Adk*4e)<> > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>
 \-/RSSS 	H 	H Adk12)F)FH H H H	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs6   *;B11B58B5:DD!$D!E,,E03E0N)__name__
__module____qualname____doc__rc   rg   ru   r   markthread_unsafery   r    rP   rN   rR   rR   2   s          E  E  EL: : :<%! %! %!N [) ) ) [H H H H HrP   rR   c                       e Zd ZdZd Zd ZdS )TestFAQr\   c                    t           j                            d          }t                      \  }}}t	          |          }t          ||ddi          }t          |j        d           t          ||ddi          }t          d|j	        cxk    odk     nc            t          |||d	d
          }t          d|j	        cxk    odk     nc            t          j
        ||f          t          |          z  }t          |          }t          ||d|i          }t          d|j	        cxk    odk     nc            d S )NrT   maxiterr3   rZ   shuffle_inputTri   rj   
randomized)rV   P0r   )rG   r]   r   rO   rp   r   r   rq   r   r^   onesfloat_doubly_stochastic)ra   rV   rJ   rK   rM   rL   rb   Ks           rN   test_optionszTestFAQ.test_options   sd   i##$7881hFF #1a)Q@@@SWa    #1a/41HIII((((5(((())) #1aL1Q1QRRR((((5(((())) GQFOOeAhh&q!!"1a$;;;((((5(((()))))rP   c           	      N   t          j        d          }|}t          j        t          d          5  t          ||ddi           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||dd	i           d d d            n# 1 swxY w Y   t          j        t          d
          5  t          ||dd	i           d d d            n# 1 swxY w Y   t          j        t                    5  t          ||ddi           d d d            n# 1 swxY w Y   t          j        t          d          5  t          t          j        d          t          j        d          dt          j        d          i           d d d            n# 1 swxY w Y   g dg dg dg}t          j        t          d          5  t          t          j        d          t          j        d          d|i           d d d            d S # 1 swxY w Y   d S )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   )ra   rJ   rK   r   s       rN   test_specific_input_validationz&TestFAQ.test_specific_input_validation   s   KNN ]:-EFFF 	A 	A Ah/?@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A]"HJ J J 	@ 	@ A	2????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ ]:-MNNN 	< 	< Ar{;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<
 ]9%% 	A 	A A	3/?@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A ]IK K K 	 	 !AArwv/   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ______ ]"IK K K 	 	 AAq	   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sl   AAA9BB!B C!!C%(C%D&&D*-D*AF##F'*F'9HH!HN)r   r   r   rY   r   r   r   rP   rN   r   r      s7        F* * *2' ' ' ' 'rP   r   c                   $    e Zd ZdZd Zd Zd ZdS )Test2opt2optc                    d}t          d          }|                    ||f          }|                    ||f          }t          ||| j        d|i          }t          d          }|                    ||f          }|                    ||f          }t          ||| j        d|i          }t	          |j        |j                   d S )N   i<2sizerV   rX   )r   r]   r   rY   r   rq   )ra   rL   rV   rJ   rK   res1res2s          rN   test_deterministiczTest2opt.test_deterministic  s    (##JJQFJ##JJQFJ###AquclSSS(##JJQFJ##JJQFJ###AquclSSSTXtx(((((rP   c           	         d}t           j                            d          }|                    ||f          }|                    ||f          }t          ||| j        d|i          }t          j        t          j        d          |j        g          j        }t          ||| j        ||d          }ddg}t          j        t          j        d          |         |j        |         g          j        }	t          ||| j        |||	d	          }
t          |j
        ||d
z   z  dz  k               t          |j
        ||d
z   z  dz             t          |
j
        |dz
  |d
z
  z  dz             d S )Nr3   rT   r   rV   rX   )rV   partial_guessrF   rC   )rV   r   rk   r   )rG   r]   r   r   rY   rH   ro   r_   rn   r   rq   r   )ra   rL   rV   rJ   rK   r   guessr   fixr}   res3s              rN   test_partial_guesszTest2opt.test_partial_guess  s   i##$788JJQFJ##JJQFJ###Aq-2CL: : :")A,,5668#Aq47%,P,PR R R!f")A,,s+T\#->?@@B#Aq47%>C-E -EF F F 	AqsGAI%&&&TXq!A#wqy)))TX!ac{1}-----rP   c                 8   t           }t          j        t          d          5  t	          t          j        d          t          j        d          | j        d |dd          i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          | j        dt          dd          i           d d d            n# 1 swxY w Y   t          j        t          d	          5  t	          t          j        d          t          j        d          | j        dt
          j        	                    ddd          i           d d d            n# 1 swxY w Y   t          j        t          d
          5  t	          t          j        d          t          j        d          | j        ddt          dd          z  i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          | j        ddt          dd          z  i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          | j        dt          j
        d          i           d d d            d S # 1 swxY w Y   d S )Nz0`partial_guess` can have only as many entries asr|   rB   r   r3   rF   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 numberrC   z-`partial_guess` column entries must be uniquerF   rF   )_range_matrixr   r   r   r   rG   r   rY   r]   randr   )ra   _rms     rN   r   z'Test2opt.test_specific_input_validation0  s   ]HJ J J 	G 	G !QQ(,*933q!99)EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G ]"IK K K 	 	 AAt{(-1*=*=>   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]"IK K K 	 	 AAt{(")..Aq*A*AB   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]"IK K K 	 	 AAt{("}Q/B/B*BC   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]HJ J J 	 	 !AAt{(!mAq.A.A*AB   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]EG G G 	 	 !AAt{("'&//:   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sq   A	A88A<?A<AC77C;>C;AFFF-AH		HH/AJJJ1ALLLN)r   r   r   rY   r   r   r   r   rP   rN   r   r   
  sF        F) ) ). . .*- - - - -rP   r   c                       e Zd Zd ZdS )TestQAPOncec                 V	   t          d          }t          j        t          d          5  t	          |                    d          |                    d                     d d d            n# 1 swxY w Y   t          j        t          d          5  t	          |                    d          |                    d                     d d d            n# 1 swxY w Y   t          j        t          d          5  t	          |                    d          |                    d                     d d d            n# 1 swxY w Y   t          j        t          d	          5  t	          |                    d          |                    d
                     d d d            n# 1 swxY w Y   t          }t          j        t          d          5  t	          t          j        d          t          j        d          d |dd          i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          dt          dd          i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          dt          j        	                    ddd          i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          ddt          dd          z  i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          ddt          dd          z  i           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          t          j        d          t          j        d          dt          j
        d          i           d d d            d S # 1 swxY w Y   d S )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   rk   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   )ra   rV   r   s      rN   test_common_input_validationz(TestQAPOnce.test_common_input_validationd  s   (##]:-ABBB 	 	 

6""

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

6""

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

9%%

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

6""

6""  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]FH H H 	G 	G !QQ*933q!99)EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G ]"IK K K 	 	 AA(-1*=*=>   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]"IK K K 	 	 AA(")..Aq*A*AB   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]"IK K K 	 	 AA("}Q/B/B*BC   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]HJ J J 	 	 !AA(!mAq.A.A*AB   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]EG G G 	 	 !AA("'&//:   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   7A..A25A27CCC=7E  EE&7F))F-0F-AH%%H),H)AJJ"%J"AL((L,/L,A
N$$N(+N(
A
P  P$'P$ARR"%R"N)r   r   r   r   r   rP   rN   r   r   `  s(        G G G G GrP   r   c                     t          j        | |f          }t          |          D ]}t          j        |           |d d |f<   |S )N)rG   zerosrangero   )abmatis       rN   r   r     sJ    
(Aq6

C1XX ! !IaLLAAAqD		JrP   MbP?c                    d}d|                      d          z  }d| |z  z  }| }t          |          D ]}t          j        |                     d          dz
            |k                                     rCt          j        |                     d          dz
            |k                                     r n#d|| z  z  }d| |z  z  }|d d d f         | z  |z  }|S )Ni  r   r   )axis)sumr   rG   absall)Pr   max_itercrP_epsits          rN   r   r     s     H	AEEqEMMA	QUAEHoo # #VEII1I%%)**S05577 			q	))A-..499;;	 EQKQK!!!T'
Q"LrP   )r   )r   numpyrG   numpy.randomr   scipy.optimizer   r   scipy.optimize._qapr   rl   numpy.testingr   r   r	   rO   r   filterwarningsrR   r   r   r   r   r   r   rP   rN   <module>r      s        $ $ $ $ $ $ @ @ @ @ @ @ @ @ 5 5 5 5 5 5 = = = = = = = = = =" " "J OPPNH NH NH NH NH NH NH QPNHbC C C C Cn C C CLS S S S S~ S S Sl OPPJ J J J J J J QPJZ       rP   