a
    ‡ù»j†„ ã                   @   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mZ ddlZddlZd
ZzddlmZ W n eyÂ   dZY n0 d
Z zddl!Z!ddl"m#Z$ W n eyö   dZ Y n0 dd„ Z%dd„ Z&dd„ Z'dd„ Z(didd„Z)dd„ Z*dd„ Z+djdd„Z,dd „ Z-dkd$d%„Z.d&d'„ Z/d(d)„ Z0d*d+„ Z1d,d-„ Z2d.d/„ Z3d0d1„ Z4dZ5dZ6dZ7dZ8dZ9G d2d3„ d3ƒZ:ej; <d4¡G d5d6„ d6e:ƒƒZ=ej; <d4¡G d7d8„ d8e:ƒƒZ>ej; <d4¡G d9d:„ d:e:ƒƒZ?G d;d<„ d<e:ƒZ@G d=d>„ d>e=ƒZAG d?d@„ d@e=ƒZBG dAdB„ dBe=ƒZCG dCdD„ dDe>ƒZDe �rZG dEdF„ dFe>ƒZEe�rpG dGdH„ dHe>ƒZFG dIdJ„ dJe>ƒZGG dKdL„ dLe>ƒZHej; <d4¡G dMdN„ dNƒƒZIG dOdP„ dPe?ƒZJG dQdR„ dRe?ƒZKG dSdT„ dTe@ƒZLG dUdV„ dVe@ƒZMG dWdX„ dXƒZNej; <d4¡G dYdZ„ dZƒƒZOG d[d\„ d\eOƒZPG d]d^„ d^eOƒZQG d_d`„ d`eOƒZRej; <d4¡G dadb„ dbƒƒZSG dcdd„ ddeSƒZTG dedf„ dfeSƒZUG dgdh„ dheSƒZVdS )lz"
Unit test for Linear Programming
é    N)Úassert_Úassert_allcloseÚassert_equalÚassert_array_lessÚassert_warnsÚsuppress_warnings)Úraises)ÚlinprogÚOptimizeWarning)Úapprox_derivative)ÚMatrixRankWarning)ÚLinAlgWarning)ÚVisibleDeprecationWarningT)Ú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   úGE:\soccer\ml_env\Lib\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v dƒ d S )Nr   ©r   é   z%failed to report optimization failure)r   r   r   r   r   r   r   Ú)_assert_unable_to_find_basic_feasible_sol3   s    r#   ç:Œ0âŽyE>c                 C   sj   | j s"d| j› d| j› �}t|ƒ‚t| jdƒ |d urJt| j|d||d� |d urft| j|d||d� d S )Nzlinprog status z, message: r   z*converged to an unexpected objective value©Úerr_msgÚrtolÚatolz#converged to an unexpected solution)r   r   Ú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   g d¢} g d¢g d¢g d¢g d¢g}g d¢}g d¢g}dg}g d	¢}d
}| ||||||fS )N)r1   é   r"   éúÿÿÿ)éùÿÿÿr_   é   é	   )r   r1   éýÿÿÿr   )rO   éöÿÿÿr_   é   )r`   r1   r   r"   )rb   r`   r^   r`   )rc   r   r   éøÿÿÿéüÿÿÿ)gkæ¤€‹–²?gòsÚÑð?r   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}g d¢}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v ƒ t|   d¡tdƒv ƒ 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}g d¢}ttt| ||dd� ttt| ||d	d� d
}tjt|d��$ t| ||ddid� W d   ƒ n1 s�0    Y  d S )Nrb   r†   r   r   r   r‡   úekki-ekki-ekki©rU   rV   rŠ   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}©ÚmatchÚ	rr_method©rU   rV   Úoptions)r3   r=   Úassert_raisesÚ
ValueErrorr	   ÚpytestÚwarnsr
   )rI   rU   rV   r)   r   r   r   Ú test_unknown_solvers_and_options  s    ÿÿÿr›   c                  C   sR   t  ddg¡} ddgddgddgg}g d¢}t| ||dd�}t|d	dd
gd� d S )Nrb   r†   r   r   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   s¦   t  t¡� tddd� W d   ƒ n1 s,0    Y  t  t¡� tddd� W d   ƒ n1 sb0    Y  t  t¡� tddd� W d   ƒ n1 s˜0    Y  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J ‚| j |¡s.J ‚tdƒ\}}}}}dgt|ƒ }dgt|ƒ }dd	i}	t ||||d|	|d
�} d}| jdksŒJ ‚| j |¡sœJ ‚ddi}	t ||||d|	d�} d}| jdksÊJ ‚| j |¡sÚJ ‚t dddd�} d}| jdksúJ ‚| j |¡�sJ ‚t ddd�} d}| jdk�s,J ‚| j |¡�s>J ‚ddlm}
 |
ddƒ\}}d}|dk�sjJ ‚| |¡�szJ ‚|
d d ƒ\}}d}|dk�sšJ ‚| |¡�sªJ ‚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)   Ú
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_message0  sL    ÿÿ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_callbacky  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                    sz   t  ddg¡}ddgddgddgg}g d¢}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   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>É  ó    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  g d¢¡}t  ddg¡ }dt jfgt|ƒ }dgt|ƒ }t j t¡�& t||||| j|d�}W d   ƒ n1 s”0    Y  t j 	|j
dd	g¡ t j 	|jd
¡ d S )Nr1   r   r   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                    sX  d‡ fdd„	}t t|g d¢ddgd� tj ¡ �4}| td¡ t t|g d¢g d¢d� W d   ƒ n1 sj0    Y  t t|g d¢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v �r8ˆ jd �r8d 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>.f©r   r   r   r{   ©r   r"   ©r[   zCreating an ndarray from ragged)r{   ræ   )r   r"   é   ©r   r†   r   r   )rU   rV   )rW   rX   Ú_sparse_presolve)r   r   r   )rU   rX   )NNNNN)	r—   r˜   r3   rà   r   Úfilterr   r–   r8   )rŽ   rÐ   Úsupr   r³   r   Útest_invalid_inputsá  s     6  ÿ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v rÚt	t
dˆ j› d	�d
��( t|||
|	ˆ jˆ jd� W d   ƒ n1 sÎ0    Y  n@i ˆ j¥}ˆ jdv � rød|d< t|||
|	ˆ j|d�}|j�sJ ‚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Ð   rM   rB   rW   Zx_validrI   rZ   rY   r[   rX   r–   r   r   r³   r   Útest_sparse_constraintsý  s.    

ÿ&

ÿz*LinprogCommonTests.test_sparse_constraintsc                 C   sh   g d¢}g d¢g d¢g d¢g}g d¢}t j d¡ d}t|||| jd|id	�}t||ƒ t|j|ƒ d S )
N©r"   r]   r   r   r   r   ©r   rè   r   r1   r   r   ©r   ç      @r]   r   r1   r   ©r]   rO   r"   r   r   r1   ©é¹   é›   iX  r   r   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g d¢g d¢| j| j d�}t|d	g d
¢ƒ |r|t|jdƒ tddgddg| j| j d�}t|dddgƒ |r¸t|jdƒ tg d¢g d¢g d¢gddgg d¢| j| j d�}t|dg d¢ƒ |�r
t|jdƒ d S )NÚpresolveTr   )r   r   ©r[   rŠ   r–   r   rå   ))rè   rè   )r1   r1   )r   r   rÛ   )rè   r1   r   )r   r   r   )r   r   r   ©r   r   r   ©r   r   r   rd   ))éûÿÿÿrè   )r   rO   )ç      @rþ   ©rW   rX   r[   rŠ   r–   é   )r   rd   rþ   )r–   Úgetr	   rŠ   r0   r   r|   ©rŽ   Údo_presolver   r   r   r   Útest_bounds_fixed-  s4    ÿÿÿþ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g d¢g d¢| 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   Útest_bounds_infeasibleM  s    ÿz)LinprogCommonTests.test_bounds_infeasiblec              	      s„  ˆ j  dd¡}| oˆ jdk}g d¢}dtjtjfdg}dtj tj fdg}|�r$‡ fdd„}t t¡�F t t	¡� |||d	� W d   ƒ n1 s˜0    Y  W d   ƒ n1 s¶0    Y  t t¡�F t t	¡� |||d	� W d   ƒ n1 sø0    Y  W d   ƒ n1 �s0    Y  n\t
||ˆ jˆ j d
�}t|ƒ |�rRt|jdƒ t
||ˆ jˆ j d
�}t|ƒ |�r€t|jdƒ d S )Nrù   Tr¡   rå   r{   ræ   c                    s   t | |ˆ jˆ jd�}|S )Nrú   rã   )rI   r[   r   r³   r   r   Úgu  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_2d  s2    	HLÿÿ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\   g d¢}dt jft j dfddg}t||| j| jd�}t|ƒ | j dd¡rXt|jdƒ d S )N)r1   r   r1   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   sL   g d¢}dt jft j dfddg}t||| j| jd�}t|g d¢dd� d S )N)r   r1   r   r1   r   r  rú   )r   r   r1   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   sb   t  ddg¡d }ddgddgddgg}g d¢}t|||ttt| j| jd�}t|ddd	gd
� d S )Nr   r   r1   r   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   sX   ddg}ddgddgddgg}g d¢}t |||ttt| j| jd�}t|d	d
dgd� d S )Nr`   r   r   r1   r†   r   )r   r1   r1   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   s`   t  d¡}t  d¡}t  g d¢¡}dt jf}t|tt|||| j| j	d�}t
||t  |¡d� d S )Nr   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   sb   t  d¡}t  d¡}t  g d¢¡}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   Útest_bounded_above_only_2ã  s    

ÿz,LinprogCommonTests.test_bounded_above_only_2c              
   C   sd   t  d¡}t  d¡}t  g d¢¡}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   Ú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   sV   ddg}ddgddgddgg}g d¢}dd	g}t |||tt|| j| jd
�}t|ƒ d S ©Nrf   r   rd   r†   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   sV   ddg}ddgddgddgg}g d¢}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Õ     rÖ   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 |¡}g d¢g}d}g d¢}t||||||| j| jd�}	t|	dd	� d S )
Nræ   r   r   )r   r   r   r   r   )©rc   rO   r+  )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v 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 vrÚt|	jdƒ d S )N>   ú	highs-ipmr¨   r   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_25  s&    
ÿz%LinprogCommonTests.test_zero_column_2c              
   C   sR   g d¢}g d¢g d¢g d¢g}g d¢}t |tt||t| j| jd�}t|dd� d S )Nrå   ©r   r   r   ©r   r   r   ©r   r   r   rÇ   r   r¸   ©r	   rU   rV   r[   rŠ   r–   r0   ©rŽ   rI   rW   rX   r   r   r   r   Útest_zero_row_1P  s    ÿz"LinprogCommonTests.test_zero_row_1c              
   C   sR   g d¢g d¢g d¢g}g d¢}g d¢}t |||ttt| j| jd�}t|dd� d S )Nr1  r2  r3  rå   rÇ   r   r¸   r  )rŽ   rU   rV   rI   r   r   r   r   Útest_zero_row_2X  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_3`  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 r8  )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_4n  s    ÿz"LinprogCommonTests.test_zero_row_4c              
   C   sn   g d¢}g d¢g d¢g d¢g d¢g}g d¢}t |tt||t| j| jd�}t|ƒ | j dd¡rjt|j	d	ƒ d S )
N©r   r   r   r   ©r   r   r   r   ©r   r   r   r   ©r   r   r   r   )r   r   r   r"   rÇ   rù   Tr   )
r	   rU   rV   r[   rŠ   r–   r   r  r   r|   r5  r   r   r   Útest_singleton_row_eq_1|  s    ÿz*LinprogCommonTests.test_singleton_row_eq_1c              
   C   sX   g d¢}g d¢g d¢g d¢g d¢g}g d¢}t |tt||t| j| jd�}t|dd� d S )	Nr;  r<  r=  r>  )r   r   r   r"   rÇ   r"   r¸   r4  r5  r   r   r   Útest_singleton_row_eq_2ˆ  s    ÿz*LinprogCommonTests.test_singleton_row_eq_2c              
   C   sv   g d¢}g d¢g d¢g d¢g d¢g}g d¢}g d¢}t |||tt|| j| jd�}t|ƒ | j d	d
¡rrt|jdƒ d S )Nr;  r<  r=  ©r1   r   r   r   r>  )r   r   r†   r"   ©rl   rm   rm   rm   rÇ   rù   Tr   ©	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`   g d¢}g d¢g d¢g d¢g d¢g}g d¢}g d¢}t |||tt|| j| jd�}t|d	d
� d S )Nr;  r<  r=  rA  r>  )r   r   ç      à¿r"   rB  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   sN   ddg}ddgddgddgg}g d¢}t |||ttt| j| jd�}t|ƒ d S )Nr1   r   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   rC  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Õ   Ì  rÖ   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  g d¢¡}t  g d¢g d¢g d¢g¡}t  g d¢¡}g d¢}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   r   r   r1   r1   ©r   r   r   r   r   r   ©r   r   r   r   r   r   )r   r   r   r   r   r1   ©r   r†   r   )rl   rl   rl   r  r  rm   rÇ   rœ   r1   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  g d¢¡}t  g d¢g d¢g d¢g¡}t  g d¢¡}g d¢}t|||tt|| j| jd�}t|ƒ | j ¡  	d¡sœt
|jd	 t j ƒ t
|jd
d… dƒ d
S )rL  )r   r   r   r   r1   r   rM  rN  )r   r   r   r   r   r   rO  )rl   rl   rl   r  r  )Nr   rÇ   rœ   r1   NrP  rQ  rR  r&  r   r   r   Ú*test_unbounded_no_nontrivial_constraints_2ì  s     
þÿÿz=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_2c              
   C   sd   t  g d¢¡d }g d¢g d¢g d¢g}g d¢}t|||ttt| j| jd�}t|g d¢d	d
d� d S )N)rj   rO   r   r1   rû   )rP   r   r   )éÈ   rP   r   )r   rj   é'  rÇ   )r   r   rW  gñhãˆµøÔ>çH¯¼šò×z>)r.   r(   r'   r  r  r   r   r   Útest_cyclic_recovery   s    þÿz'LinprogCommonTests.test_cyclic_recoveryc              
   C   s¦   t  g d¢¡}t  g d¢g d¢g d¢g¡}g d¢}d}dd„ | j ¡ D ƒ}||d	< t|||ttt| j|d
�}| jdkr’| j 	d¡s’t
||d	 ƒ nt|g d¢d� d S )N)rc   é9   ra   g      8@)rR   g      Àr¯   ra   )rR   g      ø¿rE  r   r<  )r   r   r   rj   c                 S   s   i | ]\}}||“qS r   r   )rÓ   rÔ   Úvalr   r   r   rÕ     rÖ   z8LinprogCommonTests.test_cyclic_bland.<locals>.<dictcomp>r   rÇ   r¡   Úbland)r   r   r   r   r  )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ƒ �8}| td¡ t|tt||t	| j
| jd�}W d   ƒ n1 s¢0    Y  t|ƒ d S )N)rO   rO   r   r†   r1   úA_eq does not appear...rÇ   )r3   r4   r@   r   rë   r
   r	   rU   rV   r[   rŠ   r–   r   )rŽ   rM   rB   rI   rW   rX   rì   r   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_problem8  s
    ÿz*LinprogCommonTests.test_nontrivial_problemc                 C   s„   t ddƒ\}}}tƒ �N}| td¡ | td¡ | t¡ t|||ttt	| j
| jd�}W d   ƒ n1 sj0    Y  t|dd� d S )NrP   ú$Solving system with option 'sym_pos'úinvalid value encounteredrÇ   r·   r¸   )rN   r   rë   r
   r  r   r	   rW   rX   r[   rŠ   r–   r0   )rŽ   rU   rV   rI   rì   r   r   r   r   Útest_lpgen_problem@  s    
ÿ$z%LinprogCommonTests.test_lpgen_problemc                 C   s4  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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}g d¢}t ƒ �6}| t¡ t|tt||t| j| jd�}W d   ƒ n1 �s0    Y  t	|dddd	� d S )
N)r   r"   ra   é   r"   r   r]   rd   r   r   é   é   r  r   )r   é   iðÿÿÿé!   r   r   iÜÿÿÿrÇ   ió  ç�íµ ÷Æ°>rX  )r-   r(   r'   )
r   rë   r   r	   rU   rV   r[   rŠ   r–   r0   )rŽ   rI   rB   ÚprW   rX   rì   r   r   r   r   Útest_network_flowM  s"    ù
ÿ&z$LinprogCommonTests.test_network_flowc           	      C   sü   g d¢}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}g d¢}t ƒ �h}tr„| t¡ | td	¡ | td
¡ | td¡ | t¡ t|tt	|||| j
| jd�}W d   ƒ n1 sâ0    Y  t|dd� d S )N)r   r   r   r   r   r   r"   r   r   rè   r  )rf   r   r   r"   úscipy.linalg.solve
Ill...r_  úSolving system with option...rÇ   r$  r¸   )r   Úhas_umfpackrë   r   r  r
   r   r	   rU   rV   rŠ   r–   r0   )	rŽ   rI   r[   rB   rl  rW   rX   rì   r   r   r   r   Ú"test_network_flow_limited_capacityb  s2    ûü

ÿ$z5LinprogCommonTests.test_network_flow_limited_capacityc              
   C   sL   g d¢}g d¢g d¢g}ddg}t |||ttt| j| jd�}t|dd� d S )	N)r†   rb   rf   )r   r   r   )r   rè   r   rO   r   rÇ   iìÿÿÿr¸   r  r  r   r   r   Ú(test_simplex_algorithm_wikipedia_example�  s    þÿz;LinprogCommonTests.test_simplex_algorithm_wikipedia_examplec              
   C   s\   g d¢}g d¢g d¢g d¢g}g d¢}t |tt||t| j| jd�}t|dg d¢d	d
d� d S )Nrð   rñ   rò   rô   rõ   rÇ   g     Øs@)g     �P@r   g     €1@r   g     øf@r   gTäqs*Ù>rX  )r-   r.   r(   r'   r4  r5  r   r   r   Útest_enzo_exampleŒ  s    ýÿþz$LinprogCommonTests.test_enzo_examplec                 C   s–   g d¢}g d¢g d¢g d¢g d¢g d¢g}g d¢}t ƒ �8}| td¡ t|tt||t| j| jd	�}W d   ƒ n1 sv0    Y  t	|d
g d¢d� d S )N)rÞ   g333333@gš™™™™™%@rß   g333333Àgš™™™™™%À)r1   r1   r1   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   )rE  çš™™™™™Ù?ç333333Ó?ru  ru  r_  rÇ   gR¸…ëQü¿)ru  gš™™™™™É?ç        rv  r¦   ru  rŒ   )
r   rë   r
   r	   rU   rV   r[   rŠ   r–   r0   )rŽ   rI   rW   rX   rì   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   s’   d}t  |¡ }dt j t  |¡ |d  }t  |¡d }d|d< t  |¡}d|d< t  ||f¡}ddg}t|tt	||t
| j| jd�}t|ƒ d S )NrQ   r   r   rv  r   rÇ   )r3   rp   rx  r6   ry  rz  r>   r	   rU   rV   r[   rŠ   r–   r    )	rŽ   rM   rI   r{  Zrow0Zrow1rW   rX   r   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Õ   Õ  rÖ   zMLinprogCommonTests.test_enzo_example_c_with_infeasibility.<locals>.<dictcomp>Frù   rÇ   )r3   rp   rx  r6   r>   ry  rz  r–   r	   rU   rV   r[   rŠ   r   )rŽ   rM   rI   r{  rW   rX   rØ   r   r   r³   r   Ú&test_enzo_example_c_with_infeasibilityÍ  s    ÿz9LinprogCommonTests.test_enzo_example_c_with_infeasibilityc              
   C   sž   t  g d¢¡}t  g d¢g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t  g d¢g d	¢g¡}t  d
d
g¡}t|||||t| j| jd�}t|d
t  |¡dd� d S )N)gš™™™™™¹¿gìQ¸…ë±¿çü©ñÒMbp?r  r  r  )rÄ   r   r   r   r   r   )rÊ   r   r   r   r   r   )r   rÊ   r   r   r   r   )r   rÄ   r   r   r   r   )rÄ   rÄ   r   r   r   r   )rÅ   rÅ   rÅ   rÅ   g      4@)rÄ   r   r1   r   r1   r   )r   rÊ   r1   r   r1   r   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vrht|jdkƒ t	||j
 |jƒ t	|||j
  |jdd� t	|||j
  |jdd� dD ]@}|| ¡ v r²t|| d tjƒsÚJ ‚t|| d	 tjƒs²J ‚q²d S )
Nr   ©rU   rV   rW   rX   r[   rŠ   r–   rœ   z%Optimization terminated successfully.g•dyáý¥=©r(   )ÚeqlinÚineqlinrS  ÚupperÚ	marginalsZresidual)r\   r	   rŠ   r–   r   r   r|   r   r)   r   r,   r+   r~   r}   Úkeysr€   r3   Zndarray)	rŽ   rI   rU   rV   rW   rX   r[   r   rÔ   r   r   r   Útest_optimize_resultí  s     
ÿ


z'LinprogCommonTests.test_optimize_resultc           
   /   C   sb  g d¢}d}d}d}t  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gg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g 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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  g d!¢¡}t  g d"¢¡}tƒ �N}| td#¡ | td$¡ | t¡ t|||tt	|| j
| jd%�}	W d   ƒ n1 �sH0    Y  t|	d&d'� d S )(N)rm   ©r   rj   r‰  r‰  r‰  r‰  r‰  ©r   é„  rŠ  rŠ  rŠ  rŠ  rŠ  rm   rm   rm   rm   rm   rm   gÇqÇq¼?ç     ˆÃÀgÍÌÌÌÌÌÀ)r   gìQ¸…ëÀr   r   rb   r   r   r   r1   r1   r   r1   r1   r   r   r   r   r   r   r   r   g333333Àrb   r1   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   g×£p=
×ÿ?r   gffffffþ?gÍÌÌÌÌÌ @)rv  r   r   rj   rj   rj   rj   rj   rj   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   rc  rd  rÇ   g¯^¥¨ZÀr¸   )r3   r=   r   rë   r
   r  r   r	   rW   rX   rŠ   r–   r0   )
rŽ   r[   rÐ   r  ÚhrU   rV   rI   rì   r   r   r   r   Útest_bug_5400  sZ    ((((((((åÿ
ÿ&z LinprogCommonTests.test_bug_5400c              
   C   sŽ   t  g d¢¡}t  g d¢g d¢g¡}t  ddg¡}t  g d¢g¡ }t  dg¡ }d}t||||||| j| jd	�}t|d
t  g d¢¡d� d S )Nr2  )rÄ   rv  rv  )ç     @�Àrv  r�  g      @rŒ  )rv  g    €„.Ag     Ò.Ag    ÐcArl   rÇ   gfffffæ-@)rè   gÍÌÌÌÌÌ@rè   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   sV  t  g d¢g¡}t  dg¡}t  g d¢g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t  g d	¢g d
¢g¡j}t  g d¢¡}tƒ �h}trŽ| t¡ | td¡ | td¡ | td¡ | t	¡ t
||||||| j| jd�}W d   ƒ n1 sì0    Y  d}	t  g d¢¡}
t||	|
d� d}t|d d …df | |jƒ t|j|d d …df | ƒ d S )N)
r   r   r   gÃõ(\�Âí?r   çÍÌÌÌÌÌä?r   r   g�Âõ(\�ê?r   g¯%äƒžÍî?)
r   r   r   çáz®Gáò?r   r   r   gš™™™™™É¿r   g)\�Âõ(Ì¿)
r   r   r   r   r   r   r   r   r   r   )
r   r   r   g…ëQ¸…Û?r   r   r   r   r   r   )
r   g…ëQ¸…ó¿ç      Ð¿r   r   r   g{®Gáz Àr   r   gìQ¸…ëõ?)
r   r   r   r   r   r   r   r”  r   r   )g®Gáz®ã?r   gj¼t“Æ?g+‡ÙÎë¿gºI+‡–¿)
gáz®Gáê¿ç
×£p=
ï¿çÃõ(\�ÂÕ?rt  g…ëQ¸Õ¿g®Gáz®ç¿ç®GázÞ?ç
×£p=
·?g333333÷¿ç\�Âõ(\ç¿)
ç®Gáz®×?g{®Gáz”?gáz®Gá@g…ëQ¸…ë?r“  rR   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'rc  rd  rÇ   g‰ãVó¿)
rš  r•  r–  rt  r“  rR   r—  r˜  r›  r™  rŒ   rk  r   r   )r3   r=   rT   r   rp  rë   r   r
   r  r   r	   rŠ   r–   r0   r   r,   )rŽ   rW   rX   rU   rV   r[   rI   rì   r   r-   r.   r(   r   r   r   Útest_bug_6690Q  sB    ûþ
ÿ
ÿ$z LinprogCommonTests.test_bug_6690c                 C   s¶   t dƒ\}}}}}tƒ �N}| td¡ | td¡ | t¡ t|tt||t	| j
| jd�}W d   ƒ n1 sl0    Y  d}t||d� t| |j¡|ƒ tt |jj¡d |jƒ d S )Nr   r_  rd  rÇ   ç-£ÒU°û?r¸   rk   )rJ   r   rë   r
   r  r   r	   rU   rV   r[   rŠ   r–   r0   r   Údotr,   r   r3   r8   rL   )rŽ   rW   rX   rI   Ú_rì   r   r-   r   r   r   Útest_bug_7044}  s    
ÿ$z LinprogCommonTests.test_bug_7044c                 C   s   t  g d¢¡}t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t  g d¢g¡}t  dgg¡}dgd }t||||||| j| jd�}t|ddd � d S )!N)	r1   r   r   r   r   r   r   r   r   )	rÄ   g      †Àg     xŒ@g     8�Àg     X�Àg      ŒÀg     à}@g      TÀg     PrÀ)	rÄ   g     °�@g      E@g     H�@g      m@g     ˜‹@g     €x@g     hŒÀg     €L@)	rÄ   g      jÀg     ð‹Àg     Ø€@g     t@g      €@g     àŒÀg     p�@g     €K@)	rÄ   g     ÈŠ@g     ØŠÀg     ÀT@g     à|@g     �pÀg     XŽÀg     Ð‰@g      ~@)	rÄ   g      s@ç     €zÀg      n@r¡  g     @h@g     °{Àg      ZÀg     ÐzÀ)	rÄ   g     à€@g     8…@g     �v@g      b@g     Ø‰Àg     `‹@g     Èƒ@g     àr@)	rv  rÊ   ç       €r¢  r¢  r¢  r¢  r¢  r¢  )	rv  r¢  rÊ   r¢  r¢  r¢  r¢  r¢  r¢  )	rv  r¢  r¢  rÊ   r¢  r¢  r¢  r¢  r¢  )	rv  r¢  r¢  r¢  rÊ   r¢  r¢  r¢  r¢  )	rv  r¢  r¢  r¢  r¢  rÊ   r¢  r¢  r¢  )	rv  r¢  r¢  r¢  r¢  r¢  rÊ   r¢  r¢  )	rv  r¢  r¢  r¢  r¢  r¢  r¢  rÊ   r¢  )	rv  r¢  r¢  r¢  r¢  r¢  r¢  r¢  rÊ   )	rv  rÄ   rv  rv  rv  rv  rv  rv  rv  )	rv  rv  rÄ   rv  rv  rv  rv  rv  rv  )	rv  rv  rv  rÄ   rv  rv  rv  rv  rv  )	rv  rv  rv  rv  rÄ   rv  rv  rv  rv  )	rv  rv  rv  rv  rv  rÄ   rv  rv  rv  )	rv  rv  rv  rv  rv  rv  rÄ   rv  rv  )	rv  rv  rv  rv  rv  rv  rv  rÄ   rv  )	rv  rv  rv  rv  rv  rv  rv  rv  rÄ   )rv  rv  rv  rv  rv  rv  rv  rv  rv  rv  rv  rv  rv  rv  rÄ   rÄ   rÄ   rÄ   rÄ   rÄ   rÄ   rÄ   )	rv  rÄ   rÄ   rÄ   rÄ   rÄ   rÄ   rÄ   rÄ   rÄ   rl   ra   rÇ   ghèŸàb$[@rk  ©r-   r(   r�  rÌ   r   r   r   Útest_bug_7237�  sB    ê
ÿz LinprogCommonTests.test_bug_7237c                 C   sä   t  g d¢g d¢g d¢g d¢g¡}t  |jd ¡}t  |jd ¡ }dg|jd  }tƒ �B}| td¡ | t¡ t	|||t
t|| j| jd	�}W d   ƒ n1 s¢0    Y  | j d
d¡dk rÒ| jdkrÒt|ƒ nt|ddd� d S )N)éºX  ið  iD4  ç     3¥Ài¤ûÿÿ)é†ìÿÿi¼ûÿÿi†ÿÿç     úÐ@i¬  )r§  r   r   r¦  r   )r¥  r   r   r¨  r   r   r   r¤   rd  rÇ   Útolg•Ö&è.>ç»½×Ùß|Û=r¡   gê¦Ëë‡ Àrk  r£  )r3   r=   r8   rA   rp   r   rë   r  r   r	   rW   rX   rŠ   r–   r  r#   r0   )rŽ   rU   rV   rI   r[   rì   r   r   r   r   Útest_bug_8174¸  s$    ü
ÿ$
z LinprogCommonTests.test_bug_8174c                 C   sò   t  g d¢¡}t  d¡ }t  dgdgdgdgdgdgdgg¡}t  g d¢g d¢g d¢g d¢g d¢g¡}t  d	gd
gd
gd
gd
gg¡}tƒ �F}trœ| t¡ | td¡ t|||||t	| j
| jd�}W d   ƒ n1 sØ0    Y  t|dd� d S )N)r   r   r   r   r   r   r   rd   r†   )r   r   r   r   r   r   r   )ru  gÍÌÌÌÌÌô?gÍÌÌÌÌÌì?r   r   r   r1   )ru  r   r   r   r   r   gUUUUUUå¿)r   r’  r   r   r   r   ç±¿)r   r   ru  r   r   r   r¬  rj   r   r_  rÇ   gŽ?ªªªªE@r¸   )r3   r=   Úidentityr   rp  rë   r   r
   r	   r[   rŠ   r–   r0   ©rŽ   rI   rU   rV   rW   rX   rì   r   r   r   r   Útest_bug_8174_2Ï  s&    &û
ÿ$z"LinprogCommonTests.test_bug_8174_2c                 C   sn   t  g d¢¡}t  g d¢g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t|||| j| jd�}t|g d	¢d
� d S )N)rd   r   rf   ç      ø?r°  )r"   ç      @r°  rÄ   ç      À)r   r¯   r†   ró   rR   )r   rE  r"   g      )Àr_   )r1   g      @r   r²  r†   )r±  r   g      Àr1   g      #@)r   r   r   r   r   )rU   rV   r–   rŠ   )r   r   ri  gUUUUUU@gUUUUUU#@r  )r3   r=   r	   r–   rŠ   r0   r  r   r   r   Útest_bug_8561ç  s    ûÿz LinprogCommonTests.test_bug_8561c           
      C   sJ  g d¢}g d¢g d¢g d¢g d¢g}g d¢}g d¢}d}t ƒ �P}trN| t¡ | td	¡ | t¡ t|||tt|| j	| j
d
�}W d   ƒ n1 s”0    Y  | g d¢¡ | d¡ d|d< t ƒ �P}trÔ| t¡ | td	¡ | t¡ t|||tt|| j	| j
d
�}W d   ƒ n1 �s0    Y  d}	t|||	d� t|||	d� d S )N)rc   rO   r`   r   )r]   re   rf   r`   )re   r]   r"   r^   )rf   r"   r]   rf   )r   rb   rb   rc   )ra   é÷ÿÿÿr´  rf   )rm   rm   rm   rm   g      B@rd  rÇ   )r   r   r1   r   r   rl   r   rk   )r-   r'   )r   rp  rë   r   r  r   r	   rW   rX   rŠ   r–   r;   r0   )
rŽ   rI   rU   rV   r[   r-   rì   Úres1Úres2r'   r   r   r   Útest_bug_8662ø  s>    ý

ÿ$


ÿ&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}g d¢}t ƒ �B}| t¡ | td¡ t|||||t| j| jd	�}W d   ƒ n1 s€0    Y  t|ƒ d S )
Nr"   r   rè   r   re   ra   ©r   r   rO   ro  rÇ   )	r   rë   r  r
   r	   r[   rŠ   r–   r   r®  r   r   r   Útest_bug_8664'  s    
ÿ$z LinprogCommonTests.test_bug_8664c              
   C   sx   t  g d¢¡}t  g d¢g d¢g¡}t  ddg¡}g d¢}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   r   r   r1   )r   r   r   r   r   )r   r   r   r   r   r   r†   )rl   rl   rl   r  r  rÇ   r¸   N)r3   r=   r	   rW   rX   rŠ   r–   r0   r   r,   r+   r&  r   r   r   Útest_bug_89737  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_2H  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_10124X  s    
ÿz!LinprogCommonTests.test_bug_10124c                 C   sº   t  g d¢g d¢g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t jdd	t  d
¡fdd�}tƒ �8}| td¡ t|tt	||t
| j| jd�}W d  ƒ n1 sš0    Y  t|g d¢dd� dS )zq
        Test for redundancy removal tolerance issue
        https://github.com/scipy/scipy/issues/10349
        )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   )éÝ   éÒ   rO   é�   éÆ   éf   r   r   r"   N©Zaxisr_  rÇ   )é�   é\   rÛ   rÂ  r   rO   rÆ  r  )r3   r=   Zconcatenater8   r   rë   r
   r	   rU   rV   r[   rŠ   r–   r0   )rŽ   rW   rX   rI   rì   r   r   r   r   Útest_bug_10349k  s    
ûÿ$z!LinprogCommonTests.test_bug_10349Údarwinz0Failing on some local macOS builds, see gh-13846©Úreasonc                 C   s  g d¢}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g
}g d¢}i }| j  d¡shddi}| | j¡ tƒ �€}| td¡ tr–| t¡ | t	d¡ | t	d¡ | t	d¡ | t	d¡ | t
d¡ t|tt||t| j |d�}W d  ƒ n1 �s0    Y  t|jdƒ dS )zA
        Test that autoscale fixes poorly-scaled problem
        )ç       Àr¢  rË  r¢  rË  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  )rÄ   rÄ   rv  rv  rv  rv  rv  rv  rv  rv  rv  rv  rv  )rv  rv  rÄ   rÄ   rv  rv  rv  rv  rv  rv  rv  rv  rv  )rv  rv  rv  rv  rÄ   rÄ   rv  rv  rv  rv  rv  rv  rv  )rÄ   rv  rÄ   rv  rÄ   rv  rÊ   rv  rv  rv  rv  rv  rv  )rÄ   rv  rÄ   rv  rÄ   rv  rv  rÄ   rv  rv  rv  rv  rv  )rÄ   rv  rv  rv  rv  rv  rv  rv  rÄ   rv  rv  rv  rv  )rÄ   rv  rv  rv  rv  rv  rv  rv  rv  rÄ   rv  rv  rv  )rÄ   rv  rÄ   rv  rÄ   rv  rv  rv  rv  rv  rÄ   rv  rv  )rv  rv  rÄ   rv  rÄ   rv  rv  rv  rv  rv  rv  rÄ   rv  )rv  rv  rÄ   rv  rÄ   rv  rv  rv  rv  rv  rv  rv  rÄ   )
g     À²Ag      ¹Ag     @¿Ag      ÎAç   þÿÿÏArÌ  rÌ  rÌ  rÌ  rÌ  rœ   Ú	autoscaleTro  rn  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...úIll-conditioned matrix...rÇ   Nlýÿÿÿàÿ )rŠ   r¬   r½  r–   r   rë   r
   rp  r   r  r   r	   rU   rV   r[   r   r+   )rŽ   rI   rW   rX   rØ   rì   r   r   r   r   Útest_bug_10466~  s<    ÷
ÿ&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-  r0  r6  r7  r9  r:  r?  r@  rD  rF  rG  rH  rI  rK  rT  rU  rY  r^  r`  rb  re  rm  rq  rr  rs  rw  r|  r}  r~  r€  rˆ  rŽ  r‘  rœ  r   r¤  r«  r¯  r³  r·  r¸  rº  r»  r¼  r¾  rÇ  r™   ÚmarkÚskipifÚsysÚplatformrÏ  r   r   r   r   r±   l  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   rŽ  Ï  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   rm  Õ  s    z LinprogRSTests.test_network_flowN)rÐ  rÑ  rÒ  rŠ   rŽ  r·  rm  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   st   dd„ }t  ddg¡}ddgddgddgg}g d¢}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   r…   Ü  s    z+LinprogHiGHSTests.test_callback.<locals>.cbrb   r†   r   r   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           
   
      s˜  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��2 t|ˆd|jd�}d|t ˆ¡ < W d   ƒ n1 �s0    Y  t|jj	|ƒ ‡ ‡‡‡‡‡‡fdd„}tjdd��2 t|ˆd|jd�}	d|	t ˆ¡ < W d   ƒ n1 �s|0    Y  t|jj	|	ƒ d S )Nr   ©r5   r�  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   r„  r†  rƒ  r3   ZerrstateÚisfiniterS  r…  )
rŽ   r   rç  Zdfdbubrè  Zdfdbeqrë  Zdfdlbrî  Zdfdubr   )	rW   rU   rX   rV   r[   rI   rY   rŽ   rZ   r   Útest_marginalsþ  s*    
ÿ
00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ã  r�  r   çê-�™—q=r‚  )r\   r	   rŠ   r–   rT   r„  r†  rƒ  r…  rS  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¡sTJ ‚d S )Nr×   rã  r�  r   )	r\   r	   rŠ   r–   r3   Úallcloser„  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_methodP  s    z&TestLinprogSimplexDefault.setup_methodc                 C   s   t  d¡ d S ©NzSimplex fails on this problem.rÛ  r³   r   r   r   rŽ  S  s    z'TestLinprogSimplexDefault.test_bug_5400c                 C   s   t  d¡ d S r÷  rÛ  r³   r   r   r   Útest_bug_7237_low_tolV  s    z/TestLinprogSimplexDefault.test_bug_7237_low_tolc                    sH   | j  ddi¡ t t¡� tƒ  ¡  W d   ƒ n1 s:0    Y  d S ©Nr©  rñ  ©r–   r½  r™   rš   r
   Úsuperr«  r³   ©Ú	__class__r   r   Útest_bug_8174_low_tol[  s    z/TestLinprogSimplexDefault.test_bug_8174_low_tol)rÐ  rÑ  rÒ  rö  rŽ  rø  rþ  Ú__classcell__r   r   rü  r   rõ  N  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 )Nr\  TrÑ   r³   r   r   r   rö  e  s    z$TestLinprogSimplexBland.setup_methodc                 C   s   t  d¡ d S r÷  rÛ  r³   r   r   r   rŽ  h  s    z%TestLinprogSimplexBland.test_bug_5400c              	      sr   | j  ddi¡ t t¡�D t t¡� tƒ  ¡  W d   ƒ n1 sF0    Y  W d   ƒ n1 sd0    Y  d S rù  )	r–   r½  r™   r   r*   rš   r
   rû  r«  r³   rü  r   r   rþ  k  s    z-TestLinprogSimplexBland.test_bug_8174_low_tol)rÐ  rÑ  rÒ  rö  rŽ  rþ  rÿ  r   r   rü  r   r   c  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ö  v  s    z)TestLinprogSimplexNoPresolve.setup_methodr   r]   Úlinuxz"Fails with warning on 32-bit linux)Ú	conditionrÊ  c                    s   t ƒ  ¡  d S r²   )rû  rŽ  r³   rü  r   r   rŽ  |  s    z*TestLinprogSimplexNoPresolve.test_bug_5400c                    sL   | j  ddi¡ tjtdd�� tƒ  ¡ W  d   ƒ S 1 s>0    Y  d S )Nr©  rñ  zlinprog status 4r’   )r–   r½  r™   r   r*   rû  r‘  r³   rü  r   r   Útest_bug_6139_low_tol‚  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                    sH   | j  ddi¡ t t¡� tƒ  ¡  W d   ƒ n1 s:0    Y  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   rT  •  s    zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1c                 C   s   t  d¡ d S r  rÛ  r³   r   r   r   rU  ˜  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/  rŽ  r  rø  rþ  rT  rU  rÿ  r   r   rü  r   r  t  s   þ	r  c                       s:   e Zd ZddiZejjejdkdd�‡ fdd„ƒZ	‡  Z
S )ÚTestLinprogIPDenserr   FrÈ  z:Fails on some macOS builds for reason not relevant to testrÉ  c                    s   t ƒ  ¡  d S r²   ©rû  r‘  r³   rü  r   r   r‘  ¥  s    z TestLinprogIPDense.test_bug_6139)rÐ  rÑ  rÒ  r–   r™   rÔ  rÕ  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   N©rÐ  rÑ  rÒ  r–   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   rq  µ  s    z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacityN)rÐ  rÑ  rÒ  r–   rq  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  r³   rü  r   r   r‘  ¼  s    z!TestLinprogIPSparse.test_bug_6139úFails with ATLAS, see gh-7877rÉ  c                    s   t ƒ  ¡  d S r²   ©rû  rœ  r³   rü  r   r   rœ  Â  s    z!TestLinprogIPSparse.test_bug_6690c           	         s¨   t dƒ\}}}}}d}tƒ �l}tr,| t¡ | td¡ | td¡ ‡ fdd„ˆ jD ƒ}d|d< t|t	t
|||ˆ j|d	�}W d   ƒ n1 sŽ0    Y  t|d
d� d S )Nr   r¤   zMatrix is exactly singularro  c                    s   i | ]}|ˆ j | “qS r   rÑ   rÒ   r³   r   r   rÕ   Ò  rÖ   zLTestLinprogIPSparse.test_magic_square_sparse_no_presolve.<locals>.<dictcomp>Frù   rÇ   r�  r¸   )rJ   r   rp  rë   r   r   r
   r–   r	   rU   rV   rŠ   r0   )	rŽ   rW   rX   rI   rŸ  r[   rì   rØ   r   r   r³   r   Ú$test_magic_square_sparse_no_presolveÇ  s    
ÿ$z8TestLinprogIPSparse.test_magic_square_sparse_no_presolvec           
         s¤   t dƒ\}}}}}tƒ �x}| td¡ | td¡ ‡ fdd„ˆ jD ƒ}d}|D ]2}||d< t|tt||tˆ j	|d�}	t
|	d	d
� qNW d   ƒ n1 s–0    Y  d S )Nr   r_  zInvalid permc_spec optionc                    s   i | ]}|ˆ j | “qS r   rÑ   rÒ   r³   r   r   rÕ   ß  rÖ   zATestLinprogIPSparse.test_sparse_solve_options.<locals>.<dictcomp>)ZNATURALZMMD_ATAZMMD_AT_PLUS_AZCOLAMDr�   Ú
permc_specrÇ   r�  r¸   )rJ   r   rë   r
   r–   r	   rU   rV   r[   rŠ   r0   )
rŽ   rW   rX   rI   rŸ  rì   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_32bitr‘  r/  rœ  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   r‘  î  s    z)TestLinprogIPSparsePresolve.test_bug_6139c                 C   s   t  d¡ d S )Nz6_sparse_presolve=True incompatible with presolve=FalserÛ  r³   r   r   r   r~  ô  s    zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityr  rÉ  c                    s   t ƒ  ¡  d S r²   r  r³   rü  r   r   rœ  ÷  s    z)TestLinprogIPSparsePresolve.test_bug_6690)rÐ  rÑ  rÒ  r–   r™   rÔ  r  r‘  r~  r/  rœ  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_cholmodrp  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   rJ  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   s„   t ddƒ\}}}tƒ �N}| td¡ | td¡ | td¡ t|||| jdddœd�}W d   ƒ n1 sj0    Y  t|dd	� d S )
NrP   rn  ro  rÎ  T)Úiprµ   r¶   r·   r¸   )	rN   r   rë   r  r
   r   r	   rŠ   r0   )rŽ   rG   rH   rI   rì   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}g d¢}t ƒ �D}| t¡ | td¡ t|||||t| jd	d
id�}W d   ƒ n1 s‚0    Y  t|j dƒ d S )Nr"   r   rè   r   re   ra   r¹  ro  rù   FrÇ   r   )	r   rë   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   r^  E  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|   ra  r   r   r   Ú"test_nontrivial_problem_with_guessH  s    
ÿz6TestLinprogRSCommon.test_nontrivial_problem_with_guessc           
      C   sX   t ƒ \}}}}}}}g d¢}t||||||| j| j|d�	}	t|	||d� t|	jdƒ d S )N)rl   rl   rm   rl   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_variablesO  s    
ÿzDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variablesc           
      C   sX   t ƒ \}}}}}}}g d¢}t||||||| j| j|d�	}	t|	||d� t|	jdƒ d S )N)rJ  ©r   Nrm   ©rt  g333333ã?r   rŒ   r   r$  r%  r   r   r   Ú.test_nontrivial_problem_with_bounded_variablesW  s    
ÿzBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variablesc           
      C   sp   t ƒ \}}}}}}}dg}t g d¢¡}d}g d¢}t||||||| j| j|d�	}	t|	||d� t|	jdƒ d S )Nr"   )giblÝ3â¿gç%Gà/ø?r   rt  g«@Q†$@)rl   r'  rm   r(  r   rŒ   r   )	ri   r3   r=   r	   rŠ   r–   r0   r   r|   r%  r   r   r   Ú8test_nontrivial_problem_with_negative_unbounded_variable_  s    
ÿzLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variablec           
      C   sJ   t ƒ \}}}}}}}g d¢}t|||||t| j| j|d�	}	t|	jdƒ d S ©N)r   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_guessj  s    
ÿz:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guessc           
      C   sÞ   t dƒ\}}}}}tjj|jŽ }tƒ �t}| td¡ | td¡ | t	¡ t
|||| jd�}t
|||| j|jd�}t
|| ||| j|jd�}	W d   ƒ n1 s 0    Y  t|dd� t|jdƒ t|	ƒ t|	j|jk ƒ d S )	Nr   r_  rd  )rW   rX   rŠ   )rW   rX   rŠ   r!  r�  r¸   r   )rJ   r3   r4   r@   rA   r   rë   r
   r  r   r	   rŠ   r,   r0   r   r|   r   )
rŽ   rG   rH   rI   rŸ  rl  rì   r   r¶  Zres3r   r   r   Ú%test_redundant_constraints_with_guessq  s    
8z9TestLinprogRSCommon.test_redundant_constraints_with_guessN)rÐ  rÑ  rÒ  r–   r^  r#  r&  r)  r*  r.  r/  r   r   r   r   r  B  s   r  c                   @   s   e Zd ZddiZdS )ÚTestLinprogRSBlandÚpivotr\  Nr  r   r   r   r   r0  �  s   r0  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uƒ 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 u 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 u rt j n|d ‘qS )NrX  r3  r4  r   r   r   r5  �  s   ÿ)ry   r	   rŠ   r–   r   r   r   r,   r3   Úallr}   )rŽ   rI   rU   rV   rx   r   r   r   r   Útest_lad_regressionŽ  s    
ÿÿÿz/TestLinprogHiGHSSimplexDual.test_lad_regressionN)rÐ  rÑ  rÒ  rŠ   r–   r7  r   r   r   r   r2  Š  s   r2  c                   @   s   e Zd ZdZi ZdS )ÚTestLinprogHiGHSIPMr.  N)rÐ  rÑ  rÒ  rŠ   r–   r   r   r   r   r8  ¦  s   r8  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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ñ  r‚  )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  g d¢¡}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ªJ ‚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   Ú	test_mip3à  s    
ÿzTestLinprogHiGHSMIP.test_mip3c                 C   s’   t  ddgddgddgg¡}t  g d¢¡}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  g d¢g¡}t  dg¡}t  g d¢g¡}t  dg¡}t  g d¢¡}dt jfdt jfdg}g d¢}t||||||| j|d	�}t j |jg d
¢¡ t j |jd¡ | 	dd ¡d us¶J ‚| 	dd ¡d usÊJ ‚| 	dd ¡d usÞJ ‚d S )Nr2  rd   )r"   r   r   rÛ   )rb   r†   r1   r   r¤   rü   )rI   rU   rV   rW   rX   r[   rŠ   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Ž   rU   rV   rW   rX   rI   r[   r§   r   r   r   r   Ú	test_mip5	  s     þzTestLinprogHiGHSMIP.test_mip5éx   c                 C   s‚   t  g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t  g d¢¡}dt jfgd }d	gd }t||||| j|d
�}t j |jd¡ d S )N©é   r@  é   rj  é   r   r$  rJ  ©é'   rg  rI  é   rJ  é   é   é   ©rh  r$  é   é   rO  é&   rJ  rJ  ©é)   rJ  rN  rP  rh  rU  rg  rJ  ©iÀ  iâ(  i:,  i/  ©r   rO   r@  é   rd   rè   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  g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t  g d¢¡}dt jfgd }d	gd }g d
¢}g }|D ]B}t|tt|||| j|d|id�	}	|	d }
|
|ks J ‚| |
¡ qht  t  	|¡¡}t  
|dk¡sÎJ ‚t  
|dk¡ràJ ‚d S )NrH  rL  rR  rV  rX  rY  r   r]   r   )rR   g      Ð?g{®Gáz„?gü©ñÒMbP?Úmip_rel_gap)	rI   rU   rV   rW   rX   r[   rŠ   r§   r–   rE  )r3   r=   rS   r	   rU   rV   rŠ   r;   ÚdiffÚflipr6  )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-	  s.    
ý
ýz-TestLinprogHiGHSMIP.test_mip_rel_gap_passdownc                 C   st   t  g d¢¡}t  ddgddgddgddgg¡}t  g d¢¡}t|||dd�}t j |jg d¢¡ |jdkspJ ‚d S )	N)rÄ   rÄ   r1   r1   rR   r°  )r   r   r   r   rœ   )r[   r§   rŠ   )r   r   r°  r   r   )r3   r=   r	   rà   r   r,   r   )rŽ   rI   r[   r§   r   r   r   r   Útest_semi_continuousS	  s    "ÿz(TestLinprogHiGHSMIP.test_semi_continuousN)rÐ  rÑ  rÒ  rŠ   r–   r™   rÔ  r/  rÖ  Úmaxsizer×  Úsystemr?  rA  rB  rD  rF  ZslowÚtimeoutr[  Zxslowr_  r`  r   r   r   r   r9  °  s$   
ý


%r9  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±   r‘  rœ  r¤  r   r   r   r   rd  h	  s   rd  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–   rd  r‘  r³   r   r   r   r‘  t	  s    
zTestAutoscaleIP.test_bug_6139N)rÐ  rÑ  rÒ  rŠ   r‘  r   r   r   r   re  q	  s   re  c                   @   s   e Zd ZdZdS )ÚTestAutoscaleSimplexr¡   NrÙ  r   r   r   r   rf  y	  s   rf  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"  ra  r   r   r   r#  €	  s    
ÿz2TestAutoscaleRS.test_nontrivial_problem_with_guessc           
      C   sJ   t ƒ \}}}}}}}g d¢}t|||||t| j| j|d�	}	t|	jdƒ d S r+  r,  r-  r   r   r   r.  ‡	  s    
ÿz6TestAutoscaleRS.test_nontrivial_problem_with_bad_guessN)rÐ  rÑ  rÒ  rŠ   r#  r.  r   r   r   r   rg  }	  s   rg  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LCTr`  Ztest_RR_infeasibilityrÇ  r   rq  Z	test_NFLCrw  r   r   r   r   rh  ”	  s   rh  c                   @   s   e Zd ZddiZdS )Ú	TestRRSVDr”   ZSVDNr  r   r   r   r   ri   	  s   ri  c                   @   s   e Zd ZddiZdS )ÚTestRRPivotr”   r1  Nr  r   r   r   r   rj  ¤	  s   rj  c                   @   s   e Zd ZddiZdS )ÚTestRRIDr”   ZIDNr  r   r   r   r   rk  ¨	  s   rk  )NNr$   r$   )r   )r   r]   ra   rj   )WrÓ  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._lib._utilr   Zscipy.sparserq   rp  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  r0  r2  r8  r9  rd  re  rf  rg  rh  ri  rj  rk  r   r   r   r   Ú<module>   s¸    


  ÿ
B

#
	-          L


u-2
D?	
 9

