U
    /dNu                    @   s  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlZddlZd	Zzdd
lmZ W n ek
r   dZY nX d	ZzddlZddl m!Z" W n ek
r   dZY nX dd Z#dd Z$dd Z%dd Z&dhddZ'dd Z(dd Z)diddZ*dd Z+djd#d$Z,d%d& Z-d'd( Z.d)d* Z/d+d, Z0d-d. Z1d/d0 Z2dZ3dZ4dZ5dZ6dZ7G d1d2 d2Z8ej9:d3G d4d5 d5e8Z;ej9:d3G d6d7 d7e8Z<ej9:d3G d8d9 d9e8Z=G d:d; d;e8Z>G d<d= d=e;Z?G d>d? d?e;Z@G d@dA dAe;ZAG dBdC dCe<ZBerRG dDdE dEe<ZCerhG dFdG dGe<ZDG dHdI dIe<ZEG dJdK dKe<ZFej9:d3G dLdM dMZGG dNdO dOe=ZHG dPdQ dQe=ZIG dRdS dSe>ZJG dTdU dUe>ZKG dVdW dWZLej9:d3G dXdY dYZMG dZd[ d[eMZNG d\d] d]eMZOG d^d_ d_eMZPej9:d3G d`da daZQG dbdc dceQZRG ddde deeQZSG dfdg dgeQZTdS )kz"
Unit test for Linear Programming
    N)assert_assert_allcloseassert_equalassert_array_lessassert_warnssuppress_warnings)raises)linprogOptimizeWarning)approx_derivative)MatrixRankWarning)LinAlgWarningT)UmfpackWarningF)choleskyc                 C   s0   t | j d t | j|k d t| jdd d S )NIncorrectly reported successz)Incorrectly reported number of iterations   z(Failed to report iteration limit reachedr   successr   status)resmaxiter r   E/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reached    s    r   c                 C   s    t | j d t| jdd d S )Nincorrectly reported success   z"failed to report infeasible statusr   r   r   r   r   _assert_infeasible&   s    r   c                 C   s    t | j d t| jdd d S )Nr      z!failed to report unbounded statusr   r   r   r   r   _assert_unbounded,   s    r   c                 C   s"   t | j d t | jdkd d S )Nr   r      z%failed to report optimization failure)r   r   r   r   r   r   r   )_assert_unable_to_find_basic_feasible_sol2   s    r"   :0yE>c                 C   sf   | j sd| j| j}t|t| jd |d k	rFt| j|d||d |d k	rbt| j|d||d d S )Nz linprog status {0}, message: {1}r   z*converged to an unexpected objective valueerr_msgrtolatolz#converged to an unexpected solution)	r   formatr   messageAssertionErrorr   r   funx)r   desired_fun	desired_xr&   r'   msgr   r   r   _assert_success<   s$      r0   c                 C   s  t jd | | d d  d }t | d | d  d }|| d | | }t | d | | f}g }g }t| d D ]:}| }d||ddddf< ||	  |d qtt| D ]D}t| D ]6}| }d|dd||f< ||	  |d qqt| D ]N}| }|dd|ddf |dd|ddf< ||	  || qt| D ]N}| }|dddd|f |dddd|f< ||	  || q^| }|ddt| t| f |ddt| t| f< ||	  || | }|ddt| td|  d df |ddt| td|  d df< ||	  || t j
t |td}	t j
|td}
t j|	jd }|	|
|||fS )z
    Generates a linear program for which integer solutions represent an
    n x n magic square; binary decision variables represent the presence
    (or absence) of an integer 1 to n^2 in each position of the square.
    r   r   r   r!   NZdtype)nprandomseedarangereshapezerosrangecopyappendflattenarrayvstackfloatrandshape)nMnumbersr8   ZA_listZb_listiZA_rowjAbcr   r   r   magic_squareQ   sR    ((0
""
rJ   c                 C   s   t jd t jj| |fd }t | | | f}t | }t| D ]0}|d }d|||| || f< ||  ||< qDt || | f}t |}t|D ]&}|d }d|||d|f< d||< qt ||f}	t ||f}
|	|
| fS )z -> A b c LP test: m*n vars, m+n constraints
        row sums == n/m, col sums == 1
        https://gist.github.com/denis-bz/8647461
    r   sizer   N)	r3   r4   r5   Zexponentialr8   r9   r>   ZhstackZravel)mrB   rI   ZArowZbrowrF   Zj1ZAcolZbcolrG   rH   r   r   r   lpgen_2d   s"    


rN   c                 C   s   t j|  d\}}}t j|d }t j||d }t j|d }t j||d }t j|d }t j| }	t j|}
t j |	|	t j  k < t j|
|
t j k< t |	|
fj}||||||fS )N)
      2         ?)r3   r4   r5   r@   infr>   T)r5   Zm_eqZm_ubrB   rI   A_ubb_ubA_eqb_eqlbubboundsr   r   r   very_random_gen   s    
r\   c                  C   sz   ddddg} ddddgddd	d
gddddgddddgg}d	dddg}ddddgg}dg}ddd
dg}d}| ||||||fS )Nr1      r!      	   r   r   rO      r   gk椀?gs?gkL?gqY:^@r   )rI   rU   rV   rW   rX   x_starf_starr   r   r   nontrivial_problem   s    



ri   r]   ra   d   c                 C   sn  t j|  t jjdd||fd}t j|}t jjdd||fd}|||  t jjdd|d }t || }d|d|< tjd| || f}	d}
t	|D ]x}||dd|f  |	|
d|f< d|	|
|| f< d| |dd|f  |	|
d d|f< d|	|
d || f< |
d7 }
q|	
 }	t d| }||ddd< | |ddd< dg| d	g|  }||	||fS )
z
    Training data is {(x0, y0), (x1, y2), ..., (xn-1, yn-1)}
        x in R^d
        y in R
    n: number of training samples
    d: dimension of x, i.e. x in R^d
    phi: feature map R^d -> R^m
    m: dimension of feature space
    r   r   rK   h㈵>Nr   r1   NNr   N)r3   r4   r5   normalrandnonesscipysparseZ
lil_matrixr9   Ztocscr8   )r5   rM   drB   phiZw_truer,   yrI   rU   idxiirV   bndsr   r   r   l1_regression_prob   s*    
 (
ry   c                    s   i   fdd}t ddg}ddgddgddgg}dd	d
g}t||||| jd}t|dddgd t d |d  t d |d  t d |d  t d |d  d S )Nc                    s   |  d}|  d}t|  ddk t|  dtdk tt|  dt tt|t tt|t | d  d< | d	  d	< | d
  d
< | d  d< d S )Nr)   completephaser   r   r   r!   nitr,   r+   slackcon)popr   r9   
isinstanceintboolstr)r   r)   rz   Zlast_cbr   r   cb   s    

z!generic_callback_test.<locals>.cbrb   r   r   r   rO   r]   r!   rU   rV   callbackmethod      2r`   r-   r.   r+   r,   r   r~   )r3   r=   r	   r   r0   r   selfr   rI   rU   rV   r   r   r   r   generic_callback_test   s    
r   c               	   C   s   t ddg} ddgddgddgg}dddg}ttt| ||d	d
 ttt| ||dd
 tjtdd t| ||dd	id W 5 Q R X d S )Nrb   r   r   r   r   rO   r]   r!   ekki-ekki-ekkirU   rV   r   z
highs-ekkizUnknown solver options:match	rr_methodrU   rV   options)r3   r=   assert_raises
ValueErrorr	   pytestwarnsr
   )rI   rU   rV   r   r   r    test_unknown_solvers_and_options  s&    
      r   c                  C   sT   t ddg} ddgddgddgg}dddg}t| ||d	d
}t|dddgd d S )Nrb   r   r   r   r   rO   r]   r!   highsr   r   r`   r   )r3   r=   r	   r0   )rI   rU   rV   r   r   r   r   test_choose_solver  s
    
r   c                	   C   sj   t t tddd W 5 Q R X t t tddd W 5 Q R X t t tddd W 5 Q R X d S )Nr   interior-pointr   revised simplexsimplex)r   r   DeprecationWarningr	   r   r   r   r   test_deprecation&  s    r   c               	   C   s  t ddd} d}| jdkst| j|s.ttd\}}}}}dgt| }dgt| }dd	i}	t ||||d|	|d
} d}| jdkst| j|stddi}	t ||||d|	d} d}| jdkst| j|stt dddd} d}| jdkst| j|stt ddd} d}| jdks,t| j|s>tddlm}
 |
dd\}}d}|dksjt||szt|
d d \}}d}|dkst||std S )Nr   r   r   z6Optimization terminated successfully. (HiGHS Status 7:r   r`   r   r   
time_limit皙?)rI   rW   rX   r[   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   rO   highs-dsrI   rW   rX   r[   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r1   )r[   r   z+The problem is infeasible. (HiGHS Status 8:r   r1   z+The problem is unbounded. (HiGHS Status 10:r   )_highs_to_scipy_status_message:   zHello!z;The HiGHS status code was not recognized. (HiGHS Status 58:r!   z>HiGHS did not provide a status code. (HiGHS Status None: None))	r	   r   r*   r)   
startswithrJ   lenZscipy.optimize._linprog_highsr   )r   r/   rG   rH   rI   rD   rC   r[   r   r   r   r   r)   r   r   r   test_highs_status_message/  sN     r   c                   C   s$   t ddgddggdgddgd d S )Nr   r1   r         )rU   rV   r   )r	   r   r   r   r   test_bug_17380\  s    r   c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8dldm Z9dndo Z:dpdq Z;drds Z<dtdu Z=dvdw Z>dxdy Z?dzd{ Z@d|d} ZAd~d ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOePjQjReSjTdkdddd ZUdS )LinprogCommonTestsa  
    Base class for `linprog` tests. Generally, each test will be performed
    once for every derived class of LinprogCommonTests, each of which will
    typically change self.options and/or self.method. Effectively, these tests
    are run for many combination of method (simplex, revised simplex, and
    interior point) and options (such as pivoting rule or sparse treatment).
    c                 C   s   t |  d S N)r   r   r   r   r   test_callbackx  s    z LinprogCommonTests.test_callbackc                 C   s8   t dd\}}}t|||| jddid}t|dd d S )NrP   dispTrU   rV   r   r   T*Pr-   rN   r	   r   r0   r   rG   rH   rI   r   r   r   r   	test_disp{  s
    zLinprogCommonTests.test_dispc                 C   sT   ddg}ddgddgg}ddg}d}d}t |||||f| j| jd	}t|d
d d S )Nr1   r!   rb   r   r   r`   rl   rb   N)rU   rV   r[   r   r   r   )r	   r   r   r0   )r   rI   rG   rH   	x0_bounds	x1_boundsr   r   r   r   test_docstring_example  s     z)LinprogCommonTests.test_docstring_examplec              	   C   s0   dg}dgg}d}t tt|||| j| jd d S )Nr   ZhellorW   rX   r   r   )r   	TypeErrorr	   r   r   )r   rI   rW   rX   r   r   r   test_type_error  s       z"LinprogCommonTests.test_type_errorc              
   C   sr   t dg}t dgg}t dg}| }dt jf}t|||tt|| j| jd}t	|ddgd t
|| d S )N      ?      @      r   r   rf   r   )r3   r=   r:   rS   r	   rW   rX   r   r   r0   r   )r   rI   rU   Z	b_ub_origrV   r[   r   r   r   r   test_aliasing_b_ub  s    
 z%LinprogCommonTests.test_aliasing_b_ubc              
   C   sr   t dg}t dgg}t dg}| }dt jf}t|tt|||| j| jd}t	|ddgd t
|| d S )Nr   r   r   r   r   r   )r3   r=   r:   rS   r	   rU   rV   r   r   r0   r   )r   rI   rW   Z	b_eq_origrX   r[   r   r   r   r   test_aliasing_b_eq  s    
 z%LinprogCommonTests.test_aliasing_b_eqc              
   C   sV   dg}dgg}dg}dgg}dg}d}t ||||||| j| jd}t|ddgd d S )Nr   r   g       @)            $@r   r   r   )r	   r   r   r0   r   rI   rU   rV   rW   rX   r[   r   r   r   r   test_non_ndarray_args  s     z(LinprogCommonTests.test_non_ndarray_argsc                    s|   t ddg}ddgddgddgg}dddg}d d d d d i f fd	d
	} fdd jD }d|d< tt|||||d d S )Nrb   r   r   r   r   rO   r]   r!   c              
      s   t | ||||| j|d d S Nr   r	   r   )rI   rU   rV   rW   rX   r[   r   r   r   r   f  s     z2LinprogCommonTests.test_unknown_options.<locals>.fc                    s   i | ]}| j | qS r   r   .0keyr   r   r   
<dictcomp>  s      z;LinprogCommonTests.test_unknown_options.<locals>.<dictcomp>*   Zspamr   )r3   r=   r   r   r
   )r   rI   rU   rV   r   or   r   r   test_unknown_options  s     
     z'LinprogCommonTests.test_unknown_optionsc              	   C   s   t ddgddgddgg}t dddg}t ddg }dt jfgt| }dgt| }t jt t||||| j|d}W 5 Q R X t j	|j
dd	g t j	|jd
 d S )Nr1   r   r   r      r   rI   rU   rV   r[   r   r   ?ffffff@ffffff)r3   r=   rS   r   testingr   r
   r	   r   r   r,   r+   r   rU   rV   rI   r[   r   r   r   r   r   test_integrality_without_highs  s    
 z1LinprogCommonTests.test_integrality_without_highsc                    s*  d fdd	}t t|dddgddgd t t|dddgddd	gd t t|dddgd
dgd t t|ddgddggddgd t t|ddgdggdgd t t|ddgddggddgd t t|ddgdggdgd t t|ddgdgdd d jkr
 jd r
d S t t|ddgtddd d S )Nc              
      s    t | ||||| j jd d S r   r	   r   r   rI   rU   rV   rW   rX   r[   r   r   r   r     s     z1LinprogCommonTests.test_invalid_inputs.<locals>.fr   r   r   r|   r   r!   r[   )r   r!      r   r   )rU   rV   )rW   rX   _sparse_presolve)r   r   r   )rU   rX   )NNNNN)r   r   r   r3   r8   )r   r   r   r   r   test_invalid_inputs  s      z&LinprogCommonTests.test_invalid_inputsc              	      s  d fdd	}t jd d}d}tj||d}t j|}t j|}|t j| }|t j| }t ||f}	|| }
 jdkrt	t
d j d	d
 t|||
|	 j jd W 5 Q R X n< j} jdkrd|d< t|||
|	 j|d}|jstd S )Nc              
      s    t | ||||| j jd d S r   r   r   r   r   r   r     s     z5LinprogCommonTests.test_sparse_constraints.<locals>.fr   rj      rR   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Trr   )NNNNN)r3   r4   r5   rq   rr   r@   ro   Zcolumn_stackr   r   r   r	   r   r   r*   )r   r   rM   rB   rW   Zx_validrI   rZ   rY   r[   rX   r   r   r   r   r   test_sparse_constraints  s2    

 

 z*LinprogCommonTests.test_sparse_constraintsc                 C   s   ddddddg}ddddddgddddddgdd	ddddgg}d
ddg}t jd d}t|||| jd|id}t|| t|j| d S )Nr!   r]   r   r   r   r   r1         @rO         X  r   r   )r3   r4   r5   r	   r   r   r   r}   )r   rI   rG   rH   r   r   r   r   r   test_maxiter  s    

zLinprogCommonTests.test_maxiterc                 C   s  | j dd}tdgd| j| j d}t|dd |r@t|jd tdddgd	d
dg| j| j d}t|ddddg |rt|jd tddgddg| j| j d}t|dddg |rt|jd tdddgdddgdddggddgdddg| j| j d}t|ddddg |rt|jd d S )NpresolveTr   )r   r   r[   r   r   r   r   r   )r   r   )r1   r1   )r   r   r   r   r1   )r   r   rd   )r   )r   rO   )      @r   rW   rX   r[   r   r      r   )r   getr	   r   r0   r   r}   r   do_presolver   r   r   r   test_bounds_fixed*  s<       " z$LinprogCommonTests.test_bounds_fixedc                 C   s   | j dd}tdgd| j| j d}t| |r<t|jd tdgdg| j| j d}t| |rlt|jd tdddgd	d
dg| j| j d}t| |rt|jd d S )Nr   Tr   r   r   r   r   r   )r   r   r|   r   )r   r   r	   r   r   r   r}   r   r   r   r   test_bounds_infeasibleJ  s     z)LinprogCommonTests.test_bounds_infeasiblec              
      s0   j dd}| o jdk}dddg}dtjtjfdg}dtj tj fdg}|r҇ fd	d
}tt( tt	 |||d W 5 Q R X W 5 Q R X tt( tt	 |||d W 5 Q R X W 5 Q R X nZt
|| j j d}t| |rt|jd t
|| j j d}t| |r,t|jd d S )Nr   Tr   r   r   r   r|   r   c                    s   t | | j jd}|S )Nr   r   )rI   r[   r   r   r   r   gq  s    z6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gr   rI   r[   r   r   r   )r   r   r   r3   rS   r   r   RuntimeWarningr   
IndexErrorr	   r   r   r}   )r   r   Zsimplex_without_presolverI   Zbounds_1Zbounds_2r   r   r   r   r   test_bounds_infeasible_2`  s*    	
 "z+LinprogCommonTests.test_bounds_infeasible_2c                 C   s&   ddg}t || j| jd}t| d S )Nr1   r   r   )r	   r   r   r   )r   rI   r   r   r   r   test_empty_constraint_1  s    z*LinprogCommonTests.test_empty_constraint_1c                 C   s`   ddddg}dt jft j dfddg}t||| j| jd}t| | jddr\t|jd d S )Nr1   r   r   r1   r   r   r   T)	r3   rS   r	   r   r   r   r   r   r}   r   rI   r[   r   r   r   r   test_empty_constraint_2  s     z*LinprogCommonTests.test_empty_constraint_2c                 C   sT   ddddg}dt jft j dfddg}t||| j| jd}t|ddddgdd d S )Nr   r1   r   r  r   r   r.   r-   )r3   rS   r	   r   r   r0   r  r   r   r   test_empty_constraint_3  s     z*LinprogCommonTests.test_empty_constraint_3c              
   C   sd   t ddgd }ddgddgddgg}dddg}t|||ttt| j| jd	}t|d
ddgd d S )Nr   r   r1   r   r   rO   r]   r!   r   ir`   r   	r3   r=   r	   rW   rX   r[   r   r   r0   r   rI   rU   rV   r   r   r   r   test_inequality_constraints  s    
 z.LinprogCommonTests.test_inequality_constraintsc              
   C   sZ   ddg}ddgddgddgg}dddg}t |||ttt| j| jd}t|d	d
dgd d S )Nr`   r   r   r1   r   r   r   r   r   gUUUUUU?gUUUUUU?r   r	   rW   rX   r[   r   r   r0   r  r   r   r   test_inequality_constraints2  s    
 z/LinprogCommonTests.test_inequality_constraints2c              
   C   sp   ddg}d}t |tttt|| j| jd}t|ddgd ddg}t |tttt|| j| jd}t|ddgd d S )Nr   r   r|   r   r.   )r	   rU   rV   rW   rX   r   r   r0   r  r   r   r   test_bounds_simple  s      z%LinprogCommonTests.test_bounds_simplec              
   C   sZ   t dg}t dgg}t dg}d}t|tt|||| j| jd}t|ddgd d S )Nr   r   )r   Nr   r   r   r3   r=   r	   rU   rV   r   r   r0   r   rI   rW   rX   r[   r   r   r   r   test_bounded_below_only_1  s     z,LinprogCommonTests.test_bounded_below_only_1c              
   C   sb   t d}t d}t dddg}dt jf}t|tt|||| j| j	d}t
||t |d d S )Nr   r   r   rR   r   r  r3   rp   Zeyer=   rS   r	   rU   rV   r   r   r0   sumr  r   r   r   test_bounded_below_only_2  s    


 z,LinprogCommonTests.test_bounded_below_only_2c              
   C   sZ   t dg}t dgg}t dg}d}t|tt|||| j| jd}t|ddgd d S )Nr   r   )Nr   r   r   r   r  r  r   r   r   test_bounded_above_only_1  s     z,LinprogCommonTests.test_bounded_above_only_1c              
   C   sd   t d}t d}t dddg}t j df}t|tt|||| j| j	d}t
||t |d d S )Nr   r   r   r!   r   r  r  r  r   r   r   test_bounded_above_only_2  s    

 z,LinprogCommonTests.test_bounded_above_only_2c              
   C   sf   t d}t d}t dddg}t j t jf}t|tt|||| j| j	d}t
||t |d d S )Nr   r   r   r   r  r  r  r   r   r   test_bounds_infinity  s    

 z'LinprogCommonTests.test_bounds_infinityc              
   C   s   t ddgd }t jddgddggt jd}ddg}t j t jf}dt jf}||f}t|||tt|| j| jd}t	|d	d
dgd d S )Nr1   r!   rb   r   r   r2   r`   r   gm۶m&g$I$Ig%I$I@r   )
r3   r=   Zfloat64rS   r	   rW   rX   r   r   r0   )r   rI   rU   rV   r   r   r[   r   r   r   r   test_bounds_mixed  s    

 z$LinprogCommonTests.test_bounds_mixedc              
   C   sX   ddg}ddgddgddgg}dddg}d	d
g}t |||tt|| j| jd}t| d S Nrf   r   rd   r   r   r      r   r   r   rm   r   )r	   rW   rX   r   r   r   r   rI   rU   rV   r[   r   r   r   r    test_bounds_equal_but_infeasible  s    
 z3LinprogCommonTests.test_bounds_equal_but_infeasiblec              
   C   sX   ddg}ddgddgddgg}dddg}d	d
g}t |tt|||| j| jd}t| d S r  )r	   rU   rV   r   r   r   r  r   r   r   !test_bounds_equal_but_infeasible2  s    
 z4LinprogCommonTests.test_bounds_equal_but_infeasible2c              
      sj   ddg}ddgddgg}ddg}ddg} fd	d
 j D }d|d< t|||tt| j|d}t| d S )Nr   r   g?g@r!   r]   r|   r  c                    s   i | ]}| j | qS r   r   r   r   r   r   r     s      zDLinprogCommonTests.test_bounds_equal_no_presolve.<locals>.<dictcomp>Fr   r   )r   r	   rW   rX   r   r   r   rI   rU   rV   r[   r   r   r   r   r   test_bounds_equal_no_presolve  s     z0LinprogCommonTests.test_bounds_equal_no_presolvec           
   
   C   s   d\}}t jd t j|}d|d< t j||}d|d d df< t j|}ddddgg}d}ddddg}t||||||| j| jd}	t|	d	d
 d S )Nr   r   r   r   )rc   rO   )rc   Nrl   r   gyMj#r   )r3   r4   r5   r@   r	   r   r   r0   
r   rM   rB   rI   rW   rX   rU   rV   r[   r   r   r   r   test_zero_column_1  s     z%LinprogCommonTests.test_zero_column_1c           
   
   C   s   | j dkrt  tjd d\}}tj|}d|d< tj||}d|d d df< tj|}tj||}d|d d df< tj|}d}t||||||| j | jd}	t	|	 | j
dd	rd
| j krt|	jd d S )N>   r   	highs-ipmr   r    r1   r   rl   r   r   Tr   )r   r   xfailr3   r4   r5   r@   r	   r   r   r   r   r}   r  r   r   r   test_zero_column_2.  s(    
 z%LinprogCommonTests.test_zero_column_2c              
   C   s\   dddg}dddgdddgdddgg}dddg}t |tt||t| j| jd}t|dd d S )Nr   r   r   r   r   r   r	   rU   rV   r[   r   r   r0   r   rI   rW   rX   r   r   r   r   test_zero_row_1I  s    

 z"LinprogCommonTests.test_zero_row_1c              
   C   s\   dddgdddgdddgg}dddg}dddg}t |||ttt| j| jd}t|dd d S )Nr   r   r   r   r   r   r	  )r   rU   rV   rI   r   r   r   r   test_zero_row_2Q  s    

 z"LinprogCommonTests.test_zero_row_2c              
   C   s   d\}}t j|}t j||}d|dd d f< t j|}t|tt||t| j| jd}t	| | j
ddr|t|jd d S Nr    r   r   r   T)r3   r4   r@   r	   rU   rV   r[   r   r   r   r   r   r}   )r   rM   rB   rI   rW   rX   r   r   r   r   test_zero_row_3Y  s     z"LinprogCommonTests.test_zero_row_3c              
   C   s   d\}}t j|}t j||}d|dd d f< t j| }t|||ttt| j| jd}t	| | j
ddr~t|jd d S r(  )r3   r4   r@   r	   rW   rX   r[   r   r   r   r   r   r}   )r   rM   rB   rI   rU   rV   r   r   r   r   test_zero_row_4g  s     z"LinprogCommonTests.test_zero_row_4c              
   C   s   ddddg}ddddgddddgddddgddddgg}ddddg}t |tt||t| j| jd}t| | jddrt|j	d d S )Nr   r   r   r!   r   r   T)
r	   rU   rV   r[   r   r   r   r   r   r}   r%  r   r   r   test_singleton_row_eq_1u  s    , z*LinprogCommonTests.test_singleton_row_eq_1c              
   C   sp   ddddg}ddddgddddgddddgddddgg}ddddg}t |tt||t| j| jd}t|dd d S )Nr   r   r   r!   r   r   r$  r%  r   r   r   test_singleton_row_eq_2  s    , z*LinprogCommonTests.test_singleton_row_eq_2c              
   C   s   ddddg}ddddgddddgddddgddddgg}ddddg}ddddg}t |||tt|| j| jd	}t| | jd
drt|jd d S )Nr   r   r   r1   r   r!   rl   rm   r   r   T	r	   rW   rX   r   r   r   r   r   r}   r  r   r   r   test_singleton_row_ub_1  s    , z*LinprogCommonTests.test_singleton_row_ub_1c              
   C   s|   ddddg}ddddgddddgddddgddddgg}ddddg}ddddg}t |||tt|| j| jd	}t|d
d d S )Nr   r   r   r1         r!   rl   rm   r   rR   r   )r	   rW   rX   r   r   r0   r  r   r   r   test_singleton_row_ub_2  s    , z*LinprogCommonTests.test_singleton_row_ub_2c              
   C   sP   ddg}ddgddgddgg}dddg}t |||ttt| j| jd}t| d S )Nr1   r   r   r   r   r   )r	   rW   rX   r[   r   r   r   r  r   r   r   test_infeasible  s    
 z"LinprogCommonTests.test_infeasiblec              
   C   sX   dg}dgg}d}d}t |||tt|| j| jd}t| | jddrTt|jd d S )	Nr   r   r!   )r   r`   r   r   Tr   r-  r  r   r   r   !test_infeasible_inequality_bounds  s     z4LinprogCommonTests.test_infeasible_inequality_boundsc              
   C   sR   t ddgd }ddgddgg}ddg}t|||ttt| j| jd}t| d S )Nr   r1   r   r   )	r3   r=   r	   rW   rX   r[   r   r   r   r  r   r   r   test_unbounded  s     z!LinprogCommonTests.test_unboundedc                    s^   dg}dg} fdd j D }d|d< t|| j|d} jdkrRt|jd	 nt| d S )
Nr   Nr   c                    s   i | ]}| j | qS r   r   r   r   r   r   r     s      zQLinprogCommonTests.test_unbounded_below_no_presolve_corrected.<locals>.<dictcomp>Fr   r   r   r   )r   r	   r   r   r   r   )r   rI   r[   r   r   r   r   r   *test_unbounded_below_no_presolve_corrected  s    
z=LinprogCommonTests.test_unbounded_below_no_presolve_correctedc              
   C   s   t ddddddg}t ddddddgddddddgddddddgg}t dddg}ddddddg}t|||tt|| j| jd	}t| | j 	d
st
|jd t j t
|jdd d dS )|
        Test whether presolve pathway for detecting unboundedness after
        constraint elimination is working.
        r   r   r1   r   r   rl   r  rm   r   r   N$   $The problem is (trivially) unboundedr3   r=   r	   rW   rX   r   r   r   lowerr   r   r,   rS   r)   r  r   r   r   *test_unbounded_no_nontrivial_constraints_1  s*       z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_1c              
   C   s   t ddddddg}t ddddddgddddddgddddddgg}t dddg}ddddddg}t|||tt|| j| jd	}t| | j 	d
st
|jd t j  t
|jdd d dS )r6  r   r   r1   r   r   rl   r  )Nr   r   r   Nr7  r8  r9  r  r   r   r   *test_unbounded_no_nontrivial_constraints_2  s*       z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_2c              
   C   sp   t dddgd }dddgdddgdddgg}dddg}t|||ttt| j| jd	}t|dddgd
dd d S )Nrj   rO   r   r1   r   rP      i'  r   gh㈵>Hz>)r.   r'   r&   r  r  r   r   r   test_cyclic_recovery  s    
 z'LinprogCommonTests.test_cyclic_recoveryc              
   C   s   t ddddg}t ddddgddd	d
gd
dddgg}ddd
g}d}dd | j D }||d< t|||ttt| j|d}| jdkr| j	dst
||d  nt|d
dd
dgd d S )Nrc   9   ra   g      8@rR   g      r   g      r/  r   r   rj   c                 S   s   i | ]\}}||qS r   r   )r   r   valr   r   r   r     s      z8LinprogCommonTests.test_cyclic_bland.<locals>.<dictcomp>r   r   r   blandr  )r3   r=   r   itemsr	   rW   rX   r[   r   r   r   r0   )r   rI   rU   rV   r   r   r   r   r   r   test_cyclic_bland  s     


 z$LinprogCommonTests.test_cyclic_blandc                 C   s   d\}}t j|}t j||}t j|}d|dd d f  |dd d f< |d  d9  < t .}|td t|tt||t	| j
| jd}W 5 Q R X t| d S )N)rO   rO   r   r   r1   A_eq does not appear...r   )r3   r4   r@   r   filterr
   r	   rU   rV   r[   r   r   r   )r   rM   rB   rI   rW   rX   supr   r   r   r   $test_remove_redundancy_infeasibility  s      z7LinprogCommonTests.test_remove_redundancy_infeasibilityc           	   
   C   sB   t  \}}}}}}}t|||||t| j| jd}t|||d d S )Nr   r   )ri   r	   r[   r   r   r0   	r   rI   rU   rV   rW   rX   rg   rh   r   r   r   r   test_nontrivial_problem1  s     z*LinprogCommonTests.test_nontrivial_problemc                 C   sp   t dd\}}}t D}|td |td |t t|||ttt	| j
| jd}W 5 Q R X t|dd d S )NrP   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )rN   r   rF  r
   r   r   r	   rW   rX   r[   r   r   r0   )r   rU   rV   rI   rG  r   r   r   r   test_lpgen_problem9  s    
 z%LinprogCommonTests.test_lpgen_problemc                 C   s<  dddddddddd	d
dg}d\}}|||d|dddd|ddg|dd|d|ddddddgdd||ddddddddgdddddd||dd|dgdddd|||d|dddgddddddd||dd|gddddddddd|||gg}dddddddg}t  ,}|t t|tt||t| j| jd}W 5 Q R X t	|dddd d S )Nr   r!   ra      r   r]   rd   r   r         r     i!   ir   i  ư>r>  )r-   r'   r&   )
r   rF  r   r	   rU   rV   r[   r   r   r0   )r   rI   rB   prW   rX   rG  r   r   r   r   test_network_flowF  s$    
 z$LinprogCommonTests.test_network_flowc           	      C   s   dddddg}ddgddgddgddgddgg}d\}}||dddg|d||dgd||d|gddd||gg}ddddg}t  ^}tr|t |td	 |td
 |td |t t|tt	|||| j
| jd}W 5 Q R X t|dd d S )Nr   r   r   r   r!   r   r  rf   scipy.linalg.solve
Ill...rE  Solving system with option...r   r  r   )r   has_umfpackrF  r   r   r
   r   r	   rU   rV   r   r   r0   )	r   rI   r[   rB   rT  rW   rX   rG  r   r   r   r   "test_network_flow_limited_capacity[  s4    

 z5LinprogCommonTests.test_network_flow_limited_capacityc              
   C   sR   dddg}dddgdddgg}dd	g}t |||ttt| j| jd
}t|dd d S )Nr   rb   rf   r   r   r   r   rO   r   r   ir   r	  r  r   r   r   (test_simplex_algorithm_wikipedia_examplez  s    
 z;LinprogCommonTests.test_simplex_algorithm_wikipedia_examplec              
   C   s   ddddddg}ddddddgddddddgdd	ddddgg}d
ddg}t |tt||t| j| jd}t|dddddddgddd d S )Nr!   r]   r   r   r   r   r1   r   rO   r   r   r   r   g     s@g     P@g     1@g     f@gTqs*>r>  )r-   r.   r'   r&   r$  r%  r   r   r   test_enzo_example  s    
  z$LinprogCommonTests.test_enzo_examplec                 C   s   ddddddg}ddddddgdddd	d	d	gd	ddd	ddgdd	ddd	dgddd	ddd	gg}d
ddddg}t  .}|td t|tt||t| j| jd}W 5 Q R X t	|dddddddgd d S )Nr   g333333@g%@r   g333333g%r1   r   r   r/  皙?333333?rE  r   gRQg?        r   r   )
r   rF  r
   r	   rU   rV   r[   r   r   r0   )r   rI   rW   rX   rG  r   r   r   r   test_enzo_example_b  s"     z&LinprogCommonTests.test_enzo_example_bc              
   C   s   d}t | }dt j t d|d  |d  }t t |d t |f}ddg}t|tt	||t
| j| jd}t|dt |d d S )NrP   r   r   r   r   r   )r3   rp   pir6   r>   cossinr	   rU   rV   r[   r   r   r0   r8   r   rM   rI   tmprW   rX   r   r   r   r   #test_enzo_example_c_with_degeneracy  s    " z6LinprogCommonTests.test_enzo_example_c_with_degeneracyc              
   C   sz   d}t | }dt j t | |d  }t t |d t |f}ddg}t|tt	||t
| j| jd}t| d S )NrQ   r   r   r   r   )r3   rp   r`  r6   r>   ra  rb  r	   rU   rV   r[   r   r   r   rc  r   r   r   &test_enzo_example_c_with_unboundedness  s     z9LinprogCommonTests.test_enzo_example_c_with_unboundednessc              
      s   d}t | }dt j t | |d  }t t |d t |f}ddg} fdd jD }d|d< t|t	t
||t j|d}t| d S )	NrQ   r   r   c                    s   i | ]}| j | qS r   r   r   r   r   r   r     s      zMLinprogCommonTests.test_enzo_example_c_with_infeasibility.<locals>.<dictcomp>Fr   r   )r3   rp   r`  r6   r>   ra  rb  r   r	   rU   rV   r[   r   r   )r   rM   rI   rd  rW   rX   r   r   r   r   r   &test_enzo_example_c_with_infeasibility  s     z9LinprogCommonTests.test_enzo_example_c_with_infeasibilityc                 C   s   t ddddddg}t ddddddgddddddgddddddgddddddgddddddgg}t dddddg}t ddd	d
d	d
gddd	d
d	d
gg}t ddg}t|||||t| j| jd}t|dt |dd d S )NggQ뱿gMbp?r   r   r   r   g      4@r1   r   r   g>)r-   r.   r'   )r3   r=   r	   r[   r   r   r0   Z
zeros_like)r   rI   rU   rV   rW   rX   r   r   r   r   test_basic_artificial_vars  s       & z-LinprogCommonTests.test_basic_artificial_varsc           	   
   C   s   t d\}}}}}}t||||||| j| jd}t|j t|j t|j  d| jkrht|jdk t	||j
 |j t	|||j
  |jdd t	|||j
  |jdd dD ]@}|| krt|| d tjstt|| d	 tjstqd S )
Nr   rU   rV   rW   rX   r[   r   r   r   z%Optimization terminated successfully.gdy=r'   )eqlinineqlinr:  upper	marginalsZresidual)r\   r	   r   r   r   r   r}   r   r)   r   r,   r+   r   r~   keysr   r3   Zndarrayr*   )	r   rI   rU   rV   rW   rX   r[   r   r   r   r   r   test_optimize_result  s$      


z'LinprogCommonTests.test_optimize_resultc           
   /   C   sH  dddddddddddddddddddg}d}d}d}t ddd	d	d
d	d	d	ddd	ddddd	d	d	d	gdd	d|d	d
d	dd	d	dd	dd	d	ddd	d	gdd	d	|d	d	d
ddd	ddd	d	d	d	d	ddgd	dd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	dd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	dd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	dd	d	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	dd	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	d	dd	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	d	d	dd	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	d	d	d	dd	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	d	d	d	d	dd	d	d	d	d	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	dd	d	d	d	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	dd	d	d	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	dd	d	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	dd	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	dd	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	dd	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	dd	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	dd	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	dgd	dddd	d	d	d||d	d	d	|d	d	d	d	d	gd	d	d	d	dddd	d	d	d||d	|d	d	d	d	gd	dddd	d	d	|ddd	d	d	d	d	|d	d	d	gd	d	d	d	dddd	d	d	|d|d	d	d	|d	d	gd	dddd	d	d	||dd	d	d	d	d	d	d	|d	gd	d	d	d	dddd	d	d	||dd	d	d	d	d	|gg}t dd	d	ddddddddddddd	d	d	d	d	d	d	d	d	d	d	d	g}t dddddddddddddd	d	d	d	d	d	g}t D}|td |td |t t|||tt	|| j
| jd}	W 5 Q R X t|	dd d S )Nrm   )r   rj   )r     gqq?     gr   gQr   rb   r1   g333333gףp=
?r   gffffff?g @r^  rj   rq  r   rK  rL  r   g^Zr   )r3   r=   r   rF  r
   r   r   r	   rW   rX   r   r   r0   )
r   r[   r   r   hrU   rV   rI   rG  r   r   r   r   test_bug_5400  s                   (((((((((((((((((((((((((((                                  
 z LinprogCommonTests.test_bug_5400c              
   C   s   t dddg}t dddgdddgg}t ddg}t dddgg }t d	g }d
}t||||||| j| jd}t|dt dddgd d S )Nr   r   r^  g     @g      @rr  g    .Ag    .Ag    cArl   r   gfffff-@r   g@r   r3   r=   r	   r   r   r0   )r   rI   rW   rX   rU   rV   r[   r   r   r   r   test_bug_6139.  s    	 z LinprogCommonTests.test_bug_6139c                 C   s  t ddddddddddg
g}t dg}t ddddddddddg
ddddddddddg
dddd	ddddddg
dd
ddddddddg
ddddddddddg
g}t dddddg}t ddddddddddg
dddddd d!d"d#d$g
gj}t d%d&d'd(d)d*d+d,d-d.g
}t `}tr&|t |td/ |td0 |td1 |t	 t
||||||| j| jd2}W 5 Q R X d3}	t dddddd ddd#dg
}
t||	|
d4 d5}t|d d df | |j t|j|d d d6f |  d S )7Nr   g(\??g(\?g%䃞?gzG?gɿg)\(̿gQ?gQg      пg{Gz gQ?gGz?gjt?g+gI+gzGg
ףp=
g(\?r\  gQտgGzgGz?g
ףp=
?g333333g\(\gGz?g{Gz?gzG@gQ?rR   g)\(?g(\?g{Gz?g333333ÿg=
ףp=gffffff?r   g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?z%Solving system with option 'cholesky'rK  rL  r   gVr   rS  r   )r3   r=   rT   r   rX  rF  r   r
   r   r   r	   r   r   r0   r   r,   )r   rW   rX   rU   rV   r[   rI   rG  r   r-   r.   r'   r   r   r   test_bug_6690D  sf              

     z LinprogCommonTests.test_bug_6690c                 C   s   t d\}}}}}t D}|td |td |t t|tt||t	| j
| jd}W 5 Q R X d}t||d t||j| tt|jjd |j d S )Nr   rE  rL  r   -U?r   rk   )rJ   r   rF  r
   r   r   r	   rU   rV   r[   r   r   r0   r   dotr,   r   r3   r8   rL   )r   rW   rX   rI   _rG  r   r-   r   r   r   test_bug_7044p  s    
 z LinprogCommonTests.test_bug_7044c                  C   sx  t dddddddddg	}t ddddddd	d
dg	dddddddddg	dddddddddg	dddddd d!d"d#g	dd$d%d&d%d'd(d)d*g	dd+d,d-d.d/d0d1d2g	d3d4d5d5d5d5d5d5d5g	d3d5d4d5d5d5d5d5d5g	d3d5d5d4d5d5d5d5d5g	d3d5d5d5d4d5d5d5d5g	d3d5d5d5d5d4d5d5d5g	d3d5d5d5d5d5d4d5d5g	d3d5d5d5d5d5d5d4d5g	d3d5d5d5d5d5d5d5d4g	d3dd3d3d3d3d3d3d3g	d3d3dd3d3d3d3d3d3g	d3d3d3dd3d3d3d3d3g	d3d3d3d3dd3d3d3d3g	d3d3d3d3d3dd3d3d3g	d3d3d3d3d3d3dd3d3g	d3d3d3d3d3d3d3dd3g	d3d3d3d3d3d3d3d3dg	g}t d3d3d3d3d3d3d3d3d3d3d3d3d3d3ddddddddg}t d3ddddddddg	g}t dgg}d6gd7 }t||||||| j| jd8}t|d9d:d; d S )<Nr1   r   r   g     g     x@g     8g     Xg      g     }@g      Tg     Prg     @g      E@g     H@g      m@g     @g     x@g     hg     L@g      jg     g     ؀@g     t@g     @g     g     p@g     K@g     Ȋ@g     ؊g     T@g     |@g     pg     Xg     Љ@g      ~@g     s@g     zg     n@g     @h@g     {g      Zg     zg     @g     8@g     v@g     b@g     ؉g     `@g     ȃ@g     r@r^  r          rl   ra   r   ghb$[@rS  r-   r'   ru  r   r   r   r   test_bug_7237  sr                        
 z LinprogCommonTests.test_bug_7237c                 C   s   t dddddgdddd	d
gdddddgdddd	dgg}t |jd }t |jd  }dg|jd  }t 8}|td |t t	|||t
t|| j| jd}W 5 Q R X | jdddk r| jdkrt| nt|ddd d S )NiX  i  iD4  g     3iiiig    @i  r   r   r   rL  r   tolg&.>绽|=r   g rS  r~  )r3   r=   r8   rA   rp   r   rF  r   r   r	   rW   rX   r   r   r   r"   r0   )r   rU   rV   rI   r[   rG  r   r   r   r   test_bug_8174  s&    
 
z LinprogCommonTests.test_bug_8174c                 C   s  t dddddddg}t d }t dgdgdgdgdgdgdgg}t dddddddgdddddddgddddddd	gdd
dddddgdddddddgg}t dgdgdgdgdgg}t <}tr|t |td t|||||t	| j
| jd}W 5 Q R X t|dd d S )Nr   r   rd   r   r]  g?g?r1   gUUUUUUrw  grj   rE  r   g?E@r   )r3   r=   identityr   rX  rF  r   r
   r	   r[   r   r   r0   r   rI   rU   rV   rW   rX   rG  r   r   r   r   test_bug_8174_2  s(    &
 z"LinprogCommonTests.test_bug_8174_2c                 C   s   t dddddg}t dddddgd	d
dddgdddddgdddddgdddddgg}t ddddd	g}t|||| j| jd}t|dddddgd d S )Nrd   r   rf   g      ?r!   g      @r   g      r   r   r   r   rR   r   r/  g      )r_   r1   g      @r   g      g      #@)rU   rV   r   r   rQ  gUUUUUU@gUUUUUU#@r  )r3   r=   r	   r   r   r0   r  r   r   r   test_bug_8561  s    z LinprogCommonTests.test_bug_8561c           
      C   s@  ddddg}ddddgdddd	gddddgdd
d
dgg}ddddg}ddddg}d}t  F}trj|t |td |t t|||tt|| j	| j
d}W 5 Q R X |ddddg |d d|d< t  F}tr|t |td |t t|||tt|| j	| j
d}W 5 Q R X d}	t|||	d t|||	d d S )Nrc   rO   r`   r   r]   re   rf   r!   r^   rb   ra   irm   g      B@rL  r   r   r1   rl   r   rk   )r-   r&   )r   rX  rF  r   r   r   r	   rW   rX   r   r   r;   r0   )
r   rI   rU   rV   r[   r-   rG  res1res2r&   r   r   r   test_bug_8662  sB    





 


 z LinprogCommonTests.test_bug_8662c              
   C   sR   ddg}ddgg}dg}ddg}t |tt|||| j| jd}t|dd	gd
d d S )Nr   r   r   r_   r^   rm   rl   r   g۶m۶m?gI$I$@r  )r	   rU   rV   r   r   r0   r  r   r   r   test_bug_8663  s    
 z LinprogCommonTests.test_bug_8663c                 C   s   dg}dgdgg}ddg}dgdgdgg}dddg}t  8}|t |td	 t|||||t| j| jd
}W 5 Q R X t| d S )Nr!   r   r   r   re   ra   r   rO   rW  r   )	r   rF  r   r
   r	   r[   r   r   r   r  r   r   r   test_bug_8664  s    

 z LinprogCommonTests.test_bug_8664c              
   C   s   t dddddg}t dddddgdddddgg}t ddg}dddddg}t|||tt|| j| jd}t|dd	 t||j	 |j
 d
S )zv
        Test whether bug described at:
        https://github.com/scipy/scipy/issues/8973
        was fixed.
        r   r   r1   r   r   rl   r  r   r   N)r3   r=   r	   rW   rX   r   r   r0   r   r,   r+   r  r   r   r   test_bug_8973*  s    " z LinprogCommonTests.test_bug_8973c              
   C   sX   t d}t dgg}t dg}d}t|||tt|| j| jd}t|dgdd dS )z
        Additional test for:
        https://github.com/scipy/scipy/issues/8973
        suggested in
        https://github.com/scipy/scipy/pull/8985
        review by @antonior92
        r   r   rl   r   r   r  N)	r3   r8   r=   r	   rW   rX   r   r   r0   r  r   r   r   test_bug_8973_2;  s    
 z"LinprogCommonTests.test_bug_8973_2c              
   C   s   t d}t dgg}t dg}d}ddg}ddgddgg}ddg}dd	g}d
di}|| j t|||tt|| j|d}t	|ddgdd dS )zg
        Test for linprog docstring problem
        'disp'=True caused revised simplex failure
        r   r   rl   r1   r!   rb   r   r`   r   r   Tr   rO   r   r  N)
r3   r8   r=   updater   r	   rW   rX   r   r0   r  r   r   r   test_bug_10124K  s    
 z!LinprogCommonTests.test_bug_10124c                 C   s   t ddddddgddddddgddddddgddddddgddddddgddddddgg}t ddddddg}t jddt d	fd
d}t .}|td t|tt	||t
| j| jd}W 5 Q R X t|ddddddgdd d
S )zq
        Test for redundancy removal tolerance issue
        https://github.com/scipy/scipy/issues/10349
        r   r         rO         f   r!   NZaxisrE  r      \   r   r  )r3   r=   Zconcatenater8   r   rF  r
   r	   rU   rV   r[   r   r   r0   )r   rW   rX   rI   rG  r   r   r   r   test_bug_10349^  s      z!LinprogCommonTests.test_bug_10349darwinz0Failing on some local macOS builds, see gh-13846reasonc                 C   s  dddddddddddddg}dddddddddddddgdddddddddddddgdddddddddddddgdddddddddddddgdddddddddddddgdddddddddddddgdddddddddddddgdddddddddddddgdddddddddddddgdddddddddddddgg
}dddd	d
d
d
d
d
d
g
}i }| j dslddi}|| j t x}|td tr|t |t	d |t	d |t	d |t	d |t
d t|tt||t| j |d}W 5 Q R X t|jd dS )zA
        Test that autoscale fixes poorly-scaled problem
        g       r}  r   r^  r   g     Ag      Ag     @Ag      Ag   Ar   	autoscaleTrW  rV  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...r   l N)r   r   r  r   r   rF  r
   rX  r   r   r   r	   rU   rV   r[   r   r+   )r   rI   rW   rX   r   rG  r   r   r   r   test_bug_10466q  sN        
 z!LinprogCommonTests.test_bug_10466N)V__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r   r#  r&  r'  r)  r*  r+  r,  r.  r0  r1  r2  r3  r5  r;  r<  r?  rD  rH  rJ  rM  rU  rY  rZ  r[  r_  re  rf  rg  rh  rp  rt  rv  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r   markZskipifsysplatformr  r   r   r   r   r   k  s   
! &
								
7,)$r   zignore::DeprecationWarningc                   @   s   e Zd ZdZdS )LinprogSimplexTestsr   Nr  r  r  r   r   r   r   r   r    s   r  c                   @   s   e Zd ZdZdd ZdS )LinprogIPTestsr   c                 C   s   t d d S )Nz*Test is failing, but solver is deprecated.r   skipr   r   r   r   r    s    zLinprogIPTests.test_bug_10466N)r  r  r  r   r  r   r   r   r   r    s   r  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	LinprogRSTestsr   c                 C   s   t d d S Nz Intermittent failure acceptable.r  r   r   r   r   rt    s    zLinprogRSTests.test_bug_5400c                 C   s   t d d S r  r  r   r   r   r   r    s    zLinprogRSTests.test_bug_8662c                 C   s   t d d S r  r  r   r   r   r   rU    s    z LinprogRSTests.test_network_flowN)r  r  r  r   rt  r  rU  r   r   r   r   r    s   r  c                   @   sz   e Zd Zdd Zejdddiddiddiddid	did
diddiddigdd Zdd Zdd Z	dd Z
dd ZdS )LinprogHiGHSTestsc              	   C   sv   dd }t ddg}ddgddgddgg}dd	d
g}ttt||||| jd t|||| jd}t|dddgd d S )Nc                 S   s   d S r   r   r   r   r   r   <lambda>      z1LinprogHiGHSTests.test_callback.<locals>.<lambda>rb   r   r   r   r   rO   r]   r!   r   r   r   r`   r   )r3   r=   r   NotImplementedErrorr	   r   r0   r   r   r   r   r     s    
 zLinprogHiGHSTests.test_callbackr   r   r1   r   r   r   Zdual_feasibility_toleranceZprimal_feasibility_toleranceZipm_optimality_toleranceZ!simplex_dual_edge_weight_strategyZekkic                    s*    fdd}|  j tt||d d S )Nc                    s   t d j| d d S )Nr   r   r   r   r   r   r   r     s    z7LinprogHiGHSTests.test_invalid_option_values.<locals>.fr   )r  r   r   r
   )r   r   r   r   r   r   test_invalid_option_values  s    z,LinprogHiGHSTests.test_invalid_option_valuesc                 C   sH   t d\}}}}}d}t||||| j| jd}t|jdk| jdk d S )Nr!   r   r   r   r!  )rJ   r	   r   r   r   Zcrossover_nit)r   rW   rX   rI   r{  r[   r   r   r   r   test_crossover  s      z LinprogHiGHSTests.test_crossoverc           
   
      sl  t dd\ t jjd}j\ fdd}t|d|jd}t|jj	|  fdd	}t|d|jd}t|j
j	|  fd
d}tjdd( t|d|jd}d|t < W 5 Q R X t|jj	|  fdd}tjdd( t|d|jd}	d|	t < W 5 Q R X t|jj	|	 d S )Nr   r5   ri  c              	      s   t |  jdjS Nr   r	   r   r+   r,   )rW   rU   rX   r[   rI   r   r   r   f_bub  s    z/LinprogHiGHSTests.test_marginals.<locals>.f_bubz3-point)r   Zf0c              	      s   t  | jdjS r  r  r  )rW   rU   rV   r[   rI   r   r   r   f_beq  s    z/LinprogHiGHSTests.test_marginals.<locals>.f_beqc              	      s*   t | gj}t |jdjS r  r3   r=   rT   r	   r   r+   r,   r[   )rW   rU   rX   rV   rI   r   rZ   r   r   f_lb	  s    z.LinprogHiGHSTests.test_marginals.<locals>.f_lbignore)invalidc              	      s*   t | gj}t |jdjS r  r  r  )rW   rU   rX   rV   rI   rY   r   r   r   f_ub  s    z.LinprogHiGHSTests.test_marginals.<locals>.f_ub)r\   r	   r   r   rT   r   r+   r   rl  rn  rk  r3   Zerrstateisfiniter:  rm  )
r   r   r  Zdfdbubr  Zdfdbeqr  Zdfdlbr  Zdfdubr   )	rW   rU   rX   rV   r[   rI   rY   r   rZ   r   test_marginals  s.      
z LinprogHiGHSTests.test_marginalsc           	   
   C   sv   t dd\}}}}}}t||||||| j| jd}| |j|jj  |j|jj  |jj |j	j }t
|ddd d S )Nr   r  ri  r   -q=rj  )r\   r	   r   r   rT   rl  rn  rk  rm  r:  r   )	r   rI   rU   rV   rW   rX   r[   r   Zresidr   r   r   test_dual_feasibility!  s      z'LinprogHiGHSTests.test_dual_feasibilityc              
   C   sX   t dd\}}}}}}t||||||| j| jd}t|jj|||j   dsTt	d S )Nr   r  ri  r   )
r\   r	   r   r   r3   allcloserl  rn  r,   r*   r   r   r   r   test_complementary_slackness/  s      z.LinprogHiGHSTests.test_complementary_slacknessN)r  r  r  r   r   r  Zparametrizer  r  r  r  r  r   r   r   r   r    s"   

1r  c                       s4   e Zd Zdd Zdd Zdd Z fddZ  ZS )	TestLinprogSimplexDefaultc                 C   s
   i | _ d S r   r   r   r   r   r   setup_methodB  s    z&TestLinprogSimplexDefault.setup_methodc                 C   s   t d d S NzSimplex fails on this problem.r  r   r   r   r   rt  E  s    z'TestLinprogSimplexDefault.test_bug_5400c                 C   s   t d d S r  r  r   r   r   r   test_bug_7237_low_tolH  s    z/TestLinprogSimplexDefault.test_bug_7237_low_tolc              	      s4   | j ddi tt t   W 5 Q R X d S Nr  r  r   r  r   r   r
   superr  r   	__class__r   r   test_bug_8174_low_tolM  s    z/TestLinprogSimplexDefault.test_bug_8174_low_tol)r  r  r  r  rt  r  r  __classcell__r   r   r  r   r  @  s   r  c                       s,   e Zd Zdd Zdd Z fddZ  ZS )TestLinprogSimplexBlandc                 C   s   ddi| _ d S )NrB  Tr   r   r   r   r   r  W  s    z$TestLinprogSimplexBland.setup_methodc                 C   s   t d d S r  r  r   r   r   r   rt  Z  s    z%TestLinprogSimplexBland.test_bug_5400c              
      sJ   | j ddi tt& tt t   W 5 Q R X W 5 Q R X d S r  )	r   r  r   r   r*   r   r
   r  r  r   r  r   r   r  ]  s    z-TestLinprogSimplexBland.test_bug_8174_low_tol)r  r  r  r  rt  r  r  r   r   r  r   r  U  s   r  c                       s   e Zd Zdd Zedjdk Zej	
dZejjeo8edd fdd	Z fd
dZdd Z fddZdd Zdd Z  ZS )TestLinprogSimplexNoPresolvec                 C   s   ddi| _ d S )Nr   Fr   r   r   r   r   r  h  s    z)TestLinprogSimplexNoPresolve.setup_methodr   r]   linuxz"Fails with warning on 32-bit linux)	conditionr  c                    s   t    d S r   )r  rt  r   r  r   r   rt  n  s    z*TestLinprogSimplexNoPresolve.test_bug_5400c              
      s@   | j ddi tjtdd t  W  5 Q R  S Q R X d S )Nr  r  zlinprog status 4r   )r   r  r   r   r*   r  rv  r   r  r   r   test_bug_6139_low_tolt  s    z2TestLinprogSimplexNoPresolve.test_bug_6139_low_tolc                 C   s   t d d S r  r  r   r   r   r   r  }  s    z2TestLinprogSimplexNoPresolve.test_bug_7237_low_tolc              	      s4   | j ddi tt t   W 5 Q R X d S r  r  r   r  r   r   r    s    z2TestLinprogSimplexNoPresolve.test_bug_8174_low_tolc                 C   s   t d d S Nz#Tests behavior specific to presolver  r   r   r   r   r;    s    zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1c                 C   s   t d d S r  r  r   r   r   r   r<    s    zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2)r  r  r  r  r3   ZintpitemsizeZ	is_32_bitr  r  r   Zis_linuxr   r  r"  rt  r  r  r  r;  r<  r  r   r   r  r   r  f  s   	r  c                   @   s   e Zd ZddiZdS )TestLinprogIPDenserr   FNr  r  r  r   r   r   r   r   r    s   r  c                   @   s   e Zd ZdddZdS )TestLinprogIPSparseCholmodTrr   r   Nr  r   r   r   r   r    s   r  c                   @   s   e Zd ZdddZdd ZdS )TestLinprogIPSparseUmfpackTFr  c                 C   s   t d d S )Nz2Failing due to numerical issues on some platforms.r  r   r   r   r   rY    s    z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacityN)r  r  r  r   rY  r   r   r   r   r    s   
r  c                       s^   e Zd ZddddZejd fddZejjdd fd	d
Z	dd Z
dd Z  ZS )TestLinprogIPSparseTFrr   r   Zsym_posrThis test is sensitive to machine epsilon level perturbations in linear system solution in _linprog_ip._sym_solve.c                    s   t    d S r   r  rv  r   r  r   r   rv    s    z!TestLinprogIPSparse.test_bug_6139Fails with ATLAS, see gh-7877r  c                    s   t    d S r   r  rx  r   r  r   r   rx    s    z!TestLinprogIPSparse.test_bug_6690c           	         s   t d\}}}}}d}t b}tr,|t |td |td  fdd jD }d|d< t|t	t
||| j|d	}W 5 Q R X t|d
d d S )Nr   r   zMatrix is exactly singularrW  c                    s   i | ]}| j | qS r   r   r   r   r   r   r     s      zLTestLinprogIPSparse.test_magic_square_sparse_no_presolve.<locals>.<dictcomp>Fr   r   ry  r   )rJ   r   rX  rF  r   r   r
   r   r	   rU   rV   r   r0   )	r   rW   rX   rI   r{  r[   rG  r   r   r   r   r   $test_magic_square_sparse_no_presolve  s    
 z8TestLinprogIPSparse.test_magic_square_sparse_no_presolvec           
         s   t d\}}}}}t n}|td |td  fdd jD }d}|D ]2}||d< t|tt||t j	|d}	t
|	d	d
 qNW 5 Q R X d S )Nr   rE  zInvalid permc_spec optionc                    s   i | ]}| j | qS r   r   r   r   r   r   r     s      zATestLinprogIPSparse.test_sparse_solve_options.<locals>.<dictcomp>)ZNATURALZMMD_ATAZMMD_AT_PLUS_AZCOLAMDr   
permc_specr   ry  r   )rJ   r   rF  r
   r   r	   rU   rV   r[   r   r0   )
r   rW   rX   rI   r{  rG  r   Zpermc_specsr  r   r   r   r   test_sparse_solve_options  s     z-TestLinprogIPSparse.test_sparse_solve_options)r  r  r  r   r   r  xfail_on_32bitrv  r"  rx  r  r  r  r   r   r  r   r    s   
r  c                       sT   e Zd ZdddZejd fddZdd Zejj	dd	 fd
dZ
  ZS )TestLinprogIPSparsePresolveT)rr   r   r  c                    s   t    d S r   r  r   r  r   r   rv    s    z)TestLinprogIPSparsePresolve.test_bug_6139c                 C   s   t d d S )Nz6_sparse_presolve=True incompatible with presolve=Falser  r   r   r   r   rg    s    zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityr  r  c                    s   t    d S r   r  r   r  r   r   rx    s    z)TestLinprogIPSparsePresolve.test_bug_6690)r  r  r  r   r   r  r  rv  rg  r"  rx  r  r   r   r  r   r    s   

r  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestLinprogIPSpecificr   c                 C   s|   t rddd}ntr ddd}ndddd}tdd\}}}t|||| j|d}t|||| jd}t|j|jdd	d
d d S )NTr  Fr  rP   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r$   )has_cholmodrX  rN   r	   r   r   r+   )r   r   rG   rH   rI   r  r  r   r   r   test_solver_select  s    
 z(TestLinprogIPSpecific.test_solver_selectc                 C   s4   dg}dg}t ||| jdddd}t|dd d S )Nr1   r4  FT)r   r   r   r   )r	   r   r0   r  r   r   r   )test_unbounded_below_no_presolve_original  s    z?TestLinprogIPSpecific.test_unbounded_below_no_presolve_originalc                 C   s8   t dd\}}}t|||| jddid}t|dd d S )NrP   r   Tr   r   r   r   r   r   r   r   test_cholesky  s
    z#TestLinprogIPSpecific.test_choleskyc              	   C   sp   t dd\}}}t D}|td |td |td t|||| jdddd}W 5 Q R X t|dd	 d S )
NrP   rV  rW  r  T)ipr   r   r   r   )	rN   r   rF  r   r
   r   r	   r   r0   )r   rG   rH   rI   rG  r   r   r   r   test_alternate_initial_point  s    z2TestLinprogIPSpecific.test_alternate_initial_pointc                 C   s   dg}dgdgg}ddg}dgdgdgg}dddg}t  :}|t |td	 t|||||t| jd
did}W 5 Q R X t|j d d S )Nr!   r   r   r   re   ra   r   rO   rW  r   Fr   r   )	r   rF  r   r
   r	   r[   r   r   r   r  r   r   r   r    s    

 z#TestLinprogIPSpecific.test_bug_8664N)	r  r  r  r   r  r  r  r  r  r   r   r   r   r    s   	r  c                   @   sH   e Zd Zi Zdd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )TestLinprogRSCommonc                 C   s   t d d S r  r  r   r   r   r   rD  0  s    z%TestLinprogRSCommon.test_cyclic_blandc           	      C   sP   t  \}}}}}}}t|||||t| j| j|d	}t|||d t|jd d S Nr   r   x0r   r   ri   r	   r[   r   r   r0   r   r}   rI  r   r   r   "test_nontrivial_problem_with_guess3  s      z6TestLinprogRSCommon.test_nontrivial_problem_with_guessc           
      C   s\   t  \}}}}}}}ddddg}t||||||| j| j|d	}	t|	||d t|	jd d S )Nrl   rm   r  r   r   ri   r	   r   r   r0   r   r}   
r   rI   rU   rV   rW   rX   rg   rh   r[   r   r   r   r   0test_nontrivial_problem_with_unbounded_variables:  s      zDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variablesc           
      C   s\   t  \}}}}}}}ddddg}t||||||| j| j|d	}	t|	||d t|	jd d S )Nr4  r   Nrm   r\  g333333?r  r   r   r  r  r   r   r   .test_nontrivial_problem_with_bounded_variablesB  s      zBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variablesc           
      C   sx   t  \}}}}}}}dg}tddddg}d}ddd	d
g}t||||||| j| j|d	}	t|	||d t|	jd d S )Nr!   gibl3g%G/?r   r\  g@Q$@rl   r  rm   r  r  r   )	ri   r3   r=   r	   r   r   r0   r   r}   r  r   r   r   8test_nontrivial_problem_with_negative_unbounded_variableJ  s      zLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variablec           
      C   sN   t  \}}}}}}}ddddg}t|||||t| j| j|d	}	t|	jd d S Nr   r   r   rR   r  r`   ri   r	   r[   r   r   r   r   
r   rI   rU   rV   rW   rX   rg   rh   Z	bad_guessr   r   r   r   &test_nontrivial_problem_with_bad_guessU  s      z:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guessc           
   	   C   s   t d\}}}}}tjj|j }t j}|td |td |t	 t
|||| jd}t
|||| j|jd}t
|| ||| j|jd}	W 5 Q R X t|dd t|jd t|	 t|	j|jk  d S )	Nr   rE  rL  )rW   rX   r   )rW   rX   r   r  ry  r   r   )rJ   r3   r4   r@   rA   r   rF  r
   r   r   r	   r   r,   r0   r   r}   r   )
r   rG   rH   rI   r{  rT  rG  r   r  Zres3r   r   r   %test_redundant_constraints_with_guess\  s    
$z9TestLinprogRSCommon.test_redundant_constraints_with_guessN)r  r  r  r   rD  r  r  r  r  r  r  r   r   r   r   r  -  s   r  c                   @   s   e Zd ZddiZdS )TestLinprogRSBlandpivotrB  Nr  r   r   r   r   r   l  s   r   c                   @   s   e Zd ZdZi Zdd ZdS )TestLinprogHiGHSSimplexDualr   c                 C   s   t  \}}}}t||||| j| jd}t|jd t|jdk	 tt	|j
dk tt	|jdd |D k tt	|jdd |D k dS )z
        The scaled model should be optimal, i.e. not produce unscaled model
        infeasible.  See https://github.com/ERGO-Code/HiGHS/issues/494.
        )rU   rV   r[   r   r   r   Ngưc                 S   s"   g | ]\}}|d krt jn|qS r   r3   rS   r   rY   rZ   r   r   r   
<listcomp>  s   zCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>c                 S   s(   g | ] \}}|d krt j n|d qS )Nr>  r  r  r   r   r   r    s   )ry   r	   r   r   r   r   r   r,   r3   allr~   )r   rI   rU   rV   rx   r   r   r   r   test_lad_regressiony  s    
 z/TestLinprogHiGHSSimplexDual.test_lad_regressionN)r  r  r  r   r   r  r   r   r   r   r  u  s   r  c                   @   s   e Zd ZdZi ZdS )TestLinprogHiGHSIPMr!  N)r  r  r  r   r   r   r   r   r   r    s   r  c                   @   s   e Zd ZdZi Zejjej	dk o*e
 dkddddd Zd	d
 Zdd Zdd Zdd Zejjejddd Zejjdd ZdS )TestLinprogHiGHSMIPr   l        LinuxFzgh-16347)r  runr  c              	   C   s  d}t |\}}}}}dgt| }dgt| }t|d |||| j|d}	| |	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  | tj	j
|	jt|	jd	d
 d S )Nr!   r   r   r   rI   rW   rX   r[   r   r   r   r  r1   r  rj  )rJ   r   r	   r   r<   r,   r7   r3   r  r   r   Zdiaground)r   rB   rG   rH   rI   rD   rC   r[   r   r   sZsquarer   r   r   	test_mip1  s     *zTestLinprogHiGHSMIP.test_mip1c                 C   s   t ddgddgg}t ddg}t ddg }t dt jfgt| }t |}t||||| j|d	}t j|j	ddg t j|j
d
 d S )Nr   r   re   rO   r1      r   r   r   rb   )r3   r=   rS   r   Z	ones_liker	   r   r   r   r,   r+   r   r   r   r   	test_mip2  s    

 zTestLinprogHiGHSMIP.test_mip2c                 C   s   t ddgddgddgg}t dddg}t ddg }dt jfgt| }dgt| }t||||| j|d}t j|jd t 	|j
ddgst 	|j
ddgstd S )	Nr1   r   r   r   r   r   r   r   )r3   r=   rS   r   r	   r   r   r   r+   r  r,   r*   r   r   r   r   	test_mip3  s    
 zTestLinprogHiGHSMIP.test_mip3c                 C   s   t ddgddgddgg}t dddg}t d	dg}d
t jfgt| }d
dg}t||||| j|d}t j|jddg t j|j	d d S )Nr1   r   rf   r   r   r  irP   r]   r   r   g      @rd   ;   )
r3   r=   rS   r   r	   r   r   r   r,   r+   r   r   r   r   	test_mip4  s    
 zTestLinprogHiGHSMIP.test_mip4c           	   
   C   s   t dddgg}t dg}t dddgg}t dg}t dddg}d	t jfd	t jfd
g}d	dd	g}t||||||| j|d}t j|jd	dd	g t j|jd |	dd d k	st
|	dd d k	st
|	dd d k	st
d S )Nr   rd   r!   r   r   rb   r   r1   r   r   )rI   rU   rV   rW   rX   r[   r   r   r`   iZmip_node_countZmip_dual_boundmip_gap)r3   r=   rS   r	   r   r   r   r,   r+   r   r*   )	r   rU   rV   rW   rX   rI   r[   r   r   r   r   r   	test_mip5  s"    
 zTestLinprogHiGHSMIP.test_mip5x   c                 C   s   t ddddddddgdd	dd
ddddgddddddddgddd
dddd	dgg}t ddddg}t ddddddddg}dt jfgd }dgd }t||||| j|d }t j|jd! d S )"N   r     rR     r   r  '   rO              rP        &   )   r7    (  :,  /  r   rO      rd   r   r   r]   r   r  i>  )r3   r=   rS   r	   r   r   r   r+   )r   rW   rX   rI   r[   r   r   r   r   r   	test_mip6	  s    

 zTestLinprogHiGHSMIP.test_mip6c                 C   s,  t ddddddddgdd	dd
ddddgddddddddgddd
dddd	dgg}t ddddg}t ddddddddg}dt jfgd }dgd }d d!d"d#g}g }|D ]B}t|tt|||| j|d$|id%	}	|	d& }
|
|kst||
 qt 	t 
|}t |dkstt |dkr(td S )'Nr  r  r  rR  r  r   r  r  rO  r  r  r  r  rP  r   r!  r"  r#  r7  r$  r%  r&  r'  r   rO   r(  rd   r   r   r]   r   rR   g      ?g{Gz?gMbP?mip_rel_gap)	rI   rU   rV   rW   rX   r[   r   r   r   r  )r3   r=   rS   r	   rU   rV   r   r*   r;   ZdiffZflipr  )r   rW   rX   rI   r[   r   Zmip_rel_gapsZsol_mip_gapsr*  r   Zfinal_mip_gapZ	gap_diffsr   r   r   test_mip_rel_gap_passdown	  s0    
 z-TestLinprogHiGHSMIP.test_mip_rel_gap_passdownN)r  r  r  r   r   r   r  r"  r  maxsizer  systemr  r  r  r  r  Zslowtimeoutr)  Zxslowr+  r   r   r   r   r	    s"   


r	  c                   @   s&   e Zd ZddiZejZejZejZdS )AutoscaleTestsr  TN)r  r  r  r   r   rv  rx  r  r   r   r   r   r/  D	  s   r/  c                   @   s   e Zd ZdZdd ZdS )TestAutoscaleIPr   c                 C   s   d| j d< t| S )Nr  r  )r   r/  rv  r   r   r   r   rv  P	  s    
zTestAutoscaleIP.test_bug_6139N)r  r  r  r   rv  r   r   r   r   r0  M	  s   r0  c                   @   s   e Zd ZdZdS )TestAutoscaleSimplexr   Nr  r   r   r   r   r1  U	  s   r1  c                   @   s    e Zd ZdZdd Zdd ZdS )TestAutoscaleRSr   c           	      C   sP   t  \}}}}}}}t|||||t| j| j|d	}t|||d t|jd d S r  r  rI  r   r   r   r  \	  s      z2TestAutoscaleRS.test_nontrivial_problem_with_guessc           
      C   sN   t  \}}}}}}}ddddg}t|||||t| j| j|d	}	t|	jd d S r  r  r  r   r   r   r  c	  s      z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guessN)r  r  r  r   r  r  r   r   r   r   r2  Y	  s   r2  c                   @   s2   e Zd ZdZeZejZejZej	Z	ej
ZejZdS )RRTestsr   N)r  r  r  r   r   ZLCTrH  Ztest_RR_infeasibilityr  r|  rY  Z	test_NFLCr_  r   r   r   r   r3  p	  s   r3  c                   @   s   e Zd ZddiZdS )	TestRRSVDr   ZSVDNr  r   r   r   r   r4  |	  s   r4  c                   @   s   e Zd ZddiZdS )TestRRPivotr   r  Nr  r   r   r   r   r5  	  s   r5  c                   @   s   e Zd ZddiZdS )TestRRIDr   ZIDNr  r   r   r   r   r6  	  s   r6  )NNr#   r#   )r   )r   r]   ra   rj   )Ur  r  r  Znumpyr3   Znumpy.testingr   r   r   r   r   r   r   r   r   Zscipy.optimizer	   r
   Zscipy.optimize._numdiffr   Zscipy.sparse.linalgr   Zscipy.linalgr   Zscipy.sparserq   rX  Zscikits.umfpackr   ImportErrorr  ZsksparseZsksparse.cholmodr   Zcholmodr   r   r   r"   r0   rJ   rN   r\   ri   ry   r   r   r   r   r   r   rU   rV   rW   rX   r[   r   r  filterwarningsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r	  r/  r0  r1  r2  r3  r4  r5  r6  r   r   r   r   <module>   s    


    
B

#
	-          @


t-2
D?	
 *

