o
    i~G                  
   @   s  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	d
 Zejjddddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejjdd Zd d! Z d"Z!d#Z"ejj#ejjd$d%ejj$e%dj&d&k d'd%ejj'ej(d(d)gd*d+ie!fd,die"fgd-d. Z)d/d0 Z*ejjd1d2 Z+ejjd3d%d4d5 Z,d6d7 Z-dS )8z0
Unit test for Mixed Integer Linear Programming
    N)assert_allcloseassert_array_equal   )magic_square)milpBoundsLinearConstraint)sparsel        c                  C   sD  d} t jt| d ttddg W d    n1 sw   Y  d} t jt| d ttd W d    n1 s=w   Y  t jt| d tg  W d    n1 sXw   Y  t jt| d td  W d    n1 ssw   Y  d} t jt| d tddd	 W d    n1 sw   Y  d
} t jtt	| d tddd W d    n1 sw   Y  t jtt	| d ttdg dgddgddgfd W d    n1 sw   Y  t jtt	| d ttdddggdgtdgfd W d    n	1 sw   Y  d} t jtt	| d ttdddggdgdgfd W d    n	1 s>w   Y  d} t jt| d tddgtddgd W d    n	1 sew   Y  d} t jt| d tg dddgd W d    n	1 sw   Y  t jt| d tg dg dd W d    n	1 sw   Y  d} t jt| d tg dddgtddgfd	 W d    n	1 sw   Y  d} t jt| d tg dddgg dfd	 W d    n	1 sw   Y  t jt| d tg dg dddgfd	 W d    n	1 s$w   Y  d} t jt| d tg dddgddgfd	 W d    n	1 sLw   Y  t jt| d tg dg dg dfd	 W d    n	1 srw   Y  t jt| d tg dg dt
 ddgfd	 W d    d S 1 sw   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   )pytestZraises
ValueErrorr   r	   Z	coo_arraynpzerosreescapeset)message r   X/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/optimize/tests/test_milp.pytest_milp_iv   s   

(*$$"$r   Fz%Needs to be fixed in `_highs_wrapper`)runreasonc           
      C   s   d}ddi}t jt|d td|d W d    n1 sw   Y  td\}}}}}ddd	d
}t||||fdd|d}|  }	d|	jv sIJ d|	jv sPJ |jrUJ d S )Nz*Unrecognized options detected: {'ekki'}...ZekkiTr
   r   )optionsr   F皙?)Zdisppresolve
time_limitr   r   cr   r   r   r"   zPresolve is switched offzTime Limit Reached)r   ZwarnsRuntimeWarningr   r   Z
readouterroutsuccess)
Zcapsysr   r"   Abr(   numbersMresZcapturedr   r   r   test_milp_optionsN   s   r1   c                  C   sJ  t d\} }}}}t|| ||fddd}|jdksJ |js J d}|j|s*J t|jtj	s3J t|j
ts;J t|jtsCJ t|jtsKJ t|jtsSJ t d\} }}}}t|d | ||fdddd	id
}|jdkssJ |jrxJ d}|j|sJ |j
|j  u r|j  u r|j  u r|j  u rd u sJ  J tddd}|jdksJ |jrJ d}|j|sJ |j
|j  u r|j  u r|j  u r|j  u rd u sJ  J td}|jdksJ |jrJ d}|j|sJ |j
|j  u r |j  u r |j  u r |j  u r d u s#J  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:r5   z+The problem is unbounded. (HiGHS Status 10:)r   r   statusr+   r   
startswith
isinstancexr   ZndarrayfunfloatZmip_node_countintmip_dual_boundmip_gap)r,   r-   r(   r.   r/   r0   msgr   r   r   test_resultb   sd   



 

r@   c                  C   s(   t d} | jdksJ t| jdg d S )Nr   r   )r   r:   r   r9   )r0   r   r   r   test_milp_optional_args   s   rA   c            
   	   C   s   d} t | \}}}}}t|}t|d |||fddd}t|j}| | | d | | }tj	|dd}	tj
|	j	dd| tj
|	j	dd| tj
t|		 | tj
t|	d d d d df 	 | d S )	Nr   r   r&   r   r2   r   )Zaxisr5   )r   r	   Z	csc_arrayr   r   roundr9   flattenZreshapesumtestingr   Zdiag)
nr,   r-   r(   r.   r/   r0   r9   sZsquarer   r   r   test_milp_1   s   
.rH   c               
   C   s&  t d } ddgddgg}dt j g}t jdg}t|||}t| |||fdd}t| |dd}t| |||fgdd}t| |gdd}t| d|d d |d d |d d f|dd  |dd  |dd  fgd	}	t| dt|d d |d d |d d t|dd  |dd  |dd  gd	}
t| d|d d |d d |d d ft|dd  |dd  |dd  gd	}t |j|j|j|j|	j|
j|jg}t |j|j|j|j|	j|
j|jg}t j	|t 
ddg|j t j	|d
 t| |||fd}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   arrayr9   r:   rE   r   Zbroadcast_toshape)r(   r,   b_lb_uZlinear_constraintres1res2Zres3Zres4Zres5Zres6Zres7ZxsZfunsr0   r   r   r   test_milp_2   sB   
  "" "&rV   c                  C   s   ddg} ddgddgddgg}g d}t j|t j t jd}t|||}t | }t| ||d}t|jd	 t 	|j
ddgsJt 	|j
ddgsJJ t| |d
}t|jd t|j
ddg d S )Nr   r5   r   r   r   )r      rW   )ZdtyperK   rI   rM   gffffffg?gffffff@)r   Z	full_likerO   Zfloat64r   Z	ones_liker   r   r:   allcloser9   )r(   r,   rS   rR   r   r   r0   r   r   r   test_milp_3   s   
(rY   c                  C   s   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| |||d
}t|jd t|jddg d S )N   r   r   r   r5   ii   r   r   r   ;   g      @   )r   rO   r   r   r   r   r:   r9   )r(   r   r,   rR   rS   r   r   r0   r   r   r   test_milp_4   s   r`   c            
      C   s   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| |||d	}	t|	jd
 d S )N)rL   rI   r5   )r   r   r   )r   r   r   r   )r   r   r   )r   r   r   rW   r_   r]   i)r   rO   r   r   r   r   r:   )
r(   r   lbubr   r,   rR   rS   r   r0   r   r   r   test_milp_5   s   
rc   c                  C   sj   d} t g dg dg dg dg}t g d}t g d}t||||f| d}t j|jd	 d S )
Nr      rJ      !      r      rf   '      re      rf               ri         rn   &   rf   rf   )   rf   rm   $   rr   ru   rl   rf   i  i(  i:,  i/  r   r   rJ      r_   r   r_   r   rK   i>  )r   rP   r   rE   r   r:   )r   A_eqb_eqr(   r0   r   r   r   test_milp_6  s   
r~   c            	      C   sr   ddg} ddg}dt j g}t jt jg}t||}ddgg}dg}t|||}t| |||d}t j|jd d S )N      ?        r   r   g      ?r]   r   )r   rO   r   r   r   rE   Zassert_equalr6   )	r(   r   ra   rb   r   r|   r}   r   r0   r   r   r   test_infeasible_prob_16609  s   

r   r4   z*Iteration limit reached. (HiGHS Status 14:z-Often buggy, revisit with callbacks, gh-19255)r!   rZ   zUnhandled 32-bit GCC FP bugr"   r?   r%   g?Z
node_limitc                 C   s,  t jd}|jdddd}t jdt j d}t jddd}t|||}t d}t d}t	||}	t d}
t d }t
||
|	|| d	}|j|sOJ |d
 d usWJ |d
 }d}t || || krst || || ksuJ t || |krt ||| ksJ t |t |sJ d S )N   $s8 r   r   )d   r   sizer   Z
fill_value   )r   r   r   r"   r9   g:0yE>)r   randomdefault_rngintegersfullrO   r   r   rN   r   r   r   r7   allrX   rB   )r"   r?   rngr,   Zb_lbZb_ubr   Zvariable_lbZvariable_ubvariable_boundsr   Zc_vectorr0   r9   Ztolr   r   r   test_milp_timeout_16545)  s0   



0(r   c                  C   s  t jd} | jdddd}t jdt j d}t jd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 d}t d}t	||}t d }	t
|	||d}
t
|	||d}t
|	||||fd}|
jr|jsJ t|
j|j t|j|j d S )Nr   r   r   )r3   r3   r   r3   r   r   r   r   )r   r   )r   r   r   r   r   rO   r   r   rN   r   r   r+   r   r9   )r   r,   blbur   Zconstraints2ra   rb   r   r(   rT   rU   refr   r   r   test_three_constraints_16878Q  s,   """   


r   c                  C   s   t g dg dg dg dg} t g d}t g d}g d}g }|D ].}t|dt jf| ||fd	d
|id}|j|ksAJ |j|j|j |j ksOJ ||j q't t 	|dk sbJ d S )Nrd   rj   rq   rv   ry   rz   )g      ?g{Gz?gMbP?r   Tmip_rel_gap)r(   r   r   r   r"   )
r   rP   r   rO   r>   r:   r=   appendr   diff)r|   r}   r(   Zmip_rel_gapsZsol_mip_gapsr   r0   r   r   r   test_mip_rel_gap_passdownj  s"   
r   z&Upstream / Wrapper issue, see gh-20116c                  C   s   d} t d| gd|  gg}t | dg}t||d}tddgddg}t ddg}t|||dd}|jdks:J t ||j |k sFJ d S )Nl    J)gi oY@r   )r,   rb   r   r2   )r   rP   r   r   r   r6   r   r9   )hr,   r-   r   r   r(   r0   r   r   r   test_large_numbers_gh20116  s   r   c                  C   s  ddl m}  dd l}|j}|g d}|g dg dg dg dg dg d	g d
g dg dg	}|| | | | | | | | | g	}|g d}t|||}d}d}	| ||||	ddid}
| ||||	ddid}|
j|jkszJ t|
j|j t	d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did }
| |||	|ddid }|
j|jksJ 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)ra   rb   )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   )r5   r   r   r   )r5   r5   r   r   )r   r   r   r     r   r   r   )rb   r'   )
scipy.optimizer   numpyrO   rP   r   r6   r   r9   r   )r   r   rO   r(   r,   r   r   r   r   r   r1r2rb   r   r   r   test_presolve_gh18907  sV   
.

r   ).__doc__r   sysr   r   Znumpy.testingr   r   r   Ztest_linprogr   r   r   r   r   Zscipyr	   maxsizeZ	_IS_32BITr   markZxfailr1   r@   rA   rH   rV   rY   r`   rc   Zxslowr~   r   Z	_msg_timeZ	_msg_iterZthread_unsafeZskipifZintpitemsizeZslowZparametrizer   r   r   r   r   r   r   r   r   <module>   sV    
<
(%

 

