o
    h8                     @   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   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   )pytestraises
ValueErrorr   r	   	coo_arraynpzerosreescapeset)message r   Y/var/www/html/scripts/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'}...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capturedr   r   r    test_milp_optionsK   s   r9   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:r=   z+The problem is unbounded. (HiGHS Status 10:)r   r   statusr1   r   
startswith
isinstancexr   ndarrayfunfloatmip_node_countintmip_dual_boundmip_gap)r3   r4   r,   r5   r6   r7   msgr   r   r    test_result_   sd   



 

rJ   c                  C   s(   t d} | jdksJ t| jdg d S )Nr   r   )r   rC   r   rA   )r7   r   r   r    test_milp_optional_args   s   rK   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   r:   r   )axisr=   )r   r	   	csc_arrayr   r   roundrA   flattenreshapesumtestingr   diag)
nr3   r4   r,   r5   r6   r7   rA   ssquarer   r   r    test_milp_1   s   
.rW   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   arrayrA   rC   rR   r   broadcast_toshape)r,   r3   b_lb_ulinear_constraintres1res2res3res4res5res6res7xsfunsr7   r   r   r    test_milp_2   sB   
  "" "&rn   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   r=   r   r   r   )r      ro   )dtyperZ   rX   r\   gffffffg?gffffff@)r   	full_liker^   float64r   	ones_liker   r   rC   allcloserA   )r,   r3   rc   rb   r   r   r7   r   r   r    test_milp_3   s   
(ru   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   r=   ii   r   r   r   ;   g      @   )r   r^   r   r   r   r   rC   rA   )r,   r   r3   rb   rc   r   r   r7   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)r[   rX   r=   )r   r   r   )r   r   r   r   )r   r   r   )r   r   r   ro   r{   ry   i)r   r^   r   r   r   r   rC   )
r,   r   lbubr   r3   rb   rc   r   r7   r   r   r    test_milp_5   s   
r   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      rY      !      r      r   '      r      r               r         r   &   r   r   )   r   r   $   r   r   r   r   i  i(  i:,  i/  r   r   rY      r{   r   r{   r   rZ   i>  )r   r_   r   rR   r   rC   )r   A_eqb_eqr,   r7   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      ?ry   r   )r   r^   r   r   r   rR   assert_equalr>   )	r,   r   r}   r~   r   r   r   r   r7   r   r   r    test_infeasible_prob_16609  s   

r   r<   z*Iteration limit reached. (HiGHS Status 14:rv   zUnhandled 32-bit GCC FP bug)r#   r%   rI   r)   g?
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   
fill_value   )r   r   r   r%   rA   g:0yE>)r   randomdefault_rngintegersfullr^   r   r   r]   r   r   r   r?   allrt   rN   )r%   rI   rngr3   b_lbb_ubr   variable_lbvariable_ubvariable_boundsr   c_vectorr7   rA   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   )r;   r;   r   r;   r   r   r   r   )r   r   )r   r   r   r   r   r^   r   r   r]   r   r   r1   r   rA   )r   r3   blbur   constraints2r}   r~   r   r,   re   rf   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sAJ |j|j|j |j ksOJ ||j q't t 	|dk sbJ d S )Nr   r   r   r   r   r   )g      ?g{Gz?gMbP?r   Tmip_rel_gap)r,   r   r   r   r%   )
r   r_   r   r^   rH   rC   rG   appendr   diff)r   r   r,   mip_rel_gapssol_mip_gapsr   r7   r   r   r    test_mip_rel_gap_passdownf  s"   
r   ))__doc__r   numpyr   numpy.testingr   r   r   test_linprogr   scipy.optimizer   r   r   scipyr	   r!   markxfailr9   rJ   rK   rW   rn   ru   r|   r   slowtimeoutr   r   	_msg_time	_msg_iterskipifintpitemsizeparametrizer   r   xslowr   r   r   r   r    <module>   sJ    <
(%

 