
    e!hD                     0   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                   j#                  d       G d d	             Z G d
 de      Z G d de      Ze j                   j#                  d       G d d             Zd ZddZy)    N)default_rng)quadratic_assignmentOptimizeWarning)_calc_score)assert_equalassert_assert_warnsc                  R   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       v/var/www/html/diagnosisapp-backend/venv/lib/python3.12/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;qA	
Axx?@A37JHa>    z1ignore:The NumPy global RNG was seeded by callingc                       e Zd ZdZd Zd Zd Zej                  j                  d        Z
ej                  j                  d        Zy)QAPCommonTestsz6
    Base class for `quadratic_assignment` tests.
    c                    t         j                  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(  rBt        |j                  d       t        |j                  t        j                  g d             nAt        |j                  d       t        |j                  t        j                  g d             t        ||| j                  |dd
       y )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   ii##$78
 
 #1a36E+JL 	SWWb!S[["((<"89"1a36D+IK ;;%"%bhh|&<="%bhh|&<=Q$++-0d%C	ErP   c                    t         j                  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(  rBt        |j                  d       t        |j                  t        j                  g d             nAt        |j                  d       t        |j                  t        j                  g d             t	        ||| j
                  |dd      }t        |j                  d       t        |j                  t        j                  g d             y )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   ii##$78HHl"""$ %
 HHl"""$ %
 #1a36E+JL ;;%#&bhh|&<=#&bhh|&<="1a36D+IK 	SWWc"S[["((<"89rP   c                 @   t         j                  j                  d      }t               \  }}}t	        ||| j
                  d|i      }t        d|j                  cxk  xr dk  nc        t        |j                  t        |||j                               t	        ||| j
                  |dd      }t        d|j                  cxk  xr 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  xr 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       y )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   ii##$781h #1a,13<9(5()SWWfQ3;;78 #1a36D+IK(5()SWWfQ3;;78 HHZ(	zz9hy&9:;=="1a=A#+NP(5()S[[+Xi-@A zz299SV,h78::"1a=A#+NPS[[$q!t*,,/SWWe$SWWa   "5%,13<9SWWa SWWa rP   c                 T     t               \  } fd}t        t        |       y )Nc                  <    t         j                  ddi       y )Nz	ekki-ekkiTrX   )r   rY   )rJ   rK   ra   s   rN   fz.QAPCommonTests.test_unknown_options.<locals>.f   s     Adkk*5t)<>rP   )rO   r	   r   )ra   rM   rx   rJ   rK   s   `  @@rN   test_unknown_optionsz#QAPCommonTests.test_unknown_options   s!    1h	> 	_a(rP   c           	         t        j                  d      j                  d      }t        j                  d      j                  d      }t        j                  t
        d      5  t         j                  j                  d      }t        ||| j                  |dd       d d d        t        j                  t        d	      5  t         j                  j                  d       t        ||| j                  d
di       d d d        t        j                  t        d      5  t        ||| j                  ddd       d d d        y # 1 sw Y   xY w# 1 sw Y   VxY w# 1 sw Y   y xY w)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'    IIbM!!&)IIbM!!&)\\,4KL 	J))''*C Adkk14%)HJ	J
 \\-/QR 	>IINN1 Adkk*4e)<>	>
 \\-/RS 	H Adkk12)FH	H 	H	J 	J
	> 	>
	H 	Hs$   $<E;E!EEEE(N)__name__
__module____qualname____doc__rc   rg   ru   r   markthread_unsafery   r    rP   rN   rR   rR   2   sW     EL:<%!N [[) ) [[H HrP   rR   c                       e Zd ZdZd Zd Zy)TestFAQr\   c                 Z   t         j                  j                  d      }t               \  }}}t	        |      }t        ||ddi      }t        |j                  d       t        ||ddi      }t        d|j                  cxk  xr dk  nc        t        |||d	d
      }t        d|j                  cxk  xr dk  nc        t        j                  ||f      t        |      z  }t        |      }t        ||d|i      }t        d|j                  cxk  xr
 dk         y c        y )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   s    ii##$781hF #1a)Q@SWWa  #1a/41HI(5() #1aL1QR(5() GGQFOeAh&q!"1a$;(5()()rP   c           	      
   t        j                  d      }|}t        j                  t        d      5  t        ||ddi       d d d        t        j                  t        d      5  t        ||dd	i       d d d        t        j                  t        d
      5  t        ||dd	i       d d d        t        j                  t              5  t        ||ddi       d d d        t        j                  t        d      5  t        t        j                  d      t        j                  d      dt        j                  d      i       d d d        g dg dg dg}t        j                  t        d      5  t        t        j                  d      t        j                  d      d|i       d d d        y # 1 sw Y   wxY w# 1 sw Y   PxY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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   KKN ]]:-EF 	A Ah/?@	A]]"HJ 	@ A	2?	@ ]]:-MN 	< Ar{;	<
 ]]9% 	A A	3/?@	A ]]IK 	 !AArwwv/	  ]]"IK 	 AAq		 	5	A 	A	@ 	@	< 	<
	A 	A	 		 	sH   F9'GGG A
G-97G99GGG G*-G69HN)r   r   r   rY   r   r   r   rP   rN   r   r      s    F*2'rP   r   c                   "    e Zd ZdZd Zd Zd Zy)Test2opt2optc                    d}t        d      }|j                  ||f      }|j                  ||f      }t        ||| j                  d|i      }t        d      }|j                  ||f      }|j                  ||f      }t        ||| j                  d|i      }t	        |j
                  |j
                         y )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(#JJQFJ#JJQFJ##AquclSTXXtxx(rP   c           	         d}t         j                  j                  d      }|j                  ||f      }|j                  ||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  k7         t        |j                  ||d
z   z  dz         t        |
j                  |dz
  |d
z
  z  dz         y )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  sS   ii##$78JJQFJ#JJQFJ##Aq-2CL:"))A,5688#Aq47%,PR!f"))A,s+T\\#->?@BB#Aq47%>C-EF 	AqsGAI%&TXXq!A#wqy)TXX!ac{1}-rP   c                    t         }t        j                  t        d      5  t	        t        j                  d      t        j                  d      | j                  d |dd      i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      | j                  dt        dd      i       d d d        t        j                  t        d	      5  t	        t        j                  d      t        j                  d      | j                  dt
        j                  j                  ddd      i       d d d        t        j                  t        d
      5  t	        t        j                  d      t        j                  d      | j                  ddt        dd      z  i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      | j                  ddt        dd      z  i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      | j                  dt        j                  d      i       d d d        y # 1 sw Y   ZxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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  sR   ]]HJ 	G !QQ(,*93q!9)EG	G ]]"IK 	 AAt{{(-1*=>	 ]]"IK 	 AAt{{("))..Aq*AB	 ]]"IK 	 AAt{{("}Q/B*BC	 ]]HJ 	 !AAt{{(!mAq.A*AB	 ]]EG 	 !AAt{{("''&/:	 	I	G 	G	 		 		 		 		 	sM   A	KAK=A!KAK*3AK7%ALKKK'*K47L LN)r   r   r   rY   r   r   r   r   rP   rN   r   r   
  s    F).*-rP   r   c                       e Zd Zd Zy)TestQAPOncec                    t        d      }t        j                  t        d      5  t	        |j                  d      |j                  d             d d d        t        j                  t        d      5  t	        |j                  d      |j                  d             d d d        t        j                  t        d      5  t	        |j                  d      |j                  d             d d d        t        j                  t        d	      5  t	        |j                  d      |j                  d
             d d d        t        }t        j                  t        d      5  t	        t        j                  d      t        j                  d      d |dd      i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      dt        dd      i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      dt        j
                  j                  ddd      i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      ddt        dd      z  i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      ddt        dd      z  i       d d d        t        j                  t        d      5  t	        t        j                  d      t        j                  d      dt        j                  d      i       d d d        y # 1 sw Y   txY w# 1 sw Y   3xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   :xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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  sY   (#]]:-AB 	 

6"

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

6"

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

9%

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

6"

6"	 ]]FH 	G !QQ*93q!9)EG	G ]]"IK 	 AA(-1*=>	 ]]"IK 	 AA("))..Aq*AB	 ]]"IK 	 AA("}Q/B*BC	 ]]HJ 	 !AA(!mAq.A*AB	 ]]EG 	 !AA("''&/:	 	}	 	
	 		 		 		G 	G	 		 		 		 		 	s|   +O5+O+O+O+%>O8AP*AP#AP
AP,1A
P8OOO(+O58PPPP),P58QN)r   r   r   r   r   rP   rN   r   r   `  s    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     sA    
((Aq6
C1X !IIaLAqD	!JrP   c                    d}d| j                  d      z  }d| |z  z  }| }t        |      D ]  }t        j                  |j                  d      dz
        |k  j	                         r<t        j                  |j                  d      dz
        |k  j	                         r |S 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	AEEqEMA	QUAEHo #VVEII1I%)*S0557		q	)A-.499; L	 QKQK!T'
Q"# LrP   )gMbP?)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 = ="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   