
    ^Mh~G              
          d Z ddl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 ej        dk     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        d             Zd Z dZ!dZ"ej        j#        ej                            d          ej        $                     ej%        d          j&        dk     d          ej        j'        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+ej                            d%          d&             Z,d' Z-dS )(z0
Unit test for Mixed Integer Linear Programming
    N)assert_allcloseassert_array_equal   )magic_square)milpBoundsLinearConstraint)sparsel        c            	      *   d} t          j        t          |           5  t          t	          j        ddg                     d d d            n# 1 swxY w Y   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   t          j        t          t          j	        |                     5  t          t          j        d          ddggdgt	          j        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          ddgt	          j        ddg                     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t	          j        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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 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    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_milp.pytest_milp_ivr"      sr
   )G	z	1	1	1 ' 'Vq!f%%&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' KG	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	z7););	<	<	< N NRXa[[Ax!f6Fs6K6K&LMMMMN N N N N N N N N N N N N N N =G	z7););	<	<	< < <RXa[[Ax!qc&:;;;;< < < < < < < < < < < < < < < 4G	z	1	1	1 ; ;aV!11a&!9!9::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;G	z	1	1	1 , ,YYYQF++++, , , , , , , , , , , , , , ,	z	1	1	1 / /YYYIII..../ / / / / / / / / / / / / / / =G	z	1	1	1 C CYYYA(8!Q(@(@ABBBBC C C C C C C C C C C C C C C 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::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;sC  $AAA6"B$$B(+B(
C&&C*-C*D((D,/D,E..E25E2(GG
G
>.H88H<?H<0>J::J>J>4,L,,L03L0(NNN0OOO8PP!P,Q::Q>Q>"SSS.TTT<U""U&)U&V..V25V2'XXX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_optionsr;   N   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   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   b   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   rF   r   rD   )r9   s    r!   test_milp_optional_argsrP      s6    
q''C7a<<<<suqc"""""rN   c            	      D   d} t          |           \  }}}}}t          j        |          }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
   	csc_arrayr   r   roundrD   flattenreshapesumtestingr   diag)
nr5   r6   r.   r7   r8   r9   rD   ssquares
             r!   test_milp_1r]      sZ   	A&q//Aq!WaA
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ArN   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   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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-----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           d S )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
,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:&&&&&rN   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   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63
C"1c3//KRVGRV$$F
qk&&( ( (CCGR   CEC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
           d S )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	IIIAF7B-Cb'C"1c3//K
qk&&( ( (C CGS!!!!!rN   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   ra   i>  )r   rf   r   rX   r   rF   )r   A_eqb_eqr.   r9   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-----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        d           d S )N      ?        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
bfWB
&"&	BB^^F#J<D5D"4t44K
qk&&( ( (CJCJ*****rN   r?   z*Iteration limit reached. (HiGHS Status 14:z-Often buggy, revisit with callbacks, gh-19255)r$   r   zUnhandled 32-bit GCC FP bugr'   rL   r+   g?
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'   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   )  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++&&&&&&&rN   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   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   Q  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"""""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 ]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   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   j  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"',''!+,,,,,,,rN   z&Upstream / Wrapper issue, see gh-20116c                  f   d} t          j        d| gd|  gg          }t          j        | dg          }t          ||          }t          ddgddg          }t          j        ddg          }t	          |||d          }|j        dk    sJ t          j        ||j        z  |k               sJ d S )Nl    J)gi oY@r   )r5   r   r   r=   )r   rf   r	   r   r   rA   r   rD   )hr5   r6   r   r   r.   r9   s          r!   test_large_numbers_gh20116r     s    A
8Q-(QB011A
!QA"Q1---KQFQF##F
!QA
F
J
J
JC:????6!ce)a-       rN   c                     ddl m}  dd l}|j        } |j        g d          } |j        g dg dg dg dg dg d	g d
g dg dg	          } |j        | | | | | | | | | g	          } |j        g d          }t          |||          }d}d}	 | ||||	ddi          }
 | ||||	ddi          }|
j        |j        k    sJ t          |
j        |j                   t          dd          }	g d}g d}g dg dg dg dg dg dg dg dg}g d}t          ||          } | |||	|ddi           }
 | |||	|ddi           }|
j        |j        k    sJ t          |
j        |j                   d S )!Nr   )r   )g4xgUigYnaěg)t;*g&QgZRgR߿g]XPC޿g>]ٿgLYT]ؿ1V׿r   gщoֿgz|RXo5Կg[TrfʿgL鿿g2wVj./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         9r   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   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   r   r   )	g      Y@r   r   r   r   r   r   r   r   r   r,   r*   T)r.   r   r   r   r'   F)r   r   )r   r   r   r   )r   gw0#@igx0Í)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-   )
scipy.optimizer   numpyre   rf   r	   rA   r   rD   r   )r   r   re   r.   r5   r   r   r   r   r   r1r2r   s                r!   test_presolve_gh18907r     s   ######
&C 	 6 6 6 	7 	7A 	 K K KP P PM M ML L LO O OL L LJ J JL L LP P P!Q 	R 	RA$ 
C4#tcTC4#tcTC4H	I	IB	888	9	9B"1b"--KKF	{F!4(
* 
* 
*B	{F!5)
+ 
+ 
+B9	!!!!BD"$ qQF,,K...A	|||^^^^^^	///===...	JA	+	+	+B"1,,,K	{F%
E/B
D 
D 
DB	{F%
E/B
D 
D 
DB9	!!!!BD"$rN   ).__doc__r   sysr   r   numpy.testingr   r   r   test_linprogr   r   r   r   r	   scipyr
   maxsize	_IS_32BITr"   markxfailr;   rM   rP   r]   ru   r}   r   r   xslowr   r   	_msg_time	_msg_iterthread_unsafeskipifintpitemsizeslowparametrizer   r   r   r   r    rN   r!   <module>r      s    
			 



     = = = = = = = =  & & & & & & 9 9 9 9 9 9 9 9 9 9       [5 	9; 9; 9;x uA  C C C C$%4 %4 %4P# # #B B B"". ". ".J' ' '.% % %"" " "& . . . + + +& 4	8	IJJGBGAJJ'!+8  : :)U+c/BI.N0<a/@).L.N O O' 'O O : : KJ '@# # #2 - - -8 BCC	! 	! DC	!7  7  7  7  7 rN   