
     h*6              	          d Z ddlZddlZddlmZmZ ddlZddlm	Z	 ddl
mZmZmZ d Zej                            dd	
          d             Zd Zd Zd Zd Zd Zd Zd Zej        j        ej                            d          d                         Zd ZdZdZej                             ej         d          j!        dk     d          ej        j        ej                            d          ej        "                    ddgddiefd diefg          d!                                                 Z#d" Z$ej        j%        d#             Z&dS )$z0
Unit test for Mixed Integer Linear Programming
    N)assert_allcloseassert_array_equal   )magic_square)milpBoundsLinearConstraintc                     d} t          j        t          |           5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t          |           5  t          g            d d d            n# 1 swxY w Y   t          j        t          |           5  t          d            d d d            n# 1 swxY w Y   d} t          j        t          |           5  t          dd           d d d            n# 1 swxY w Y   d} t          j        t          t          j        |                     5  t          dd	           d d d            n# 1 swxY w Y   t          j        t          t          j        |                     5  t          t	          j        d
          g dgdd
gdd
gf	           d d d            n# 1 swxY w Y   d} t          j        t          t          j        |                     5  t          t	          j        d
          ddggdgdgf	           d d d            n# 1 swxY w Y   d} t          j        t          |           5  t          g dddg           d d d            n# 1 swxY w Y   t          j        t          |           5  t          g dg d           d d d            n# 1 swxY w Y   d} t          j        t          |           5  t          g dddgg df           d d d            n# 1 swxY w Y   t          j        t          |           5  t          g dg dddgf           d d d            n# 1 swxY w Y   d} t          j        t          |           5  t          g dddgd
dgf           d d d            n# 1 swxY w Y   t          j        t          |           5  t          g dg dg df           d d d            n# 1 swxY w Y   t          j        t          |           5  t          g dg dt                      ddgf           d d d            d S # 1 swxY w Y   d S )Nz:`c` must be a one-dimensional array of finite numbers withmatch)      z3`bounds` must be convertible into an instance of...r   
   boundsz<`constraints` (or each element within `constraints`) must be)constraintsr   )r      r   r   z,The shape of `A` must be (len(b_l), len(c)).zJ`integrality` must contain integers 0-3 and be broadcastable to `c.shape`.)integrality)r      r   z6`lb`, `ub`, and `keep_feasible` must be broadcastable.)r   r   r   r   r   z5`bounds.lb` and `bounds.ub` must contain reals and...)z3+4r   r   )	pytestraises
ValueErrorr   npzerosreescapeset)messages    Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_milp.pytest_milp_ivr       s   JG	z	1	1	1  RXf              	z	1	1	1  R              	z	1	1	1  T


               DG	z	1	1	1  Qr               MG	z7););	<	<	<    QB                             	z7););	<	<	< E ERXa[[			{QFQF&CDDDDE E E E E E E E E E E E E E E =G	z7););	<	<	< < <RXa[[Ax!qc&:;;;;< < < < < < < < < < < < < < <G	z	1	1	1 , ,YYYQF++++, , , , , , , , , , , , , , ,	z	1	1	1 / /YYYIII..../ / / / / / / / / / / / / / / GG	z	1	1	1 4 4YYYA			233334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	z	1	1	1 4 4YYY			Aq6233334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 FG	z	1	1	1 1 1YYYAA/00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	z	1	1	1 ; ;YYY			===9::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	z	1	1	1 ; ;YYY			CEE1a=9::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   "AAA2BBB4CCC8DDDE..E25E2&.G  G$'G$,III:JJ #J K$$K(+K(L22L69L6M>>NN&OOO2PPP>'Q22Q69Q6Fz%Needs to be fixed in `_highs_wrapper`)runreasonc                 d   d}ddi}t          j        t          |          5  t          d|           d d d            n# 1 swxY w Y   t	          d          \  }}}}}ddd	d
}t          ||||fdd|          }|                                 }	d|	j        v sJ d|	j        v sJ |j        rJ d S )Nz*Unrecognized options detected: {'ekki'}...ekkiTr   r   )optionsr   F皙?)disppresolve
time_limitr   r   cr   r   r   r%   zPresolve is switched offzTime Limit Reached)r   warnsRuntimeWarningr   r   
readouterroutsuccess)
capsysr   r%   Abr,   numbersMrescaptureds
             r   test_milp_optionsr9   <   s'    ;GtnG	nG	4	4	4 ! !Q    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 'q//Aq!WadCCG
Aq	&a     C   ""H%55558<////{?s   A  AAc                     t          d          \  } }}}}t          || ||fdd          }|j        dk    sJ |j        sJ d}|j                            |          sJ t          |j        t          j	                  sJ t          |j
        t                    sJ t          |j        t                    sJ t          |j        t                    sJ t          |j        t                    sJ t          d          \  } }}}}t          |dz  | ||fdddd	i
          }|j        dk    sJ |j        rJ d}|j                            |          sJ |j
        |j        cxu r!|j        cxu r|j        cxu r|j        cxu r	 n J t          dd          }|j        dk    sJ |j        rJ d}|j                            |          sJ |j
        |j        cxu r!|j        cxu r|j        cxu r|j        cxu r	 n J t          d          }|j        dk    sJ |j        rJ d}|j                            |          sJ |j
        |j        cxu r!|j        cxu r|j        cxu r|j        cxu r	 n J d S )Nr   r*   r   r,   r   r   r   r   z6Optimization terminated successfully. (HiGHS Status 7:   r)   r&   r+   %Time limit reached. (HiGHS Status 13:)r   r   r   z+The problem is infeasible. (HiGHS Status 8:r>   z+The problem is unbounded. (HiGHS Status 10:)r   r   statusr1   r   
startswith
isinstancexr   ndarrayfunfloatmip_node_countintmip_dual_boundmip_gap)r3   r4   r,   r5   r6   r7   msgs          r   test_resultrK   P   s   &q//Aq!Wa
Aq	&a
H
H
HC:????;;
BC;!!#&&&&&ceRZ(((((cgu%%%%%c(#.....c(%00000ck5)))))&q//Aq!Wa
11a)F$d+- - -C:????{?
1C;!!#&&&&&Gs) 3 3 3 3S[ 3 3 3 3!3 3 3 3%(U3 3 3 3.23 3 3 3 3 q
!
!
!C:????{?
7C;!!#&&&&&Gs) 3 3 3 3S[ 3 3 3 3!3 3 3 3%(U3 3 3 3.23 3 3 3 3 r((C:????{?
7C;!!#&&&&&Gs) 3 3 3 3S[ 3 3 3 3!3 3 3 3%(U3 3 3 3.23 3 3 3 3 3 3    c                  j    t          d          } | j        dk    sJ t          | j        dg           d S )Nr   r   )r   rD   r   rB   )r7   s    r   test_milp_optional_argsrN   x   s6    
q''C7a<<<<suqc"""""rL   c            	         d} t          |           \  }}}}}t          |dz  |||fdd          }t          j        |j                  }|                                |z                      | dz  | |           }t          j        |d          }	t          j        	                    |	                    d          |           t          j        	                    |	                    d          |           t          j        	                    t          j
        |	                                          |           t          j        	                    t          j
        |	d d d d df                                                   |           d S )	Nr   r   r*   r   r;   r   )axisr>   )r   r   r   roundrB   flattenreshapesumtestingr   diag)
nr3   r4   r,   r5   r6   r7   rB   ssquares
             r   test_milp_1rZ      sJ   	A&q//Aq!Wa
11a)F
J
J
JC 	A			Q	''1a33AVAAFJvzzqz111555Jvzzqz111555Jrwv2244a888Jrwvaaa2g77;;==qAAAAArL   c                     t          j        d           } ddgddgg}dt           j         g}t           j        dg}t          |||          }t	          | |||fd          }t	          | |d          }t	          | |||fgd          }t	          | |gd          }t	          | d|d d         |d d         |d d         f|dd          |dd          |dd          fg	          }	t	          | dt          |d d         |d d         |d d                   t          |dd          |dd          |dd                    g	          }
t	          | d|d d         |d d         |d d         ft          |dd          |dd          |dd                    g	          }t          j        |j        |j        |j        |j        |	j        |
j        |j        g          }t          j        |j        |j        |j        |j        |	j        |
j        |j        g          }t           j        	                    |t          j
        ddg|j                             t           j        	                    |d
           t	          | |||f          }t           j        	                    |j        ddg           t           j        	                    |j        d           d S )Nr   ir   r      Tr,   r   r   )r,   r   r   r,   r   r   g      @g      !)r   onesinfr	   r   arrayrB   rD   rU   r   broadcast_toshape)r,   r3   b_lb_ulinear_constraintres1res2res3res4res5res6res7xsfunsr7   s                  r   test_milp_2rr      s   
 
A
a2r(Arvg,C62,C(C55 !!S#DAAAD!!2EEED!1c3-dCCCD!"3!4$GGGD!eS!Wc"1"g6eSWc!""g689 9 9D !-aeS!Wc"1"gFF-aeSWc!""gFFHI I ID !eS!Wc"1"g6-aeSWc!""gFFHI I ID 
46464646464646J	K	KB8TXtxXtx48= > >DJr2?Aq628#D#DEEEJtR((( C
.
.
.CJsuq#h///Jsw-----rL   c                  
   ddg} ddgddgddgg}g d}t          j        |t           j         t           j                  }t	          |||          }t          j        |           }t          | ||          }t          |j        d	           t          j	        |j
        ddg          st          j	        |j
        ddg          sJ t          | |
          }t          |j        d           t          |j
        ddg           d S )Nr   r>   r   r   r   )r      rt   )dtyper^   r\   r`   gffffffg?gffffff@)r   	full_likerb   float64r	   	ones_liker   r   rD   allcloserB   )r,   r3   rg   rf   r   r   r7   s          r   test_milp_3rz      s    
BA
a1a&1a&!A
++C
,sRVG2:
6
6
6C"1c3//K,q//K 
E
E
ECCGR   ;suq!f%%CSUQF)C)CCCC 
,
,
,CCGT"""CEC:&&&&&rL   c                  j   ddg} ddg}ddgddgddgg}dt           j         t           j         g}t           j        dd	g}t          |||          }t          t           j         t           j                  }t	          | |||
          }t          |j        d           t          |j        ddg           d S )N   r   r   r   r>   ii   r   r   r   ;   g      @   )r   rb   r	   r   r   r   rD   rB   )r,   r   r3   rf   rg   r   r   r7   s           r   test_milp_4r      s     
AAa&K
Q"bAq6"A"&
!C63
C"1c3//KRVGRV$$F
qk&&( ( (CCGR   CEC8$$$$$rL   c                     g d} g d}g d}t           j        t           j        dg}t          ||          }g dg dg}t           j         dg}ddg}t          |||          }t	          | |||	          }	t          |	j        d
           d S )N)r_   r\   r>   )r   r   r   )r   r   r   r   )r   r   r   )r   r   r   rt   r   r   i)r   rb   r   r	   r   r   rD   )
r,   r   lbubr   r3   rf   rg   r   r7   s
             r   test_milp_5r      s     	A))K	B
&"&!	BB^^F	IIIAF7B-Cb'C"1c3//K
qk&&( ( (C CGS!!!!!rL   x   c                     d} t          j        g dg dg dg dg          }t          j        g d          }t          j        g d          }t          ||||f|           }t           j                            |j        d	           d S )
Nr      r]      !      r      r   '      r      r               r         r   &   r   r   )   r   r   $   r   r   r   r   i  i(  i:,  i/  r   r   r]      r   r   r   r   r^   i>  )r   rc   r   rU   r   rD   )r   A_eqb_eqr,   r7   s        r   test_milp_6r      s    
 K84445555555557 8 8D 8///00D
,,,--A
tT 2
L
L
LCJsw-----rL   c                  &   ddg} ddg}dt           j         g}t           j        t           j        g}t          ||          }ddgg}dg}t          |||          }t	          | |||          }t           j                            |j        d           d S )Ng      ?g        r   r   g      ?r   r   )r   rb   r   r	   r   rU   assert_equalr?   )	r,   r   r   r   r   r   r   r   r7   s	            r   test_infeasible_prob_16609r     s     
c
Aa&K
bfWB
&"&	BB^^F#J<D5D"4t44K
qk&&( ( (CJCJ*****rL   r=   z*Iteration limit reached. (HiGHS Status 14:r|   zUnhandled 32-bit GCC FP bug)r"   ih  r%   rJ   r)   r   
node_limitc                    t           j                            d          }|                    ddd          }t          j        dt           j                   }t          j        dd          }t          |||          }t          j        d          }t          j        d          }t          ||          }	t          j        d          }
t          j        d           }t          ||
|	|| 	          }|j                            |          sJ |d
         J |d
         }d}t          j        ||z
  ||z  k              rt          j        ||z  ||z   k              sJ t          j        ||z
  |k              rt          j        |||z   k              sJ t          j        |t          j        |                    sJ d S )N   $s8 r   r   )d   r   sizer   
fill_value   )r   r   r   r%   rB   g:0yE>)r   randomdefault_rngintegersfullrb   r	   r   ra   r   r   r   r@   allry   rQ   )r%   rJ   rngr3   b_lbb_ubr   variable_lbvariable_ubvariable_boundsr   c_vectorr7   rB   tols                  r   test_milp_timeout_16545r     s    )

 3
4
4CQ
++A73BF7+++D732&&&D"1dD11K(3--K'#,,K[+66O'#,,K}H
  C ;!!#&&&&&s8 	CA
C6$*A%&&F26!a%4#:2E+F+FFFF6+#q())LbfQ+:K5K.L.LLLL;q"(1++&&&&&&&rL   c            	         t           j                            d          } |                     ddd          }t          j        dt           j                   }t          j        dd          }t          |d d	         |d d	         |d d	                   t          |d	d
         |d	d
         |d	d
                   t          |d
d          |d
d          |d
d                    g}|d d	         |d d	         |d d	         f|d	d
         |d	d
         |d	d
         f|d
d          |d
d          |d
d          fg}t          j        d          }t          j        d          }t          ||          }t          j        d           }	t          |	||          }
t          |	||          }t          |	||||f          }|
j        r|j        sJ t          |
j        |j                   t          |j        |j                   d S )Nr   r   r   )r<   r<   r   r<   r   r   r   r   )r   r   )r   r   r   r   r   rb   r	   r   ra   r   r   r1   r   rB   )r   r3   blbur   constraints2r   r   r   r,   ri   rj   refs                r   test_three_constraints_16878r   >  s    )

 3
4
4CQ''A	w	'	'	'B	r	"	"	"B#AbqbE2bqb62bqb6::#AacFBqsGR!W==#AabbE2abb62abb6::<K rrUBrrFBrrF+qsVR!Wb1g.qrrUBqrrFBqrrF+-L 
!B	BRnnO	A/{CCCD/|DDDD
qq"bk
B
B
BC<(DL(((DFCE"""DFCE"""""rL   c            	         t          j        g dg dg dg dg          } t          j        g d          }t          j        g d          }g d}g }|D ]p}t          |dt           j        f| ||fd	d
|i          }|j        |k    sJ |j        |j        |j        z
  |j        z  k    sJ |                    |j                   qt          j        t          j	        |          dk               sJ d S )Nr   r   r   r   r   r   )g      ?g{Gz?gMbP?r   Tmip_rel_gap)r,   r   r   r   r%   )
r   rc   r   rb   rI   rD   rH   appendr   diff)r   r   r,   mip_rel_gapssol_mip_gapsr   r7   s          r   test_mip_rel_gap_passdownr   W  s>   
 84445555555557 8 8D 8///00D
,,,--A&&&LL# ) )Q26{tT8J#m[-IK K K {k)))){sw);;SWDDDDDCK((((
 6"',''!+,,,,,,,rL   )'__doc__r   numpyr   numpy.testingr   r   r   test_linprogr   scipy.optimizer   r   r	   r    markxfailr9   rK   rN   rZ   rr   rz   r   r   slowtimeoutr   r   	_msg_time	_msg_iterskipifintpitemsizeparametrizer   r   xslowr    rL   r   <module>r      s    
			     = = = = = = = =  & & & & & & 9 9 9 9 9 9 9 9 9 9+; +; +;\ uA  C C C C$%4 %4 %4P# # #B B B ". ". ".J' ' '.% % %"" " "& S. .  . + + +& 4	8	 GBGAJJ'!+8  : :S)U+b/A9.M0<a/@).L.N O O' 'O O  : :'@# # #2 - - - - -rL   