o
    `^h~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   )pytestraises
ValueErrorr   r	   	coo_arraynpzerosreescapeset)message r   \/home/air/shanriGPT/back/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_optionsN   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_resultb   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   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 )N      ?        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:z-Often buggy, revisit with callbacks, gh-19255)r#   rv   zUnhandled 32-bit GCC FP bugr%   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_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 )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_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   )r3   r~   r   r:   )r   r_   r   r   r   r>   r   rA   )hr3   r4   r   r   r,   r7   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)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   numpyr^   r_   r   r>   r   rA   r   )r   r   r^   r,   r3   r   r   r   r   r   r1r2r~   r   r   r    test_presolve_gh18907  sV   
.

r   ).__doc__r   sysr   r   numpy.testingr   r   r   test_linprogr   r   r   r   r   scipyr	   maxsize	_IS_32BITr!   markxfailr9   rJ   rK   rW   rn   ru   r|   r   xslowr   r   	_msg_time	_msg_iterthread_unsafeskipifintpitemsizeslowparametrizer   r   r   r   r   r   r   r   r    <module>   sV    
<
(%

 

