
    Ug?                         d dl Z d dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ d Z G d d          Z G d d	e          Z G d
 de          Z G d d          Zd ZddZdS )    N)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   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       m/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test_quadratic_assignment.pychr12crN      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>    c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )QAPCommonTestsz6
    Base class for `quadratic_assignment` tests.
    c                 D    t           j                            d           d S Nr   rF   randomseedselfs    rM   setup_methodzQAPCommonTests.setup_method5       
	qrO   c                 l   g dg dg dg dg}g dg dg dg dg}t          ||| j        dd	d
          }t          |j        d           t          |j        t          j        g d                     t          ||| j        d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
          }d S )N)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   r   Frngmaximizemethodoptionsr   r   rE   rA   r   Tfaqr   )r   rE   rA   r   r-   )r   rA   r   rE   )r   r`   r   funcol_indrF   rG   rX   rI   rJ   ress       rM   test_accuracy_1zQAPCommonTests.test_accuracy_1<   sv   \\\\\\\\
 \\\\\\\\
 #1a34%+H+HJ J JSWb!!!S["(<<<"8"8999"1a34$+G+GI I I ;%"%%%bh|||&<&<===="%%%bh|||&<&<==="1a34$+G+GI I IrO   c                 ~   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
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          }t	          |j        d           t	          |j        t          j        g d                     d S )N)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   r   Fr\   r_   rc      )r   r   rA   rE      rb   Ti  )rE   rA   r   r   )rF   rG   r   r`   r   rd   re   rf   s       rM   test_accuracy_2zQAPCommonTests.test_accuracy_2_   sh   Hlll"ll"ll"ll$ % %
 Hlll"ll"ll"ll$ % %
 #1a34%+H+HJ J J;%#&&&bh|||&<&<====#&&&bh|||&<&<==="1a34$+G+GI I ISWc"""S["(<<<"8"899999rO   c                    t                      \  }}}t          ||| j        ddi          }t          d|j        cxk    odk     nc            t          |j        t          |||j                             t          ||| j        d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|i          }t          d|j        cxk    odk     nc            t          |j        |         ||                    t          j
        t          j        t          |                    |g          j        }t          ||| j        d|i          }t          |j        |d d df         j                   t          |j        d           t          |j        d           t          j        d          }t          ||| j        ddi          }t          |j        d           t          |j        d           d S )Nr]   r   r_   +  R  Tr\   i! iL )rB   rC   r   partial_matchr   )r   r   )rN   r   r`   r   rd   r   _scorere   rF   rG   asarrayTarangelennitempty)rX   rI   rJ   rL   rg   	seed_costrV   rw   s           rM   test_accuracy_3zQAPCommonTests.test_accuracy_3z   s   1h #1a,11:7 7 7((((5(((()))SWfQ3;77888 #1a34$+G+GI I I((((5(((()))SWfQ3;77888 HZZZ((	z9hy&9:;;="1a,;T+BD D D((((5(((()))S[+Xi-@AAA z29SVV,,h788:"1a,;T+BD D DS[$qqq!t*,///SWe$$$SWa      "5%,11:7 7 7SWa   SWa     rO   c                 h     t                      \  } fd}t          t          |           d S )Nc                  <    t           j        ddi           d S )Nz	ekki-ekkiTr_   )r   r`   )rI   rJ   rX   s   rM   fz.QAPCommonTests.test_unknown_options.<locals>.f   s4     Adk*5t)<> > > > > >rO   )rN   r   r   )rX   rL   r|   rI   rJ   s   `  @@rM   test_unknown_optionsz#QAPCommonTests.test_unknown_options   sO    1h	> 	> 	> 	> 	> 	> 	> 	_a(((((rO   N)	__name__
__module____qualname____doc__rY   rh   rl   ry   r}    rO   rM   rQ   rQ   1   sn           I I IF: : :6%! %! %!N) ) ) ) )rO   rQ   c                       e Zd ZdZd Zd ZdS )TestFAQrc   c                 J   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	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 )Nmaxiterr2   ra   shuffle_inputTrn   ro   r   
randomized)r]   P0r   )rN   ru   r   r   rv   r   rd   rF   onesfloat_doubly_stochastic)rX   rI   rJ   rL   rK   rg   Ks          rM   test_optionszTestFAQ.test_options   sp   1hFF #1a,5q>; ; ;SWa    #1a,;T+BD D D((((5(((())) #1a34L+I+IK K K((((5(((())) GQFOOeAhh&q!!"1a,0!96 6 6((((5(((()))))rO   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 )NrE   zInvalid 'P0' parametermatchr   rU   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   identitypytestraises
ValueErrorr   	TypeErrorr   )rX   rI   rJ   r   s       rM   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   r`   r   r   r   rO   rM   r   r      s7        F* * *6' ' ' ' 'rO   r   c                   $    e Zd ZdZd Zd Zd ZdS )Test2opt2optc                    d}t           j                            ||          }t           j                            ||          }t          ||| j                  }t           j                            d           t           j                            ||          }t           j                            ||          }t          ||| j                  }t          |j        |j                   d S )N   )r`   r   )rF   rU   randr   r`   rV   r   rv   )rX   rK   rI   rJ   res1res2s         rM   test_deterministiczTest2opt.test_deterministic   s    INN1a  INN1a  #Aq===
	qINN1a  INN1a  #Aq===TXtx(((((rO   c           	         d}t           j                            ||          }t           j                            ||          }t          ||| j        ddi          }t          j        t          j        d          |j        g          j        }t          ||| j        d|d          }ddg}t          j        t          j        d          |         |j        |         g          j        }t          ||| j        d||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 )
Nr2   r]   r   r_   )r]   partial_guessrE   rB   )r]   r   rp   r   )rF   rU   r   r   r`   rG   rt   re   rs   r   rv   r   )
rX   rK   rI   rJ   r   guessr   fixr   res3s
             rM   test_partial_guesszTest2opt.test_partial_guess  so   INN1a  INN1a  #Aq-2AJ8 8 8")A,,5668#Aq45,N,NP P P!f")A,,s+T\#->?@@B#Aq45>C-E -EF F F 	AqsGAI%&&&TXq!A#wqy)))TX!ac{1}-----rO   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   rA   r   r2   rE   r_   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_matrixr   r   r   r   rF   r   r`   rU   r   r   rX   _rms     rM   r   z'Test2opt.test_specific_input_validation  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   r`   r   r   r   r   rO   rM   r   r      sF        F) ) ) . . .&- - - - -rO   r   c                       e Zd Zd Zd ZdS )TestQAPOncec                 D    t           j                            d           d S rS   rT   rW   s    rM   rY   zTestQAPOnce.setup_methodI  rZ   rO   c                 	   t          j        t          d          5  t          t          j                            d          t          j                            d                     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 d            n# 1 swxY w Y   t          j        t          d          5  t          t          j                            d          t          j                            d                     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 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 )Nz`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 size)rB   rB   z.`partial_match` can have only as many seeds asrA   rp   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   r   r   r   rF   rU   r   r   r   r   r   s     rM   test_common_input_validationz(TestQAPOnce.test_common_input_validationM  s&   ]:-ABBB 	 	 	  ((	  ((  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ]:-ABBB 	 	 	  ((	  ((  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]"EG G G 	 	 	  ++	  ++  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]BD D D 	 	 !	  ((	  ((  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]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   AA33A7:A7AC00C47C4AE--E14E1AG**G.1G.AI&&I*-I*AKK#&K#AM))M-0M-A
O%%O),O)A
Q!!Q%(Q%ASS#&S#N)r~   r   r   rY   r   r   rO   rM   r   r   H  s7          F F F F FrO   r   c                     t          j        | |f          }t          |          D ]}t          j        |           |d d |f<   |S )N)rF   zerosrangert   )abmatis       rM   r   r     sJ    
(Aq6

C1XX ! !IaLLAAAqD		JrO   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   rF   absall)Pr   max_itercrP_epsits          rM   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"LrO   )r   )r   numpyrF   scipy.optimizer   r   scipy.optimize._qapr   rq   numpy.testingr   r   r   rN   rQ   r   r   r   r   r   r   rO   rM   <module>r      sg        @ @ @ @ @ @ @ @ 5 5 5 5 5 5 = = = = = = = = = =" " "Jv) v) v) v) v) v) v) v)rE E E E En E E EPS S S S S~ S S SlK K K K K K K K\       rO   