U
    »mœ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   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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"   ç:Œ0âŽyE>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¡ qÄq¸t| ƒ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||< qšt  ||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æ¤€‹–²?gòsÚÑð?güØkª¾Lá?gŽqY†:^@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)   ÚcompleteZ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ç      2Àr`   ©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sŒt‚| j |¡sœt‚ddi}	t ||||d|	d�} d}| jdksÊt‚| j |¡sÚt‚t dddd�} d}| jdksút‚| 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�sšt‚| |¡�sªt‚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„ ZBd€d�„ ZCd‚dƒ„ ZDd„d…„ ZEd†d‡„ ZFdˆd‰„ ZGdŠd‹„ ZHdŒd�„ ZIdŽd�„ ZJd�d‘„ ZKd’d“„ ZLd”d•„ ZMd–d—„ ZNd˜d™„ ZOePjQjReSjTdškd›dœ�d�dž„ ƒZUdŸS ) Ú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rÆt	t
dˆ j› d	�d
�� t|||
|	ˆ jˆ jd� W 5 Q R X n<ˆ j–}ˆ jdkràd|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ƒ |r‚t|jdƒ tddgddg| j| j d�}t|dddgƒ |r¾t|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|ƒ |r¤t|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|ƒ |rþt|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Æ   iîÿÿÿr`   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   Ú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Æ   g·mÛ¶mÛ&Àg’$I’$Iò¿g%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Æ   gyM�±åj#À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	¡rÚd
| j krÚt|	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¡r‚t|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¡rŽt|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
¡sÄt
|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
¡sÆt
|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Æ   gñhãˆµøÔ>çH¯¼šò×z>)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¡s¤t
||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ðÿÿÿé!   iÜÿÿÿrÆ   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Æ   iìÿÿÿr·   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¸…ëQü¿gš™™™™™É?ç        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 )Ngš™™™™™¹¿gìQ¸…ë±¿gü©ñÒMbp?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r²t|| d tjƒsÚt‚t|| d	 tjƒs²t‚q²d S )
Nr   ©rU   rV   rW   rX   r[   r‰   r•   r›   z%Optimization terminated successfully.g•dyáý¥=©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   gìQ¸…ëÀr   rb   r1   g333333Àg×£p=
×ÿ?r   gffffffþ?gÍÌÌÌÌÌ @r^  rj   rq  rÉ   rK  rL  rÆ   g¯^¥¨ZÀr·   )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¯%äƒžÍî?gáz®Gáò?gš™™™™™É¿g)\�Âõ(Ì¿g…ëQ¸…Û?g…ëQ¸…ó¿g      Ð¿g{®Gáz ÀgìQ¸…ëõ?g®Gáz®ã?gj¼t“Æ?g+‡ÙÎë¿gºI+‡–¿gáz®Gáê¿g
×£p=
ï¿gÃõ(\�ÂÕ?r\  g…ëQ¸Õ¿g®Gáz®ç¿g®GázÞ?g
×£p=
·?g333333÷¿g\�Âõ(\ç¿g®Gáz®×?g{®Gáz”?gáz®Gá@g…ëQ¸…ë?rR   g)\�Âõ(ü?gÃõ(\�ÂÅ?g{®GázÔ?g333333Ã¿g=
×£p=ú¿gffffffæ?rÚ   gö(\�Âõð¿g�Âõ(\�ò¿g¤p=
×£Ð?g
×£p=
@g{®Gázø?g…ëQ¸å?gìQ¸…ëÑ?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     8�Àg     X�Àg      ŒÀg     à}@g      TÀg     PrÀg     °�@g      E@g     H�@g      m@g     ˜‹@g     €x@g     hŒÀg     €L@g      jÀg     ð‹Àg     Ø€@g     t@g      €@g     àŒÀg     p�@g     €K@g     ÈŠ@g     ØŠÀg     ÀT@g     à|@g     �pÀg     XŽÀg     Ð‰@g      ~@g      s@g     €zÀg      n@g     @h@g     °{Àg      ZÀg     ÐzÀg     à€@g     8…@g     �v@g      b@g     Ø‰Àg     `‹@g     Èƒ@g     àr@r^  rÉ   ç       €rl   ra   rÆ   ghèŸàb$[@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rÖt|ƒ nt|ddd� d S )NiºX  ið  iD4  g     3¥Ài¤ûÿÿi†ìÿÿi¼ûÿÿi†ÿÿ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   gUUUUUUå¿rw  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   i÷ÿÿÿrm   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_posúrThis 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iblÝ3â¿gç%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¡s¬t  	|j
ddg¡s¬t‚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  ißÿÿÿrP   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	sÀt
‚| 	dd ¡d k	sÔt
‚| 	dd ¡d k	sèt
‚d S )Nr   rd   r!   r   rØ   rb   r†   r1   r   r£   )rI   rU   rV   rW   rX   r[   r‰   r¦   r`   iôÿÿÿZ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_mip5éx   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sät‚| |
¡ q¬t  	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{®Gáz„?gü©ñÒMbP?Úmip_rel_gap)	rI   rU   rV   rW   rX   r[   r‰   r¦   r•   r  )r3   r=   rS   r	   rU   rV   r‰   r*   r;   ÚdiffÚ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   r1  D	  s   r1  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•   r1  rv  r²   r   r   r   rv  P	  s    
zTestAutoscaleIP.test_bug_6139N)rŸ  r   r¡  r‰   rv  r   r   r   r   r2  M	  s   r2  c                   @   s   e Zd ZdZdS )ÚTestAutoscaleSimplexr    Nr§  r   r   r   r   r3  U	  s   r3  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   r4  Y	  s   r4  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   r5  p	  s   r5  c                   @   s   e Zd ZddiZdS )Ú	TestRRSVDr“   ZSVDNrØ  r   r   r   r   r6  |	  s   r6  c                   @   s   e Zd ZddiZdS )ÚTestRRPivotr“   r  NrØ  r   r   r   r   r7  €	  s   r7  c                   @   s   e Zd ZddiZdS )ÚTestRRIDr“   ZIDNrØ  r   r   r   r   r8  „	  s   r8  )NNr#   r#   )r   )r   r]   ra   rj   )Ur¢  r¤  r¥  Ú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	  r1  r2  r3  r4  r5  r6  r7  r8  r   r   r   r   Ú<module>   s¸    


    ÿ
B

#
	-          @


t-2
D?	
 *

