
    (ph~G              
       &   S r SSKrSSKrSSKrSSKJrJr  SSKrSSK	J
r
  SSKJrJrJr  SSKJr  \R"                  S:  rS	 r\R(                  R+                  S
SS9S 5       rS rS rS rS rS rS rS r\R(                  R<                  S 5       rS r Sr!Sr"\R(                  RF                  \R(                  R+                  SS9\R(                  RI                  \RJ                  " S5      RL                  S:  SS9\R(                  RN                  \R(                  RQ                  SS/SS 0\!4S!S0\"4/5      S" 5       5       5       5       5       r)S# r*\R(                  R<                  S$ 5       r+\R(                  R+                  S%S9S& 5       r,S' r-g)(z0
Unit test for Mixed Integer Linear Programming
    N)assert_allcloseassert_array_equal   )magic_square)milpBoundsLinearConstraint)sparsel        c            	         Sn [         R                  " [        U S9   [        [        R
                  " SS/5      5        S S S 5        Sn [         R                  " [        U S9   [        [        R                  " S5      5        S S S 5        [         R                  " [        U S9   [        / 5        S S S 5        [         R                  " [        U S9   [        S 5        S S S 5        Sn [         R                  " [        U S9   [        SSS	9  S S S 5        S
n [         R                  " [        [        R                  " U 5      S9   [        SSS9  S S S 5        [         R                  " [        [        R                  " U 5      S9   [        [        R                  " S5      / SQ/SS/SS/4S9  S S S 5        [         R                  " [        [        R                  " U 5      S9   [        [        R                  " S5      SS//S/[        R
                  " S/5      4S9  S S S 5        Sn [         R                  " [        [        R                  " U 5      S9   [        [        R                  " S5      SS//S/S/4S9  S S S 5        Sn [         R                  " [        U S9   [        SS/[        R
                  " SS/5      S9  S S S 5        Sn [         R                  " [        U S9   [        / SQSS/S9  S S S 5        [         R                  " [        U S9   [        / SQ/ SQS9  S S S 5        Sn [         R                  " [        U S9   [        / SQSS/[        R
                  " SS/5      4S	9  S S S 5        Sn [         R                  " [        U S9   [        / SQSS// SQ4S	9  S S S 5        [         R                  " [        U S9   [        / SQ/ SQSS/4S	9  S S S 5        Sn [         R                  " [        U S9   [        / SQSS/SS/4S	9  S S S 5        [         R                  " [        U S9   [        / SQ/ SQ/ SQ4S	9  S S S 5        [         R                  " [        U S9   [        / SQ/ SQ[        5       SS/4S	9  S S S 5        g ! , (       d  f       GNL= f! , (       d  f       GN= f! , (       d  f       GN = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNM= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNo= f! , (       d  f       GNO= f! , (       d  f       GN1= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNm= f! , (       d  f       g = f)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    Q/var/www/html/venv/lib/python3.13/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   "R! R"R'R9>S S )S/;T'T#T% T7U	'UU- U?6V*V#V5
R
R$'
R69
S
S
S,/
S>
T
T"%
T47
U	
U
U*-
U<?
V
V #
V25
WFz%Needs to be fixed in `_highs_wrapper`)runreasonc                 ^   SnSS0n[         R                  " [        US9   [        SUS9  S S S 5        [	        S5      u  p4pVnSSS	S
.n[        XSXD4SSUS9nU R                  5       n	SU	R                  ;   d   eSU	R                  ;   d   eUR                  (       a   eg ! , (       d  f       Ny= f)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Q  
5 'q/A!adCG
A	&a C   "H%5558<<///{{?{ 
5	4s   B
B,c                  D   [        S5      u  pp#n[        X X4SSS9nUR                  S:X  d   eUR                  (       d   eSnUR                  R                  U5      (       d   e[        UR                  [        R                  5      (       d   e[        UR                  [        5      (       d   e[        UR                  [        5      (       d   e[        UR                  [        5      (       d   e[        UR                  [        5      (       d   e[        S5      u  pp#n[        US-  XU4SSSS	0S
9nUR                  S:X  d   eUR                  (       a   eSnUR                  R                  U5      (       d   eUR                  UR                  s=L a5  UR                  s=L a%  UR                  s=L a  UR                  s=L a   b   e   e[        SSS9nUR                  S:X  d   eUR                  (       a   eSnUR                  R                  U5      (       d   eUR                  UR                  s=L a5  UR                  s=L a%  UR                  s=L a  UR                  s=L a   b   e   e[        S5      nUR                  S:X  d   eUR                  (       a   eSnUR                  R                  U5      (       d   eUR                  UR                  s=L a5  UR                  s=L a%  UR                  s=L a  UR                  s=L a   b   e   eg )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/A!a
A	&a
HC::??;;;
BC;;!!#&&&&ceeRZZ((((cggu%%%%c((#....c((%0000ckk5))))&q/A!a
11)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                  l    [        S5      n U R                  S:X  d   e[        U R                  S/5        g )Nr   r   )r   rF   r   rD   )r9   s    r!   test_milp_optional_argsrP      s+    
q'C77a<<suuqc"rN   c            	         Sn [        U 5      u  pp4n[        R                  " U5      n[        US-  XU4SSS9n[        R
                  " UR                  5      nUR                  5       U-  R                  U S-  X 5      n[        R                  " USS9n	[        R                  R                  U	R                  SS9U5        [        R                  R                  U	R                  SS9U5        [        R                  R                  [        R                  " U	5      R                  5       U5        [        R                  R                  [        R                  " U	S S 2S S S24   5      R                  5       U5        g )	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/A!aA
11)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                     [         R                  " S5      * n SS/SS//nS[         R                  * /n[         R                  S/n[        XU5      n[	        XX#4SS9n[	        XSS9n[	        XX#4/SS9n[	        X/SS9n[	        U SUS S US S US S 4USS  USS  USS  4/S	9n	[	        U S[        US S US S US S 5      [        USS  USS  USS  5      /S	9n
[	        U SUS S US S US S 4[        USS  USS  USS  5      /S	9n[         R
                  " UR                  UR                  UR                  UR                  U	R                  U
R                  UR                  /5      n[         R
                  " UR                  UR                  UR                  UR                  U	R                  U
R                  UR                  /5      n[         R                  R                  U[         R                  " SS/UR                  5      5        [         R                  R                  US
5        [	        XX#4S9n[         R                  R                  UR                  SS/5        [         R                  R                  UR                  S5        g )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      st   
 
A
a2r(Arvvg,C662,C(5 !SDAD!ED!c-dCD!!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                  &   SS/n SS/SS/SS//n/ SQn[         R                  " U[         R                  * [         R                  S9n[	        XU5      n[         R
                  " U 5      n[        XUS9n[        UR                  S	5        [         R                  " UR                  SS/5      (       d*  [         R                  " UR                  SS/5      (       d   e[        XS
9n[        UR                  S5        [        UR                  SS/5        g )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"13/K,,q/K 
ECCGGR ;;suuq!f%%SUUQF)C)CCC 
,CCGGT"CEEC:&rN   c                  r   SS/n SS/nSS/SS/SS//nS[         R                  * [         R                  * /n[         R                  SS	/n[        X#U5      n[        [         R                  * [         R                  5      n[	        XUUS
9n[        UR                  S5        [        UR                  SS/5        g )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"13/KRVVGRVV$F
q&&(CCGGR CEEC8$rN   c                     / SQn / SQn/ SQn[         R                  [         R                  S/n[        X#5      n/ SQ/ SQ/n[         R                  * S/nSS/n[        XVU5      n[	        XUUS	9n	[        U	R                  S
5        g )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"13/K
q&&(C CGGS!rN   c                     Sn [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " / SQ5      n[        X1X"4U S9n[         R                  R	                  UR
                  S	5        g )
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     sq     K8845557 8D 88/0D
,-A
t 2
LCJJsww-rN   c                  "   SS/n SS/nS[         R                  * /n[         R                  [         R                  /n[        X#5      nSS//nS/n[        XVU5      n[	        XUUS9n[         R
                  R                  UR                  S5        g )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
bffWB
&&"&&	BB^F#J<D5D"4t4K
q&&(CJJCJJ*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                    [         R                  R                  S5      nUR                  SSSS9n[         R                  " S[         R
                  * S9n[         R                  " SSS9n[        X4U5      n[         R                  " S5      n[         R                  " S5      n[        Xx5      n	[         R                  " S5      n
[         R                  " S5      * n[        UU
U	UU S	9nUR                  R                  U5      (       d   eUS
   c   eUS
   nSn[         R                  " XN-
  X=-  :*  5      (       a"  [         R                  " X=-  X^-   :*  5      (       d   e[         R                  " X~-
  U:*  5      (       a   [         R                  " XU-   :*  5      (       d   e[         R                  " U[         R                  " U5      5      (       d   eg )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
4CQ
+A773BFF7+D7732&D"1D1K((3-K''#,K[6O''#,K}H
C ;;!!#&&&&s8 	CA
C66$*%&&266!%4:2E+F+FFF66+#q())bffQ:K5K.L.LLL;;q"((1+&&&&rN   c            	      N   [         R                  R                  S5      n U R                  SSSS9n[         R                  " S[         R
                  * S9n[         R                  " SSS9n[        US S	 US S	 US S	 5      [        US	S
 US	S
 US	S
 5      [        US
S  US
S  US
S  5      /nUS S	 US S	 US S	 4US	S
 US	S
 US	S
 4US
S  US
S  US
S  4/n[         R                  " S5      n[         R                  " S5      n[        Xg5      n[         R                  " S5      * n	[        XUS9n
[        XUS9n[        XXU4S9nU
R                  (       a  UR                  (       d   e[        U
R                  UR                  5        [        UR                  UR                  5        g )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
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RnO	A{CD|DD
qqbk
BC<<DLL((DFFCEE"DFFCEE"rN   c            	      6   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n [         R                  " / SQ5      n[         R                  " / SQ5      n/ SQn/ nU H  n[        US[         R                  4XU4S	S
U0S9nUR                  U::  d   eUR                  UR
                  UR                  -
  UR
                  -  :X  d   eUR                  UR                  5        M     [         R                  " [         R                  " U5      S:  5      (       d   eg )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    
 8845557 8D 88/0D
,-A&LL#Q266{T8J#m[-IK {{k))){{sww););;SWWDDDDCKK( $ 66"'','!+,,,,rN   z&Upstream / Wrapper issue, see gh-20116c                  f   Sn [         R                  " SU /SU * //5      n[         R                  " U S/5      n[        XS9n[        SS/SS/5      n[         R                  " SS/5      n[	        XSUSS9nUR
                  S:X  d   e[         R                  " XR                  -  U:  5      (       d   eg )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1A
!QA"Q-KQFQF#F
!QA
F
JC::??66!ee)a-    rN   c                     SSK Jn   SS KnUR                  nUR                  " / SQ5      nUR                  " / SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/	5      nUR                  " U* U* U* U* U* U* U* U* U* /	5      nUR                  " / SQ5      n[        XEU5      nSnSn	U " X7XSS0S9n
U " X7XSS0S9nU
R                  UR                  :X  d   e[        U
R                  UR                  5        [        SSS9n	/ SQn/ SQn/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n/ SQn[        XLS9nU " X7U	USS0S 9n
U " X7U	USS0S 9nU
R                  UR                  :X  d   e[        U
R                  UR                  5        g )!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 	7A 	 KPMLOLJLP!Q 	RA$ 
C4#tcTC4#tcTC4H	IB	8	9B"1"-KKF	!4(
*B	!5)
+B99		!!!BDD"$$ qQFK.A	|^^	/=.	JA	+B"1,K	F%
E/B
DB	F%
E/B
DB99		!!!BDD"$$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  [[5 	9;x uA  CC$%4P#B"".J'.%""& . . +& 4	8	IJBGGAJ''!+8  :)U+c/BI.N0<a/@).L.N O'O : K '@#2 - -8 BC	! D	!7 rN   