
    4[g8                        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dlmZ d Zej"                  j%                  d	d
      d        Zd Zd Zd Zd Zd Zd Zd Zej"                  j6                  ej"                  j9                  d      d               Zd ZdZdZ ej"                  jC                   ejD                  d      jF                  dk  d      ej"                  j6                  ej"                  jI                  ddgddiefd die fg      d!                      Z%d" Z&ej"                  jN                  d#        Z(y)$z0
Unit test for Mixed Integer Linear Programming
    N)assert_allcloseassert_array_equal   )magic_square)milpBoundsLinearConstraint)sparsec            	      \   d} t        j                  t        |       5  t        t	        j
                  ddg             d d d        d} t        j                  t        |       5  t        t        j                  d             d d d        t        j                  t        |       5  t        g        d d d        t        j                  t        |       5  t        d        d d d        d} t        j                  t        |       5  t        dd	       d d d        d
} t        j                  t        t        j                  |             5  t        dd       d d d        t        j                  t        t        j                  |             5  t        t        j                  d      g dgddgddgf       d d d        t        j                  t        t        j                  |             5  t        t        j                  d      ddggdgt	        j
                  dg      f       d d d        d} t        j                  t        t        j                  |             5  t        t        j                  d      ddggdgdgf       d d d        d} t        j                  t        |       5  t        ddgt	        j
                  ddg             d d d        d} t        j                  t        |       5  t        g dddg       d d d        t        j                  t        |       5  t        g dg d       d d d        d} t        j                  t        |       5  t        g dddgt	        j
                  ddg      f	       d d d        d} t        j                  t        |       5  t        g dddgg df	       d d d        t        j                  t        |       5  t        g dg dddgf	       d d d        d} t        j                  t        |       5  t        g dddgddgf	       d d d        t        j                  t        |       5  t        g dg dg df	       d d d        t        j                  t        |       5  t        g dg dt               ddgf	       d d d        y # 1 sw Y   xY w# 1 sw Y   Qx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   ZxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dx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   wxY w# 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz`c` must be a dense arraymatchr   z:`c` must be a one-dimensional array of finite numbers with)      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)).z#`integrality` must be a dense array)integralityzJ`integrality` must contain integers 0-3 and be broadcastable to `c.shape`.)r      r   z,Lower and upper bounds must be dense arrays.r   z6`lb`, `ub`, and `keep_feasible` must be broadcastable.)r   r   r   r   z5`bounds.lb` and `bounds.ub` must contain reals and...)z3+4r   r   )pytestraises
ValueErrorr   r
   	coo_arraynpzerosreescapeset)messages    Y/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/optimize/tests/test_milp.pytest_milp_ivr"      s   )G	z	1Vq!f%& 
2 KG	z	1RXXf 
2	z	1R 
2	z	1T
 
2 DG	z	1Qr 
2 MG	z7);	<QB 
=	z7);	<RXXa[	{QFQF&CD 
=	z7);	<RXXa[Ax!f6F6Fs6K&LM 
= =G	z7);	<RXXa[Ax!qc&:; 
= 4G	z	1aV!1!11a&!9: 
2G	z	1YQF+ 
2	z	1YI. 
2 =G	z	1YA(8(8!Q(@AB 
2 GG	z	1YA	23 
2	z	1Y	Aq623 
2 FG	z	1YAA/0 
2	z	1Y	=9: 
2	z	1Y	CE1a=9: 
2	1k 
2	1 
2	1	1	1	1	1 
2	1 
=	<	<	<	<	< 
=	< 
2	1
 
2	1	1	1 
2	1 
2	1	1	1 
2	1	1	1	1	1s   !S$S&SS,S9T+T1<T %)T-3%T:=U2U))U!7U.0U;+V$VV"SSS),S69TTT T*-T7:UUU!U+.U8;VVV"V+Fz%Needs to be fixed in `_highs_wrapper`)runreasonc                 Z   d}ddi}t        j                  t        |      5  t        d|       d d d        t	        d      \  }}}}}ddd	d
}t        ||||fdd|      }| j                         }	d|	j                  v sJ d|	j                  v sJ |j                  rJ y # 1 sw Y   rxY w)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_optionsr;   K   s     ;GtnG	nG	4Q  
5 'q/Aq!WadCG
Aq	&a C   "H%5558<<///{{?{ 
5	4s   B!!B*c                     t        d      \  } }}}}t        || ||fdd      }|j                  dk(  sJ |j                  sJ d}|j                  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                  j                  |      sJ |j                  |j                  cxu r1|j                  cxu r"|j                  cxu r|j                  cxu r	 J  J t        dd      }|j                  dk(  sJ |j                  rJ d}|j                  j                  |      sJ |j                  |j                  cxu r1|j                  cxu r"|j                  cxu r|j                  cxu r	 J  J t        d      }|j                  dk(  sJ |j                  rJ d}|j                  j                  |      sJ |j                  |j                  cxu r1|j                  cxu r"|j                  cxu r|j                  cxu r	 J  J y )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   statusr3   r    
startswith
isinstancexr   ndarrayfunfloatmip_node_countintmip_dual_boundmip_gap)r5   r6   r.   r7   r8   r9   msgs          r!   test_resultrM   _   s   &q/Aq!Wa
Aq	&a
HC::??;;;
BC;;!!#&&&ceeRZZ(((cggu%%%c((#...c((%000ckk5)))&q/Aq!Wa
11a)F$d+-C::??{{?
1C;;!!#&&&GGs)) 3S[[ 3!!3%(UU3.23 4 3 4 3 q
!C::??{{?
7C;;!!#&&&GGs)) 3S[[ 3!!3%(UU3.23 4 3 4 3 r(C::??{{?
7C;;!!#&&&GGs)) 3S[[ 3!!3%(UU3.23 4 3 4 3    c                  j    t        d      } | j                  dk(  sJ t        | j                  dg       y )Nr   r   )r   rF   r   rD   )r9   s    r!   test_milp_optional_argsrP      s+    
q'C77a<<suuqc"rN   c            	         d} t        |       \  }}}}}t        j                  |      }t        |dz  |||fdd      }t	        j
                  |j                        }|j                         |z  j                  | dz  | |       }t	        j                  |d      }	t        j                  j                  |	j                  d      |       t        j                  j                  |	j                  d      |       t        j                  j                  t	        j                  |	      j                         |       t        j                  j                  t	        j                  |	d d d d df         j                         |       y )	Nr   r   r,   r   r=   r   )axisr@   )r   r
   	csc_arrayr   r   roundrD   flattenreshapesumtestingr   diag)
nr5   r6   r.   r7   r8   r9   rD   ssquares
             r!   test_milp_1r]      s!   	A&q/Aq!WaA
11a)F
JC 	A		Q	''1a3AVVAAFJJvzzqz115JJvzzqz115JJrwwv224a8JJrwwva2g7;;=qArN   c                  X   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                  j                  |t        j                  ddg|j                               t         j                  j                  |d
       t	        | |||f      }t         j                  j                  |j                  ddg       t         j                  j                  |j                  d       y )Nr   ir   r      Tr.   r   r   )r.   r   r   r.   r   r   g      @g      !)r   onesinfr	   r   arrayrD   rF   rX   r   broadcast_toshape)r.   r5   b_lb_ulinear_constraintres1res2res3res4res5res6res7xsfunsr9   s                  r!   test_milp_2ru      s   
 
A
a2r(Arvvg,C662,C(C5 !!S#DAD!!2ED!1c3-dCD!"3!4$GD!eS!Wc"1g6eSWc!"g689D !-aeS!Wc"1gF-aeSWc!"gFHID !eS!Wc"1g6-aeSWc!"gFHID 
466466466466466466466J	KB88TXXtxxXXtxx488= >DJJr2??Aq6288#DEJJtR( C
.CJJsuuq#h/JJsww-rN   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       y )Nr   r@   r   r   r   )r      rw   )dtypera   r_   rc   gffffffg?gffffff@)r   	full_likere   float64r	   	ones_liker   r   rF   allcloserD   )r.   r5   rj   ri   r   r   r9   s          r!   test_milp_3r}      s     
BA
a1a&1a&!A
C
,,sRVVG2::
6C"1c3/K,,q/K 
ECCGGR ;;suuq!f%SUUQF)CCC 
,CCGGT"CEEC:&rN   c                  |   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       y )N   r   r   r   r@   ii   r   r   r   ;   g      @   )r   re   r	   r   r   r   rF   rD   )r.   r   r5   ri   rj   r   r   r9   s           r!   test_milp_4r      s     
AAa&K
Q"bAq6"A"&&
!C663
C"1c3/KRVVGRVV$F
qk&&(CCGGR CEEC8$rN   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
       y )N)rb   r_   r@   )r   r   r   )r   r   r   r   )r   r   r   )r   r   r   rw   r   r   i)r   re   r   r	   r   r   rF   )
r.   r   lbubr   r5   ri   rj   r   r9   s
             r!   test_milp_5r      s     	AK	B
&&"&&!	BB^F	IAFF7B-Cb'C"1c3/K
qk&&(C CGGS!rN   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	                  |j
                  d	       y )
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   ra   i>  )r   rf   r   rX   r   rF   )r   A_eqb_eqr.   r9   s        r!   test_milp_6r      su    
 K8845557 8D 88/0D
,-A
tT 2
LCJJsww-rN   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                  |j                  d       y )Ng      ?g        r   r   g      ?r   r   )r   re   r   r	   r   rX   assert_equalrA   )	r.   r   r   r   r   r   r   r   r9   s	            r!   test_infeasible_prob_16609r     s     
c
Aa&K
bffWB
&&"&&	BB^F#J<D5D"4t4K
qk&&(CJJCJJ*rN   r?   z*Iteration limit reached. (HiGHS Status 14:r   zUnhandled 32-bit GCC FP bug)r$   r'   rL   r+   g?
node_limitc                 x   t         j                  j                  d      }|j                  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                  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 y )N   $s8 r   r   )d   r   sizer   
fill_value   )r   r   r   r'   rD   g:0yE>)r   randomdefault_rngintegersfullre   r	   r   rd   r   r   r    rB   allr|   rT   )r'   rL   rngr5   b_lbb_ubr   variable_lbvariable_ubvariable_boundsr   c_vectorr9   rD   tols                  r!   test_milp_timeout_16545r   (  sz    ))

 3
4CQ
+A773BFF7+D7732&D"1dD1K((3-K''#,K[+6O''#,K}H
C ;;!!#&&&s8 	CA
C66$*A%&266!a%4#:2E+FFF66+#q()bffQ+:K5K.LLL;;q"((1+&&&rN   c            	      ^   t         j                  j                  d      } | j                  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                         y )Nr   r   r   )r>   r>   r   r>   r   r   r   r   )r   r   )r   r   r   r   r   re   r	   r   rd   r   r   r3   r   rD   )r   r5   blbur   constraints2r   r   r   r.   rl   rm   refs                r!   test_three_constraints_16878r   M  s    ))

 3
4CQ'A	w	'B	r	"B#AbqE2bq62bq6:#AaFBqGR!W=#AabE2ab62ab6:<K rUBrFBrF+qVR!Wb1g.qrUBqrFBqrF+-L 
!B	BRnO	A/{CD/|DD
qq"bk
BC<<DLL((DFFCEE"DFFCEE"rN   c            	      "   t        j                  g dg dg dg dg      } t        j                  g d      }t        j                  g d      }g d}g }|D ]  }t        |dt         j                  f| ||fd	d
|i      }|j                  |k  sJ |j                  |j
                  |j                  z
  |j
                  z  k(  sJ |j                  |j                          t        j                  t        j                  |      dk        sJ y )Nr   r   r   r   r   r   )g      ?g{Gz?gMbP?r   Tmip_rel_gap)r.   r   r   r   r'   )
r   rf   r   re   rK   rF   rJ   appendr   diff)r   r   r.   mip_rel_gapssol_mip_gapsr   r9   s          r!   test_mip_rel_gap_passdownr   f  s    
 8845557 8D 88/0D
,-A&LL#Q266{tT8J#m[-IK {{k))){{sww););;SWWDDDDCKK( $ 66"'','!+,,,rN   ))__doc__r   numpyr   numpy.testingr   r   r   test_linprogr   scipy.optimizer   r   r	   scipyr
   r"   markxfailr;   rM   rP   r]   ru   r}   r   r   slowtimeoutr   r   	_msg_time	_msg_iterskipifintpitemsizeparametrizer   r   xslowr    rN   r!   <module>r      s|   
  =  & 9 9 9;x uA  CC$%4P#B"".J'.%""& S.  . +& 4	8	 GBGGAJ''!+8  :)U+c/BI.N0<a/@).L.N O'O :
'@#2 - -rN   