a
    Re8                     @   sJ  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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ejddd Zd d! Zd"Zd#Z 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.d/ Z&ejj'd0d1 Z(dS )2z0
Unit test for Mixed Integer Linear Programming
    N)assert_allcloseassert_array_equal   )magic_square)milpBoundsLinearConstraint)sparsec                  C   sH  d} t jt| d" ttddg W d    n1 s:0    Y  d} t jt| d ttd W d    n1 sz0    Y  t jt| d tg  W d    n1 s0    Y  t jt| d td  W d    n1 s0    Y  d} t jt| d tddd	 W d    n1 s&0    Y  d
} t jtt	| d tddd W d    n1 sl0    Y  t jtt	| d6 ttdg dgddgddgfd W d    n1 s0    Y  t jtt	| d8 ttdddggdgtdgfd W d    n1 s&0    Y  d} t jtt	| d2 ttdddggdgdgfd W d    n1 s0    Y  d} t jt| d* tddgtddgd W d    n1 s0    Y  d} t jt| d$ tg dddgd W d    n1 s0    Y  t jt| d$ tg dg dd W d    n1 s\0    Y  d} t jt| d2 tg dddgtddgfd	 W d    n1 s0    Y  d} t jt| d, tg dddgg dfd	 W d    n1 s0    Y  t jt| d, tg dg dddgfd	 W d    n1 sN0    Y  d} t jt| d, tg dddgddgfd	 W d    n1 s0    Y  t jt| d, tg dg dg dfd	 W d    n1 s0    Y  t jt| d0 tg dg dt
 ddgfd	 W d    n1 s:0    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   R/var/www/sunrise/env/lib/python3.9/site-packages/scipy/optimize/tests/test_milp.pytest_milp_iv   s\    0,&&,,FHB:44B<<<<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<0    Y  td\}}}}}ddd	d
}t||||fdd|d}|  }	d|	jv sJ d|	jv sJ |jrJ d S )Nz*Unrecognized options detected: {'ekki'}...ZekkiTr
   r   )optionsr   F皙?)ZdispZ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_optionsK   s    *r0   c                  C   sf  t d\} }}}}t|| ||fddd}|jdks6J |js@J d}|j|sTJ t|jtj	sfJ t|j
tsvJ t|jtsJ t|jtsJ t|jtsJ t d\} }}}}t|d | ||fdddd	id
}|jdksJ |jrJ d}|j|sJ |j
|j  u rL|j  u rL|j  u rL|j  u rLd u sRn J tddd}|jdksnJ |jrzJ d}|j|sJ |j
|j  u r|j  u r|j  u r|j  u rd u sn J td}|jdksJ |jr J d}|j|sJ |j
|j  u r\|j  u r\|j  u r\|j  u r\d u sbn 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:r4   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.   r/   msgr   r   r   test_result_   sd    

 

 

 

r?   c                  C   s(   t d} | jdksJ t| jdg d S )Nr   r   )r   r9   r   r8   )r/   r   r   r   test_milp_optional_args   s    r@   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   r1   r   )Zaxisr4   )r   r	   Z	csc_arrayr   r   roundr8   flattenZreshapesumtestingr   Zdiag)
nr+   r,   r'   r-   r.   r/   r8   sZsquarer   r   r   test_milp_1   s    
rG   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   arrayr8   r9   rD   r   Zbroadcast_toshape)r'   r+   b_lb_uZlinear_constraintres1res2Zres3Zres4Zres5Zres6Zres7xsZfunsr/   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st 	|j
ddgsJ t| |d
}t|jd t|j
ddg d S )Nr   r4   r   r   r   )r      rW   )ZdtyperJ   rH   rL   gffffffg?gffffff@)r   Z	full_likerN   float64r   Z	ones_liker   r   r9   allcloser8   )r'   r+   rR   rQ   r   r   r/   r   r   r   test_milp_3   s    
(rZ   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   r4   ii   r   r   r   ;   g      @   )r   rN   r   r   r   r   r9   r8   )r'   r   r+   rQ   rR   r   r   r/   r   r   r   test_milp_4   s    ra   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)rK   rH   r4   )r   r   r   )r   r   r   r   )r   r   r   )r   r   r   rW   r`   r^   i)r   rN   r   r   r   r   r9   )
r'   r   lbubr   r+   rQ   rR   r   r/   r   r   r   test_milp_5   s    
rd   x   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      rI      !      r      rh   '      rg      rh               rk         rp   &   rh   rh   )   rh   ro   $   rt   rw   rn   rh   i  i(  i:,  i/  r   r   rI      r`   r   r`   r   rJ   i>  )r   rO   r   rD   r   r9   )r   A_eqb_eqr'   r/   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 )Ng      ?g        r   r   g      ?r^   r   )r   rN   r   r   r   rD   Zassert_equalr5   )	r'   r   rb   rc   r   r~   r   r   r/   r   r   r   test_infeasible_prob_16609  s    

r   r3   z*Iteration limit reached. (HiGHS Status 14:r[   zUnhandled 32-bit GCC FP bug)r!   r"   r>   r$   g?Z
node_limitc                 C   s2  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|sJ |d
 d usJ |d
 }d}t || || krt || || ksJ t || |krt ||| ksJ t |t |s.J d S )N   $s8 r   r   )d   r   sizer   Z
fill_value   )r   r   r   r"   r8   g:0yE>)r   randomdefault_rngintegersfullrN   r   r   rM   r   r   r   r6   allrY   rA   )r"   r>   rngr+   Zb_lbZb_ubr   Zvariable_lbZvariable_ubvariable_boundsr   Zc_vectorr/   r8   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rt|jsxJ t|
j|j t|j|j d S )Nr   r   r   )r2   r2   r   r2   r   r   r   r   )r   r   )r   r   r   r   r   rN   r   r   rM   r   r   r*   r   r8   )r   r+   blZbur   Zconstraints2rb   rc   r   r'   rS   rT   refr   r   r   test_three_constraints_16878M  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sJ |j|j|j |j ksJ ||j qNt t 	|dk sJ d S )Nrf   rl   rs   rx   r{   r|   )g      ?g{Gz?gMbP?r   Tmip_rel_gap)r'   r   r   r   r"   )
r   rO   r   rN   r=   r9   r<   appendr   diff)r~   r   r'   Zmip_rel_gapsZsol_mip_gapsr   r/   r   r   r   test_mip_rel_gap_passdownf  s"    
r   ))__doc__r   numpyr   Znumpy.testingr   r   r   Ztest_linprogr   Zscipy.optimizer   r   r   Zscipyr	   r   markZxfailr0   r?   r@   rG   rV   rZ   ra   rd   Zslowtimeoutr   r   Z	_msg_timeZ	_msg_iterZskipifZintpitemsizeZparametrizer   r   Zxslowr   r   r   r   r   <module>   sH   <
(%

 